diff -Nur getty_ps-2.0.7j/Makefile getty_ps-2.0.7j.pld/Makefile --- getty_ps-2.0.7j/Makefile Tue Jan 23 17:07:04 1996 +++ getty_ps-2.0.7j.pld/Makefile Thu Jun 10 16:34:45 1999 @@ -8,22 +8,23 @@ # be expected in /etc/conf.* rather than /etc/default, modem locks # will be created in /var/lock, and binaries will go in /sbin. # -# FSSTND=-DFSSTND +FSSTND=-DFSSTND SHELL= /bin/sh CC= gcc #CFLAGS= -g -fpcc-struct-return ${FSSTND} #LFLAGS= -g -CFLAGS= -O3 -fomit-frame-pointer -fpcc-struct-return ${FSSTND} +CFLAGS= $(OPT) -fpcc-struct-return ${FSSTND} LFLAGS= -s -LIBS= -ltermcap +LIBS= -lcurses LLIBS= # where things go -BIN= /sbin -UUBIN= /sbin +BIN= $(TOPDIR)/sbin +UUBIN= $(TOPDIR)/sbin +MANDIR= $(TOPDIR)/usr/share/man/man # what are we making SRC= main.c funcs.c defaults.c table.c utmp2.c @@ -48,9 +49,15 @@ install: -mv $(BIN)/getty $(BIN)/getty- -mv $(UUBIN)/uugetty $(UUBIN)/uugetty- - -cp getty $(BIN) - -cp uugetty $(UUBIN) - chmod 700 $(BIN)/getty $(UUBIN)/uugetty + -install -s -m 0755 getty $(BIN) + -install -s -m 0755 uugetty $(UUBIN) +ifdef FSSTND + mv man/getty.1 man/getty.1x + cat man/getty.1x |\ + sed -e 's,/etc/default/,/etc/conf.,g'> man/getty.1 +endif + install -m 644 man/getty.1 $(MANDIR)1 + install -m 644 man/gettydefs.5 $(MANDIR)5 clean: rm -f *.o core *.out *~ .depend Make.Log Makefile.old diff -Nur getty_ps-2.0.7j/config.h getty_ps-2.0.7j.pld/config.h --- getty_ps-2.0.7j/config.h Sat May 21 07:11:24 1994 +++ getty_ps-2.0.7j.pld/config.h Thu Jun 10 16:30:28 1999 @@ -27,14 +27,14 @@ #define index strchr /* use these instead */ #define rindex strrchr -typedef void sig_t; +/*typedef void sig_t;*/ #ifndef UTMP_FILE -#define UTMP_FILE "/etc/utmp" /* name of the utmp file */ +#define UTMP_FILE "/var/run/utmpx" /* name of the utmp file */ #endif /* UTMP_FILE */ #ifndef WTMP_FILE -#define WTMP_FILE "/var/adm/wtmp" /* FSSTND compliant wtmp file */ +#define WTMP_FILE "/var/log/wtmpx" /* FSSTND compliant wtmp file */ #endif /* WTMP_FILE */ #if 0 @@ -46,8 +46,8 @@ #define ASCIIPID /* PID stored in ASCII */ #define BOTHPID /* ... or perhaps not */ -#define UUCPID 11 /* uid of UUCP account */ -#define LOCK "/usr/spool/uucp/LCK..%s" /* lock file name */ +#define UUCPID "uucp" /* uid of UUCP account */ +#define LOCK "/var/lock/LCK..%s" /* lock file name */ diff -Nur getty_ps-2.0.7j/extern.h getty_ps-2.0.7j.pld/extern.h --- getty_ps-2.0.7j/extern.h Tue May 17 05:38:52 1994 +++ getty_ps-2.0.7j.pld/extern.h Thu Jun 10 16:30:28 1999 @@ -38,12 +38,7 @@ /* Global variables */ -#ifdef MAIN EXTERN char MsgBuf[80]; /* message buffer */ -#else -EXTERN char MsgBuf[]; -#endif /* MAIN */ - EXTERN boolean AutoBaud; /* autobauding requested? */ EXTERN char AutoRate[16]; /* AutoBaud digits buffer */ EXTERN boolean Check; /* check a gettytab file? */ @@ -79,10 +74,6 @@ extern unsigned alarm(), sleep(); extern time_t time(); #endif - -#ifndef STRDUP /* Is There In Truth No Strdup() ? */ -extern char *strdup(); -#endif /* STRDUP */ #ifndef GETUTENT /* How about getutent() ? */ extern struct utmp *getutent(); diff -Nur getty_ps-2.0.7j/funcs.c getty_ps-2.0.7j.pld/funcs.c --- getty_ps-2.0.7j/funcs.c Tue May 17 09:33:36 1994 +++ getty_ps-2.0.7j.pld/funcs.c Thu Jun 10 16:30:28 1999 @@ -70,7 +70,7 @@ char c, n, tbuf[16], ubuf[32]; time_t clock; struct tm *lt, *localtime(); - char *month_name[] = { "January", "February", "March", "April", +static char *month_name[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; @@ -226,8 +226,15 @@ /* set c_cc[] chars to reasonable values */ +#ifdef _POSIX_VDISABLE +#if _POSIX_VDISABLE != -1 for (i=0; i < NCC; i++) - setterm.c_cc[i] = CNUL; + setterm.c_cc[i] = _POSIX_VDISABLE; +#else + for (i=0; i < NCC; i++) + setterm.c_cc[i] = 0; +#endif +#endif setterm.c_cc[VINTR] = Cintr; setterm.c_cc[VQUIT] = CQUIT; setterm.c_cc[VERASE] = Cerase; @@ -402,6 +409,7 @@ } while ((ch = *s++)) { + int i; if (ch == '\\') { switch (*s) { case 'p': /* '\p' == pause */ @@ -424,20 +432,22 @@ break; } } - sprintf(MsgBuf + strlen(MsgBuf), ch < ' ' ? "^%c" : "%c", + /* check if we have enough room for Msg */ + if ((i=strlen(MsgBuf))>sizeof(MsgBuf)-3) { + debug(D_INIT, MsgBuf); + MsgBuf[i=0] = '\0'; + } + sprintf(MsgBuf + i, ch < ' ' ? "^%c" : "%c", ch < ' ' ? ch | 0100 : ch); if (putc(ch, stdout) == EOF) { retval = FAIL; break; } } - strcat(MsgBuf, ") -- "); if(retval == SUCCESS) - strcat(MsgBuf, "OK"); + debug(D_INIT, "%s) -- OK", MsgBuf); else - sprintf(MsgBuf + strlen(MsgBuf), - "Failed: %s", strerror(errno)); - debug(D_INIT, MsgBuf); + debug(D_INIT, "%s) -- Failed: %s", MsgBuf, strerror(errno)); return(retval); } @@ -456,7 +466,7 @@ register int expfail = EXPFAIL; register retval = FAIL; char ch, *p, word[MAXLINE+1], buf[MAXBUF]; - sig_t (*oldalarm)() = NULL; + sig_t oldalarm = NULL; if (strequal(s, "\"\"")) { /* ("") used as a place holder */ debug(D_INIT, "EXPECT: ([nothing])"); @@ -465,7 +475,7 @@ /* look for escape chars in expected word */ - for (p = word; (ch = (*s++ & 0177));) { + for (p = word; (ch = (*s++ & 0177)) && p<&word[MAXLINE+1];) { if (ch == '\\') { if (*s == 'A') { /* spot for AutoBaud digits */ *p++ = AUTOBD; @@ -495,12 +505,24 @@ oldalarm = signal(SIGALRM, expalarm); (void) alarm((unsigned) expfail); - sprintf(MsgBuf, "EXPECT: <%d> (%s), GOT: ", expfail, dprint(word)); + debug(D_INIT, "EXPECT: <%d> (%s)", expfail, dprint(word)); + MsgBuf[0] = '\0'; p = buf; while ((ch = getc(stdin)) != EOF) { - sprintf(MsgBuf + strlen(MsgBuf), ch < ' ' ? "^%c" : "%c", + /* check if we have enough room for Msg */ + if ((i=strlen(MsgBuf))>sizeof(MsgBuf)-3) { + debug(D_INIT, "GOT: %s", MsgBuf); + MsgBuf[i=0] = '\0'; + } + sprintf(MsgBuf + i, ch < ' ' ? "^%c" : "%c", ch < ' ' ? ch | 0100 : ch); + /* check if we have enough room */ + if (p==&buf[MAXBUF]) { + /* oops, move back HALF the buffer */ + p = &buf[MAXBUF/2]; + strcpy(buf,p); + } *p++ = (char) ((int) ch & 0177); *p = '\0'; if (strlen(buf) >= strlen(word)) { @@ -515,7 +537,7 @@ } (void) alarm((unsigned) 0); (void) signal(SIGALRM, oldalarm); - debug(D_INIT, "%s -- %s", MsgBuf, + debug(D_INIT, "GOT: %s -- %s", MsgBuf, (retval == SUCCESS) ? "got it" : "Failed"); return(retval); } @@ -563,8 +585,7 @@ ** expalarm() - called when expect()'s SIGALRM goes off */ -sig_t -expalarm() +sig_t expalarm(int sig) { longjmp(env, 1); } @@ -647,7 +668,7 @@ } if (ch == Erase) { if (count) { - (void) fputs((Erase == '\010' ? + (void) fputs((Erase == '\b' ? " \b" : "\b \b"), stdout); (void) fflush(stdout); --p; @@ -814,10 +835,14 @@ { char *p, *fmt, ch; static char msg[1024]; + int i = 0 ; msg[0] = '\0'; p = word; while ((ch = *p++)) { + /* is the buffer big enough */ + if ((i=strlen(msg)) > sizeof(msg)-7) + break; if (ch == AUTOBD) { strcat(msg, "[speed]"); continue; @@ -827,7 +852,7 @@ } else { fmt = "%c"; } - sprintf(msg + strlen(msg), fmt, ch); + sprintf(msg + i, fmt, ch); } return(msg); } Binary files getty_ps-2.0.7j/getty and getty_ps-2.0.7j.pld/getty differ diff -Nur getty_ps-2.0.7j/getty.h getty_ps-2.0.7j.pld/getty.h --- getty_ps-2.0.7j/getty.h Tue May 17 05:39:06 1994 +++ getty_ps-2.0.7j.pld/getty.h Thu Jun 10 16:30:28 1999 @@ -39,7 +39,6 @@ #include "config.h" #include "extern.h" #include "funcs.h" -#include "mytermio.h" /* SMR - gcc was missing a few definitions */ /* General purpose defines */ diff -Nur getty_ps-2.0.7j/main.c getty_ps-2.0.7j.pld/main.c --- getty_ps-2.0.7j/main.c Fri Apr 26 19:26:03 1996 +++ getty_ps-2.0.7j.pld/main.c Thu Jun 10 16:30:28 1999 @@ -82,8 +82,9 @@ long sec, usec; struct sigaction act; + memset(&act, 0, sizeof(struct sigaction)); act.sa_handler = action; - act.sa_mask = 0; + sigemptyset(&act.sa_mask); act.sa_flags = SA_NOMASK; /* allow own signal to be received */ if(sigaction(SIGALRM, &act, NULL)) /* called by pause() */ Perror("sigaction"); @@ -161,7 +162,7 @@ (void) signal(SIGTERM, sterm); (void) signal(SIGSEGV, ssegv); (void) signal(SIGHUP, shangup); - (void) signal(SIGPIPE, SIG_IGN); + (void) signal(SIGPIPE, SIG_DFL); strcpy(term, "unknown"); /* tty type */ Device = "unknown"; /* tty device */ @@ -178,7 +179,7 @@ delay = 0; /* delay before prompt */ speed = (char *) NULL; clear = TRUE; /* clear the screen */ - login = LOGIN; /* login program */ + loginprog = LOGIN; /* login program */ waitchar = FALSE; /* don't wait for a char */ waitfor = (char *) NULL; /* no waitfor string */ Connect = (char *) NULL; /* no connect string */ @@ -423,7 +424,7 @@ Version = strdup(buf); } } - if((p = defvalue(def, "LOGIN"))) login = p; + if((p = defvalue(def, "LOGIN"))) loginprog = p; if((p = defvalue(def, "ISSUE"))) issue = p; if((p = defvalue(def, "CLEAR")) && (strequal(p, "NO"))) clear = FALSE; @@ -1006,7 +1007,7 @@ Speed = speedtab[i].speed; #ifdef ISSUE - if (clear && *clrscr) { + if (clear && clrscr && *clrscr) { (void) tputs(clrscr, 1, tputc); } fputc('\r', stdout); @@ -1024,8 +1025,8 @@ login_prompt: (void) ioctl(STDIN, TCFLSH, 0); #ifdef FIDO - if (emsi && (strcmp(emsi,"yes") == 0)) - (void) Fputs("**EMSI_REQA77E\r", stdout); + if (emsi && (strcmp(emsi,"yes") == 0)) + (void) Fputs("**EMSI_REQA77E\r", stdout); #endif (void) Fputs(gtab->login, stdout); if(TimeOut > 0) { @@ -1039,7 +1040,7 @@ (void) signal(SIGALRM, SIG_DFL); (void) alarm(0); - login = fido; + loginprog = fido; logerr("Fido Call Detected"); #endif /* FIDO */ case SUCCESS: @@ -1066,14 +1067,14 @@ setenv("TERM", term, TRUE); #endif /* SETTERM */ debug(D_RUN, "execing login"); - (void) execl(login, + (void) execl(loginprog, "login", buf, (char *)NULL); debug(D_RUN, "exec failed: %s; trying with /bin/sh", strerror(errno)); - (void) execl("/bin/sh", "sh", "-c", login, + (void) execl("/bin/sh", "sh", "-c", loginprog, buf, (char *) NULL); - logerr("exec of %s failed: %s", login, + logerr("exec of %s failed: %s", loginprog, strerror(errno)); exit(FAIL); diff -Nur getty_ps-2.0.7j/main.h getty_ps-2.0.7j.pld/main.h --- getty_ps-2.0.7j/main.h Sun Feb 2 16:00:23 1997 +++ getty_ps-2.0.7j.pld/main.h Thu Jun 10 16:31:28 1999 @@ -16,9 +16,10 @@ #include #include #include -#include +#include #include #include +#include #ifdef PWD #include @@ -89,16 +90,16 @@ EXTERN char *defname; /* defaults file name */ EXTERN boolean clear; /* TRUE, clear screen */ EXTERN char *clrscr; /* string to clear screen with */ -EXTERN char *login; /* login program */ +EXTERN char *loginprog; /* login program */ EXTERN char *init; /* init string */ EXTERN char *waitfor; /* waitfor string */ EXTERN char *Connect; /* connect string */ EXTERN boolean waitchar; /* TRUE, wait for a character */ EXTERN unsigned int delay; /* seconds to delay before the prompt */ EXTERN GTAB *gtab; /* terminal mode */ -EXTERN char devname[MAXLINE + 1]; +EXTERN char devname[PATH_MAX + 1]; /* name of tty device */ -EXTERN char initdevname[MAXLINE + 1]; +EXTERN char initdevname[PATH_MAX + 1]; /* name of init device */ #ifdef ISSUE diff -Nur getty_ps-2.0.7j/mytermio.h getty_ps-2.0.7j.pld/mytermio.h --- getty_ps-2.0.7j/mytermio.h Mon Oct 9 20:49:06 1995 +++ getty_ps-2.0.7j.pld/mytermio.h Thu Jun 10 16:32:54 1999 @@ -5,15 +5,5 @@ #ifdef __linux__ #define CNUL 0 -#define CERASE 127 /* ^? */ -#define CKILL 025 /* ^U */ -#define CINTR 03 /* ^C */ -#define CQUIT 034 /* ^\ */ -#define CSTART 021 /* ^Q */ -#define CSTOP 023 /* ^S */ -#define CEOF 04 /* ^D */ -#define CMIN 06 /* satisfy read at 6 chars */ -#define CTIME 01 /* .1 sec inter-character timer */ - #define SSPEED B9600 /* default speed */ #endif diff -Nur getty_ps-2.0.7j/table.c getty_ps-2.0.7j.pld/table.c --- getty_ps-2.0.7j/table.c Sun Feb 2 16:04:39 1997 +++ getty_ps-2.0.7j.pld/table.c Thu Jun 10 16:30:28 1999 @@ -21,6 +21,7 @@ #include "getty.h" #include "table.h" +#include "mytermio.h" #include diff -Nur getty_ps-2.0.7j/tune.h getty_ps-2.0.7j.pld/tune.h --- getty_ps-2.0.7j/tune.h Sun Feb 2 03:17:01 1997 +++ getty_ps-2.0.7j.pld/tune.h Thu Jun 10 16:30:28 1999 @@ -54,10 +54,11 @@ /* Where to find things */ -#define CONSOLE "/usr/adm/getty.log" /* error log if not using syslog */ #ifndef FSSTND +#define CONSOLE "/var/log/getty" /* error log if not using syslog */ #define DEFAULTS "/etc/default/%s" /* name of defaults file */ #else +#define CONSOLE "/var/log/getty.log" /* error log if not using syslog */ #define DEFAULTS "/etc/conf.%s" /* FSSTND compliant defaults file */ #endif #define ISSUE "/etc/issue" /* name of the issue file; @@ -78,7 +79,7 @@ */ #define MAXDEF 100 /* max # lines in defaults file */ -#define MAXLINE 8192 /* max # chars in a line */ +#define MAXLINE 1024 /* max # chars in a line */ #define MAXID 12 /* max # chars in Gtab Id */ #define MAXLOGIN 80 /* max # chars in Gtab Login */ diff -Nur getty_ps-2.0.7j/utmp2.c getty_ps-2.0.7j.pld/utmp2.c --- getty_ps-2.0.7j/utmp2.c Mon Sep 11 17:55:17 1995 +++ getty_ps-2.0.7j.pld/utmp2.c Thu Jun 10 16:30:28 1999 @@ -16,6 +16,7 @@ static off_t utaddress; /* The file address of the last entry returned by getutent. */ +#if 0 /* kludge for the benefit of getutent() whose semantics differs from the other get..() functions. When set, getutent() will not read the next entry in utmp, but immediatly returns &Ut, and resets the @@ -105,6 +106,7 @@ return (struct utmp *)0; } +#endif /* Back up and overwrite the last entry returned by getutent, * Or append to the file if getutent returned 0. @@ -119,6 +121,7 @@ return ut; } +#if 0 struct utmp *getutline(struct utmp *ut) { if(Fd == -1) @@ -174,3 +177,4 @@ if(Fd != -1) close(Fd); Fd = -1; } +#endif diff -Nur getty_ps-2.0.7j/uufuncs.c getty_ps-2.0.7j.pld/uufuncs.c --- getty_ps-2.0.7j/uufuncs.c Fri Apr 26 17:09:48 1996 +++ getty_ps-2.0.7j.pld/uufuncs.c Thu Jun 10 16:30:28 1999 @@ -8,6 +8,7 @@ #define UUFUNCS #define UUGETTY +#include #include "main.h" #include "uufuncs.h" #include "debug.h" @@ -79,6 +80,7 @@ #endif /* ASCIIPID */ int getpid(); char *mktemp(); + struct passwd *pw; debug(D_LOCK, "makelock(%s) called", name); @@ -102,6 +104,14 @@ (void) write(fd, (char *)&pid, sizeof(pid)); #endif /* ASCIIPID */ (void) close(fd); + + /* change owner of link */ + pw = getpwnam(UUCPID); + if (pw==NULL || chown(temp,pw->pw_uid,pw->pw_gid)<0) { + debug(D_LOCK, "lock NOT made -- chown failed"); + (void) unlink(temp); + return(FAIL); + } /* link it to the lock file */