mirror of
https://github.com/samba-team/samba.git
synced 2025-03-24 10:50:22 +03:00
s4-torture: Improve raw.streams test to cover EAs and to use torture_assert()
The extension of this test is to create an extended attribute, so we can confirm that the easize field on a stream actually refers to the parent file. This has been run against Windows 7. Andrew Bartlett
This commit is contained in:
parent
3787dcf42c
commit
bf1e27bd8f
@ -695,10 +695,12 @@ static bool test_stream_names(struct torture_context *tctx,
|
||||
io.generic.level = RAW_OPEN_NTCREATEX;
|
||||
io.ntcreatex.in.root_fid.fnum = 0;
|
||||
io.ntcreatex.in.flags = 0;
|
||||
io.ntcreatex.in.access_mask = SEC_FILE_WRITE_DATA;
|
||||
io.ntcreatex.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
|
||||
io.ntcreatex.in.create_options = 0;
|
||||
io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
|
||||
io.ntcreatex.in.share_access = 0;
|
||||
io.ntcreatex.in.share_access =
|
||||
NTCREATEX_SHARE_ACCESS_READ |
|
||||
NTCREATEX_SHARE_ACCESS_WRITE;
|
||||
io.ntcreatex.in.alloc_size = 0;
|
||||
io.ntcreatex.in.open_disposition = NTCREATEX_DISP_CREATE;
|
||||
io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
|
||||
@ -709,6 +711,22 @@ static bool test_stream_names(struct torture_context *tctx,
|
||||
CHECK_STATUS(status, NT_STATUS_OK);
|
||||
fnum1 = io.ntcreatex.out.file.fnum;
|
||||
|
||||
torture_comment(tctx, "Adding two EAs to base file\n");
|
||||
ZERO_STRUCT(sinfo);
|
||||
sinfo.generic.level = RAW_SFILEINFO_EA_SET;
|
||||
sinfo.generic.in.file.fnum = fnum1;
|
||||
sinfo.ea_set.in.num_eas = 2;
|
||||
sinfo.ea_set.in.eas = talloc_array(tctx, struct ea_struct, 2);
|
||||
sinfo.ea_set.in.eas[0].flags = 0;
|
||||
sinfo.ea_set.in.eas[0].name.s = "EAONE";
|
||||
sinfo.ea_set.in.eas[0].value = data_blob_string_const("VALUE1");
|
||||
sinfo.ea_set.in.eas[1].flags = 0;
|
||||
sinfo.ea_set.in.eas[1].name.s = "SECONDEA";
|
||||
sinfo.ea_set.in.eas[1].value = data_blob_string_const("ValueTwo");
|
||||
|
||||
status = smb_raw_setfileinfo(cli->tree, &sinfo);
|
||||
CHECK_STATUS(status, NT_STATUS_OK);
|
||||
|
||||
/*
|
||||
* Make sure the create time of the streams are different from the
|
||||
* base file.
|
||||
@ -1688,13 +1706,7 @@ static bool test_stream_attributes(struct torture_context *tctx,
|
||||
status = smb_raw_pathinfo(cli->tree, tctx, &finfo);
|
||||
CHECK_STATUS(status, NT_STATUS_OK);
|
||||
|
||||
if (finfo.basic_info.out.attrib != FILE_ATTRIBUTE_ARCHIVE) {
|
||||
printf("(%s) Incorrect attrib %x - should be %x\n", \
|
||||
__location__, (unsigned int)finfo.basic_info.out.attrib,
|
||||
(unsigned int)FILE_ATTRIBUTE_ARCHIVE);
|
||||
ret = false;
|
||||
goto done;
|
||||
}
|
||||
torture_assert_int_equal_goto(tctx, finfo.all_info.out.attrib & ~FILE_ATTRIBUTE_NONINDEXED, FILE_ATTRIBUTE_ARCHIVE, ret, done, "attrib incorrect");
|
||||
|
||||
/* Now open the stream name. */
|
||||
|
||||
@ -1725,12 +1737,7 @@ static bool test_stream_attributes(struct torture_context *tctx,
|
||||
sfinfo.generic.level = RAW_SFILEINFO_BASIC_INFORMATION;
|
||||
sfinfo.generic.in.file.fnum = fnum;
|
||||
status = smb_raw_setfileinfo(cli->tree, &sfinfo);
|
||||
if (!NT_STATUS_EQUAL(status, NT_STATUS_OK)) {
|
||||
printf("(%s) %s - %s (should be %s)\n", __location__, "SETATTR",
|
||||
nt_errstr(status), nt_errstr(NT_STATUS_OK));
|
||||
ret = false;
|
||||
goto done;
|
||||
}
|
||||
torture_assert_ntstatus_equal_goto(tctx, status, NT_STATUS_OK, ret, done, "smb_raw_setfileinfo failed");
|
||||
|
||||
smbcli_close(cli->tree, fnum);
|
||||
fnum = -1;
|
||||
@ -1739,27 +1746,11 @@ static bool test_stream_attributes(struct torture_context *tctx,
|
||||
finfo.generic.level = RAW_FILEINFO_ALL_INFO;
|
||||
finfo.generic.in.file.path = fname;
|
||||
status = smb_raw_pathinfo(cli->tree, tctx, &finfo);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("(%s) %s pathinfo - %s\n", __location__, "SETATTRE", nt_errstr(status));
|
||||
ret = false;
|
||||
goto done;
|
||||
}
|
||||
torture_assert_ntstatus_equal_goto(tctx, status, NT_STATUS_OK, ret, done, "smb_raw_pathinfo failed");
|
||||
|
||||
if (finfo.all_info.out.attrib != FILE_ATTRIBUTE_READONLY) {
|
||||
printf("(%s) attrib incorrect. Was 0x%x, should be 0x%x\n",
|
||||
__location__,
|
||||
(unsigned int)finfo.all_info.out.attrib,
|
||||
(unsigned int)FILE_ATTRIBUTE_READONLY);
|
||||
ret = false;
|
||||
goto done;
|
||||
}
|
||||
torture_assert_int_equal_goto(tctx, finfo.all_info.out.attrib & ~FILE_ATTRIBUTE_NONINDEXED, FILE_ATTRIBUTE_READONLY, ret, done, "attrib incorrect");
|
||||
|
||||
if (nt_time_to_unix(finfo.all_info.out.write_time) != basetime) {
|
||||
printf("(%s) time incorrect.\n",
|
||||
__location__);
|
||||
ret = false;
|
||||
goto done;
|
||||
}
|
||||
torture_assert_int_equal_goto(tctx, nt_time_to_unix(finfo.all_info.out.write_time), basetime, ret, done, "time incorrect");
|
||||
|
||||
done:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user