Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Aug 2002 14:57:20 +0400
From:      "Andrey A. Chernov" <ache@nagual.pp.ru>
To:        current@freebsd.org, des@freebsd.org
Subject:   CFR: openssh, login_cap bugfix, mail check adding patch
Message-ID:  <20020805105719.GA2404@nagual.pp.ru>

next in thread | raw e-mail | index | archive | help
Please review.

1) Do all login cap calls _before_ all descriptors closed hardly, because 
this may invalidate login cap calls especially when login.conf is 
database.

2) Add traditional login-like mail check (see PR 41328)

(all this was in old openssh we have for ages but lost in the merge of new 
version)

--- session.c.old	Sat Jul 27 00:56:22 2002
+++ session.c	Mon Aug  5 14:46:40 2002
@@ -1288,6 +1288,9 @@
 	const char *shell, *shell0, *hostname = NULL;
 	struct passwd *pw = s->pw;
 	u_int i;
+#ifdef HAVE_LOGIN_CAP
+	int lc_requirehome, lc_nocheckmail;
+#endif
 
 	/* remove hostkey from the child's memory */
 	destroy_sensitive_data();
@@ -1346,6 +1349,11 @@
 	/* XXX better use close-on-exec? -markus */
 	channel_close_all();
 
+#ifdef HAVE_LOGIN_CAP
+	lc_requirehome = login_getcapbool(lc, "requirehome", 0);
+	lc_nocheckmail = login_getcapbool(lc, "nocheckmail", 0);
+	login_close(lc);
+#endif
 	/*
 	 * Close any extra file descriptors.  Note that there may still be
 	 * descriptors left by system functions.  They will be closed later.
@@ -1384,7 +1392,7 @@
 		fprintf(stderr, "Could not chdir to home directory %s: %s\n",
 		    pw->pw_dir, strerror(errno));
 #ifdef HAVE_LOGIN_CAP
-		if (login_getcapbool(lc, "requirehome", 0))
+		if (lc_requirehome)
 			exit(1);
 #endif
 	}
@@ -1422,6 +1430,28 @@
 			errno = EINVAL;
 			perror(shell);
 			exit(1);
+		}
+
+		/*
+		 * Check for mail if we have a tty.
+		 */
+		if (s->ttyfd != -1
+#ifdef HAVE_LOGIN_CAP
+		    && !lc_nocheckmail
+#endif
+		   ) {
+			char *mailbox;
+			struct stat mailstat;
+
+			mailbox = getenv("MAIL");
+			if (mailbox != NULL) {
+				if (stat(mailbox, &mailstat) != 0 || mailstat.st_size == 0)
+					;
+				else if (mailstat.st_mtime < mailstat.st_atime)
+					printf("You have mail.\n");
+				else
+					printf("You have new mail.\n");
+			}
 		}
 
 		/* Execute the shell. */
-- 
Andrey A. Chernov
http://ache.pp.ru/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020805105719.GA2404>