summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source4/ntvfs/sysdep/inotify.c7
-rw-r--r--source4/torture/raw/notify.c11
2 files changed, 15 insertions, 3 deletions
diff --git a/source4/ntvfs/sysdep/inotify.c b/source4/ntvfs/sysdep/inotify.c
index ead2211c8e7..f86e3c19130 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 8a982a72111..0e79a7ce07e 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, &notify);
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, &notify);
status = smb_raw_changenotify_recv(req, mem_ctx, &notify);
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;