kwizart / rpms / samba

Forked from rpms/samba 4 years ago
Clone
0dc7426
Index: source/nsswitch/idmap.c
0dc7426
===================================================================
0dc7426
--- source/nsswitch/idmap.c	(revision 25609)
0dc7426
+++ source/nsswitch/idmap.c	(working copy)
0dc7426
@@ -252,12 +252,6 @@
0dc7426
 	return NT_STATUS_OK;
0dc7426
 }
0dc7426
 
0dc7426
-/**********************************************************************
0dc7426
- Initialise idmap cache and a remote backend (if configured).
0dc7426
-**********************************************************************/
0dc7426
-
0dc7426
-static const char *idmap_default_domain[] = { "default domain", NULL };
0dc7426
-
0dc7426
 /****************************************************************************
0dc7426
  ****************************************************************************/
0dc7426
 
0dc7426
@@ -292,6 +286,7 @@
0dc7426
 	char *compat_backend = NULL;
0dc7426
 	char *compat_params = NULL;
0dc7426
 	const char **dom_list = NULL;
0dc7426
+	const char *default_domain = NULL;
0dc7426
 	char *alloc_backend = NULL;
0dc7426
 	BOOL default_already_defined = False;
0dc7426
 	BOOL pri_dom_is_in_list = False;
0dc7426
@@ -356,7 +351,25 @@
0dc7426
 	}
0dc7426
 
0dc7426
 	if ( ! dom_list) {
0dc7426
-		dom_list = idmap_default_domain;
0dc7426
+		/* generate a list with our main domain */
0dc7426
+		char ** dl;
0dc7426
+
0dc7426
+		dl = talloc_array(idmap_ctx, char *, 2);
0dc7426
+		if (dl == NULL) {
0dc7426
+			ret = NT_STATUS_NO_MEMORY;
0dc7426
+			goto done;
0dc7426
+		}
0dc7426
+		dl[0] = talloc_strdup(dl, lp_workgroup());
0dc7426
+		if (dl[0] == NULL) {
0dc7426
+			ret = NT_STATUS_NO_MEMORY;
0dc7426
+			goto done;
0dc7426
+		}
0dc7426
+
0dc7426
+		/* terminate */
0dc7426
+		dl[1] = NULL;
0dc7426
+
0dc7426
+		dom_list = dl;
0dc7426
+		default_domain = dl[0];
0dc7426
 	}
0dc7426
 
0dc7426
 	/***************************
10b9b9b
@@ -389,7 +389,8 @@
10b9b9b
 			continue;
10b9b9b
 		}
10b9b9b
 
10b9b9b
-		if (strequal(dom_list[i], lp_workgroup())) {
10b9b9b
+		if ((dom_list[i] != default_domain) &&
10b9b9b
+		    strequal(dom_list[i], lp_workgroup())) {
10b9b9b
 			pri_dom_is_in_list = True;
10b9b9b
 		}
10b9b9b
 		/* init domain */
0dc7426
@@ -398,10 +411,10 @@
0dc7426
 						   "default", False);
0dc7426
 
0dc7426
 		if (dom->default_domain ||
0dc7426
-		    strequal(dom_list[i], idmap_default_domain[0])) {
0dc7426
+		    (default_domain && strequal(dom_list[i], default_domain))) {
0dc7426
 
0dc7426
 			/* make sure this is set even when we match
0dc7426
-			 * idmap_default_domain[0] */
0dc7426
+			 * default_domain */
0dc7426
 			dom->default_domain = True;
0dc7426
 
0dc7426
 			if (default_already_defined) {