diff options
-rw-r--r-- | source4/ntvfs/common/notify.c | 19 | ||||
-rw-r--r-- | source4/ntvfs/posix/vfs_posix.c | 4 |
2 files changed, 20 insertions, 3 deletions
diff --git a/source4/ntvfs/common/notify.c b/source4/ntvfs/common/notify.c index 0c264de88f..452b8188f0 100644 --- a/source4/ntvfs/common/notify.c +++ b/source4/ntvfs/common/notify.c @@ -83,6 +83,10 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx, uint32_t server, char *path; struct notify_context *notify; + if (lp_parm_bool(snum, "notify", "enable", True) != True) { + return NULL; + } + notify = talloc(mem_ctx, struct notify_context); if (notify == NULL) { return NULL; @@ -339,6 +343,11 @@ NTSTATUS notify_add(struct notify_context *notify, struct notify_entry *e0, size_t len; int depth; + /* see if change notify is enabled at all */ + if (notify == NULL) { + return NT_STATUS_NOT_IMPLEMENTED; + } + status = notify_lock(notify); NT_STATUS_NOT_OK_RETURN(status); @@ -410,6 +419,11 @@ NTSTATUS notify_remove(struct notify_context *notify, void *private) int i, depth; struct notify_depth *d; + /* see if change notify is enabled at all */ + if (notify == NULL) { + return NT_STATUS_NOT_IMPLEMENTED; + } + for (listel=notify->list;listel;listel=listel->next) { if (listel->private == private) { DLIST_REMOVE(notify->list, listel); @@ -552,6 +566,11 @@ void notify_trigger(struct notify_context *notify, int depth; const char *p, *next_p; + /* see if change notify is enabled at all */ + if (notify == NULL) { + return; + } + status = notify_load(notify); if (!NT_STATUS_IS_OK(status)) { return; diff --git a/source4/ntvfs/posix/vfs_posix.c b/source4/ntvfs/posix/vfs_posix.c index 3e141219f4..dd8c3fe81f 100644 --- a/source4/ntvfs/posix/vfs_posix.c +++ b/source4/ntvfs/posix/vfs_posix.c @@ -185,14 +185,12 @@ static NTSTATUS pvfs_connect(struct ntvfs_module_context *ntvfs, return NT_STATUS_INTERNAL_DB_CORRUPTION; } + /* allow this to be NULL - we just disable change notify */ pvfs->notify_context = notify_init(pvfs, pvfs->ntvfs->ctx->server_id, pvfs->ntvfs->ctx->msg_ctx, event_context_find(pvfs), pvfs->ntvfs->ctx->config.snum); - if (pvfs->notify_context == NULL) { - return NT_STATUS_INTERNAL_DB_CORRUPTION; - } pvfs->sidmap = sidmap_open(pvfs); if (pvfs->sidmap == NULL) { |