summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
Diffstat (limited to 'source4')
-rw-r--r--source4/torture/smb2/notify.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/source4/torture/smb2/notify.c b/source4/torture/smb2/notify.c
index 574136ab3f..f8def193b2 100644
--- a/source4/torture/smb2/notify.c
+++ b/source4/torture/smb2/notify.c
@@ -55,19 +55,28 @@
#define FNAME "smb2-notify01.dat"
-static bool test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree)
+#define TARGET_IS_WIN7(_tctx) (torture_setting_bool(_tctx, "win7", false))
+
+static bool test_valid_request(struct torture_context *tctx, struct smb2_tree *tree)
{
bool ret = true;
NTSTATUS status;
struct smb2_handle dh;
struct smb2_notify n;
struct smb2_request *req;
+ uint32_t max_buffer_size = 0x00080000;
+
+ if (TARGET_IS_WIN7(tctx)) {
+ max_buffer_size = 0x00010000;
+ }
+
+ smb2_util_unlink(tree, FNAME);
status = smb2_util_roothandle(tree, &dh);
CHECK_STATUS(status, NT_STATUS_OK);
n.in.recursive = 0x0000;
- n.in.buffer_size = 0x00080000;
+ n.in.buffer_size = max_buffer_size;
n.in.file.handle = dh;
n.in.completion_filter = 0x00000FFF;
n.in.unknown = 0x00000000;
@@ -82,10 +91,10 @@ static bool test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree)
status = torture_setup_complex_file(tree, FNAME);
CHECK_STATUS(status, NT_STATUS_OK);
- status = smb2_notify_recv(req, mem_ctx, &n);
+ status = smb2_notify_recv(req, tctx, &n);
CHECK_STATUS(status, NT_STATUS_OK);
CHECK_VALUE(n.out.num_changes, 1);
- CHECK_VALUE(n.out.changes[0].action, NOTIFY_ACTION_REMOVED);
+ CHECK_VALUE(n.out.changes[0].action, NOTIFY_ACTION_ADDED);
CHECK_WIRE_STR(n.out.changes[0].name, FNAME);
/*
@@ -104,14 +113,14 @@ static bool test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree)
status = torture_setup_complex_file(tree, FNAME);
CHECK_STATUS(status, NT_STATUS_OK);
- status = smb2_notify_recv(req, mem_ctx, &n);
+ status = smb2_notify_recv(req, tctx, &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;
+ n.in.buffer_size = max_buffer_size;
req = smb2_notify_send(tree, &n);
while (!req->cancel.can_cancel && req->state <= SMB2_REQUEST_RECV) {
@@ -123,7 +132,7 @@ static bool test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree)
status = torture_setup_complex_file(tree, FNAME);
CHECK_STATUS(status, NT_STATUS_OK);
- status = smb2_notify_recv(req, mem_ctx, &n);
+ status = smb2_notify_recv(req, tctx, &n);
CHECK_STATUS(status, NT_STATUS_OK);
CHECK_VALUE(n.out.num_changes, 3);
CHECK_VALUE(n.out.changes[0].action, NOTIFY_ACTION_REMOVED);
@@ -155,10 +164,10 @@ static bool test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree)
status = torture_setup_complex_file(tree, FNAME);
CHECK_STATUS(status, NT_STATUS_OK);
- status = smb2_notify_recv(req, mem_ctx, &n);
+ status = smb2_notify_recv(req, tctx, &n);
CHECK_STATUS(status, STATUS_NOTIFY_ENUM_DIR);
- n.in.buffer_size = 0x00080000;
+ n.in.buffer_size = max_buffer_size;
req = smb2_notify_send(tree, &n);
while (!req->cancel.can_cancel && req->state <= SMB2_REQUEST_RECV) {
if (event_loop_once(req->transport->socket->event.ctx) != 0) {
@@ -169,17 +178,17 @@ static bool test_valid_request(TALLOC_CTX *mem_ctx, struct smb2_tree *tree)
status = torture_setup_complex_file(tree, FNAME);
CHECK_STATUS(status, NT_STATUS_OK);
- status = smb2_notify_recv(req, mem_ctx, &n);
+ status = smb2_notify_recv(req, tctx, &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.buffer_size = max_buffer_size + 1;
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);
+ status = smb2_notify_recv(req, tctx, &n);
CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER);
done: