r16678: Fix bug #3898 reported by jason@ncac.gwu.edu.
authorJeremy Allison <jra@samba.org>
Thu, 29 Jun 2006 17:03:19 +0000 (17:03 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:19:07 +0000 (11:19 -0500)
Jeremy.
(This used to be commit 5c5ea3152f8dbdfd7717b65e035191ffed3ec548)

source3/nsswitch/winbindd_rpc.c
source3/passdb/lookup_sid.c
source3/rpc_server/srv_samr_nt.c

index 5473af073d65a4cce6cb9247c46d434afd804ea1..27feea2f6715d84c83d3dde6998ddb62a74bbc03 100644 (file)
@@ -294,7 +294,7 @@ NTSTATUS msrpc_sid_to_name(struct winbindd_domain *domain,
 {
        char **domains;
        char **names;
-       uint32 *types;
+       enum SID_NAME_USE *types;
        NTSTATUS result;
        struct rpc_pipe_client *cli;
        POLICY_HND lsa_policy;
index 8a28f75ec8537530f47f6befdec6b74a1c62518a..38ca51eaa866c57eb3b0fe14b818ed16f8af18e6 100644 (file)
@@ -357,7 +357,7 @@ static BOOL winbind_lookup_rids(TALLOC_CTX *mem_ctx,
                                const DOM_SID *domain_sid,
                                int num_rids, uint32 *rids,
                                const char **domain_name,
-                               const char **names, uint32 *types)
+                               const char **names, enum SID_NAME_USE *types)
 {
        /* Unless the winbind interface is upgraded, fall back to ask for
         * individual sids. I imagine introducing a lookuprids operation that
index 2786a740ffb309fe1e683a02e93f837e336a815a..e045de5639680771466e82464e67098ebabb5b8c 100644 (file)
@@ -1619,12 +1619,14 @@ NTSTATUS _samr_lookup_rids(pipes_struct *p, SAMR_Q_LOOKUP_RIDS *q_u, SAMR_R_LOOK
 {
        const char **names;
        enum SID_NAME_USE *attrs = NULL;
+       uint32 *wire_attrs = NULL;
        UNIHDR *hdr_name = NULL;
        UNISTR2 *uni_name = NULL;
        DOM_SID pol_sid;
        int num_rids = q_u->num_rids1;
        uint32 acc_granted;
-       
+       int i;
+
        r_u->status = NT_STATUS_OK;
 
        DEBUG(5,("_samr_lookup_rids: %d\n", __LINE__));
@@ -1640,9 +1642,10 @@ NTSTATUS _samr_lookup_rids(pipes_struct *p, SAMR_Q_LOOKUP_RIDS *q_u, SAMR_R_LOOK
        }
 
        names = TALLOC_ZERO_ARRAY(p->mem_ctx, const char *, num_rids);
-       attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_rids);
+       attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, enum SID_NAME_USE, num_rids);
+       wire_attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_rids);
 
-       if ((num_rids != 0) && ((names == NULL) || (attrs == NULL)))
+       if ((num_rids != 0) && ((names == NULL) || (attrs == NULL) || wire_attrs))
                return NT_STATUS_NO_MEMORY;
 
        become_root();  /* lookup_sid can require root privs */
@@ -1658,7 +1661,12 @@ NTSTATUS _samr_lookup_rids(pipes_struct *p, SAMR_Q_LOOKUP_RIDS *q_u, SAMR_R_LOOK
                                  &hdr_name, &uni_name))
                return NT_STATUS_NO_MEMORY;
 
-       init_samr_r_lookup_rids(r_u, num_rids, hdr_name, uni_name, attrs);
+       /* Convert from enum SID_NAME_USE to uint32 for wire format. */
+       for (i = 0; i < num_rids; i++) {
+               wire_attrs[i] = (uint32)attrs[i];
+       }
+
+       init_samr_r_lookup_rids(r_u, num_rids, hdr_name, uni_name, wire_attrs);
 
        DEBUG(5,("_samr_lookup_rids: %d\n", __LINE__));