[PATCH] Fix for bug 11550: smbstatus doesn't show named streams info

Ralph Boehme rb at sernet.de
Mon Oct 12 11:12:55 UTC 2015


On Mon, Oct 12, 2015 at 01:07:08PM +0200, Ralph Boehme wrote:
> Hi,
> 
> attached is a patch for bug 11550.
> 
> Please review & push if ok. Thanks!

here it is.

-Ralph

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de,mailto:kontakt@sernet.de
-------------- next part --------------
From 5508e436b114d4d4f409c14755705a91bc8aaf60 Mon Sep 17 00:00:00 2001
From: Ralph Boehme <slow at samba.org>
Date: Sun, 11 Oct 2015 09:38:18 +0200
Subject: [PATCH] s3:smbstatus: add stream name to share_entry_forall()

Add stream name argument to share_entry_forall machinery so smbstatus
can print the stream name of a file.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=11550

Signed-off-by: Ralph Boehme <slow at samba.org>
---
 source3/locking/proto.h                   |  3 ++-
 source3/locking/share_mode_lock.c         | 11 ++++++++---
 source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 21 +++++++++++++++------
 source3/utils/status.c                    |  6 +++++-
 4 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index 652ec2a..8ff1c7c 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -202,7 +202,8 @@ int share_mode_forall(int (*fn)(struct file_id fid,
 				const struct share_mode_data *data,
 				void *private_data),
 		      void *private_data);
-int share_entry_forall(int (*fn)(const struct share_mode_entry *, const char *,
+int share_entry_forall(int (*fn)(const struct share_mode_entry *,
+				 const char *, const char *,
 				 const char *, void *),
 		      void *private_data);
 bool share_mode_cleanup_disconnected(struct file_id id,
diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c
index 5eedcc5..6273aec 100644
--- a/source3/locking/share_mode_lock.c
+++ b/source3/locking/share_mode_lock.c
@@ -728,7 +728,9 @@ int share_mode_forall(int (*fn)(struct file_id fid,
 
 struct share_entry_forall_state {
 	int (*fn)(const struct share_mode_entry *e,
-		  const char *service_path, const char *base_name,
+		  const char *service_path,
+		  const char *base_name,
+		  const char *stream_name,
 		  void *private_data);
 	void *private_data;
 };
@@ -744,7 +746,9 @@ static int share_entry_traverse_fn(struct file_id fid,
 		int ret;
 
 		ret = state->fn(&data->share_modes[i],
-				data->servicepath, data->base_name,
+				data->servicepath,
+				data->base_name,
+				data->stream_name,
 				state->private_data);
 		if (ret != 0) {
 			return ret;
@@ -760,7 +764,8 @@ static int share_entry_traverse_fn(struct file_id fid,
 ********************************************************************/
 
 int share_entry_forall(int (*fn)(const struct share_mode_entry *,
-				 const char *, const char *, void *),
+				 const char *, const char *,
+				 const char *, void *),
 		       void *private_data)
 {
 	struct share_entry_forall_state state = {
diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
index be79e6a..96c022b 100644
--- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
@@ -80,7 +80,9 @@ struct share_conn_stat {
 ********************************************************************/
 
 static int enum_file_fn(const struct share_mode_entry *e,
-			const char *sharepath, const char *fname,
+			const char *sharepath,
+			const char *fname,
+			const char *sname,
 			void *private_data)
 {
 	struct file_enum_count *fenum =
@@ -129,8 +131,9 @@ static int enum_file_fn(const struct share_mode_entry *e,
 	if ( strcmp( fname, "." ) == 0 ) {
 		fullpath = talloc_asprintf(fenum->ctx, "C:%s", sharepath );
 	} else {
-		fullpath = talloc_asprintf(fenum->ctx, "C:%s/%s",
-				sharepath, fname );
+		fullpath = talloc_asprintf(fenum->ctx, "C:%s/%s%s",
+					   sharepath, fname,
+					   sname ? sname : "");
 	}
 	if (!fullpath) {
 		return 0;
@@ -829,7 +832,9 @@ static WERROR init_srv_sess_info_0(struct pipes_struct *p,
  **********************************************************************/
 
 static int count_sess_files_fn(const struct share_mode_entry *e,
-			       const char *sharepath, const char *fname,
+			       const char *sharepath,
+			       const char *fname,
+			       const char *sname,
 			       void *data)
 {
 	struct sess_file_info *info = data;
@@ -954,7 +959,9 @@ static WERROR init_srv_sess_info_1(struct pipes_struct *p,
  ********************************************************************/
 
 static int share_file_fn(const struct share_mode_entry *e,
-			 const char *sharepath, const char *fname,
+			 const char *sharepath,
+			 const char *fname,
+			 const char *sname,
 			 void *data)
 {
 	struct share_file_stat *sfs = data;
@@ -2692,7 +2699,9 @@ struct enum_file_close_state {
 };
 
 static int enum_file_close_fn(const struct share_mode_entry *e,
-			      const char *sharepath, const char *fname,
+			      const char *sharepath,
+			      const char *fname,
+			      const char *sname,
 			      void *private_data)
 {
 	char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
diff --git a/source3/utils/status.c b/source3/utils/status.c
index a22d05b..f81ab5f 100644
--- a/source3/utils/status.c
+++ b/source3/utils/status.c
@@ -117,6 +117,7 @@ static bool Ucrit_addPid( struct server_id pid )
 static int print_share_mode(const struct share_mode_entry *e,
 			    const char *sharepath,
 			    const char *fname,
+			    const char *sname,
 			    void *dummy)
 {
 	static int count;
@@ -190,7 +191,10 @@ static int print_share_mode(const struct share_mode_entry *e,
 			d_printf("NONE            ");
 		}
 
-		d_printf(" %s   %s   %s",sharepath, fname, time_to_asc((time_t)e->time.tv_sec));
+		d_printf(" %s   %s%s   %s",
+			 sharepath, fname,
+			 sname ? sname : "",
+			 time_to_asc((time_t)e->time.tv_sec));
 	}
 
 	return 0;
-- 
2.1.0



More information about the samba-technical mailing list