s3:smbstatus: add stream name to share_entry_forall()
authorRalph Boehme <slow@samba.org>
Sun, 11 Oct 2015 07:38:18 +0000 (09:38 +0200)
committerJeremy Allison <jra@samba.org>
Mon, 12 Oct 2015 20:13:19 +0000 (22:13 +0200)
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@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/locking/proto.h
source3/locking/share_mode_lock.c
source3/rpc_server/srvsvc/srv_srvsvc_nt.c
source3/utils/status.c

index 652ec2a4c66e12c69abb62eccfdfe7b7302fc7c4..8ff1c7cd632b465a6b618c34d50a638d3d4c4b15 100644 (file)
@@ -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,
index 5eedcc5fbe45dc89d332ba71426a6c9041833443..6273aecd84abc9fc1c0eb0503ad48cb111dfb811 100644 (file)
@@ -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 = {
index be79e6ab2aea84343eeddecb1feb7604a6d4a93e..96c022beaa0c252ef17dae867d3f20c47c9d5126 100644 (file)
@@ -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];
index a22d05be7bbcdb056a389b830cdfbbac84b8192a..f81ab5f1e22f6318a93366f8fce9c59d85fd5cbb 100644 (file)
@@ -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;