[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/kdm
From:       Oswald Buddenhagen <ossi () kde ! org>
Date:       2007-11-20 20:28:56
Message-ID: 1195590536.378137.6218.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 739302 by ossi:

cope with case-insensitive login names properly.
CCMAIL: coolo@kde.org


 M  +24 -25    backend/client.c  
 M  +5 -2      kfrontend/kgreeter.cpp  


--- trunk/KDE/kdebase/workspace/kdm/backend/client.c #739301:739302
@@ -351,50 +351,47 @@
 #if defined(USE_PAM) || defined(_AIX)
 isNoPassAllowed( const char *un )
 {
-	struct passwd *pw = 0;
+	struct passwd *pw;
 # ifdef HAVE_GETSPNAM /* (sic!) - not USESHADOW */
 	struct spwd *spw;
 # endif
 #else
-isNoPassAllowed( const char *un, struct passwd *pw )
+isNoPassAllowed( struct passwd *pw )
 {
 #endif
 	struct group *gr;
 	char **fp;
 	int hg;
 
+#if defined(USE_PAM) || defined(_AIX)
 	if (!*un)
 		return False;
+#endif
 
 	if (cursource != PWSRC_MANUAL)
 		return True;
 
-	for (hg = False, fp = td->noPassUsers; *fp; fp++)
-		if (**fp == '@')
-			hg = True;
-		else if (!strcmp( un, *fp ))
-			return True;
-		else if (!strcmp( "*", *fp )) {
 #if defined(USE_PAM) || defined(_AIX)
-			if (!(pw = getpwnam( un )))
-				return False;
-			if (pw->pw_passwd[0] == '!' || pw->pw_passwd[0] == '*')
-				continue;
+	/* Give nss_ldap, etc. a chance to normalize (uppercase) the name. */
+	if (!(pw = getpwnam( un )) ||
+	    pw->pw_passwd[0] == '!' || pw->pw_passwd[0] == '*')
+		return False;
 # ifdef HAVE_GETSPNAM /* (sic!) - not USESHADOW */
-			if ((spw = getspnam( un )) &&
-			    (spw->sp_pwdp[0] == '!' || spw->sp_pwdp[0] == '*'))
-					continue;
+	if ((spw = getspnam( un )) &&
+	    (spw->sp_pwdp[0] == '!' || spw->sp_pwdp[0] == '*'))
+		return False;
 # endif
 #endif
-			if (pw->pw_uid)
-				return True;
-		}
 
-#if defined(USE_PAM) || defined(_AIX)
-	if (hg && (pw || (pw = getpwnam( un )))) {
-#else
+	for (hg = False, fp = td->noPassUsers; *fp; fp++)
+		if (**fp == '@')
+			hg = True;
+		else if (!strcmp( pw->pw_name, *fp ))
+			return True;
+		else if (!strcmp( "*", *fp ) && pw->pw_uid)
+			return True;
+
 	if (hg) {
-#endif
 		for (setgrent(); (gr = getgrent()); )
 			for (fp = td->noPassUsers; *fp; fp++)
 				if (**fp == '@' && !strcmp( gr->gr_name, *fp + 1 )) {
@@ -403,7 +400,7 @@
 						return True;
 					}
 					for (; *gr->gr_mem; gr->gr_mem++)
-						if (!strcmp( un, *gr->gr_mem )) {
+						if (!strcmp( pw->pw_name, *gr->gr_mem )) {
 							endgrent();
 							return True;
 						}
@@ -608,7 +605,7 @@
 		goto nplogin;
 	}
 
-	if (isNoPassAllowed( curuser, p )) {
+	if (isNoPassAllowed( p )) {
 	  nplogin:
 		gconv( GCONV_PASS_ND, 0 );
 		if (!*curpass) {
@@ -1185,6 +1182,8 @@
 	}
 #endif
 
+	strcpy( curuser, p->pw_name ); /* Use normalized login name. */
+
 #ifndef USE_PAM
 # ifdef _AIX
 	msg = NULL;
@@ -1755,7 +1754,7 @@
 		return GE_NoUser;
 
 	if (*dmrcDir) {
-		if (!strApp( &fname, dmrcDir, "/", dmrcuser, ".dmrc", (char *)0 ))
+		if (!strApp( &fname, dmrcDir, "/", p->pw_name, ".dmrc", (char *)0 ))
 			return GE_Error;
 		if (!(curdmrc = iniLoad( fname ))) {
 			free( fname );
--- trunk/KDE/kdebase/workspace/kdm/kfrontend/kgreeter.cpp #739301:739302
@@ -373,11 +373,14 @@
 void
 KGreeter::slotUserEntered()
 {
-	if (userView) {
+	struct passwd *pw;
+
+	if (userView && (pw = getpwnam( curUser.toLocal8Bit().data() ))) {
+		QString theUser = QString::fromLocal8Bit( pw->pw_name );
 		for (int i = 0, rc = userView->model()->rowCount(); i < rc; i++) {
 			UserListViewItem *item =
 				static_cast<UserListViewItem *>(userView->item( i ));
-			if (item->login == curUser) {
+			if (item->login == theUser) {
 				userView->setCurrentItem( item );
 				goto oke;
 			}
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic