svn commit: samba r21070 - in branches: SAMBA_3_0/source/nsswitch SAMBA_3_0/source/param SAMBA_3_0_24/source/nsswitch SAMBA_3_0_24/source/param

jerry at samba.org jerry at samba.org
Wed Jan 31 05:38:37 GMT 2007


Author: jerry
Date: 2007-01-31 05:38:36 +0000 (Wed, 31 Jan 2007)
New Revision: 21070

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

Log:
* Add the new boolean 'winbind normalize names' option as discussed
  on the samba-technical ml.  The replacement character is hardcoded
  as a '_' for now.


Modified:
   branches/SAMBA_3_0/source/nsswitch/winbindd_group.c
   branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c
   branches/SAMBA_3_0/source/nsswitch/winbindd_user.c
   branches/SAMBA_3_0/source/nsswitch/winbindd_util.c
   branches/SAMBA_3_0/source/param/loadparm.c
   branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c
   branches/SAMBA_3_0_24/source/nsswitch/winbindd_rpc.c
   branches/SAMBA_3_0_24/source/nsswitch/winbindd_user.c
   branches/SAMBA_3_0_24/source/nsswitch/winbindd_util.c
   branches/SAMBA_3_0_24/source/param/loadparm.c


Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_group.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_group.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_group.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -462,6 +462,7 @@
 	gid_t gid;
 	union unid_t id;
 	NTSTATUS status;
+	char replace_char[2] = { 0x0, 0x0 };
 	
 	/* Ensure null termination */
 	state->request.data.groupname[sizeof(state->request.data.groupname)-1]='\0';
@@ -502,6 +503,8 @@
 	}
 
 	/* Get rid and name type from name */
+
+	ws_name_replace( name_group, '_' );
         
 	if (!winbindd_lookup_sid_by_name(state->mem_ctx, domain, domain->name,
 					 name_group, &group_sid, &name_type)) {

Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -246,7 +246,7 @@
 	NTSTATUS result;
 	DOM_SID *sids = NULL;
 	enum lsa_SidType *types = NULL;
-	const char *full_name;
+	char *full_name;
 	struct rpc_pipe_client *cli;
 	POLICY_HND lsa_policy;
 
@@ -262,6 +262,8 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	ws_name_return( full_name, '_' );	
+
 	DEBUG(3,("name_to_sid [rpc] %s for domain %s\n", full_name?full_name:"", domain_name ));
 
 	result = cm_connect_lsa(domain, mem_ctx, &cli, &lsa_policy);
@@ -314,6 +316,9 @@
 	*type = (enum lsa_SidType)types[0];
 	*domain_name = domains[0];
 	*name = names[0];
+
+	ws_name_replace( *name, '_' );	
+		
 	DEBUG(5,("Mapped sid to [%s]\\[%s]\n", domains[0], *name));
 	return NT_STATUS_OK;
 }
@@ -333,6 +338,7 @@
 	POLICY_HND lsa_policy;
 	DOM_SID *sids;
 	size_t i;
+	char **ret_names;
 
 	DEBUG(3, ("rids_to_names [rpc] for domain %s\n", domain->name ));
 
@@ -360,10 +366,11 @@
 		return result;
 	}
 
+	ret_names = *names;
 	for (i=0; i<num_rids; i++) {
 		if ((*types)[i] != SID_NAME_UNKNOWN) {
+			ws_name_replace( ret_names[i], '_' );
 			*domain_name = domains[i];
-			break;
 		}
 	}
 

Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_user.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_user.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_user.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -241,6 +241,9 @@
 	fstrcpy( username, acct_name );
 	strlower_m( username );
 	s->username = talloc_strdup(s->state->mem_ctx, username);
+
+	ws_name_replace( s->username, '_' );
+	 
 	s->fullname = talloc_strdup(s->state->mem_ctx, full_name);
 	s->homedir = talloc_strdup(s->state->mem_ctx, homedir);
 	s->shell = talloc_strdup(s->state->mem_ctx, shell);

Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_util.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_util.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_util.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -1073,3 +1073,37 @@
 
 	return status;
 }
+
+/*********************************************************************
+ We use this to remove spaces from user and group names
+********************************************************************/
+
+void ws_name_replace( char *name, char replace )
+{
+	char replace_char[2] = { 0x0, 0x0 };
+    
+	if ( !lp_winbind_normalize_names() || (replace == '\0') ) 
+		return;
+
+	replace_char[0] = replace;	
+	all_string_sub( name, " ", replace_char, 0 );
+
+	return;	
+}
+
+/*********************************************************************
+ We use this to do the inverse of ws_name_replace()
+********************************************************************/
+
+void ws_name_return( char *name, char replace )
+{
+	char replace_char[2] = { 0x0, 0x0 };
+    
+	if ( !lp_winbind_normalize_names() || (replace == '\0') ) 
+		return;
+	
+	replace_char[0] = replace;	
+	all_string_sub( name, replace_char, " ", 0 );
+
+	return;	
+}

