1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-01 05:47:28 +03:00

s4-smbtorture: add test_QueryDisplayInfo_level to RPC-SAMR-LARGE-DC.

Guenther
This commit is contained in:
Günther Deschner 2009-06-08 10:24:48 +02:00
parent 7f52c8fb50
commit 80d0a12fb7

View File

@ -6172,6 +6172,77 @@ static bool test_EnumDomainAliases(struct dcerpc_pipe *p,
return true;
}
static bool test_QueryDisplayInfo_level(struct dcerpc_pipe *p,
struct torture_context *tctx,
struct policy_handle *handle,
uint16_t level,
uint32_t *total_num_entries_p)
{
NTSTATUS status;
struct samr_QueryDisplayInfo r;
uint32_t total_num_entries = 0;
r.in.domain_handle = handle;
r.in.level = level;
r.in.start_idx = 0;
r.in.max_entries = (uint32_t)-1;
r.in.buf_size = (uint32_t)-1;
printf("Testing QueryDisplayInfo\n");
do {
uint32_t total_size;
uint32_t returned_size;
union samr_DispInfo info;
r.out.total_size = &total_size;
r.out.returned_size = &returned_size;
r.out.info = &info;
status = dcerpc_samr_QueryDisplayInfo(p, tctx, &r);
if (NT_STATUS_IS_ERR(status)) {
torture_assert_ntstatus_ok(tctx, status,
"failed to query displayinfo");
}
if (*r.out.returned_size == 0) {
break;
}
switch (r.in.level) {
case 1:
total_num_entries += info.info1.count;
r.in.start_idx += info.info1.entries[info.info1.count - 1].idx + 1;
break;
case 2:
total_num_entries += info.info2.count;
r.in.start_idx += info.info2.entries[info.info2.count - 1].idx + 1;
break;
case 3:
total_num_entries += info.info3.count;
r.in.start_idx += info.info3.entries[info.info3.count - 1].idx + 1;
break;
case 4:
total_num_entries += info.info4.count;
r.in.start_idx += info.info4.entries[info.info4.count - 1].idx + 1;
break;
case 5:
total_num_entries += info.info5.count;
r.in.start_idx += info.info5.entries[info.info5.count - 1].idx + 1;
break;
default:
return false;
}
} while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES));
if (total_num_entries_p) {
*total_num_entries_p = total_num_entries;
}
return true;
}
static bool test_ManyObjects(struct dcerpc_pipe *p,
struct torture_context *tctx,
struct policy_handle *domain_handle,
@ -6260,20 +6331,22 @@ static bool test_ManyObjects(struct dcerpc_pipe *p,
return false;
}
/* TODO: dispinfo */
/* dispinfo */
switch (which_ops) {
case TORTURE_SAMR_MANY_ACCOUNTS:
ret &= test_QueryDisplayInfo_level(p, tctx, domain_handle, 1, &num_disp);
break;
case TORTURE_SAMR_MANY_GROUPS:
ret &= test_QueryDisplayInfo_level(p, tctx, domain_handle, 3, &num_disp);
break;
case TORTURE_SAMR_MANY_ALIASES:
/* no aliases in dispinfo */
break;
default:
return false;
}
/* delete */
for (i=0; i < num_total; i++) {
@ -6299,14 +6372,14 @@ static bool test_ManyObjects(struct dcerpc_pipe *p,
talloc_free(handles);
#if 0
torture_assert_int_equal(tctx, num_disp, num_anounced + num_created,
"unexpected number of results returned in dispinfo call");
#endif
if (which_ops == TORTURE_SAMR_MANY_ACCOUNTS && num_enum != num_anounced + num_created) {
torture_comment(tctx,
"unexpected number of results (%u) returned in enum call, expected %u\n",
num_enum, num_anounced + num_created);
torture_comment(tctx,
"unexpected number of results (%u) returned in dispinfo, call, expected %u\n",
num_disp, num_anounced + num_created);
}
return ret;
}