diff options
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/files.c | 6 | ||||
-rw-r--r-- | source3/smbd/globals.h | 1 | ||||
-rw-r--r-- | source3/smbd/notify.c | 7 | ||||
-rw-r--r-- | source3/smbd/service.c | 9 |
4 files changed, 14 insertions, 9 deletions
diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 10a0b8169d..6499a810ff 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -447,11 +447,13 @@ void file_free(struct smb_request *req, files_struct *fsp) } if (fsp->notify) { + struct notify_context *notify_ctx = + fsp->conn->sconn->notify_ctx; if (fsp->is_directory) { - notify_remove_onelevel(fsp->conn->notify_ctx, + notify_remove_onelevel(notify_ctx, &fsp->file_id, fsp); } - notify_remove(fsp->conn->notify_ctx, fsp); + notify_remove(notify_ctx, fsp); TALLOC_FREE(fsp->notify); } diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index caf7357df4..3973855b7e 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -449,6 +449,7 @@ struct smbd_server_connection { const char *remote_hostname; struct tevent_context *ev_ctx; struct messaging_context *msg_ctx; + struct notify_context *notify_ctx; struct { bool got_session; } nbt; diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c index 88e838ee17..8228c7597e 100644 --- a/source3/smbd/notify.c +++ b/source3/smbd/notify.c @@ -221,7 +221,7 @@ NTSTATUS change_notify_create(struct files_struct *fsp, uint32 filter, e.subdir_filter = filter; } - status = notify_add(fsp->conn->notify_ctx, fsp->conn, &e, + status = notify_add(fsp->conn->sconn->notify_ctx, fsp->conn, &e, notify_callback, fsp); TALLOC_FREE(fullpath); @@ -364,6 +364,7 @@ void remove_pending_change_notify_requests_by_fid(files_struct *fsp, void notify_fname(connection_struct *conn, uint32 action, uint32 filter, const char *path) { + struct notify_context *notify_ctx = conn->sconn->notify_ctx; char *fullpath; char *parent; const char *name; @@ -378,7 +379,7 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter, smb_fname_parent.base_name = parent; if (SMB_VFS_STAT(conn, &smb_fname_parent) != -1) { - notify_onelevel(conn->notify_ctx, action, filter, + notify_onelevel(notify_ctx, action, filter, SMB_VFS_FILE_ID_CREATE(conn, &smb_fname_parent.st), name); } @@ -390,7 +391,7 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter, DEBUG(0, ("asprintf failed\n")); return; } - notify_trigger(conn->notify_ctx, action, filter, fullpath); + notify_trigger(notify_ctx, action, filter, fullpath); TALLOC_FREE(fullpath); } diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 79e935d5d2..d28a51a9a7 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -698,10 +698,11 @@ static NTSTATUS make_connection_snum(struct smbd_server_connection *sconn, on_err_call_dis_hook = true; if ((!conn->printer) && (!conn->ipc) && - lp_change_notify(conn->params)) { - conn->notify_ctx = notify_init(conn, - sconn->msg_ctx, - sconn->ev_ctx); + lp_change_notify(conn->params) && + sconn->notify_ctx == NULL) { + sconn->notify_ctx = notify_init(sconn, + sconn->msg_ctx, + sconn->ev_ctx); } /* |