mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
r4195: added IDL, test suite and server side code for lsa_LookupPrivValue
(This used to be commit 7bddd47403
)
This commit is contained in:
parent
9927ffd600
commit
02f7d260a2
@ -35,10 +35,14 @@
|
||||
unistr_noterm *string;
|
||||
} lsa_String;
|
||||
|
||||
typedef struct {
|
||||
uint32 low;
|
||||
uint32 high;
|
||||
} lsa_LUID;
|
||||
|
||||
typedef struct {
|
||||
lsa_String name;
|
||||
uint32 luid_low;
|
||||
uint32 luid_high;
|
||||
lsa_LUID luid;
|
||||
} lsa_PrivEntry;
|
||||
|
||||
typedef struct {
|
||||
@ -358,11 +362,6 @@
|
||||
/****************************************/
|
||||
/* Function: 0x12 */
|
||||
|
||||
typedef struct {
|
||||
uint32 low;
|
||||
uint32 high;
|
||||
} lsa_LUID;
|
||||
|
||||
typedef struct {
|
||||
lsa_LUID luid;
|
||||
uint32 attribute;
|
||||
@ -540,7 +539,11 @@
|
||||
);
|
||||
|
||||
/* Function: 0x1f */
|
||||
NTSTATUS lsa_LookupPrivValue();
|
||||
NTSTATUS lsa_LookupPrivValue(
|
||||
[in,ref] policy_handle *handle,
|
||||
[in,ref] lsa_String *name,
|
||||
[out,ref] lsa_LUID *luid
|
||||
);
|
||||
|
||||
|
||||
/* Function: 0x20 */
|
||||
|
@ -122,8 +122,8 @@ static NTSTATUS lsa_EnumPrivs(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
e = &r->out.privs->privs[r->out.privs->count];
|
||||
e->luid_low = i;
|
||||
e->luid_high = 0;
|
||||
e->luid.low = i;
|
||||
e->luid.high = 0;
|
||||
e->name.string = privname;
|
||||
r->out.privs->count++;
|
||||
i++;
|
||||
@ -821,18 +821,36 @@ static NTSTATUS lsa_QuerySecret(struct dcesrv_call_state *dce_call, TALLOC_CTX *
|
||||
/*
|
||||
lsa_LookupPrivValue
|
||||
*/
|
||||
static NTSTATUS lsa_LookupPrivValue(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
||||
struct lsa_LookupPrivValue *r)
|
||||
static NTSTATUS lsa_LookupPrivValue(struct dcesrv_call_state *dce_call,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct lsa_LookupPrivValue *r)
|
||||
{
|
||||
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
||||
struct dcesrv_handle *h;
|
||||
struct lsa_policy_state *state;
|
||||
int id;
|
||||
|
||||
DCESRV_PULL_HANDLE(h, r->in.handle, LSA_HANDLE_POLICY);
|
||||
|
||||
state = h->data;
|
||||
|
||||
id = sec_privilege_id(r->in.name->string);
|
||||
if (id == -1) {
|
||||
return NT_STATUS_NO_SUCH_PRIVILEGE;
|
||||
}
|
||||
|
||||
r->out.luid->low = id;
|
||||
r->out.luid->high = 0;
|
||||
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
lsa_LookupPrivName
|
||||
*/
|
||||
static NTSTATUS lsa_LookupPrivName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
|
||||
struct lsa_LookupPrivName *r)
|
||||
static NTSTATUS lsa_LookupPrivName(struct dcesrv_call_state *dce_call,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct lsa_LookupPrivName *r)
|
||||
{
|
||||
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
|
||||
}
|
||||
|
@ -283,7 +283,7 @@ static BOOL test_many_LookupSids(struct dcerpc_pipe *p,
|
||||
names.count = 0;
|
||||
names.names = NULL;
|
||||
|
||||
sids.num_sids = 1000;
|
||||
sids.num_sids = 100;
|
||||
|
||||
sids.sids = talloc_array_p(mem_ctx, struct lsa_SidPtr, sids.num_sids);
|
||||
|
||||
@ -317,6 +317,26 @@ static BOOL test_many_LookupSids(struct dcerpc_pipe *p,
|
||||
return True;
|
||||
}
|
||||
|
||||
static BOOL test_LookupPrivValue(struct dcerpc_pipe *p,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct policy_handle *handle,
|
||||
struct lsa_String *name)
|
||||
{
|
||||
NTSTATUS status;
|
||||
struct lsa_LookupPrivValue r;
|
||||
|
||||
r.in.handle = handle;
|
||||
r.in.name = name;
|
||||
|
||||
status = dcerpc_lsa_LookupPrivValue(p, mem_ctx, &r);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("\nLookupPrivValue failed - %s\n", nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
static BOOL test_LookupPrivName(struct dcerpc_pipe *p,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
struct policy_handle *handle,
|
||||
@ -805,7 +825,7 @@ static BOOL test_EnumPrivs(struct dcerpc_pipe *p,
|
||||
|
||||
r.in.handle = handle;
|
||||
r.in.resume_handle = &resume_handle;
|
||||
r.in.max_count = 1000;
|
||||
r.in.max_count = 100;
|
||||
r.out.resume_handle = &resume_handle;
|
||||
r.out.privs = &privs1;
|
||||
|
||||
@ -818,6 +838,7 @@ static BOOL test_EnumPrivs(struct dcerpc_pipe *p,
|
||||
|
||||
for (i = 0; i< privs1.count; i++) {
|
||||
test_LookupPrivDisplayName(p, mem_ctx, handle, &privs1.privs[i].name);
|
||||
test_LookupPrivValue(p, mem_ctx, handle, &privs1.privs[i].name);
|
||||
if (!test_EnumAccountsWithUserRight(p, mem_ctx, handle, &privs1.privs[i].name)) {
|
||||
ret = False;
|
||||
}
|
||||
@ -842,7 +863,7 @@ static BOOL test_EnumTrustDom(struct dcerpc_pipe *p,
|
||||
|
||||
r.in.handle = handle;
|
||||
r.in.resume_handle = &resume_handle;
|
||||
r.in.num_entries = 1000;
|
||||
r.in.num_entries = 100;
|
||||
r.out.domains = &domains;
|
||||
r.out.resume_handle = &resume_handle;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user