svn commit: samba r11655 - branches/SAMBA_3_0/source/lib branches/SAMBA_3_0/source/smbd trunk/source/lib trunk/source/smbd

jerry at samba.org jerry at samba.org
Thu Nov 10 21:10:25 GMT 2005


Author: jerry
Date: 2005-11-10 21:10:24 +0000 (Thu, 10 Nov 2005)
New Revision: 11655

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

Log:
Two small fixes

* remove redundant call to sub_set_smb_name() in session setup code.
* Fix lockup when running 'wbinfo -t' on a Samba PDC.  Cause
  was new authenticated session setup from winbindd which 
  resulted in a mangled username (machine_) that was not found
  in the local files and so was queiued up to nss_winbindd.
  Deadlock....
  So now make sure to keep the trailing '$' for machine account 
  names when calling sub_set_smb_name().


Modified:
   branches/SAMBA_3_0/source/lib/substitute.c
   branches/SAMBA_3_0/source/smbd/sesssetup.c
   trunk/source/lib/substitute.c
   trunk/source/smbd/sesssetup.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/substitute.c
===================================================================
--- branches/SAMBA_3_0/source/lib/substitute.c	2005-11-10 20:33:32 UTC (rev 11654)
+++ branches/SAMBA_3_0/source/lib/substitute.c	2005-11-10 21:10:24 UTC (rev 11655)
@@ -107,15 +107,37 @@
 void sub_set_smb_name(const char *name)
 {
 	fstring tmp;
+	int len;
+	BOOL is_machine_account = False;
 
 	/* don't let anonymous logins override the name */
 	if (! *name)
 		return;
 
-	fstrcpy(tmp,name);
-	trim_char(tmp,' ',' ');
-	strlower_m(tmp);
-	alpha_strcpy(smb_user_name,tmp,SAFE_NETBIOS_CHARS,sizeof(smb_user_name)-1);
+
+	fstrcpy( tmp, name );
+	trim_char( tmp, ' ', ' ' );
+	strlower_m( tmp );
+
+	len = strlen( tmp );
+
+	if ( len == 0 )
+		return;
+
+	/* long story but here goes....we have to allow usernames
+	   ending in '$' as they are valid machine account names.
+	   So check for a machine account and re-add the '$'
+	   at the end after the call to alpha_strcpy().   --jerry  */
+	   
+	if ( tmp[len-1] == '$' )
+		is_machine_account = True;
+	
+	alpha_strcpy( smb_user_name, tmp, SAFE_NETBIOS_CHARS, sizeof(smb_user_name)-1 );
+
+	if ( is_machine_account ) {
+		len = strlen( smb_user_name );
+		smb_user_name[len-1] = '$';
+	}
 }
 
 char* sub_get_smb_name( void )

Modified: branches/SAMBA_3_0/source/smbd/sesssetup.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/sesssetup.c	2005-11-10 20:33:32 UTC (rev 11654)
+++ branches/SAMBA_3_0/source/smbd/sesssetup.c	2005-11-10 21:10:24 UTC (rev 11655)
@@ -954,9 +954,6 @@
 			return ERROR_NT(NT_STATUS_LOGON_FAILURE);
 		}
 		fstrcpy(sub_user, user);
-
-		/* setup the string used by %U */
-		sub_set_smb_name(user);
 	} else {
 		fstrcpy(sub_user, lp_guestaccount());
 	}

Modified: trunk/source/lib/substitute.c
===================================================================
--- trunk/source/lib/substitute.c	2005-11-10 20:33:32 UTC (rev 11654)
+++ trunk/source/lib/substitute.c	2005-11-10 21:10:24 UTC (rev 11655)
@@ -107,15 +107,37 @@
 void sub_set_smb_name(const char *name)
 {
 	fstring tmp;
+	int len;
+	BOOL is_machine_account = False;
 
 	/* don't let anonymous logins override the name */
 	if (! *name)
 		return;
 
-	fstrcpy(tmp,name);
-	trim_char(tmp,' ',' ');
-	strlower_m(tmp);
-	alpha_strcpy(smb_user_name,tmp,SAFE_NETBIOS_CHARS,sizeof(smb_user_name)-1);
+
+	fstrcpy( tmp, name );
+	trim_char( tmp, ' ', ' ' );
+	strlower_m( tmp );
+
+	len = strlen( tmp );
+
+	if ( len == 0 )
+		return;
+
+	/* long story but here goes....we have to allow usernames
+	   ending in '$' as they are valid machine account names.
+	   So check for a machine account and re-add the '$'
+	   at the end after the call to alpha_strcpy().   --jerry  */
+	   
+	if ( tmp[len-1] == '$' )
+		is_machine_account = True;
+	
+	alpha_strcpy( smb_user_name, tmp, SAFE_NETBIOS_CHARS, sizeof(smb_user_name)-1 );
+
+	if ( is_machine_account ) {
+		len = strlen( smb_user_name );
+		smb_user_name[len-1] = '$';
+	}
 }
 
 char* sub_get_smb_name( void )

Modified: trunk/source/smbd/sesssetup.c
===================================================================
--- trunk/source/smbd/sesssetup.c	2005-11-10 20:33:32 UTC (rev 11654)
+++ trunk/source/smbd/sesssetup.c	2005-11-10 21:10:24 UTC (rev 11655)
@@ -954,9 +954,6 @@
 			return ERROR_NT(NT_STATUS_LOGON_FAILURE);
 		}
 		fstrcpy(sub_user, user);
-
-		/* setup the string used by %U */
-		sub_set_smb_name(user);
 	} else {
 		fstrcpy(sub_user, lp_guestaccount());
 	}



More information about the samba-cvs mailing list