Use rpccli_lsa_LookupSids() in rpccli_lsa_lookup_sids_noalloc().
authorGünther Deschner <gd@samba.org>
Mon, 18 Feb 2008 09:03:19 +0000 (10:03 +0100)
committerGünther Deschner <gd@samba.org>
Mon, 18 Feb 2008 09:03:49 +0000 (10:03 +0100)
Guenther
(This used to be commit b62eddbc4e302d3849525d8f6af24b112a4fe483)

source3/rpc_client/cli_lsarpc.c

index b780d1df48a9b20cf707138c40496befc1ce4bb3..1fb0205f29f7f338fb63c5300c48c8bcacd4bad2 100644 (file)
@@ -128,13 +128,16 @@ static NTSTATUS rpccli_lsa_lookup_sids_noalloc(struct rpc_pipe_client *cli,
                                               char **names,
                                               enum lsa_SidType *types)
 {
-       prs_struct qbuf, rbuf;
-       LSA_Q_LOOKUP_SIDS q;
-       LSA_R_LOOKUP_SIDS r;
-       DOM_R_REF ref;
        NTSTATUS result = NT_STATUS_OK;
        TALLOC_CTX *tmp_ctx = NULL;
        int i;
+       struct lsa_SidArray sid_array;
+       struct lsa_RefDomainList *ref_domains = NULL;
+       struct lsa_TransNameArray lsa_names;
+       uint32_t count = 0;
+       uint16_t level = 1;
+
+       ZERO_STRUCT(lsa_names);
 
        tmp_ctx = talloc_new(mem_ctx);
        if (!tmp_ctx) {
@@ -143,38 +146,42 @@ static NTSTATUS rpccli_lsa_lookup_sids_noalloc(struct rpc_pipe_client *cli,
                goto done;
        }
 
-       ZERO_STRUCT(q);
-       ZERO_STRUCT(r);
-
-       init_q_lookup_sids(tmp_ctx, &q, pol, num_sids, sids, 1);
-
-       ZERO_STRUCT(ref);
+       sid_array.num_sids = num_sids;
+       sid_array.sids = TALLOC_ARRAY(mem_ctx, struct lsa_SidPtr, num_sids);
+       if (!sid_array.sids) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
-       r.dom_ref = &ref;
+       for (i = 0; i<num_sids; i++) {
+               sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sids[i]);
+               if (!sid_array.sids[i].sid) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+       }
 
-       CLI_DO_RPC( cli, tmp_ctx, PI_LSARPC, LSA_LOOKUPSIDS,
-                       q, r,
-                       qbuf, rbuf,
-                       lsa_io_q_lookup_sids,
-                       lsa_io_r_lookup_sids,
-                       NT_STATUS_UNSUCCESSFUL );
+       result = rpccli_lsa_LookupSids(cli, mem_ctx,
+                                      pol,
+                                      &sid_array,
+                                      &ref_domains,
+                                      &lsa_names,
+                                      level,
+                                      &count);
 
        DEBUG(10, ("LSA_LOOKUPSIDS returned '%s', mapped count = %d'\n",
-                  nt_errstr(r.status), r.mapped_count));
+                  nt_errstr(result), count));
 
-       if (!NT_STATUS_IS_OK(r.status) &&
-           !NT_STATUS_EQUAL(r.status, NT_STATUS_NONE_MAPPED) &&
-           !NT_STATUS_EQUAL(r.status, STATUS_SOME_UNMAPPED))
+       if (!NT_STATUS_IS_OK(result) &&
+           !NT_STATUS_EQUAL(result, NT_STATUS_NONE_MAPPED) &&
+           !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))
        {
                /* An actual error occured */
-               result = r.status;
                goto done;
        }
 
        /* Return output parameters */
 
-       if (NT_STATUS_EQUAL(r.status, NT_STATUS_NONE_MAPPED) ||
-           (r.mapped_count == 0))
+       if (NT_STATUS_EQUAL(result, NT_STATUS_NONE_MAPPED) ||
+           (count == 0))
        {
                for (i = 0; i < num_sids; i++) {
                        (names)[i] = NULL;
@@ -186,21 +193,19 @@ static NTSTATUS rpccli_lsa_lookup_sids_noalloc(struct rpc_pipe_client *cli,
        }
 
        for (i = 0; i < num_sids; i++) {
-               fstring name, dom_name;
-               uint32 dom_idx = r.names.name[i].domain_idx;
+               const char *name, *dom_name;
+               uint32_t dom_idx = lsa_names.names[i].sid_index;
 
                /* Translate optimised name through domain index array */
 
                if (dom_idx != 0xffffffff) {
 
-                       rpcstr_pull_unistr2_fstring(
-                                dom_name, &ref.ref_dom[dom_idx].uni_dom_name);
-                       rpcstr_pull_unistr2_fstring(
-                                name, &r.names.uni_name[i]);
+                       dom_name = ref_domains->domains[dom_idx].name.string;
+                       name = lsa_names.names[i].name.string;
 
                        (names)[i] = talloc_strdup(mem_ctx, name);
                        (domains)[i] = talloc_strdup(mem_ctx, dom_name);
-                       (types)[i] = r.names.name[i].sid_name_use;
+                       (types)[i] = lsa_names.names[i].sid_type;
 
                        if (((names)[i] == NULL) || ((domains)[i] == NULL)) {
                                DEBUG(0, ("cli_lsa_lookup_sids_noalloc(): out of memory\n"));