r23081: Reorder the lsa_lookup_sids functions so that the order makes more sense...
authorMichael Adam <obnox@samba.org>
Tue, 22 May 2007 21:04:56 +0000 (21:04 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:22:43 +0000 (12:22 -0500)
source/rpc_client/cli_lsarpc.c

index f0b4e936cd9b1617cbd01c95a27f70b045474b91..d416b726acf6fab6d250fdc764f4385bca0832dd 100644 (file)
@@ -214,8 +214,8 @@ static NTSTATUS rpccli_lsa_lookup_sids_noalloc(struct rpc_pipe_client *cli,
                        }
 
                } else {
-                       (names)[i] = NULL;
-                       (domains)[i] = NULL;
+                       (names)[i] = "";
+                       (domains)[i] = "";
                        (types)[i] = SID_NAME_UNKNOWN;
                }
        }
@@ -225,117 +225,6 @@ done:
        return result;
 }
 
-/** Lookup a list of sids */
-
-NTSTATUS rpccli_lsa_lookup_sids(struct rpc_pipe_client *cli,
-                               TALLOC_CTX *mem_ctx,
-                               POLICY_HND *pol, int num_sids,
-                               const DOM_SID *sids, 
-                               char ***domains,
-                               char ***names,
-                               enum lsa_SidType **types)
-{
-       prs_struct qbuf, rbuf;
-       LSA_Q_LOOKUP_SIDS q;
-       LSA_R_LOOKUP_SIDS r;
-       DOM_R_REF ref;
-       LSA_TRANS_NAME_ENUM t_names;
-       NTSTATUS result = NT_STATUS_OK;
-       int i;
-
-       ZERO_STRUCT(q);
-       ZERO_STRUCT(r);
-
-       init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1);
-
-       ZERO_STRUCT(ref);
-       ZERO_STRUCT(t_names);
-
-       r.dom_ref = &ref;
-       r.names = &t_names;
-
-       CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPSIDS,
-                       q, r,
-                       qbuf, rbuf,
-                       lsa_io_q_lookup_sids,
-                       lsa_io_r_lookup_sids,
-                       NT_STATUS_UNSUCCESSFUL );
-
-       if (!NT_STATUS_IS_OK(r.status) &&
-           !NT_STATUS_EQUAL(r.status, STATUS_SOME_UNMAPPED)) {
-         
-               /* An actual error occured */
-               result = r.status;
-
-               goto done;
-       }
-
-       /* Return output parameters */
-
-       if (r.mapped_count == 0) {
-               result = NT_STATUS_NONE_MAPPED;
-               goto done;
-       }
-
-       if (num_sids) {
-               if (!((*domains) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
-                       DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
-                       result = NT_STATUS_NO_MEMORY;
-                       goto done;
-               }
-
-               if (!((*names) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
-                       DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
-                       result = NT_STATUS_NO_MEMORY;
-                       goto done;
-               }
-
-               if (!((*types) = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_sids))) {
-                       DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
-                       result = NT_STATUS_NO_MEMORY;
-                       goto done;
-               }
-       } else {
-               (*domains) = NULL;
-               (*names) = NULL;
-               (*types) = NULL;
-       }
-               
-       for (i = 0; i < num_sids; i++) {
-               fstring name, dom_name;
-               uint32 dom_idx = t_names.name[i].domain_idx;
-
-               /* 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, &t_names.uni_name[i]);
-
-                       (*names)[i] = talloc_strdup(mem_ctx, name);
-                       (*domains)[i] = talloc_strdup(mem_ctx, dom_name);
-                       (*types)[i] = (enum lsa_SidType)t_names.name[i].sid_name_use;
-                       
-                       if (((*names)[i] == NULL) || ((*domains)[i] == NULL)) {
-                               DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
-                               result = NT_STATUS_UNSUCCESSFUL;
-                               goto done;
-                       }
-
-               } else {
-                       (*names)[i] = NULL;
-                       (*domains)[i] = NULL;
-                       (*types)[i] = SID_NAME_UNKNOWN;
-               }
-       }
-
- done:
-
-       return result;
-}
-
 /* Lookup a list of sids 
  *
  * do it the right way: there is a limit (of 20480 for w2k3) entries
@@ -447,6 +336,117 @@ done:
        return result;
 }
 
+/** Lookup a list of sids */
+
+NTSTATUS rpccli_lsa_lookup_sids(struct rpc_pipe_client *cli,
+                               TALLOC_CTX *mem_ctx,
+                               POLICY_HND *pol, int num_sids,
+                               const DOM_SID *sids, 
+                               char ***domains,
+                               char ***names,
+                               enum lsa_SidType **types)
+{
+       prs_struct qbuf, rbuf;
+       LSA_Q_LOOKUP_SIDS q;
+       LSA_R_LOOKUP_SIDS r;
+       DOM_R_REF ref;
+       LSA_TRANS_NAME_ENUM t_names;
+       NTSTATUS result = NT_STATUS_OK;
+       int i;
+
+       ZERO_STRUCT(q);
+       ZERO_STRUCT(r);
+
+       init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1);
+
+       ZERO_STRUCT(ref);
+       ZERO_STRUCT(t_names);
+
+       r.dom_ref = &ref;
+       r.names = &t_names;
+
+       CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPSIDS,
+                       q, r,
+                       qbuf, rbuf,
+                       lsa_io_q_lookup_sids,
+                       lsa_io_r_lookup_sids,
+                       NT_STATUS_UNSUCCESSFUL );
+
+       if (!NT_STATUS_IS_OK(r.status) &&
+           !NT_STATUS_EQUAL(r.status, STATUS_SOME_UNMAPPED)) {
+         
+               /* An actual error occured */
+               result = r.status;
+
+               goto done;
+       }
+
+       /* Return output parameters */
+
+       if (r.mapped_count == 0) {
+               result = NT_STATUS_NONE_MAPPED;
+               goto done;
+       }
+
+       if (num_sids) {
+               if (!((*domains) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
+                       DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
+                       result = NT_STATUS_NO_MEMORY;
+                       goto done;
+               }
+
+               if (!((*names) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
+                       DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
+                       result = NT_STATUS_NO_MEMORY;
+                       goto done;
+               }
+
+               if (!((*types) = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_sids))) {
+                       DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
+                       result = NT_STATUS_NO_MEMORY;
+                       goto done;
+               }
+       } else {
+               (*domains) = NULL;
+               (*names) = NULL;
+               (*types) = NULL;
+       }
+               
+       for (i = 0; i < num_sids; i++) {
+               fstring name, dom_name;
+               uint32 dom_idx = t_names.name[i].domain_idx;
+
+               /* 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, &t_names.uni_name[i]);
+
+                       (*names)[i] = talloc_strdup(mem_ctx, name);
+                       (*domains)[i] = talloc_strdup(mem_ctx, dom_name);
+                       (*types)[i] = (enum lsa_SidType)t_names.name[i].sid_name_use;
+                       
+                       if (((*names)[i] == NULL) || ((*domains)[i] == NULL)) {
+                               DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
+                               result = NT_STATUS_UNSUCCESSFUL;
+                               goto done;
+                       }
+
+               } else {
+                       (*names)[i] = NULL;
+                       (*domains)[i] = NULL;
+                       (*types)[i] = SID_NAME_UNKNOWN;
+               }
+       }
+
+ done:
+
+       return result;
+}
+
 /** Lookup a list of names */
 
 NTSTATUS rpccli_lsa_lookup_names(struct rpc_pipe_client *cli,