Modified: branches/SAMBA_3_0/source/param/loadparm.c
===================================================================
--- branches/SAMBA_3_0/source/param/loadparm.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0/source/param/loadparm.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -180,6 +180,7 @@
 	BOOL bWinbindNestedGroups;
 	BOOL bWinbindRefreshTickets;
 	BOOL bWinbindOfflineLogon;
+	BOOL bWinbindNormalizeNames;
 	char **szIdmapDomains;
 	char **szIdmapBackend; /* deprecated */
 	char *szIdmapAllocBackend;
@@ -1288,6 +1289,7 @@
 	{"winbind nss info", P_LIST, P_GLOBAL, &Globals.szWinbindNssInfo, NULL, NULL, FLAG_ADVANCED}, 
 	{"winbind refresh tickets", P_BOOL, P_GLOBAL, &Globals.bWinbindRefreshTickets, NULL, NULL, FLAG_ADVANCED}, 
 	{"winbind offline logon", P_BOOL, P_GLOBAL, &Globals.bWinbindOfflineLogon, NULL, NULL, FLAG_ADVANCED},
+	{"winbind normalize names", P_BOOL, P_GLOBAL, &Globals.bWinbindNormalizeNames, NULL, NULL, FLAG_ADVANCED},
 
 	{NULL,  P_BOOL,  P_NONE,  NULL,  NULL,  NULL,  0}
 };
@@ -1622,6 +1624,7 @@
 	string_set(&Globals.szTemplateShell, "/bin/false");
 	string_set(&Globals.szTemplateHomedir, "/home/%D/%U");
 	string_set(&Globals.szWinbindSeparator, "\\");
+
 	string_set(&Globals.szCupsServer, "");
 	string_set(&Globals.szIPrintServer, "");
 
@@ -1854,6 +1857,7 @@
 FN_GLOBAL_BOOL(lp_winbind_nested_groups, &Globals.bWinbindNestedGroups)
 FN_GLOBAL_BOOL(lp_winbind_refresh_tickets, &Globals.bWinbindRefreshTickets)
 FN_GLOBAL_BOOL(lp_winbind_offline_logon, &Globals.bWinbindOfflineLogon)
+FN_GLOBAL_BOOL(lp_winbind_normalize_names, &Globals.bWinbindNormalizeNames)
 
 FN_GLOBAL_LIST(lp_idmap_domains, &Globals.szIdmapDomains)
 FN_GLOBAL_LIST(lp_idmap_backend, &Globals.szIdmapBackend) /* deprecated */

Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c
===================================================================
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -323,6 +323,7 @@
 	gid_t gid;
 	union unid_t id;
 	NTSTATUS status;
+	char replace_char[2] = { 0x0, 0x0 };
 	
 	/* Ensure null termination */
 	state->request.data.groupname[sizeof(state->request.data.groupname)-1]='\0';
@@ -363,6 +364,8 @@
 	}
 
 	/* Get rid and name type from name */
+
+	ws_name_replace( name_group, '_' );
         
 	if (!winbindd_lookup_sid_by_name(state->mem_ctx, domain, domain->name,
 					 name_group, &group_sid, &name_type)) {

Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_rpc.c
===================================================================
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_rpc.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_rpc.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -246,7 +246,7 @@
 	NTSTATUS result;
 	DOM_SID *sids = NULL;
 	enum lsa_SidType *types = NULL;
-	const char *full_name;
+	char *full_name;
 	struct rpc_pipe_client *cli;
 	POLICY_HND lsa_policy;
 
@@ -262,6 +262,8 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	ws_name_return( full_name, '_' );	
+
 	DEBUG(3,("name_to_sid [rpc] %s for domain %s\n", full_name?full_name:"", domain_name ));
 
 	result = cm_connect_lsa(domain, mem_ctx, &cli, &lsa_policy);
@@ -314,6 +316,9 @@
 	*type = (enum lsa_SidType)types[0];
 	*domain_name = domains[0];
 	*name = names[0];
+
+	ws_name_replace( *name, '_' );	
+		
 	DEBUG(5,("Mapped sid to [%s]\\[%s]\n", domains[0], *name));
 	return NT_STATUS_OK;
 }
@@ -333,6 +338,7 @@
 	POLICY_HND lsa_policy;
 	DOM_SID *sids;
 	size_t i;
+	char **ret_names;
 
 	DEBUG(3, ("rids_to_names [rpc] for domain %s\n", domain->name ));
 
