diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-07-12 10:14:18 +0000 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2006-07-12 10:14:18 +0000 |
commit | 09fa8ae2f8b3f235a8c06fb4f2ac403bb6bf5428 (patch) | |
tree | 245c3e542008b2d41aedf3ff5c13a789c57462dd /source/torture | |
parent | eff4d352f9caa3839016696c35b04c93a9cc63e1 (diff) | |
download | samba-09fa8ae2f8b3f235a8c06fb4f2ac403bb6bf5428.tar.gz samba-09fa8ae2f8b3f235a8c06fb4f2ac403bb6bf5428.tar.xz samba-09fa8ae2f8b3f235a8c06fb4f2ac403bb6bf5428.zip |
r16977: do a few more notify tests
metze
Diffstat (limited to 'source/torture')
-rw-r--r-- | source/torture/smb2/notify.c | 74 |
1 files changed, 70 insertions, 4 deletions
diff --git a/source/torture/smb2/notify.c b/source/torture/smb2/notify.c index 4805a75d682..74cec16b8c0 100644 --- a/source/torture/smb2/notify.c +++ b/source/torture/smb2/notify.c @@ -43,6 +43,8 @@ goto done; \ }} while (0) +#define FNAME "smb2-notify01.dat" + static BOOL test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree) { BOOL ret = True; @@ -54,19 +56,83 @@ static BOOL test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree) status = smb2_util_roothandle(tree, &dh); CHECK_STATUS(status, NT_STATUS_OK); - n.in.recursive = 0x0001; - n.in.buffer_size = 0x00000020; + n.in.recursive = 0x0000; + n.in.buffer_size = 0x00080000; n.in.file.handle = dh; - n.in.completion_filter = 0x0000001F; + n.in.completion_filter = 0x00000FFF; n.in.unknown = 0x00000000; req = smb2_notify_send(tree, &n); - status = torture_setup_complex_file(tree, "smb2-notify1.dat"); + status = torture_setup_complex_file(tree, FNAME); + CHECK_STATUS(status, NT_STATUS_OK); + + status = smb2_notify_recv(req, mem_ctx, &n); + CHECK_STATUS(status, NT_STATUS_OK); + + /* + * if the change response doesn't fit in the buffer + * NOTIFY_ENUM_DIR is returned. + */ + n.in.buffer_size = 0x00000000; + req = smb2_notify_send(tree, &n); + + status = torture_setup_complex_file(tree, FNAME); CHECK_STATUS(status, NT_STATUS_OK); status = smb2_notify_recv(req, mem_ctx, &n); CHECK_STATUS(status, STATUS_NOTIFY_ENUM_DIR); + /* + * if the change response fits in the buffer we get + * NT_STATUS_OK again + */ + n.in.buffer_size = 0x00080000; + req = smb2_notify_send(tree, &n); + + status = torture_setup_complex_file(tree, FNAME); + CHECK_STATUS(status, NT_STATUS_OK); + + status = smb2_notify_recv(req, mem_ctx, &n); + CHECK_STATUS(status, NT_STATUS_OK); + + /* if the first notify returns NOTIFY_ENUM_DIR, all do */ + status = smb2_util_close(tree, dh); + CHECK_STATUS(status, NT_STATUS_OK); + status = smb2_util_roothandle(tree, &dh); + CHECK_STATUS(status, NT_STATUS_OK); + + n.in.recursive = 0x0000; + n.in.buffer_size = 0x00000001; + n.in.file.handle = dh; + n.in.completion_filter = 0x00000FFF; + n.in.unknown = 0x00000000; + req = smb2_notify_send(tree, &n); + + status = torture_setup_complex_file(tree, FNAME); + CHECK_STATUS(status, NT_STATUS_OK); + + status = smb2_notify_recv(req, mem_ctx, &n); + CHECK_STATUS(status, STATUS_NOTIFY_ENUM_DIR); + + n.in.buffer_size = 0x00080000; + req = smb2_notify_send(tree, &n); + + status = torture_setup_complex_file(tree, FNAME); + CHECK_STATUS(status, NT_STATUS_OK); + + status = smb2_notify_recv(req, mem_ctx, &n); + CHECK_STATUS(status, STATUS_NOTIFY_ENUM_DIR); + + /* if the buffer size is too large, we get invalid parameter */ + n.in.recursive = 0x0000; + n.in.buffer_size = 0x00080001; + n.in.file.handle = dh; + n.in.completion_filter = 0x00000FFF; + n.in.unknown = 0x00000000; + req = smb2_notify_send(tree, &n); + status = smb2_notify_recv(req, mem_ctx, &n); + CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER); + done: return ret; } |