summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/VFS/skel_opaque.c5
-rw-r--r--examples/VFS/skel_transparent.c6
-rw-r--r--source3/include/vfs.h6
-rw-r--r--source3/include/vfs_macros.h8
-rw-r--r--source3/modules/vfs_default.c7
-rw-r--r--source3/modules/vfs_full_audit.c6
-rw-r--r--source3/modules/vfs_notify_fam.c9
-rw-r--r--source3/modules/vfs_time_audit.c6
-rw-r--r--source3/smbd/notify.c4
-rw-r--r--source3/smbd/notify_inotify.c15
-rw-r--r--source3/smbd/proto.h3
-rw-r--r--source3/smbd/vfs.c6
12 files changed, 49 insertions, 32 deletions
diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c
index 7b67e56352..5c97e2304e 100644
--- a/examples/VFS/skel_opaque.c
+++ b/examples/VFS/skel_opaque.c
@@ -383,7 +383,10 @@ static char *skel_realpath(vfs_handle_struct *handle, const char *path)
}
static NTSTATUS skel_notify_watch(struct vfs_handle_struct *handle,
- struct sys_notify_context *ctx, struct notify_entry *e,
+ struct sys_notify_context *ctx,
+ const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx, void *private_data, struct notify_event *ev),
void *private_data, void *handle_p)
{
diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c
index 964ba6dc9c..c57545c2e5 100644
--- a/examples/VFS/skel_transparent.c
+++ b/examples/VFS/skel_transparent.c
@@ -360,13 +360,15 @@ static char *skel_realpath(vfs_handle_struct *handle, const char *path)
static NTSTATUS skel_notify_watch(
struct vfs_handle_struct *handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx, void *private_data,
struct notify_event *ev),
void *private_data, void *handle_p)
{
- return SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, e, path, callback,
+ return SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, path,
+ filter, subdir_filter, callback,
private_data, handle_p);
}
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index c038c56f46..212da7e514 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -284,8 +284,9 @@ struct vfs_fn_pointers {
char *(*realpath_fn)(struct vfs_handle_struct *handle, const char *path);
NTSTATUS (*notify_watch_fn)(struct vfs_handle_struct *handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
@@ -676,8 +677,9 @@ int smb_vfs_call_mknod(struct vfs_handle_struct *handle, const char *path,
char *smb_vfs_call_realpath(struct vfs_handle_struct *handle, const char *path);
NTSTATUS smb_vfs_call_notify_watch(struct vfs_handle_struct *handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *name,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h
index 5e184e3009..68165fe092 100644
--- a/source3/include/vfs_macros.h
+++ b/source3/include/vfs_macros.h
@@ -313,10 +313,10 @@
#define SMB_VFS_NEXT_REALPATH(handle, path) \
smb_vfs_call_realpath((handle)->next, (path))
-#define SMB_VFS_NOTIFY_WATCH(conn, ctx, e, path, callback, private_data, handle_p) \
- smb_vfs_call_notify_watch((conn)->vfs_handles, (ctx), (e), (path), (callback), (private_data), (handle_p))
-#define SMB_VFS_NEXT_NOTIFY_WATCH(conn, ctx, e, path, callback, private_data, handle_p) \
- smb_vfs_call_notify_watch((conn)->next, (ctx), (e), (path), (callback), (private_data), (handle_p))
+#define SMB_VFS_NOTIFY_WATCH(conn, ctx, path, filter, subdir_filter, callback, private_data, handle_p) \
+ smb_vfs_call_notify_watch((conn)->vfs_handles, (ctx), (path), (filter), (subdir_filter), (callback), (private_data), (handle_p))
+#define SMB_VFS_NEXT_NOTIFY_WATCH(conn, ctx, path, filter, subdir_filter, callback, private_data, handle_p) \
+ smb_vfs_call_notify_watch((conn)->next, (ctx), (path), (filter), (subdir_filter), (callback), (private_data), (handle_p))
#define SMB_VFS_CHFLAGS(conn, path, flags) \
smb_vfs_call_chflags((conn)->vfs_handles, (path), (flags))
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 7b80df8904..568f346452 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -1632,8 +1632,9 @@ static char *vfswrap_realpath(vfs_handle_struct *handle, const char *path)
static NTSTATUS vfswrap_notify_watch(vfs_handle_struct *vfs_handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
@@ -1649,8 +1650,8 @@ static NTSTATUS vfswrap_notify_watch(vfs_handle_struct *vfs_handle,
*/
#ifdef HAVE_INOTIFY
if (lp_kernel_change_notify(vfs_handle->conn->params)) {
- return inotify_watch(ctx, e, path, callback, private_data,
- handle);
+ return inotify_watch(ctx, path, filter, subdir_filter,
+ callback, private_data, handle);
}
#endif
/*
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index 24c2f8e323..770d21f9ef 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -1379,8 +1379,9 @@ static char *smb_full_audit_realpath(vfs_handle_struct *handle,
static NTSTATUS smb_full_audit_notify_watch(struct vfs_handle_struct *handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
@@ -1388,7 +1389,8 @@ static NTSTATUS smb_full_audit_notify_watch(struct vfs_handle_struct *handle,
{
NTSTATUS result;
- result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, e, path, callback,
+ result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, path,
+ filter, subdir_filter, callback,
private_data, handle_p);
do_log(SMB_VFS_OP_NOTIFY_WATCH, NT_STATUS_IS_OK(result), handle, "");
diff --git a/source3/modules/vfs_notify_fam.c b/source3/modules/vfs_notify_fam.c
index 7ac6609c53..dcc843f6d8 100644
--- a/source3/modules/vfs_notify_fam.c
+++ b/source3/modules/vfs_notify_fam.c
@@ -221,8 +221,9 @@ static int fam_watch_context_destructor(struct fam_watch_context *ctx)
*/
static NTSTATUS fam_watch(vfs_handle_struct *vfs_handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
@@ -234,8 +235,8 @@ static NTSTATUS fam_watch(vfs_handle_struct *vfs_handle,
struct fam_watch_context *watch;
void **handle = (void **)handle_p;
- if ((e->filter & fam_mask) == 0) {
- DEBUG(10, ("filter = %u, ignoring in FAM\n", e->filter));
+ if ((*filter & fam_mask) == 0) {
+ DEBUG(10, ("filter = %u, ignoring in FAM\n", *filter));
return NT_STATUS_OK;
}
@@ -274,7 +275,7 @@ static NTSTATUS fam_watch(vfs_handle_struct *vfs_handle,
*/
watch->filter = fam_mask;
- e->filter &= ~fam_mask;
+ *filter &= ~fam_mask;
DLIST_ADD(fam_notify_list, watch);
talloc_set_destructor(watch, fam_watch_context_destructor);
diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c
index 8ec434b541..0066e075a2 100644
--- a/source3/modules/vfs_time_audit.c
+++ b/source3/modules/vfs_time_audit.c
@@ -1130,8 +1130,9 @@ static char *smb_time_audit_realpath(vfs_handle_struct *handle,
static NTSTATUS smb_time_audit_notify_watch(struct vfs_handle_struct *handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
@@ -1142,7 +1143,8 @@ static NTSTATUS smb_time_audit_notify_watch(struct vfs_handle_struct *handle,
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, e, path, callback,
+ result = SMB_VFS_NEXT_NOTIFY_WATCH(handle, ctx, path,
+ filter, subdir_filter, callback,
private_data, handle_p);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index 53ae2d68e7..fd9e5524a7 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -235,8 +235,8 @@ NTSTATUS change_notify_create(struct files_struct *fsp, uint32 filter,
status = SMB_VFS_NOTIFY_WATCH(
fsp->conn, fsp->conn->sconn->sys_notify_ctx,
- &e, e.path, sys_notify_callback, fsp,
- &sys_notify_handle);
+ e.path, &e.filter, &e.subdir_filter,
+ sys_notify_callback, fsp, &sys_notify_handle);
if (NT_STATUS_IS_OK(status)) {
talloc_steal(fsp->notify, sys_notify_handle);
diff --git a/source3/smbd/notify_inotify.c b/source3/smbd/notify_inotify.c
index 967c223ada..20f709831a 100644
--- a/source3/smbd/notify_inotify.c
+++ b/source3/smbd/notify_inotify.c
@@ -371,8 +371,9 @@ static int watch_destructor(struct inotify_watch_context *w)
talloc_free() on *handle
*/
NTSTATUS inotify_watch(struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
@@ -383,7 +384,7 @@ NTSTATUS inotify_watch(struct sys_notify_context *ctx,
int wd;
uint32_t mask;
struct inotify_watch_context *w;
- uint32_t orig_filter = e->filter;
+ uint32_t orig_filter = *filter;
void **handle = (void **)handle_p;
/* maybe setup the inotify fd */
@@ -395,7 +396,7 @@ NTSTATUS inotify_watch(struct sys_notify_context *ctx,
in = talloc_get_type(ctx->private_data, struct inotify_private);
- mask = inotify_map(&e->filter);
+ mask = inotify_map(filter);
if (mask == 0) {
/* this filter can't be handled by inotify */
return NT_STATUS_INVALID_PARAMETER;
@@ -408,18 +409,18 @@ NTSTATUS inotify_watch(struct sys_notify_context *ctx,
/* get a new watch descriptor for this path */
wd = inotify_add_watch(in->fd, path, mask);
if (wd == -1) {
- e->filter = orig_filter;
+ *filter = orig_filter;
DEBUG(1, ("inotify_add_watch returned %s\n", strerror(errno)));
return map_nt_error_from_unix(errno);
}
DEBUG(10, ("inotify_add_watch for %s mask %x returned wd %d\n",
- e->path, mask, wd));
+ path, mask, wd));
w = talloc(in, struct inotify_watch_context);
if (w == NULL) {
inotify_rm_watch(in->fd, wd);
- e->filter = orig_filter;
+ *filter = orig_filter;
return NT_STATUS_NO_MEMORY;
}
@@ -432,7 +433,7 @@ NTSTATUS inotify_watch(struct sys_notify_context *ctx,
w->path = talloc_strdup(w, path);
if (w->path == NULL) {
inotify_rm_watch(in->fd, wd);
- e->filter = orig_filter;
+ *filter = orig_filter;
return NT_STATUS_NO_MEMORY;
}
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 70c34ce35a..4bb57c0d5c 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -526,8 +526,9 @@ struct sys_notify_context *sys_notify_context_create(TALLOC_CTX *mem_ctx,
/* The following definitions come from smbd/notify_inotify.c */
NTSTATUS inotify_watch(struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index 6b7b8691aa..4c5e52be1b 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -1833,15 +1833,17 @@ char *smb_vfs_call_realpath(struct vfs_handle_struct *handle, const char *path)
NTSTATUS smb_vfs_call_notify_watch(struct vfs_handle_struct *handle,
struct sys_notify_context *ctx,
- struct notify_entry *e,
const char *path,
+ uint32_t *filter,
+ uint32_t *subdir_filter,
void (*callback)(struct sys_notify_context *ctx,
void *private_data,
struct notify_event *ev),
void *private_data, void *handle_p)
{
VFS_FIND(notify_watch);
- return handle->fns->notify_watch_fn(handle, ctx, e, path, callback,
+ return handle->fns->notify_watch_fn(handle, ctx, path,
+ filter, subdir_filter, callback,
private_data, handle_p);
}