diff options
author | Andrew Tridgell <tridge@samba.org> | 2008-05-27 14:07:27 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2008-05-27 14:07:27 +1000 |
commit | 71915128498674d9937780b9278fd2ac1eb06ba8 (patch) | |
tree | 03f2b09efd5929348adc1d4191abf04bb29b80bf /source/torture/smb2/create.c | |
parent | dcdaa9f5fd9150b16fb277213e864e5c39d831d6 (diff) | |
download | samba-71915128498674d9937780b9278fd2ac1eb06ba8.tar.gz |
expanded the SMB2 create testing
Diffstat (limited to 'source/torture/smb2/create.c')
-rw-r--r-- | source/torture/smb2/create.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/source/torture/smb2/create.c b/source/torture/smb2/create.c index fba7b8464f7..0d8e4aefecd 100644 --- a/source/torture/smb2/create.c +++ b/source/torture/smb2/create.c @@ -36,6 +36,13 @@ return false; \ }} while (0) +#define CHECK_EQUAL(v, correct) do { \ + if (v != correct) { \ + printf("(%s) Incorrect value for %s 0x%08x - should be 0x%08x\n", \ + __location__, #v, v, correct); \ + return false; \ + }} while (0) + /* test some interesting combinations found by gentest */ @@ -44,6 +51,7 @@ bool torture_smb2_create_gentest(struct torture_context *torture, struct smb2_tr struct smb2_create io; NTSTATUS status; TALLOC_CTX *tmp_ctx = talloc_new(tree); + uint32_t access_mask, file_attributes; ZERO_STRUCT(io); io.in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED; @@ -74,6 +82,72 @@ bool torture_smb2_create_gentest(struct torture_context *torture, struct smb2_tr 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; + status = smb2_create(tree, tmp_ctx, &io); + CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER); + + io.in.file_attributes = FILE_ATTRIBUTE_VOLUME; + status = smb2_create(tree, tmp_ctx, &io); + CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER); + + io.in.create_disposition = NTCREATEX_DISP_OPEN; + io.in.file_attributes = FILE_ATTRIBUTE_VOLUME; + status = smb2_create(tree, tmp_ctx, &io); + CHECK_STATUS(status, NT_STATUS_INVALID_PARAMETER); + + io.in.create_disposition = NTCREATEX_DISP_CREATE; + io.in.desired_access = 0x08000000; + status = smb2_create(tree, tmp_ctx, &io); + CHECK_STATUS(status, NT_STATUS_ACCESS_DENIED); + + io.in.desired_access = 0x04000000; + status = smb2_create(tree, tmp_ctx, &io); + CHECK_STATUS(status, NT_STATUS_ACCESS_DENIED); + + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; + io.in.file_attributes = 0; + access_mask = 0; + { + int i; + for (i=0;i<32;i++) { + io.in.desired_access = 1<<i; + status = smb2_create(tree, tmp_ctx, &io); + if (NT_STATUS_EQUAL(status, NT_STATUS_ACCESS_DENIED)) { + access_mask |= io.in.desired_access; + } else { + CHECK_STATUS(status, NT_STATUS_OK); + status = smb2_util_close(tree, io.out.file.handle); + CHECK_STATUS(status, NT_STATUS_OK); + } + } + } + + CHECK_EQUAL(access_mask, 0x0df0fe00); + + io.in.create_disposition = NTCREATEX_DISP_OPEN_IF; + io.in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED; + io.in.file_attributes = 0; + access_mask = 0; + { + int i; + for (i=0;i<32;i++) { + io.in.file_attributes = 1<<i; + smb2_deltree(tree, FNAME); + status = smb2_create(tree, tmp_ctx, &io); + if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_PARAMETER)) { + file_attributes |= io.in.file_attributes; + } else { + CHECK_STATUS(status, NT_STATUS_OK); + status = smb2_util_close(tree, io.out.file.handle); + CHECK_STATUS(status, NT_STATUS_OK); + } + } + } + + CHECK_EQUAL(file_attributes, 0x0df0fe00); + talloc_free(tmp_ctx); return true; |