svn commit: trunk/busybox: libbb loginutils

vda at busybox.net vda at busybox.net
Tue Oct 31 17:34:45 UTC 2006


Author: vda
Date: 2006-10-31 09:34:44 -0800 (Tue, 31 Oct 2006)
New Revision: 16477

Log:
login: re-enable Ctrl-^C before execing shell.


Modified:
   trunk/busybox/libbb/change_identity.c
   trunk/busybox/libbb/login.c
   trunk/busybox/loginutils/login.c


Changeset:
Modified: trunk/busybox/libbb/change_identity.c
===================================================================
--- trunk/busybox/libbb/change_identity.c	2006-10-31 15:55:56 UTC (rev 16476)
+++ trunk/busybox/libbb/change_identity.c	2006-10-31 17:34:44 UTC (rev 16477)
@@ -28,14 +28,6 @@
  * SUCH DAMAGE.
  */
 
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <ctype.h>
-
 #include "libbb.h"
 
 
@@ -44,8 +36,7 @@
 {
 	if (initgroups(pw->pw_name, pw->pw_gid) == -1)
 		return "cannot set groups";
-	endgrent();
-
+	endgrent(); /* ?? */
 	xsetgid(pw->pw_gid);
 	xsetuid(pw->pw_uid);
 	return NULL;
@@ -55,6 +46,6 @@
 {
 	const char *err_msg = change_identity_e2str(pw);
 
-	if(err_msg)
+	if (err_msg)
 		bb_perror_msg_and_die("%s", err_msg);
 }

Modified: trunk/busybox/libbb/login.c
===================================================================
--- trunk/busybox/libbb/login.c	2006-10-31 15:55:56 UTC (rev 16476)
+++ trunk/busybox/libbb/login.c	2006-10-31 17:34:44 UTC (rev 16477)
@@ -36,83 +36,70 @@
 
 	puts("\r");	/* start a new line */
 
-	if ((fd = fopen(issue_file, "r"))) {
-		while ((c = fgetc(fd)) != EOF) {
-			outbuf = buf;
-			buf[0] = c;
-			if(c == '\n') {
-				buf[1] = '\r';
-				buf[2] = 0;
-			} else {
-				buf[1] = 0;
+	fd = fopen(issue_file, "r");
+	if (!fd)
+		return;
+	while ((c = fgetc(fd)) != EOF) {
+		outbuf = buf;
+		buf[0] = c;
+		buf[1] = '\0';
+		if(c == '\n') {
+			buf[1] = '\r';
+			buf[2] = '\0';
+		}
+		if (c == '\\' || c == '%') {
+			c = fgetc(fd);
+			switch (c) {
+			case 's':
+				outbuf = uts.sysname;
+				break;
+			case 'n':
+				outbuf = uts.nodename;
+				break;
+			case 'r':
+				outbuf = uts.release;
+				break;
+			case 'v':
+				outbuf = uts.version;
+				break;
+			case 'm':
+				outbuf = uts.machine;
+				break;
+			case 'D':
+			case 'o':
+				c = getdomainname(buf, sizeof(buf) - 1);
+				buf[c >= 0 ? c : 0] = '\0';
+				break;
+			case 'd':
+				strftime(buf, sizeof(buf), fmtstr_d, localtime(&t));
+				break;
+			case 't':
+				strftime(buf, sizeof(buf), fmtstr_t, localtime(&t));
+				break;
+			case 'h':
+				gethostname(buf, sizeof(buf) - 1);
+				buf[sizeof(buf) - 1] = '\0';
+				break;
+			case 'l':
+				outbuf = tty;
+				break;
+			default:
+				buf[0] = c;
 			}
-			if (c == '\\' || c == '%') {
-				c = fgetc(fd);
-				switch (c) {
-					case 's':
-						outbuf = uts.sysname;
-						break;
-
-					case 'n':
-						outbuf = uts.nodename;
-						break;
-
-					case 'r':
-						outbuf = uts.release;
-						break;
-
-					case 'v':
-						outbuf = uts.version;
-						break;
-
-					case 'm':
-						outbuf = uts.machine;
-						break;
-
-					case 'D':
-					case 'o':
-						c = getdomainname(buf, sizeof(buf) - 1);
-						buf[c >= 0 ? c : 0] = '\0';
-						break;
-
-					case 'd':
-						strftime(buf, sizeof(buf), fmtstr_d, localtime(&t));
-						break;
-
-					case 't':
-						strftime(buf, sizeof(buf), fmtstr_t, localtime(&t));
-						break;
-
-					case 'h':
-						gethostname(buf, sizeof(buf) - 1);
-						buf[sizeof(buf) - 1] = '\0';
-						break;
-
-					case 'l':
-						outbuf = tty;
-						break;
-
-					default:
-						buf[0] = c;
-				}
-			}
-			fputs(outbuf, stdout);
 		}
-
-		fclose(fd);
-
-		fflush(stdout);
+		fputs(outbuf, stdout);
 	}
+	fclose(fd);
+	fflush(stdout);
 }
 
 void print_login_prompt(void)
 {
 	char buf[MAXHOSTNAMELEN+1];
 
-	if(gethostname(buf, MAXHOSTNAMELEN) == 0)
+	if (gethostname(buf, MAXHOSTNAMELEN) == 0)
 		fputs(buf, stdout);
 
 	fputs(LOGIN, stdout);
 	fflush(stdout);
 }
-

Modified: trunk/busybox/loginutils/login.c
===================================================================
--- trunk/busybox/loginutils/login.c	2006-10-31 15:55:56 UTC (rev 16476)
+++ trunk/busybox/loginutils/login.c	2006-10-31 17:34:44 UTC (rev 16477)
@@ -342,6 +342,7 @@
 	fchown(0, pw->pw_uid, pw->pw_gid);
 	fchmod(0, 0600);
 
+	/* TODO: be nommu-friendly, use spawn? */
 	if (ENABLE_LOGIN_SCRIPTS) {
 		char *script = getenv("LOGIN_PRE_SUID_SCRIPT");
 		if (script) {
@@ -370,7 +371,6 @@
 	setup_environment(tmp, 1, !(opt & LOGIN_OPT_p), pw);
 
 	motd();
-	signal(SIGALRM, SIG_DFL);	/* default alarm signal */
 
 	if (pw->pw_uid == 0)
 		syslog(LOG_INFO, "root login%s", fromhost);
@@ -379,7 +379,17 @@
 	 * but let's play the game for now */
 	set_current_security_context(user_sid);
 #endif
-	run_shell(tmp, 1, 0, 0);	/* exec the shell finally. */
 
+	// util-linux login also does:
+	// /* start new session */
+	// setsid();
+	// /* TIOCSCTTY: steal tty from other process group */
+	// if (ioctl(0, TIOCSCTTY, 1)) error_msg...
+
+	signal(SIGALRM, SIG_DFL); /* set signals to defaults */
+	signal(SIGINT, SIG_DFL);
+
+	run_shell(tmp, 1, 0, 0);	/* exec the shell finally */
+
 	return EXIT_FAILURE;
 }




More information about the busybox-cvs mailing list