diff options
-rw-r--r-- | source4/ntvfs/sysdep/inotify.c | 7 | ||||
-rw-r--r-- | source4/torture/raw/notify.c | 11 |
2 files changed, 15 insertions, 3 deletions
diff --git a/source4/ntvfs/sysdep/inotify.c b/source4/ntvfs/sysdep/inotify.c index ead2211c8e..f86e3c1913 100644 --- a/source4/ntvfs/sysdep/inotify.c +++ b/source4/ntvfs/sysdep/inotify.c @@ -116,6 +116,10 @@ static BOOL filter_match(struct watch_context *w, struct inotify_event *e) FILE_NOTIFY_CHANGE_SECURITY))) { return True; } + if ((e->mask & IN_MODIFY) && + (w->filter & FILE_NOTIFY_CHANGE_ATTRIBUTES)) { + return True; + } if ((w->filter & FILE_NOTIFY_CHANGE_FILE_NAME) == 0) { return False; } @@ -281,8 +285,7 @@ static const struct { } inotify_mapping[] = { {FILE_NOTIFY_CHANGE_FILE_NAME, IN_CREATE|IN_DELETE|IN_MOVED_FROM|IN_MOVED_TO}, {FILE_NOTIFY_CHANGE_DIR_NAME, IN_CREATE|IN_DELETE|IN_MOVED_FROM|IN_MOVED_TO}, - {FILE_NOTIFY_CHANGE_ATTRIBUTES, IN_ATTRIB | IN_MOVED_TO | IN_MOVED_FROM}, - {FILE_NOTIFY_CHANGE_SIZE, IN_MODIFY}, + {FILE_NOTIFY_CHANGE_ATTRIBUTES, IN_ATTRIB|IN_MOVED_TO|IN_MOVED_FROM|IN_MODIFY}, {FILE_NOTIFY_CHANGE_LAST_WRITE, IN_ATTRIB}, {FILE_NOTIFY_CHANGE_LAST_ACCESS, IN_ATTRIB}, {FILE_NOTIFY_CHANGE_EA, IN_ATTRIB}, diff --git a/source4/torture/raw/notify.c b/source4/torture/raw/notify.c index 8a982a7211..0e79a7ce07 100644 --- a/source4/torture/raw/notify.c +++ b/source4/torture/raw/notify.c @@ -205,7 +205,7 @@ static BOOL test_notify_dir(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) status = smbcli_unlink(cli->tree, BASEDIR "\\test*.txt"); CHECK_STATUS(status, NT_STATUS_OK); - /* recev the 3rd notify */ + /* receive the 3rd notify */ status = smb_raw_changenotify_recv(req, mem_ctx, ¬ify); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VAL(notify.out.num_changes, 1); @@ -214,6 +214,7 @@ static BOOL test_notify_dir(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) /* and we now see the rest of the unlink calls on both directory handles */ notify.in.file.fnum = fnum; + msleep(10); req = smb_raw_changenotify_send(cli->tree, ¬ify); status = smb_raw_changenotify_recv(req, mem_ctx, ¬ify); CHECK_STATUS(status, NT_STATUS_OK); @@ -578,6 +579,14 @@ static BOOL test_notify_mask(struct smbcli_state *cli, TALLOC_CTX *mem_ctx) NOTIFY_ACTION_MODIFIED, 0, 1); + printf("testing truncate\n"); + NOTIFY_MASK_TEST( + fnum2 = create_complex_file(cli, mem_ctx, BASEDIR "\\tname1");, + smbcli_ftruncate(cli->tree, fnum2, 10000);, + (smbcli_close(cli->tree, fnum2), smbcli_unlink(cli->tree, BASEDIR "\\tname1"));, + NOTIFY_ACTION_MODIFIED, + FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_ATTRIBUTES, 1); + done: smb_raw_exit(cli->session); return ret; |