示例#1
0
文件: lsa_init.c 项目: AllardJ/Tomato
/* 
  lsa_OpenPolicy
  a wrapper around lsa_OpenPolicy2
*/
NTSTATUS dcesrv_lsa_OpenPolicy(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
				struct lsa_OpenPolicy *r)
{
	struct lsa_OpenPolicy2 r2;

	r2.in.system_name = NULL;
	r2.in.attr = r->in.attr;
	r2.in.access_mask = r->in.access_mask;
	r2.out.handle = r->out.handle;

	return dcesrv_lsa_OpenPolicy2(dce_call, mem_ctx, &r2);
}
示例#2
0
文件: lsa_lookup.c 项目: endisd/samba
/*
  lsa_LookupSids3

  Identical to LookupSids2, but doesn't take a policy handle

*/
NTSTATUS dcesrv_lsa_LookupSids3(struct dcesrv_call_state *dce_call,
                                TALLOC_CTX *mem_ctx,
                                struct lsa_LookupSids3 *r)
{
    struct lsa_LookupSids2 r2;
    struct lsa_OpenPolicy2 pol;
    NTSTATUS status;
    struct dcesrv_handle *h;

    ZERO_STRUCT(r2);

    /* No policy handle on the wire, so make one up here */
    r2.in.handle = talloc(mem_ctx, struct policy_handle);
    if (!r2.in.handle) {
        return NT_STATUS_NO_MEMORY;
    }

    pol.out.handle = r2.in.handle;
    pol.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
    pol.in.attr = NULL;
    pol.in.system_name = NULL;
    status = dcesrv_lsa_OpenPolicy2(dce_call, mem_ctx, &pol);
    if (!NT_STATUS_IS_OK(status)) {
        return status;
    }

    /* ensure this handle goes away at the end of this call */
    DCESRV_PULL_HANDLE(h, r2.in.handle, LSA_HANDLE_POLICY);
    talloc_steal(mem_ctx, h);

    r2.in.sids     = r->in.sids;
    r2.in.names    = r->in.names;
    r2.in.level    = r->in.level;
    r2.in.count    = r->in.count;
    r2.in.lookup_options = r->in.lookup_options;
    r2.in.client_revision = r->in.client_revision;
    r2.out.count   = r->out.count;
    r2.out.names   = r->out.names;
    r2.out.domains = r->out.domains;

    status = dcesrv_lsa_LookupSids2(dce_call, mem_ctx, &r2);

    r->out.domains = r2.out.domains;
    r->out.names   = r2.out.names;
    r->out.count   = r2.out.count;

    return status;
}
示例#3
0
/* 
  lsa_OpenPolicy
  a wrapper around lsa_OpenPolicy2
*/
NTSTATUS dcesrv_lsa_OpenPolicy(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
				struct lsa_OpenPolicy *r)
{
	enum dcerpc_transport_t transport = dce_call->conn->endpoint->ep_description->transport;
	struct lsa_OpenPolicy2 r2;

	if (transport != NCACN_NP && transport != NCALRPC) {
		DCESRV_FAULT(DCERPC_FAULT_ACCESS_DENIED);
	}

	r2.in.system_name = NULL;
	r2.in.attr = r->in.attr;
	r2.in.access_mask = r->in.access_mask;
	r2.out.handle = r->out.handle;

	return dcesrv_lsa_OpenPolicy2(dce_call, mem_ctx, &r2);
}