diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c index 9cb121a0394..2907bd7e0f4 100644 --- a/source3/smbd/notify.c +++ b/source3/smbd/notify.c @@ -521,6 +521,44 @@ static void notify_message_callback(int msgtype, struct process_id pid, } } +char *notify_filter_string(TALLOC_CTX *mem_ctx, uint32 filter) +{ + char *result = NULL; + + result = talloc_strdup(mem_ctx, ""); + + if (filter & FILE_NOTIFY_CHANGE_FILE_NAME) + result = talloc_asprintf_append(result, "FILE_NAME|"); + if (filter & FILE_NOTIFY_CHANGE_DIR_NAME) + result = talloc_asprintf_append(result, "DIR_NAME|"); + if (filter & FILE_NOTIFY_CHANGE_ATTRIBUTES) + result = talloc_asprintf_append(result, "ATTRIBUTES|"); + if (filter & FILE_NOTIFY_CHANGE_SIZE) + result = talloc_asprintf_append(result, "SIZE|"); + if (filter & FILE_NOTIFY_CHANGE_LAST_WRITE) + result = talloc_asprintf_append(result, "LAST_WRITE|"); + if (filter & FILE_NOTIFY_CHANGE_LAST_ACCESS) + result = talloc_asprintf_append(result, "LAST_ACCESS|"); + if (filter & FILE_NOTIFY_CHANGE_CREATION) + result = talloc_asprintf_append(result, "CREATION|"); + if (filter & FILE_NOTIFY_CHANGE_EA) + result = talloc_asprintf_append(result, "EA|"); + if (filter & FILE_NOTIFY_CHANGE_SECURITY) + result = talloc_asprintf_append(result, "SECURITY|"); + if (filter & FILE_NOTIFY_CHANGE_STREAM_NAME) + result = talloc_asprintf_append(result, "STREAM_NAME|"); + if (filter & FILE_NOTIFY_CHANGE_STREAM_SIZE) + result = talloc_asprintf_append(result, "STREAM_SIZE|"); + if (filter & FILE_NOTIFY_CHANGE_STREAM_WRITE) + result = talloc_asprintf_append(result, "STREAM_WRITE|"); + + if (result == NULL) return NULL; + if (*result == '\0') return result; + + result[strlen(result)-1] = '\0'; + return result; +} + /**************************************************************************** Initialise the change notify subsystem. ****************************************************************************/ diff --git a/source3/smbd/server.c b/source3/smbd/server.c index dcb685511bf..ab43bcb66f0 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -71,6 +71,17 @@ struct event_context *smbd_event_context(void) return ctx; } +struct messaging_context *smbd_messaging_context(void) +{ + static struct messaging_context *ctx; + + if (!ctx && !(ctx = messaging_init(NULL, server_id_self(), + smbd_event_context()))) { + smb_panic("Could not init smbd messaging context\n"); + } + return ctx; +} + /******************************************************************* What to do when smb.conf is updated. ********************************************************************/ diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index f9a01a3e91c..872c7a74c32 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -489,6 +489,17 @@ struct event_context *smbd_event_context(void) return ctx; } +struct messaging_context *smbd_messaging_context(void) +{ + static struct messaging_context *ctx; + + if (!ctx && !(ctx = messaging_init(NULL, server_id_self(), + smbd_event_context()))) { + smb_panic("Could not init smbd messaging context\n"); + } + return ctx; +} + /* Main function */ int main(int argc, char *argv[])