diff options
author | Andrew Tridgell <tridge@samba.org> | 2008-08-14 17:26:30 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2008-08-14 17:26:30 +1000 |
commit | 336f6810cec9b30ad497da26ee463ed5736db2bd (patch) | |
tree | 2734f02b0a9542331524c03b5e2cf15d181aae0c /source4/torture/smb2/create.c | |
parent | 0eb1840994ec6ddcf11a4ad948cb537e510ca0c7 (diff) | |
download | samba-336f6810cec9b30ad497da26ee463ed5736db2bd.tar.gz samba-336f6810cec9b30ad497da26ee463ed5736db2bd.tar.xz samba-336f6810cec9b30ad497da26ee463ed5736db2bd.zip |
expanded the SMB2-CREATE and RAW-OPEN tests to explore more of how the
create options fields are supposed to work
(This used to be commit 0576875eccaa21ad529c9db41db91781ad400d0f)
Diffstat (limited to 'source4/torture/smb2/create.c')
-rw-r--r-- | source4/torture/smb2/create.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/source4/torture/smb2/create.c b/source4/torture/smb2/create.c index c23ff8b8ce9..744c5d2b6c6 100644 --- a/source4/torture/smb2/create.c +++ b/source4/torture/smb2/create.c @@ -53,6 +53,7 @@ static bool test_create_gentest(struct torture_context *torture, struct smb2_tre NTSTATUS status; TALLOC_CTX *tmp_ctx = talloc_new(tree); uint32_t access_mask, file_attributes, file_attributes_set, denied_mask; + uint32_t ok_mask, not_supported_mask, invalid_parameter_mask; union smb_fileinfo q; ZERO_STRUCT(io); @@ -76,14 +77,6 @@ static bool test_create_gentest(struct torture_context *torture, struct smb2_tre status = smb2_create(tree, tmp_ctx, &io); CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER); - io.in.create_options = 0x00100000; - status = smb2_create(tree, tmp_ctx, &io); - CHECK_STATUS(status, NT_STATUS_NOT_SUPPORTED); - - io.in.create_options = 0xF0100000; - status = smb2_create(tree, tmp_ctx, &io); - CHECK_STATUS(status, NT_STATUS_NOT_SUPPORTED); - io.in.create_options = 0; io.in.file_attributes = FILE_ATTRIBUTE_DEVICE; @@ -108,6 +101,37 @@ static bool test_create_gentest(struct torture_context *torture, struct smb2_tre status = smb2_create(tree, tmp_ctx, &io); CHECK_STATUS(status, NT_STATUS_ACCESS_DENIED); + io.in.file_attributes = 0; + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; + io.in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED; + ok_mask = not_supported_mask = invalid_parameter_mask = 0; + { + int i; + for (i=0;i<32;i++) { + io.in.create_options = 1<<i; + if (io.in.create_options & NTCREATEX_OPTIONS_DELETE_ON_CLOSE) { + continue; + } + status = smb2_create(tree, tmp_ctx, &io); + if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) { + not_supported_mask |= 1<<i; + } else if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_PARAMETER)) { + invalid_parameter_mask |= 1<<i; + } else if (NT_STATUS_EQUAL(status, NT_STATUS_OK)) { + ok_mask |= 1<<i; + status = smb2_util_close(tree, io.out.file.handle); + CHECK_STATUS(status, NT_STATUS_OK); + } else { + printf("create option 0x%08x returned %s\n", 1<<i, nt_errstr(status)); + } + } + } + io.in.create_options = 0; + + CHECK_EQUAL(ok_mask, 0x00efcf7e); + CHECK_EQUAL(not_supported_mask, 0x00102080); + CHECK_EQUAL(invalid_parameter_mask, 0xff000000); + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; io.in.file_attributes = 0; access_mask = 0; |