--- Linux-PAM-0.75/modules/pam_wheel/pam_wheel.c.orig Wed Jul 31 01:24:03 2002 +++ Linux-PAM-0.75/modules/pam_wheel/pam_wheel.c Wed Jul 31 01:30:36 2002 @@ -162,9 +162,20 @@ fromsu = tpwd->pw_name; } else { fromsu = getlogin(); - if (_pam_getpwnam_r(fromsu, &passwd, &tbuf, &tbuflen, &tpwd) != 0) - tpwd = NULL; - if((!fromsu) || (!tpwd)) { + /* If this one fails, we get a segfault on calling _pam_getpwnam_r(), + * so rather revert to behavior as with "ctrl & PAM_USE_UID_ARG" + */ + if (!fromsu) { + if (_pam_getpwuid_r(getuid(), &passwd, &tbuf, &tbuflen, &tpwd) != 0) + tpwd = NULL; + if (tpwd) { + fromsu = tpwd->pw_name; + } + } else { + if (_pam_getpwnam_r(fromsu, &passwd, &tbuf, &tbuflen, &tpwd) != 0) + tpwd = NULL; + } + if (!tpwd) { if (ctrl & PAM_DEBUG_ARG) _pam_log(LOG_NOTICE,"who is running me ?!"); return PAM_SERVICE_ERR;