diff options
| -rw-r--r-- | source3/Makefile.in | 1 | ||||
| -rw-r--r-- | source3/utils/status.c | 40 | ||||
| -rwxr-xr-x | source3/wscript_build | 2 | 
3 files changed, 42 insertions, 1 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index aef9750cbd..d48ce37064 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -1038,6 +1038,7 @@ SWAT_OBJ = $(SWAT_OBJ1) $(PARAM_OBJ) $(PRINTING_OBJ) $(PRINTBASE_OBJ) $(LIBSMB_O  STATUS_OBJ = utils/status.o utils/status_profile.o \  	     $(LOCKING_OBJ) $(PARAM_OBJ) \ +	     smbd/notify_internal.o librpc/gen_ndr/ndr_notify.o \               $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \  	     $(LIBSMB_ERR_OBJ) $(FNAME_UTIL_OBJ) diff --git a/source3/utils/status.c b/source3/utils/status.c index 0755f9fdf2..95b279ea3b 100644 --- a/source3/utils/status.c +++ b/source3/utils/status.c @@ -40,6 +40,8 @@  #include "locking/proto.h"  #include "messages.h"  #include "librpc/gen_ndr/open_files.h" +#include "smbd/proto.h" +#include "librpc/gen_ndr/notify.h"  #define SMB_MAXPIDS		2048  static uid_t 		Ucrit_uid = 0;               /* added by OH */ @@ -287,13 +289,36 @@ static int traverse_sessionid(const char *key, struct sessionid *session,  } +static void print_notify_recs(const char *path, +			      struct notify_db_entry *entries, +			      size_t num_entries, +			      time_t deleted_time, void *private_data) +{ +	size_t i; +	d_printf("%s\n", path); + +	if (num_entries == 0) { +		d_printf("deleted %s\n", time_to_asc(deleted_time)); +	} +	for (i=0; i<num_entries; i++) { +		struct notify_db_entry *e = &entries[i]; +		char *str; + +		str = server_id_str(talloc_tos(), &e->server); +		printf("%s %x %x\n", str, (unsigned)e->filter, +		       (unsigned)e->subdir_filter); +		TALLOC_FREE(str); +	} +	printf("\n"); +}   int main(int argc, char *argv[])  {  	int c;  	int profile_only = 0;  	bool show_processes, show_locks, show_shares; +	bool show_notify = false;  	poptContext pc;  	struct poptOption long_options[] = {  		POPT_AUTOHELP @@ -301,6 +326,7 @@ static int traverse_sessionid(const char *key, struct sessionid *session,  		{"verbose",	'v', POPT_ARG_NONE, 	NULL, 'v', "Be verbose" },  		{"locks",	'L', POPT_ARG_NONE,	NULL, 'L', "Show locks only" },  		{"shares",	'S', POPT_ARG_NONE,	NULL, 'S', "Show shares only" }, +		{"notify",	'N', POPT_ARG_NONE,	NULL, 'N', "Show notifies" },  		{"user", 	'u', POPT_ARG_STRING,	&username, 'u', "Switch to user" },  		{"brief",	'b', POPT_ARG_NONE, 	NULL, 'b', "Be brief" },  		{"profile",     'P', POPT_ARG_NONE, NULL, 'P', "Do profiling" }, @@ -342,6 +368,9 @@ static int traverse_sessionid(const char *key, struct sessionid *session,  		case 'S':  			shares_only = true;  			break; +		case 'N': +			show_notify = true; +			break;  		case 'b':  			brief = true;  			break; @@ -487,6 +516,17 @@ static int traverse_sessionid(const char *key, struct sessionid *session,  		locking_end();  	} +	if (show_notify) { +		struct notify_context *n; + +		n = notify_init(talloc_tos(), NULL, NULL); +		if (n == NULL) { +			goto done; +		} +		notify_walk(n, print_notify_recs, NULL); +		TALLOC_FREE(n); +	} +  done:  	TALLOC_FREE(frame);  	return ret; diff --git a/source3/wscript_build b/source3/wscript_build index 652743c86f..d68dd5cdb2 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -427,7 +427,7 @@ SWAT_SRC1 = '''web/cgi.c web/diagnose.c web/startstop.c web/statuspage.c  SWAT_SRC = '''${SWAT_SRC1}''' -STATUS_SRC = '''utils/status.c utils/status_profile.c''' +STATUS_SRC = '''utils/status.c utils/status_profile.c smbd/notify_internal.c'''  SMBCONTROL_SRC = '''utils/smbcontrol.c'''  | 
