first pass for new make
[unix-history] / usr / src / libexec / getty / main.c
index aab4817..03a561d 100644 (file)
@@ -11,7 +11,7 @@ char copyright[] =
 #endif not lint
 
 #ifndef lint
 #endif not lint
 
 #ifndef lint
-static char sccsid[] = "@(#)main.c     5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)main.c     5.7 (Berkeley) %G%";
 #endif not lint
 
 /*
 #endif not lint
 
 /*
@@ -118,7 +118,7 @@ main(argc, argv)
 /*
        signal(SIGQUIT, SIG_DFL);
 */
 /*
        signal(SIGQUIT, SIG_DFL);
 */
-       openlog("getty", LOG_ODELAY|LOG_CONS, 0);
+       openlog("getty", LOG_ODELAY|LOG_CONS, LOG_AUTH);
        gethostname(hostname, sizeof(hostname));
        if (hostname[0] == '\0')
                strcpy(hostname, "Amnesiac");
        gethostname(hostname, sizeof(hostname));
        if (hostname[0] == '\0')
                strcpy(hostname, "Amnesiac");
@@ -130,15 +130,20 @@ main(argc, argv)
         * J. Gettys - MIT Project Athena.
         */
        if (argc <= 2 || strcmp(argv[2], "-") == 0)
         * J. Gettys - MIT Project Athena.
         */
        if (argc <= 2 || strcmp(argv[2], "-") == 0)
-               strcpy(ttyn, ttyname(0));
+           strcpy(ttyn, ttyname(0));
        else {
        else {
-               strcpy(ttyn, dev);
-               strncat(ttyn, argv[2], sizeof(ttyn)-sizeof(dev));
+           strcpy(ttyn, dev);
+           strncat(ttyn, argv[2], sizeof(ttyn)-sizeof(dev));
+           if (strcmp(argv[0], "+") != 0) {
                chown(ttyn, 0, 0);
                chmod(ttyn, 0622);
                chown(ttyn, 0, 0);
                chmod(ttyn, 0622);
+               /*
+                * Delay the open so DTR stays down long enough to be detected.
+                */
+               sleep(2);
                while (open(ttyn, O_RDWR) != 0) {
                        if (repcnt % 10 == 0) {
                while (open(ttyn, O_RDWR) != 0) {
                        if (repcnt % 10 == 0) {
-                               syslog(LOG_FAIL, "%s: %m", ttyn);
+                               syslog(LOG_ERR, "%s: %m", ttyn);
                                closelog();
                        }
                        repcnt++;
                                closelog();
                        }
                        repcnt++;
@@ -151,6 +156,7 @@ main(argc, argv)
                dup(1);
                dup(0);
                signal(SIGHUP, SIG_DFL);
                dup(1);
                dup(0);
                signal(SIGHUP, SIG_DFL);
+           }
        }
 
        gettable("default", defent, defstrs);
        }
 
        gettable("default", defent, defstrs);
@@ -160,12 +166,15 @@ main(argc, argv)
                tname = argv[1];
        for (;;) {
                int ldisp = OTTYDISC;
                tname = argv[1];
        for (;;) {
                int ldisp = OTTYDISC;
+               int off = 0;
 
                gettable(tname, tabent, tabstrs);
                if (OPset || EPset || APset)
                        APset++, OPset++, EPset++;
                setdefaults();
                ioctl(0, TIOCFLUSH, 0);         /* clear out the crap */
 
                gettable(tname, tabent, tabstrs);
                if (OPset || EPset || APset)
                        APset++, OPset++, EPset++;
                setdefaults();
                ioctl(0, TIOCFLUSH, 0);         /* clear out the crap */
+               ioctl(0, FIONBIO, &off);        /* turn off non-blocking mode */
+               ioctl(0, FIOASYNC, &off);       /* ditto for asynchronous mode */
                if (IS)
                        tmode.sg_ispeed = speed(IS);
                else if (SP)
                if (IS)
                        tmode.sg_ispeed = speed(IS);
                else if (SP)
@@ -211,6 +220,10 @@ main(argc, argv)
                        oflush();
                        alarm(0);
                        signal(SIGALRM, SIG_DFL);
                        oflush();
                        alarm(0);
                        signal(SIGALRM, SIG_DFL);
+                       if (name[0] == '-') {
+                               puts("login names may not start with '-'.");
+                               continue;
+                       }
                        if (!(upper || lower || digit))
                                continue;
                        allflags = setflags(2);
                        if (!(upper || lower || digit))
                                continue;
                        allflags = setflags(2);
@@ -230,6 +243,7 @@ main(argc, argv)
                                env[i] = environ[i];
                        makeenv(&env[i]);
                        execle(LO, "login", "-p", name, (char *) 0, env);
                                env[i] = environ[i];
                        makeenv(&env[i]);
                        execle(LO, "login", "-p", name, (char *) 0, env);
+                       syslog(LOG_ERR, "%s: %m", LO);
                        exit(1);
                }
                alarm(0);
                        exit(1);
                }
                alarm(0);