svn commit: samba r22586 - in branches: SAMBA_3_0/source/rpc_server SAMBA_3_0_25/source/rpc_server

jra at samba.org jra at samba.org
Mon Apr 30 00:53:20 GMT 2007


Author: jra
Date: 2007-04-30 00:53:17 +0000 (Mon, 30 Apr 2007)
New Revision: 22586

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22586

Log:
Add a modified version of Simo's patch.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c
   branches/SAMBA_3_0_25/source/rpc_server/srv_samr_nt.c


Changeset:
Modified: branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c	2007-04-30 00:48:20 UTC (rev 22585)
+++ branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c	2007-04-30 00:53:17 UTC (rev 22586)
@@ -949,6 +949,7 @@
 	if (num_account == 0) {
 		DEBUG(5, ("_samr_enum_dom_users: enumeration handle over "
 			  "total entries\n"));
+		init_samr_r_enum_dom_users(r_u, q_u->start_idx, 0);
 		return NT_STATUS_OK;
 	}
 
@@ -1708,7 +1709,7 @@
 	UNIHDR *hdr_name = NULL;
 	UNISTR2 *uni_name = NULL;
 	DOM_SID pol_sid;
-	int num_rids = q_u->num_rids1;
+	int num_rids = (int)q_u->num_rids1;
 	uint32 acc_granted;
 	int i;
 
@@ -1726,12 +1727,18 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	names = TALLOC_ZERO_ARRAY(p->mem_ctx, const char *, num_rids);
-	attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, enum lsa_SidType, num_rids);
-	wire_attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_rids);
+	if (num_rids) {
+		names = TALLOC_ZERO_ARRAY(p->mem_ctx, const char *, num_rids);
+		attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, enum lsa_SidType, num_rids);
+		wire_attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_rids);
 
-	if ((num_rids != 0) && ((names == NULL) || (attrs == NULL) || (wire_attrs==NULL)))
-		return NT_STATUS_NO_MEMORY;
+		if ((names == NULL) || (attrs == NULL) || (wire_attrs==NULL))
+			return NT_STATUS_NO_MEMORY;
+	} else {
+		names = NULL;
+		attrs = NULL;
+		wire_attrs = NULL;
+	}
 
 	become_root();  /* lookup_sid can require root privs */
 	r_u->status = pdb_lookup_rids(&pol_sid, num_rids, q_u->rid,
@@ -3803,10 +3810,14 @@
 	    !sid_check_is_builtin(&info->sid))
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
 
-	members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, q_u->num_sids1);
+	if (q_u->num_sids1) {
+		members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, q_u->num_sids1);
 
-	if (members == NULL)
-		return NT_STATUS_NO_MEMORY;
+		if (members == NULL)
+			return NT_STATUS_NO_MEMORY;
+	} else {
+		members = NULL;
+	}
 
 	for (i=0; i<q_u->num_sids1; i++)
 		sid_copy(&members[i], &q_u->sid[i].sid);
@@ -3864,10 +3875,14 @@
 		return status;
 	}
 
-	sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_sids);	
-	if (num_sids!=0 && sid == NULL) {
-		SAFE_FREE(sids);
-		return NT_STATUS_NO_MEMORY;
+	if (num_sids) {
+		sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_sids);	
+		if (sid == NULL) {
+			SAFE_FREE(sids);
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		sid = NULL;
 	}
 
 	for (i = 0; i < num_sids; i++) {

Modified: branches/SAMBA_3_0_25/source/rpc_server/srv_samr_nt.c
===================================================================
--- branches/SAMBA_3_0_25/source/rpc_server/srv_samr_nt.c	2007-04-30 00:48:20 UTC (rev 22585)
+++ branches/SAMBA_3_0_25/source/rpc_server/srv_samr_nt.c	2007-04-30 00:53:17 UTC (rev 22586)
@@ -964,6 +964,7 @@
 	if (num_account == 0) {
 		DEBUG(5, ("_samr_enum_dom_users: enumeration handle over "
 			  "total entries\n"));
+		init_samr_r_enum_dom_users(r_u, q_u->start_idx, 0);
 		return NT_STATUS_OK;
 	}
 
@@ -1723,7 +1724,7 @@
 	UNIHDR *hdr_name = NULL;
 	UNISTR2 *uni_name = NULL;
 	DOM_SID pol_sid;
-	int num_rids = q_u->num_rids1;
+	int num_rids = (int)q_u->num_rids1;
 	uint32 acc_granted;
 	int i;
 	
@@ -1741,12 +1742,18 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	names = TALLOC_ZERO_ARRAY(p->mem_ctx, const char *, num_rids);
-	attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, enum lsa_SidType, num_rids);
-	wire_attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_rids);
+	if (num_rids) {
+		names = TALLOC_ZERO_ARRAY(p->mem_ctx, const char *, num_rids);
+		attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, enum lsa_SidType, num_rids);
+		wire_attrs = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_rids);
 
-	if ((num_rids != 0) && ((names == NULL) || (attrs == NULL) || (wire_attrs==NULL)))
-		return NT_STATUS_NO_MEMORY;
+		if ((names == NULL) || (attrs == NULL) || (wire_attrs==NULL))
+			return NT_STATUS_NO_MEMORY;
+	} else {
+		names = NULL;
+		attrs = NULL;
+		wire_attrs = NULL;
+	}
 
 	become_root();  /* lookup_sid can require root privs */
 	r_u->status = pdb_lookup_rids(&pol_sid, num_rids, q_u->rid,
@@ -3818,10 +3825,14 @@
 	    !sid_check_is_builtin(&info->sid))
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
 
-	members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, q_u->num_sids1);
+	if (q_u->num_sids1) {
+		members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, q_u->num_sids1);
 
-	if (members == NULL)
-		return NT_STATUS_NO_MEMORY;
+		if (members == NULL)
+			return NT_STATUS_NO_MEMORY;
+	} else {
+		members = NULL;
+	}
 
 	for (i=0; i<q_u->num_sids1; i++)
 		sid_copy(&members[i], &q_u->sid[i].sid);
@@ -3879,10 +3890,14 @@
 		return status;
 	}
 
-	sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_sids);	
-	if (num_sids!=0 && sid == NULL) {
-		SAFE_FREE(sids);
-		return NT_STATUS_NO_MEMORY;
+	if (num_sids) {
+		sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_sids);	
+		if (sid == NULL) {
+			SAFE_FREE(sids);
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		sid = NULL;
 	}
 
 	for (i = 0; i < num_sids; i++) {



More information about the samba-cvs mailing list