add offsets, new fields
[unix-history] / usr / src / usr.bin / login / login.c
index d8e5a44..8df6e18 100644 (file)
@@ -11,7 +11,7 @@ char copyright[] =
 #endif not lint
 
 #ifndef lint
 #endif not lint
 
 #ifndef lint
-static char sccsid[] = "@(#)login.c    5.14 (Berkeley) %G%";
+static char sccsid[] = "@(#)login.c    5.16 (Berkeley) %G%";
 #endif not lint
 
 /*
 #endif not lint
 
 /*
@@ -38,8 +38,8 @@ static char sccsid[] = "@(#)login.c   5.14 (Berkeley) %G%";
 #include <syslog.h>
 #include <grp.h>
 
 #include <syslog.h>
 #include <grp.h>
 
-#define WRITENAME      "write"         /* name of group to own ttys */
-#define WRITEGID(gid)  write_gid(gid)  /* gid that owns all ttys */
+#define TTYGRPNAME     "tty"           /* name of group to own ttys */
+#define TTYGID(gid)    tty_gid(gid)    /* gid that owns all ttys */
 
 #define        SCMPN(a, b)     strncmp(a, b, sizeof(a))
 #define        SCPYN(a, b)     strncpy(a, b, sizeof(a))
 
 #define        SCMPN(a, b)     strncmp(a, b, sizeof(a))
 #define        SCPYN(a, b)     strncpy(a, b, sizeof(a))
@@ -91,6 +91,7 @@ int   usererr = -1;
 char   rusername[NMAX+1], lusername[NMAX+1];
 char   rpassword[NMAX+1];
 char   name[NMAX+1];
 char   rusername[NMAX+1], lusername[NMAX+1];
 char   rpassword[NMAX+1];
 char   name[NMAX+1];
+char   me[MAXHOSTNAMELEN];
 char   *rhost;
 
 main(argc, argv)
 char   *rhost;
 
 main(argc, argv)
@@ -103,6 +104,7 @@ main(argc, argv)
        char *ttyn, *tty;
        int ldisc = 0, zero = 0, i;
        char **envnew;
        char *ttyn, *tty;
        int ldisc = 0, zero = 0, i;
        char **envnew;
+       char *p, *domain, *index();
 
        signal(SIGALRM, timedout);
        alarm(timeout);
 
        signal(SIGALRM, timedout);
        alarm(timeout);
@@ -116,6 +118,8 @@ main(argc, argv)
         * -h is used by other servers to pass the name of the
         * remote host to login so that it may be placed in utmp and wtmp
         */
         * -h is used by other servers to pass the name of the
         * remote host to login so that it may be placed in utmp and wtmp
         */
+       (void) gethostname(me, sizeof(me));
+       domain = index(me, '.');
        while (argc > 1) {
                if (strcmp(argv[1], "-r") == 0) {
                        if (rflag || hflag) {
        while (argc > 1) {
                if (strcmp(argv[1], "-r") == 0) {
                        if (rflag || hflag) {
@@ -124,6 +128,8 @@ main(argc, argv)
                        }
                        rflag = 1;
                        usererr = doremotelogin(argv[2]);
                        }
                        rflag = 1;
                        usererr = doremotelogin(argv[2]);
+                       if ((p = index(argv[2], '.')) && strcmp(p, domain) == 0)
+                               *p = 0;
                        SCPYN(utmp.ut_host, argv[2]);
                        argc -= 2;
                        argv += 2;
                        SCPYN(utmp.ut_host, argv[2]);
                        argc -= 2;
                        argv += 2;
@@ -135,6 +141,8 @@ main(argc, argv)
                                exit(1);
                        }
                        hflag = 1;
                                exit(1);
                        }
                        hflag = 1;
+                       if ((p = index(argv[2], '.')) && strcmp(p, domain) == 0)
+                               *p = 0;
                        SCPYN(utmp.ut_host, argv[2]);
                        argc -= 2;
                        argv += 2;
                        SCPYN(utmp.ut_host, argv[2]);
                        argc -= 2;
                        argv += 2;
@@ -328,7 +336,7 @@ main(argc, argv)
                write(f, (char *) &ll, sizeof ll);
                close(f);
        }
                write(f, (char *) &ll, sizeof ll);
                close(f);
        }
-       chown(ttyn, pwd->pw_uid, WRITEGID(pwd->pw_gid));
+       chown(ttyn, pwd->pw_uid, TTYGID(pwd->pw_gid));
        if (!hflag && !rflag)                                   /* XXX */
                ioctl(0, TIOCSWINSZ, &win);
        chmod(ttyn, 0620);
        if (!hflag && !rflag)                                   /* XXX */
                ioctl(0, TIOCSWINSZ, &win);
        chmod(ttyn, 0620);
@@ -571,13 +579,13 @@ setenv(var, value, clobber)
        environ[++index] = NULL;
 }
 
        environ[++index] = NULL;
 }
 
-write_gid(default_gid)
+tty_gid(default_gid)
        int default_gid;
 {
        struct group *getgrnam(), *gr;
        int gid = default_gid;
 
        int default_gid;
 {
        struct group *getgrnam(), *gr;
        int gid = default_gid;
 
-       gr = getgrnam(WRITENAME);
+       gr = getgrnam(TTYGRPNAME);
        if (gr != (struct group *) 0)
                gid = gr->gr_gid;
 
        if (gr != (struct group *) 0)
                gid = gr->gr_gid;