1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-08 04:58:40 +03:00

r3978: added IDL and test code for lsa_LookupSids2() and lsa_LookupNames2()

This commit is contained in:
Andrew Tridgell 2004-11-26 06:33:38 +00:00 committed by Gerald (Jerry) Carter
parent 27e7fb3baf
commit 9da455ed56
2 changed files with 140 additions and 2 deletions

View File

@ -652,6 +652,7 @@
/* Function 0x2f */
NTSTATUS lsa_SetInfoPolicy2();
/**********************/
/* Function 0x30 */
NTSTATUS lsa_QueryTrustedDomainInfoByName(
[in,ref] policy_handle *handle,
@ -678,6 +679,7 @@
/* Function 0x36 */
NTSTATUS lsa_SetDomInfoPolicy();
/**********************/
/* Function 0x37 */
NTSTATUS lsa_OpenTrustedDomainByName(
[in,ref] policy_handle *handle,
@ -689,11 +691,58 @@
/* Function 0x38 */
NTSTATUS lsa_TestCall();
/**********************/
/* Function 0x39 */
NTSTATUS lsa_LookupSids2();
typedef struct {
uint16 sid_type;
lsa_String name;
uint32 sid_index;
uint32 unknown;
} lsa_TranslatedName2;
typedef struct {
[range(0,1000)] uint32 count;
[size_is(count)] lsa_TranslatedName2 *names;
} lsa_TransNameArray2;
NTSTATUS lsa_LookupSids2(
[in,ref] policy_handle *handle,
[in,ref] lsa_SidArray *sids,
[out] lsa_RefDomainList *domains,
[in,out,ref] lsa_TransNameArray2 *names,
[in] uint16 level,
[in,out,ref] uint32 *count,
[in] uint32 unknown1,
[in] uint32 unknown2
);
/**********************/
/* Function 0x3a */
NTSTATUS lsa_LookupNames2();
typedef struct {
uint16 sid_type;
uint32 rid;
uint32 sid_index;
uint32 unknown;
} lsa_TranslatedSid2;
typedef struct {
[range(0,1000)] uint32 count;
[size_is(count)] lsa_TranslatedSid2 *sids;
} lsa_TransSidArray2;
NTSTATUS lsa_LookupNames2 (
[in,ref] policy_handle *handle,
[in,range(0,1000)] uint32 num_names,
[in,ref,size_is(num_names)] lsa_String *names,
[out] lsa_RefDomainList *domains,
[in,out,ref] lsa_TransSidArray2 *sids,
[in] uint16 level,
[in,out,ref] uint32 *count,
[in] uint32 unknown1,
[in] uint32 unknown2
);
/* Function 0x3b */
NTSTATUS lsa_CreateTrustedDomainEx2();

View File

@ -143,6 +143,50 @@ static BOOL test_LookupNames(struct dcerpc_pipe *p,
return True;
}
static BOOL test_LookupNames2(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
struct policy_handle *handle,
struct lsa_TransNameArray2 *tnames)
{
struct lsa_LookupNames2 r;
struct lsa_TransSidArray2 sids;
struct lsa_String *names;
uint32_t count = 0;
NTSTATUS status;
int i;
printf("\nTesting LookupNames2 with %d names\n", tnames->count);
sids.count = 0;
sids.sids = NULL;
names = talloc(mem_ctx, tnames->count * sizeof(names[0]));
for (i=0;i<tnames->count;i++) {
init_lsa_String(&names[i], tnames->names[i].name.string);
}
r.in.handle = handle;
r.in.num_names = tnames->count;
r.in.names = names;
r.in.sids = &sids;
r.in.level = 1;
r.in.count = &count;
r.in.unknown1 = 0;
r.in.unknown2 = 0;
r.out.count = &count;
r.out.sids = &sids;
status = dcerpc_lsa_LookupNames2(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status, STATUS_SOME_UNMAPPED)) {
printf("LookupNames2 failed - %s\n", nt_errstr(status));
return False;
}
printf("\n");
return True;
}
static BOOL test_LookupSids(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
@ -182,6 +226,47 @@ static BOOL test_LookupSids(struct dcerpc_pipe *p,
return True;
}
static BOOL test_LookupSids2(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
struct policy_handle *handle,
struct lsa_SidArray *sids)
{
struct lsa_LookupSids2 r;
struct lsa_TransNameArray2 names;
uint32_t count = sids->num_sids;
NTSTATUS status;
printf("\nTesting LookupSids2\n");
names.count = 0;
names.names = NULL;
r.in.handle = handle;
r.in.sids = sids;
r.in.names = &names;
r.in.level = 1;
r.in.count = &count;
r.in.unknown1 = 0;
r.in.unknown2 = 0;
r.out.count = &count;
r.out.names = &names;
status = dcerpc_lsa_LookupSids2(p, mem_ctx, &r);
if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status, STATUS_SOME_UNMAPPED)) {
printf("LookupSids2 failed - %s\n", nt_errstr(status));
return False;
}
printf("\n");
if (!test_LookupNames2(p, mem_ctx, handle, &names)) {
return False;
}
return True;
}
static BOOL test_many_LookupSids(struct dcerpc_pipe *p,
TALLOC_CTX *mem_ctx,
struct policy_handle *handle)
@ -607,6 +692,10 @@ static BOOL test_EnumAccounts(struct dcerpc_pipe *p,
return False;
}
if (!test_LookupSids2(p, mem_ctx, handle, &sids1)) {
return False;
}
printf("testing all accounts\n");
for (i=0;i<sids1.num_sids;i++) {
test_OpenAccount(p, mem_ctx, handle, sids1.sids[i].sid);