Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 01 Apr 1999 13:24:41 -0500
From:      "Andrew J. Korty" <ajk@purdue.edu>
To:        hackers@freebsd.org
Subject:   [PATCH] Auto-login support for getty
Message-ID:  <199904011824.NAA28557@poynting.physics.purdue.edu>

next in thread | raw e-mail | index | archive | help
------- =_aaaaaaaaaa0
Content-Type: text/plain; charset="us-ascii"
Content-ID: <28550.922991081.1@physics.purdue.edu>

We run a localism called "autologin" that does nothing more than
keep a shell up on the console.  It runs on all our servers, whose
consoles are connected to our console server.  Autologin is run
from /etc/ttys, so when the shell exits, another one pops up.  This
way, we're almost guaranteed to have a root shell.  (Physical and
network access to the console server is controlled, of course.)

When porting autologin to FreeBSD, we noticed that it has to
replicate much code that already exists in getty.  My colleague
remarked that we ought to just add an option to getty to do what
we want.  So I did, and I'm presenting the results here because I
think it would be a worthwhile commit.  (I don't have privs.)

This patch adds a string capability ("al") to getty.  Setting it
to a username gives you a persistent shell without prompting for
login or password.  The code is very simple; it just passes the -f
option to the login program.  These are against 3.1-RELEASE; if
newer diffs are needed, I can do that.

One more upshot: if you have an operations staff, they can be root
on console without having to know the root password.  When a crisis
occurs, you can call the op center and talk them through.

Andrew J. Korty, Director     http://www.physics.purdue.edu/~ajk/
Physics Computer Network            85 73 1F 04 63 D9 9D 65       
Purdue University                   65 2E 7A A8 81 8C 45 75

------- =_aaaaaaaaaa0
Content-Type: application/x-patch
Content-ID: <28550.922991081.2@physics.purdue.edu>
Content-Description: Auto-login support for getty

? autologin.diff
Index: gettytab.5
===================================================================
RCS file: /project/cvs/PCN/freebsd/src/libexec/getty/gettytab.5,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- gettytab.5	1998/12/03 15:38:11	1.1.1.1
+++ gettytab.5	1999/04/01 13:18:50	1.2
@@ -79,6 +79,7 @@
 .Bl -column Namexx /usr/bin/login Default
 .It Sy Name	Type	Default	Description
 .It "ac	str	unused	expect-send chat script for modem answer"
+.It "al	str	unused	user to auto-login instead of prompting"
 .It "ap	bool	false	terminal uses any parity"
 .It "bk	str	0377	alternate end of line character (input break)"
 .It "c0	num	unused	tty control flags to write messages"
Index: gettytab.h
===================================================================
RCS file: /project/cvs/PCN/freebsd/src/libexec/getty/gettytab.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- gettytab.h	1998/12/03 15:38:11	1.1.1.1
+++ gettytab.h	1999/04/01 13:18:50	1.2
@@ -90,6 +90,7 @@
 #define IF	gettystrs[26].value
 #define IC	gettystrs[27].value
 #define AC	gettystrs[28].value
+#define AL	gettystrs[29].value
 
 /*
  * Numeric definitions.
Index: init.c
===================================================================
RCS file: /project/cvs/PCN/freebsd/src/libexec/getty/init.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- init.c	1998/12/03 15:38:11	1.1.1.1
+++ init.c	1999/04/01 13:18:50	1.2
@@ -83,6 +83,7 @@
 	{ "if" },			/* sysv-like 'issue' filename */
 	{ "ic" },			/* modem init-chat */
 	{ "ac" },			/* modem answer-chat */
+	{ "al" },			/* user to auto-login */
 	{ 0 }
 };
 
Index: main.c
===================================================================
RCS file: /project/cvs/PCN/freebsd/src/libexec/getty/main.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- main.c	1998/12/03 15:38:11	1.1.1.1
+++ main.c	1999/04/01 13:18:51	1.2
@@ -348,13 +348,29 @@
 			signal(SIGALRM, dingdong);
 			alarm(TO);
 		}
-		if ((rval = getname()) == 2) {
+		if (AL) {
+			const char *p = AL;
+			char *q = name;
+			int n = sizeof name;
+
+			while (*p && q < &name[sizeof name - 1]) {
+				if (isupper(*p))
+					upper = 1;
+				else if (islower(*p))
+					lower = 1;
+				else if (isdigit(*p))
+					digit++;
+				*q++ = *p++;
+			}
+		} else
+			rval = getname();
+		if (rval == 2) {
 			oflush();
 			alarm(0);
 			execle(PP, "ppplogin", ttyn, (char *) 0, env);
 			syslog(LOG_ERR, "%s: %m", PP);
 			exit(1);
-		} else if (rval) {
+		} else if (rval || AL) {
 			register int i;
 
 			oflush();
@@ -389,7 +405,8 @@
 			limit.rlim_max = RLIM_INFINITY;
 			limit.rlim_cur = RLIM_INFINITY;
 			(void)setrlimit(RLIMIT_CPU, &limit);
-			execle(LO, "login", "-p", name, (char *) 0, env);
+			execle(LO, "login", AL ? "-fp" : "-p", name,
+			    (char *) 0, env);
 			syslog(LOG_ERR, "%s: %m", LO);
 			exit(1);
 		}

------- =_aaaaaaaaaa0--


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




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