[SCM] Samba Shared Repository - branch master updated

Matthias Dieter Wallnöfer mdw at samba.org
Sat Jun 12 10:06:26 MDT 2010


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 <mdw at samba.org>
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 <mdw at samba.org>
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


More information about the samba-cvs mailing list