[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