From f25c18d7e8810ad94c7d2030cb0427e22745531e Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 7 Jan 2003 17:38:58 +1100 Subject: [PATCH] - (djm) Bug #178: On AIX /etc/nologin wasnt't shown to users. Fix from Ralf.Wenk@fh-karlsruhe.de and dtucker@zip.com.au --- ChangeLog | 4 +++- auth.c | 10 ++++++++-- session.c | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c7bfaca0..890b16210 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,8 @@ on one by peak@argo.troja.mff.cuni.cz - (djm) Bug #111: Run syslog and stderr logging through strnvis to eliminate nasties. Report from peak@argo.troja.mff.cuni.cz + - (djm) Bug #178: On AIX /etc/nologin wasnt't shown to users. Fix from + Ralf.Wenk@fh-karlsruhe.de and dtucker@zip.com.au 20030103 - (djm) Bug #461: ssh-copy-id fails with no arguments. Patch from @@ -938,4 +940,4 @@ save auth method before monitor_reset_key_state(); bugzilla bug #284; ok provos@ -$Id: ChangeLog,v 1.2546 2003/01/07 06:04:18 djm Exp $ +$Id: ChangeLog,v 1.2547 2003/01/07 06:38:58 djm Exp $ diff --git a/auth.c b/auth.c index ee21149df..7deded205 100644 --- a/auth.c +++ b/auth.c @@ -218,6 +218,8 @@ allowed_user(struct passwd * pw) */ if ( (pw->pw_uid != 0) && (geteuid() == 0) && loginrestrictions(pw->pw_name, S_RLOGIN, NULL, &loginmsg) != 0) { + int loginrestrict_errno = errno; + if (loginmsg && *loginmsg) { /* Remove embedded newlines (if any) */ char *p; @@ -227,9 +229,13 @@ allowed_user(struct passwd * pw) } /* Remove trailing newline */ *--p = '\0'; - log("Login restricted for %s: %.100s", pw->pw_name, loginmsg); + log("Login restricted for %s: %.100s", pw->pw_name, + loginmsg); } - return 0; + /* Don't fail if /etc/nologin set */ + if (!(loginrestrict_errno == EPERM && + stat(_PATH_NOLOGIN, &st) == 0)) + return 0; } #endif /* WITH_AIXAUTHENTICATE */ diff --git a/session.c b/session.c index 9832d7a83..c16cdcc13 100644 --- a/session.c +++ b/session.c @@ -1194,6 +1194,7 @@ do_nologin(struct passwd *pw) while (fgets(buf, sizeof(buf), f)) fputs(buf, stderr); fclose(f); + fflush(NULL); exit(254); } }