@@ -360,10 +366,11 @@
 		return result;
 	}
 
+	ret_names = *names;
 	for (i=0; i<num_rids; i++) {
 		if ((*types)[i] != SID_NAME_UNKNOWN) {
+			ws_name_replace( ret_names[i], '_' );
 			*domain_name = domains[i];
-			break;
 		}
 	}
 

Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_user.c
===================================================================
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_user.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_user.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -238,6 +238,9 @@
 	fstrcpy( username, acct_name );
 	strlower_m( username );
 	s->username = talloc_strdup(s->state->mem_ctx, username);
+
+	ws_name_replace( s->username, '_' );
+	 
 	s->fullname = talloc_strdup(s->state->mem_ctx, full_name);
 	s->homedir = talloc_strdup(s->state->mem_ctx, homedir);
 	s->shell = talloc_strdup(s->state->mem_ctx, shell);

Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_util.c
===================================================================
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_util.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_util.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -1311,3 +1311,37 @@
 
 	return status;
 }
+
+/*********************************************************************
+ We use this to remove spaces from user and group names
+********************************************************************/
+
+void ws_name_replace( char *name, char replace )
+{
+	char replace_char[2] = { 0x0, 0x0 };
+    
+	if ( !lp_winbind_normalize_names() || (replace == '\0') ) 
+		return;
+
+	replace_char[0] = replace;	
+	all_string_sub( name, " ", replace_char, 0 );
+
+	return;	
+}
+
+/*********************************************************************
+ We use this to do the inverse of ws_name_replace()
+********************************************************************/
+
+void ws_name_return( char *name, char replace )
+{
+	char replace_char[2] = { 0x0, 0x0 };
+    
+	if ( !lp_winbind_normalize_names() || (replace == '\0') ) 
+		return;
+	
+	replace_char[0] = replace;	
+	all_string_sub( name, replace_char, " ", 0 );
+
+	return;	
+}

Modified: branches/SAMBA_3_0_24/source/param/loadparm.c
===================================================================
--- branches/SAMBA_3_0_24/source/param/loadparm.c	2007-01-31 05:11:19 UTC (rev 21069)
+++ branches/SAMBA_3_0_24/source/param/loadparm.c	2007-01-31 05:38:36 UTC (rev 21070)
@@ -180,6 +180,7 @@
 	BOOL bWinbindNestedGroups;
 	BOOL bWinbindRefreshTickets;
 	BOOL bWinbindOfflineLogon;
+	BOOL bWinbindNormalizeNames;
 	char **szIdmapBackend;
 	char *szAddShareCommand;
 	char *szChangeShareCommand;
@@ -1278,6 +1279,7 @@
 	{"winbind nss info", P_LIST, P_GLOBAL, &Globals.szWinbindNssInfo, NULL, NULL, FLAG_ADVANCED}, 
 	{"winbind refresh tickets", P_BOOL, P_GLOBAL, &Globals.bWinbindRefreshTickets, NULL, NULL, FLAG_ADVANCED}, 
 	{"winbind offline logon", P_BOOL, P_GLOBAL, &Globals.bWinbindOfflineLogon, NULL, NULL, FLAG_ADVANCED},
+	{"winbind normalize names", P_BOOL, P_GLOBAL, &Globals.bWinbindNormalizeNames, NULL, NULL, FLAG_ADVANCED},
 
 	{NULL,  P_BOOL,  P_NONE,  NULL,  NULL,  NULL,  0}
 };
@@ -1612,6 +1614,7 @@
 	string_set(&Globals.szTemplateShell, "/bin/false");
 	string_set(&Globals.szTemplateHomedir, "/home/%D/%U");
 	string_set(&Globals.szWinbindSeparator, "\\");
+
 	string_set(&Globals.szCupsServer, "");
 	string_set(&Globals.szIPrintServer, "");
 
@@ -1839,6 +1842,7 @@
 FN_GLOBAL_BOOL(lp_winbind_nested_groups, &Globals.bWinbindNestedGroups)
 FN_GLOBAL_BOOL(lp_winbind_refresh_tickets, &Globals.bWinbindRefreshTickets)
 FN_GLOBAL_BOOL(lp_winbind_offline_logon, &Globals.bWinbindOfflineLogon)
+FN_GLOBAL_BOOL(lp_winbind_normalize_names, &Globals.bWinbindNormalizeNames)
 
 FN_GLOBAL_LIST(lp_idmap_backend, &Globals.szIdmapBackend)
 FN_GLOBAL_BOOL(lp_passdb_expand_explicit, &Globals.bPassdbExpandExplicit)



More information about the samba-cvs mailing list