From 28189d80695e320c4bf014232e279671182b502e Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Mon, 24 Feb 2020 18:53:46 +0100 Subject: pam_shells: Recognize /bin/sh as the default shell. If the shell is empty in /etc/passwd entry it means /bin/sh. * modules/pam_shells/pam_shells.c (perform_check): Use /bin/sh as default shell. --- modules/pam_shells/pam_shells.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'modules/pam_shells') diff --git a/modules/pam_shells/pam_shells.c b/modules/pam_shells/pam_shells.c index bfe7f116..ae67a423 100644 --- a/modules/pam_shells/pam_shells.c +++ b/modules/pam_shells/pam_shells.c @@ -2,6 +2,8 @@ #define SHELL_FILE "/etc/shells" +#define DEFAULT_SHELL "/bin/sh" + /* * by Erik Troan , Red Hat Software. * August 5, 1996. @@ -37,7 +39,7 @@ static int perform_check(pam_handle_t *pamh) { int retval = PAM_AUTH_ERR; const char *userName; - char *userShell; + const char *userShell; char shellFileLine[256]; struct stat sb; struct passwd * pw; @@ -61,10 +63,12 @@ static int perform_check(pam_handle_t *pamh) } pw = pam_modutil_getpwnam(pamh, userName); - if (!pw) { + if (pw == NULL || pw->pw_shell == NULL) { return PAM_AUTH_ERR; /* user doesn't exist */ } userShell = pw->pw_shell; + if (userShell[0] == '\0') + userShell = DEFAULT_SHELL; if (stat(SHELL_FILE,&sb)) { pam_syslog(pamh, LOG_ERR, "Cannot stat %s: %m", SHELL_FILE); -- cgit v1.2.3