/* 
  lsa_LookupNames 
*/
NTSTATUS dcesrv_lsa_LookupNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
		       struct lsa_LookupNames *r)
{
	enum dcerpc_transport_t transport =
		dcerpc_binding_get_transport(dce_call->conn->endpoint->ep_description);
	struct lsa_LookupNames2 r2;
	NTSTATUS status;
	uint32_t i;

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

	ZERO_STRUCT(r2);

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

	status = dcesrv_lsa_LookupNames2(dce_call, mem_ctx, &r2);
	if (r2.out.sids == NULL) {
		return status;
	}

	r->out.sids = talloc(mem_ctx, struct lsa_TransSidArray);
	if (r->out.sids == NULL) {
		return NT_STATUS_NO_MEMORY;
	}
	r->out.sids->count = r2.out.sids->count;
	r->out.sids->sids = talloc_array(r->out.sids, struct lsa_TranslatedSid, 
					   r->out.sids->count);
	if (r->out.sids->sids == NULL) {
		return NT_STATUS_NO_MEMORY;
	}
	for (i=0;i<r->out.sids->count;i++) {
		r->out.sids->sids[i].sid_type    = r2.out.sids->sids[i].sid_type;
		r->out.sids->sids[i].rid         = r2.out.sids->sids[i].rid;
		r->out.sids->sids[i].sid_index   = r2.out.sids->sids[i].sid_index;
	}

	return status;
}
示例#2
0
文件: lsa_lookup.c 项目: endisd/samba
/*
  lsa_LookupNames
*/
NTSTATUS dcesrv_lsa_LookupNames(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
                                struct lsa_LookupNames *r)
{
    struct lsa_LookupNames2 r2;
    NTSTATUS status;
    int i;

    ZERO_STRUCT(r2);

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

    status = dcesrv_lsa_LookupNames2(dce_call, mem_ctx, &r2);
    if (r2.out.sids == NULL) {
        return status;
    }

    r->out.sids = talloc(mem_ctx, struct lsa_TransSidArray);
    if (r->out.sids == NULL) {
        return NT_STATUS_NO_MEMORY;
    }
    r->out.sids->count = r2.out.sids->count;
    r->out.sids->sids = talloc_array(r->out.sids, struct lsa_TranslatedSid,
                                     r->out.sids->count);
    if (r->out.sids->sids == NULL) {
        return NT_STATUS_NO_MEMORY;
    }
    for (i=0; i<r->out.sids->count; i++) {
        r->out.sids->sids[i].sid_type    = r2.out.sids->sids[i].sid_type;
        r->out.sids->sids[i].rid         = r2.out.sids->sids[i].rid;
        r->out.sids->sids[i].sid_index   = r2.out.sids->sids[i].sid_index;
    }

    return status;
}