fix group initialization for eight character login names
[unix-history] / usr / src / usr.bin / login / login.c
index 5cc8ce2..67385e8 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)login.c     4.15 82/03/27";
+static char *sccsid = "@(#)login.c     4.17 82/05/19";
 /*
  * login [ name ]
  * login -r
 /*
  * login [ name ]
  * login -r
@@ -73,6 +73,7 @@ struct        ltchars ltc = {
 int    rflag;
 char   rusername[NMAX+1], lusername[NMAX+1];
 char   rpassword[NMAX+1];
 int    rflag;
 char   rusername[NMAX+1], lusername[NMAX+1];
 char   rpassword[NMAX+1];
+char   name[NMAX+1];
 char   *rhost;
 
 main(argc, argv)
 char   *rhost;
 
 main(argc, argv)
@@ -111,7 +112,7 @@ char **argv;
                                printf("%s: No such user\r\n", lusername);
                        goto abnormal;
                }
                                printf("%s: No such user\r\n", lusername);
                        goto abnormal;
                }
-               hostf = fopen("/etc/hosts.equiv", "r");
+               hostf = pwd->pw_uid ? fopen("/etc/hosts.equiv", "r") : 0;
        again:
                if (hostf) {
                  char ahost[32];
        again:
                if (hostf) {
                  char ahost[32];
@@ -297,7 +298,9 @@ normal:
        }
        chown(ttyn, pwd->pw_uid, pwd->pw_gid);
        setgid(pwd->pw_gid);
        }
        chown(ttyn, pwd->pw_uid, pwd->pw_gid);
        setgid(pwd->pw_gid);
-       inigrp(utmp.ut_name, pwd->pw_gid);
+       strncpy(name, utmp.ut_name, NMAX);
+       name[NMAX] = '\0';
+       inigrp(name, pwd->pw_gid);
        setuid(pwd->pw_uid);
        environ = envinit;
        strncat(homedir, pwd->pw_dir, sizeof(homedir)-6);
        setuid(pwd->pw_uid);
        environ = envinit;
        strncat(homedir, pwd->pw_dir, sizeof(homedir)-6);
@@ -337,19 +340,19 @@ normal:
 int    stopmotd;
 catch()
 {
 int    stopmotd;
 catch()
 {
+
        signal(SIGINT, SIG_IGN);
        stopmotd++;
 }
 
        signal(SIGINT, SIG_IGN);
        stopmotd++;
 }
 
-/*
- * return true if OK for root to login on this terminal
- */
 rootterm(tty)
 rootterm(tty)
-       char    *tty;
+       char *tty;
 {
        register FILE *fd;
 {
        register FILE *fd;
-       char    buf[100];
+       char buf[100];
 
 
+       if (rflag)
+               return(1);
        if ((fd = fopen(securetty, "r")) == NULL)
                return(1);
        while (fgets(buf, sizeof buf, fd) != NULL) {
        if ((fd = fopen(securetty, "r")) == NULL)
                return(1);
        while (fgets(buf, sizeof buf, fd) != NULL) {