first pass for new make
[unix-history] / usr / src / libexec / getty / main.c
index 99b1e97..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.4 (Berkeley) %G%";
+static char sccsid[] = "@(#)main.c     5.7 (Berkeley) %G%";
 #endif not lint
 
 /*
 #endif not lint
 
 /*
@@ -130,10 +130,11 @@ 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);
                /*
@@ -155,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);
@@ -164,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)
@@ -215,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);
@@ -234,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);