The branch, master has been updated
       via  731b446... s4:dcesrv_samr_GetGroupsForUser - return error code if a 
SID wasn't found
       via  a67fa2d... s4:dcesrv_samr_QueryGroupMember/GetMembersInAlias - 
unify the structure
      from  890d590... s4:password_hash LDB module - this does really 
deactivate the MS LAN manager hash

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 731b4469cb3b074a39b21fee220517af3df26a68
Author: Matthias Dieter Wallnöfer <[email protected]>
Date:   Sat Jun 12 17:50:52 2010 +0200

    s4:dcesrv_samr_GetGroupsForUser - return error code if a SID wasn't found
    
    This shouldn't happen since SIDs are mandatory for security objects

commit a67fa2db3b48d48d3460e4cc1d9826a107b64066
Author: Matthias Dieter Wallnöfer <[email protected]>
Date:   Sat Jun 12 17:45:14 2010 +0200

    s4:dcesrv_samr_QueryGroupMember/GetMembersInAlias - unify the structure
    
    Mostly cosmetic fixes

-----------------------------------------------------------------------

Summary of changes:
 source4/rpc_server/samr/dcesrv_samr.c |   65 +++++++++++++++++----------------
 1 files changed, 33 insertions(+), 32 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/rpc_server/samr/dcesrv_samr.c 
b/source4/rpc_server/samr/dcesrv_samr.c
index 9f44dc5..9aab2b8 100644
--- a/source4/rpc_server/samr/dcesrv_samr.c
+++ b/source4/rpc_server/samr/dcesrv_samr.c
@@ -2116,29 +2116,30 @@ static NTSTATUS dcesrv_samr_DeleteGroupMember(struct 
dcesrv_call_state *dce_call
 static NTSTATUS dcesrv_samr_QueryGroupMember(struct dcesrv_call_state 
*dce_call, TALLOC_CTX *mem_ctx,
                                      struct samr_QueryGroupMember *r)
 {
-       NTSTATUS status;
        struct dcesrv_handle *h;
        struct samr_account_state *a_state;
+       struct samr_domain_state *d_state;
        struct samr_RidTypeArray *array;
        unsigned int i, num_members;
-       struct dom_sid *members_as_sids;
-       struct dom_sid *dom_sid;
+       struct dom_sid *members;
+       NTSTATUS status;
 
        DCESRV_PULL_HANDLE(h, r->in.group_handle, SAMR_HANDLE_GROUP);
 
        a_state = h->data;
+       d_state = a_state->domain_state;
 
-       dom_sid = a_state->domain_state->domain_sid;
-       status = dsdb_enum_group_mem(a_state->sam_ctx, mem_ctx, 
a_state->account_dn, &members_as_sids, &num_members);
-
+       status = dsdb_enum_group_mem(d_state->sam_ctx, mem_ctx,
+                                    a_state->account_dn, &members,
+                                    &num_members);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
 
        array = talloc_zero(mem_ctx, struct samr_RidTypeArray);
-
-       if (array == NULL)
+       if (array == NULL) {
                return NT_STATUS_NO_MEMORY;
+       }
 
        if (num_members == 0) {
                *r->out.rids = array;
@@ -2146,25 +2147,28 @@ static NTSTATUS dcesrv_samr_QueryGroupMember(struct 
dcesrv_call_state *dce_call,
                return NT_STATUS_OK;
        }
 
-       array->count = 0;
-       array->rids = talloc_array(array, uint32_t,
-                                  num_members);
-       if (array->rids == NULL)
+       array->rids = talloc_array(array, uint32_t, num_members);
+       if (array->rids == NULL) {
                return NT_STATUS_NO_MEMORY;
+       }
 
-       array->types = talloc_array(array, uint32_t,
-                                   num_members);
-       if (array->types == NULL)
+       array->types = talloc_array(array, uint32_t, num_members);
+       if (array->types == NULL) {
                return NT_STATUS_NO_MEMORY;
+       }
 
+       array->count = 0;
        for (i=0; i<num_members; i++) {
-               if (!dom_sid_in_domain(dom_sid, &members_as_sids[i])) {
+               if (!dom_sid_in_domain(d_state->domain_sid, &members[i])) {
                        continue;
                }
-               status = dom_sid_split_rid(NULL, &members_as_sids[i], NULL, 
&array->rids[array->count]);
+
+               status = dom_sid_split_rid(NULL, &members[i], NULL,
+                                          &array->rids[array->count]);
                if (!NT_STATUS_IS_OK(status)) {
                        return status;
                }
+
                array->types[array->count] = 7; /* RID type of some kind, not 
sure what the value means. */
                array->count++;
        }
@@ -2536,42 +2540,40 @@ static NTSTATUS dcesrv_samr_GetMembersInAlias(struct 
dcesrv_call_state *dce_call
        struct dcesrv_handle *h;
        struct samr_account_state *a_state;
        struct samr_domain_state *d_state;
-       struct lsa_SidPtr *sids;
+       struct lsa_SidPtr *array;
        unsigned int i, num_members;
        struct dom_sid *members;
        NTSTATUS status;
+
        DCESRV_PULL_HANDLE(h, r->in.alias_handle, SAMR_HANDLE_ALIAS);
 
        a_state = h->data;
        d_state = a_state->domain_state;
 
        status = dsdb_enum_group_mem(d_state->sam_ctx, mem_ctx,
-                                    a_state->account_dn, &members, 
&num_members);
+                                    a_state->account_dn, &members,
+                                    &num_members);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
 
-       r->out.sids->sids = NULL;
-
        if (num_members == 0) {
+               r->out.sids->sids = NULL;
+
                return NT_STATUS_OK;
        }
 
-       sids = talloc_array(mem_ctx, struct lsa_SidPtr,
-                           num_members);
-
-       if (sids == NULL)
+       array = talloc_array(mem_ctx, struct lsa_SidPtr, num_members);
+       if (array == NULL) {
                return NT_STATUS_NO_MEMORY;
+       }
 
        for (i=0; i<num_members; i++) {
-               sids[i].sid = dom_sid_dup(sids, &members[i]);
-               if (sids[i].sid == NULL) {
-                       return NT_STATUS_NO_MEMORY;
-               }
+               array[i].sid = &members[i];
        }
 
        r->out.sids->num_sids = num_members;
-       r->out.sids->sids = sids;
+       r->out.sids->sids = array;
 
        return NT_STATUS_OK;
 }
@@ -3416,8 +3418,7 @@ static NTSTATUS dcesrv_samr_GetGroupsForUser(struct 
dcesrv_call_state *dce_call,
 
                group_sid = samdb_result_dom_sid(mem_ctx, res[i], "objectSid");
                if (group_sid == NULL) {
-                       DEBUG(0, ("Couldn't find objectSid attrib\n"));
-                       continue;
+                       return NT_STATUS_INTERNAL_DB_CORRUPTION;
                }
 
                array->rids[i + 1].rid =


-- 
Samba Shared Repository

Reply via email to