svn commit: samba r5654 - in branches/SAMBA_3_0/source/nsswitch: .

vlendec at samba.org vlendec at samba.org
Fri Mar 4 19:29:19 GMT 2005


Author: vlendec
Date: 2005-03-04 19:29:18 +0000 (Fri, 04 Mar 2005)
New Revision: 5654

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

Log:
Fix bug 1604 -- make winbind work with more than 10 trusted domains.

TODO: This needs to be merged to trunk separately, it has changed a little,
but it's friday evening here.

Volker

Modified:
   branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c


Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c	2005-03-04 17:38:25 UTC (rev 5653)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c	2005-03-04 19:29:18 UTC (rev 5654)
@@ -970,16 +970,47 @@
 	DEBUG(3,("rpc: trusted_domains\n"));
 
 	*num_domains = 0;
+	*names = NULL;
 	*alt_names = NULL;
+	*dom_sids = NULL;
 
 	retry = 0;
 	do {
 		if (!NT_STATUS_IS_OK(result = cm_get_lsa_handle(find_our_domain(), &hnd)))
 			goto done;
 
-		result = cli_lsa_enum_trust_dom(hnd->cli, mem_ctx,
-						&hnd->pol, &enum_ctx,
-						num_domains, names, dom_sids);
+		result = STATUS_MORE_ENTRIES;
+
+		while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)) {
+			uint32 start_idx, num;
+			char **tmp_names;
+			DOM_SID *tmp_sids;
+			int i;
+
+			result = cli_lsa_enum_trust_dom(hnd->cli, mem_ctx,
+							&hnd->pol, &enum_ctx,
+							&num, &tmp_names,
+							&tmp_sids);
+
+			if (!NT_STATUS_IS_OK(result) &&
+			    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES))
+				break;
+
+			start_idx = *num_domains;
+			*num_domains += num;
+			*names = TALLOC_REALLOC_ARRAY(mem_ctx, *names,
+						      char *, *num_domains);
+			*dom_sids = TALLOC_REALLOC_ARRAY(mem_ctx, *dom_sids,
+							 DOM_SID,
+							 *num_domains);
+			if ((*names == NULL) || (*dom_sids == NULL))
+				return NT_STATUS_NO_MEMORY;
+
+			for (i=0; i<num; i++) {
+				(*names)[start_idx+i] = tmp_names[i];
+				(*dom_sids)[start_idx+i] = tmp_sids[i];
+			}
+		}
 	} while (!NT_STATUS_IS_OK(result) && (retry++ < 1) &&  hnd && hnd->cli && hnd->cli->fd == -1);
 
 done:



More information about the samba-cvs mailing list