summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/torture/smb2/ioctl.c99
1 files changed, 43 insertions, 56 deletions
diff --git a/source4/torture/smb2/ioctl.c b/source4/torture/smb2/ioctl.c
index 501b233d5b..e8d12038e0 100644
--- a/source4/torture/smb2/ioctl.c
+++ b/source4/torture/smb2/ioctl.c
@@ -148,90 +148,78 @@ static bool check_pattern(struct torture_context *torture,
return true;
}
-static bool test_setup_copy_chunk(struct torture_context *torture,
- struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
- uint32_t nchunks,
- struct smb2_handle *src_h,
- uint64_t src_size,
- uint32_t src_desired_access,
- struct smb2_handle *dest_h,
- uint64_t dest_size,
- uint32_t dest_desired_access,
- struct srv_copychunk_copy *cc_copy,
- union smb_ioctl *ioctl)
+static bool test_setup_create_fill(struct torture_context *torture,
+ struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
+ const char *fname,
+ struct smb2_handle *fh,
+ uint64_t size,
+ uint32_t desired_access)
{
- struct req_resume_key_rsp res_key;
struct smb2_create io;
NTSTATUS status;
- enum ndr_err_code ndr_ret;
uint64_t i;
- uint8_t *buf = talloc_zero_size(mem_ctx, MAX(src_size, dest_size));
+ uint8_t *buf = talloc_zero_size(mem_ctx, size);
torture_assert(torture, (buf != NULL), "no memory for file data buf");
- smb2_util_unlink(tree, FNAME);
- smb2_util_unlink(tree, FNAME2);
+ smb2_util_unlink(tree, fname);
ZERO_STRUCT(io);
- io.in.desired_access = src_desired_access;
+ io.in.desired_access = desired_access;
io.in.file_attributes = FILE_ATTRIBUTE_NORMAL;
io.in.create_disposition = NTCREATEX_DISP_OPEN_IF;
io.in.share_access =
NTCREATEX_SHARE_ACCESS_DELETE|
NTCREATEX_SHARE_ACCESS_READ|
NTCREATEX_SHARE_ACCESS_WRITE;
- io.in.fname = FNAME;
+ io.in.fname = fname;
status = smb2_create(tree, mem_ctx, &io);
- torture_assert_ntstatus_ok(torture, status, "src create");
+ torture_assert_ntstatus_ok(torture, status, "file create");
- *src_h = io.out.file.handle;
+ *fh = io.out.file.handle;
- if (src_size > 0) {
+ if (size > 0) {
uint64_t cur_off = 0;
- for (i = 0; i <= src_size - 8; i += 8) {
+ for (i = 0; i <= size - 8; i += 8) {
SBVAL(buf, i, patt_hash(i));
}
- while (src_size > 0) {
- uint64_t io_sz = MIN(1024 * 1024, src_size);
- status = smb2_util_write(tree, *src_h,
+ while (size > 0) {
+ uint64_t io_sz = MIN(1024 * 1024, size);
+ status = smb2_util_write(tree, *fh,
buf + cur_off, cur_off, io_sz);
- torture_assert_ntstatus_ok(torture, status, "src write");
+ torture_assert_ntstatus_ok(torture, status, "file write");
- src_size -= io_sz;
+ size -= io_sz;
cur_off += io_sz;
}
}
+ return true;
+}
- ZERO_STRUCT(io);
- io.in.desired_access = dest_desired_access;
- io.in.file_attributes = FILE_ATTRIBUTE_NORMAL;
- io.in.create_disposition = NTCREATEX_DISP_OPEN_IF;
- io.in.share_access =
- NTCREATEX_SHARE_ACCESS_DELETE|
- NTCREATEX_SHARE_ACCESS_READ|
- NTCREATEX_SHARE_ACCESS_WRITE;
- io.in.fname = FNAME2;
-
- status = smb2_create(tree, mem_ctx, &io);
- torture_assert_ntstatus_ok(torture, status, "dest create");
-
- *dest_h = io.out.file.handle;
+static bool test_setup_copy_chunk(struct torture_context *torture,
+ struct smb2_tree *tree, TALLOC_CTX *mem_ctx,
+ uint32_t nchunks,
+ struct smb2_handle *src_h,
+ uint64_t src_size,
+ uint32_t src_desired_access,
+ struct smb2_handle *dest_h,
+ uint64_t dest_size,
+ uint32_t dest_desired_access,
+ struct srv_copychunk_copy *cc_copy,
+ union smb_ioctl *ioctl)
+{
+ struct req_resume_key_rsp res_key;
+ bool ok;
+ NTSTATUS status;
+ enum ndr_err_code ndr_ret;
- if (dest_size > 0) {
- uint64_t cur_off = 0;
- for (i = 0; i <= dest_size - 8; i += 8) {
- SBVAL(buf, i, patt_hash(i));
- }
- while (dest_size > 0) {
- uint64_t io_sz = MIN(1024 * 1024, dest_size);
- status = smb2_util_write(tree, *dest_h,
- buf + cur_off, cur_off, io_sz);
- torture_assert_ntstatus_ok(torture, status, "dest write");
+ ok = test_setup_create_fill(torture, tree, mem_ctx, FNAME,
+ src_h, src_size, src_desired_access);
+ torture_assert(torture, ok, "src file create fill");
- dest_size -= io_sz;
- cur_off += io_sz;
- }
- }
+ ok = test_setup_create_fill(torture, tree, mem_ctx, FNAME2,
+ dest_h, dest_size, dest_desired_access);
+ torture_assert(torture, ok, "dest file create fill");
ZERO_STRUCTPN(ioctl);
ioctl->smb2.level = RAW_IOCTL_SMB2;
@@ -245,7 +233,6 @@ static bool test_setup_copy_chunk(struct torture_context *torture,
torture_assert_ntstatus_ok(torture, status,
"FSCTL_SRV_REQUEST_RESUME_KEY");
-
ndr_ret = ndr_pull_struct_blob(&ioctl->smb2.out.out, mem_ctx, &res_key,
(ndr_pull_flags_fn_t)ndr_pull_req_resume_key_rsp);