From d391708c06767d32228e4a76539b7c214714d5a8 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Thu, 31 Aug 2006 14:12:22 +0000 Subject: [PATCH] Import OpenBSD's tip(1) as of today --- usr.bin/tip/libacu/biz22.c | 61 ++--- usr.bin/tip/libacu/biz31.c | 59 +++-- usr.bin/tip/libacu/courier.c | 81 +++--- usr.bin/tip/libacu/df.c | 41 ++- usr.bin/tip/libacu/dn11.c | 30 +-- usr.bin/tip/libacu/hayes.c | 69 +++-- usr.bin/tip/libacu/t3000.c | 99 ++++---- usr.bin/tip/libacu/v3451.c | 45 ++-- usr.bin/tip/libacu/v831.c | 46 ++-- usr.bin/tip/libacu/ventel.c | 84 +++---- usr.bin/tip/tip/Makefile | 9 +- usr.bin/tip/tip/acu.c | 28 +-- usr.bin/tip/tip/acutab.c | 55 ++-- usr.bin/tip/tip/cmds.c | 286 +++++++++++---------- usr.bin/tip/tip/cmdtab.c | 14 +- usr.bin/tip/tip/cu.1 | 470 +++++++++++++++++++++++++++++++++++ usr.bin/tip/tip/cu.c | 76 +++--- usr.bin/tip/tip/hunt.c | 24 +- usr.bin/tip/tip/log.c | 15 +- usr.bin/tip/tip/partab.c | 10 +- usr.bin/tip/tip/pathnames.h | 8 +- usr.bin/tip/tip/remote.c | 38 ++- usr.bin/tip/tip/tip.1 | 272 ++++++++++---------- usr.bin/tip/tip/tip.c | 214 ++++++++-------- usr.bin/tip/tip/tip.h | 154 +++++++----- usr.bin/tip/tip/tipout.c | 56 +++-- usr.bin/tip/tip/uucplock.c | 32 +-- usr.bin/tip/tip/value.c | 95 +++---- usr.bin/tip/tip/vars.c | 18 +- 29 files changed, 1441 insertions(+), 1048 deletions(-) create mode 100644 usr.bin/tip/tip/cu.1 diff --git a/usr.bin/tip/libacu/biz22.c b/usr.bin/tip/libacu/biz22.c index cd5ca4acfcc8..920b42a5c412 100644 --- a/usr.bin/tip/libacu/biz22.c +++ b/usr.bin/tip/libacu/biz22.c @@ -1,4 +1,4 @@ -/* $OpenBSD: biz22.c,v 1.7 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: biz22.c,v 1.13 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: biz22.c,v 1.6 1997/02/11 09:24:11 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,19 +34,20 @@ #if 0 static char sccsid[] = "@(#)biz22.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: biz22.c,v 1.7 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: biz22.c,v 1.13 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ #include "tip.h" #define DISCONNECT_CMD "\20\04" /* disconnection string */ -static void sigALRM(); -static int timeout = 0; +static int dialtimeout = 0; static jmp_buf timeoutbuf; -static int cmd(), detect(); -void biz22_disconnect(); +static int biz_dialer(char *, char *); +static void sigALRM(int); +static int cmd(char *); +static int detect(char *); /* * Dial up on a BIZCOMP Model 1022 with either @@ -58,8 +55,7 @@ void biz22_disconnect(); * pulse dialing (mod = "W") */ static int -biz_dialer(num, mod) - char *num, *mod; +biz_dialer(char *num, char *mod) { int connected = 0; char cbuf[40]; @@ -74,7 +70,7 @@ biz_dialer(num, mod) printf("can't initialize bizcomp..."); return (0); } - (void)strcpy(cbuf, "\02.\r"); + (void)strlcpy(cbuf, "\02.\r", sizeof cbuf); cbuf[1] = *mod; if (cmd(cbuf)) { printf("can't set dialing mode..."); @@ -95,61 +91,55 @@ biz_dialer(num, mod) */ connected = detect("1\r"); #ifdef ACULOG - if (timeout) { + if (dialtimeout) { char line[80]; - (void)sprintf(line, "%ld second dial timeout", + (void)snprintf(line, sizeof line, "%ld second dial timeout", number(value(DIALTIMEOUT))); logent(value(HOST), num, "biz1022", line); } #endif - if (timeout) + if (dialtimeout) biz22_disconnect(); /* insurance */ return (connected); } int -biz22w_dialer(num, acu) - char *num, *acu; +biz22w_dialer(char *num, char *acu) { - return (biz_dialer(num, "W")); } int -biz22f_dialer(num, acu) - char *num, *acu; +biz22f_dialer(char *num, char *acu) { - return (biz_dialer(num, "V")); } void -biz22_disconnect() +biz22_disconnect(void) { - write(FD, DISCONNECT_CMD, 4); + write(FD, DISCONNECT_CMD, sizeof(DISCONNECT_CMD)-1); sleep(2); tcflush(FD, TCIOFLUSH); } void -biz22_abort() +biz22_abort(void) { - write(FD, "\02", 1); } +/*ARGSUSED*/ static void -sigALRM() +sigALRM(int signo) { - - timeout = 1; + dialtimeout = 1; longjmp(timeoutbuf, 1); } static int -cmd(s) - char *s; +cmd(char *s) { sig_t f; char c; @@ -170,14 +160,13 @@ cmd(s) } static int -detect(s) - char *s; +detect(char *s) { sig_t f; char c; f = signal(SIGALRM, sigALRM); - timeout = 0; + dialtimeout = 0; while (*s) { if (setjmp(timeoutbuf)) { biz22_abort(); @@ -191,5 +180,5 @@ detect(s) return (0); } signal(SIGALRM, f); - return (timeout == 0); + return (dialtimeout == 0); } diff --git a/usr.bin/tip/libacu/biz31.c b/usr.bin/tip/libacu/biz31.c index 5522d652aed0..41518112db49 100644 --- a/usr.bin/tip/libacu/biz31.c +++ b/usr.bin/tip/libacu/biz31.c @@ -1,4 +1,4 @@ -/* $OpenBSD: biz31.c,v 1.6 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: biz31.c,v 1.10 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: biz31.c,v 1.5 1997/02/11 09:24:14 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)biz31.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: biz31.c,v 1.6 2001/10/24 18:38:58 millert Exp $"; +static char rcsid[] = "$OpenBSD: biz31.c,v 1.10 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ #include "tip.h" @@ -46,7 +42,14 @@ static char rcsid[] = "$OpenBSD: biz31.c,v 1.6 2001/10/24 18:38:58 millert Exp $ #define MAXRETRY 3 /* sync up retry count */ #define DISCONNECT_CMD "\21\25\11\24" /* disconnection string */ -static void sigALRM(); +static int biz_dialer(char *, char *); +static int bizsync(int); +static int echo(char *); +static void sigALRM(int); +static int detect(char *); +static int flush(char *); +static int bizsync(int); + static int timeout = 0; static jmp_buf timeoutbuf; @@ -56,8 +59,7 @@ static jmp_buf timeoutbuf; * pulse dialing (mod = "w") */ static int -biz_dialer(num, mod) - char *num, *mod; +biz_dialer(char *num, char *mod) { int connected = 0; @@ -91,7 +93,7 @@ biz_dialer(num, mod) if (timeout) { char line[80]; - (void)sprintf(line, "%ld second dial timeout", + (void)snprintf(line, sizeof line, "%ld second dial timeout", number(value(DIALTIMEOUT))); logent(value(HOST), num, "biz", line); } @@ -105,37 +107,34 @@ biz_dialer(num, mod) return (connected); } -biz31w_dialer(num, acu) - char *num, *acu; +int +biz31w_dialer(char *num, char *acu) { - return (biz_dialer(num, "w")); } -biz31f_dialer(num, acu) - char *num, *acu; +int +biz31f_dialer(char *num, char *acu) { - return (biz_dialer(num, "f")); } -biz31_disconnect() +void +biz31_disconnect(void) { - - write(FD, DISCONNECT_CMD, 4); + write(FD, DISCONNECT_CMD, sizeof(DISCONNECT_CMD)-1); sleep(2); tcflush(FD, TCIOFLUSH); } -biz31_abort() +void +biz31_abort(void) { - write(FD, "\33", 1); } static int -echo(s) - char *s; +echo(char *s) { char c; @@ -157,17 +156,16 @@ echo(s) } } +/*ARGSUSED*/ static void -sigALRM() +sigALRM(int signo) { - timeout = 1; longjmp(timeoutbuf, 1); } static int -detect(s) - char *s; +detect(char *s) { sig_t f; char c; @@ -191,8 +189,7 @@ detect(s) } static int -flush(s) - char *s; +flush(char *s) { sig_t f; char c; @@ -215,7 +212,7 @@ flush(s) * call there are gory ways to simulate this. */ static int -bizsync(fd) +bizsync(int fd) { #ifdef FIOCAPACITY struct capacity b; diff --git a/usr.bin/tip/libacu/courier.c b/usr.bin/tip/libacu/courier.c index 728ccc9f4377..cd642b6df0a7 100644 --- a/usr.bin/tip/libacu/courier.c +++ b/usr.bin/tip/libacu/courier.c @@ -1,4 +1,4 @@ -/* $OpenBSD: courier.c,v 1.9 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: courier.c,v 1.15 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: courier.c,v 1.7 1997/02/11 09:24:16 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)courier.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: courier.c,v 1.9 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: courier.c,v 1.15 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -51,19 +47,22 @@ static char rcsid[] = "$OpenBSD: courier.c,v 1.9 2001/10/24 18:38:58 millert Exp #define MAXRETRY 5 -static void sigALRM(); -static int timeout = 0; +static int dialtimeout = 0; static int connected = 0; -static jmp_buf timeoutbuf, intbuf; -static int coursync(), cour_connect(), cour_swallow(); -void cour_nap(); +static jmp_buf timeoutbuf; -void cour_disconnect __P((void)); +static void sigALRM(int); +static int cour_swallow(char *); +static int cour_connect(void); +static int coursync(void); +static void cour_write(int, char *, int); +static void cour_nap(void); +#ifdef DEBUG +static void cour_verbose_read(void); +#endif int -cour_dialer(num, acu) - char *num; - char *acu; +cour_dialer(char *num, char *acu) { char *cp; #ifdef ACULOG @@ -107,19 +106,19 @@ cour_dialer(num, acu) cour_write(FD, "\r", 1); connected = cour_connect(); #ifdef ACULOG - if (timeout) { - (void)sprintf(line, "%ld second dial timeout", + if (dialtimeout) { + (void)snprintf(line, sizeof line, "%ld second dial timeout", number(value(DIALTIMEOUT))); logent(value(HOST), num, "cour", line); } #endif - if (timeout) + if (dialtimeout) cour_disconnect(); return (connected); } void -cour_disconnect() +cour_disconnect(void) { /* first hang up the modem*/ ioctl(FD, TIOCCDTR, 0); @@ -130,29 +129,29 @@ cour_disconnect() } void -cour_abort() +cour_abort(void) { cour_write(FD, "\r", 1); /* send anything to abort the call */ cour_disconnect(); } +/*ARGSUSED*/ static void -sigALRM() +sigALRM(int signo) { printf("\07timeout waiting for reply\n"); - timeout = 1; + dialtimeout = 1; longjmp(timeoutbuf, 1); } static int -cour_swallow(match) - char *match; +cour_swallow(char *match) { sig_t f; char c; f = signal(SIGALRM, sigALRM); - timeout = 0; + dialtimeout = 0; do { if (*match =='\0') { signal(SIGALRM, f); @@ -183,16 +182,16 @@ struct baud_msg { char *msg; int baud; } baud_msg[] = { - "", B300, - " 1200", B1200, - " 2400", B2400, - " 9600", B9600, - " 9600/ARQ", B9600, - 0, 0, + { "", B300 }, + { " 1200", B1200 }, + { " 2400", B2400 }, + { " 9600", B9600 }, + { " 9600/ARQ", B9600 }, + { 0, 0 }, }; static int -cour_connect() +cour_connect(void) { char c; int nc, nl, n; @@ -206,7 +205,7 @@ cour_connect() again: nc = 0; nl = sizeof(dialer_buf)-1; bzero(dialer_buf, sizeof(dialer_buf)); - timeout = 0; + dialtimeout = 0; for (nc = 0, nl = sizeof(dialer_buf)-1 ; nl > 0 ; nc++, nl--) { if (setjmp(timeoutbuf)) break; @@ -265,7 +264,7 @@ cour_connect() * the courier in sync. */ static int -coursync() +coursync(void) { int already = 0; int len; @@ -307,10 +306,7 @@ coursync() } static void -cour_write(fd, cp, n) -int fd; -char *cp; -int n; +cour_write(int fd, char *cp, int n) { #ifdef notdef if (boolean(value(VERBOSE))) @@ -326,7 +322,8 @@ int n; } #ifdef DEBUG -cour_verbose_read() +static void +cour_verbose_read(void) { int n = 0; char buf[BUFSIZ]; @@ -342,8 +339,8 @@ cour_verbose_read() #endif /* Give the courier 50 milliseconds between characters */ -void -cour_nap() +static void +cour_nap(void) { struct timespec ts; diff --git a/usr.bin/tip/libacu/df.c b/usr.bin/tip/libacu/df.c index 2fa0a0b320a1..f858d46fc053 100644 --- a/usr.bin/tip/libacu/df.c +++ b/usr.bin/tip/libacu/df.c @@ -1,4 +1,4 @@ -/* $OpenBSD: df.c,v 1.5 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: df.c,v 1.9 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: df.c,v 1.4 1995/10/29 00:49:51 pk Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)df.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: df.c,v 1.5 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: df.c,v 1.9 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -48,28 +44,24 @@ static char rcsid[] = "$OpenBSD: df.c,v 1.5 2001/10/24 18:38:58 millert Exp $"; #include "tip.h" static jmp_buf Sjbuf; -static void timeout(); + +static int df_dialer(char *, char *, int); +static void alrm_timeout(int); int -df02_dialer(num, acu) - char *num, *acu; +df02_dialer(char *num, char *acu) { - return (df_dialer(num, acu, 0)); } int -df03_dialer(num, acu) - char *num, *acu; +df03_dialer(char *num, char *acu) { - return (df_dialer(num, acu, 1)); } -int -df_dialer(num, acu, df03) - char *num, *acu; - int df03; +static int +df_dialer(char *num, char *acu, int df03) { int f = FD; struct termios cntrl; @@ -102,7 +94,7 @@ df_dialer(num, acu, df03) ioctl(f, TIOCMBIS, &st); /* set ST for 1200 baud */ } #endif - signal(SIGALRM, timeout); + signal(SIGALRM, alrm_timeout); alarm(5 * strlen(num) + 10); tcflush(f, TCIOFLUSH); write(f, "\001", 1); @@ -121,25 +113,22 @@ df_dialer(num, acu, df03) } void -df_disconnect() +df_disconnect(void) { write(FD, "\001", 1); sleep(1); tcflush(FD, TCIOFLUSH); } - void -df_abort() +df_abort(void) { - df_disconnect(); } - +/*ARGSUSED*/ static void -timeout() +alrm_timeout(int signo) { - longjmp(Sjbuf, 1); } diff --git a/usr.bin/tip/libacu/dn11.c b/usr.bin/tip/libacu/dn11.c index 3f3461594296..01805ca76910 100644 --- a/usr.bin/tip/libacu/dn11.c +++ b/usr.bin/tip/libacu/dn11.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dn11.c,v 1.5 2001/11/19 19:02:16 mpech Exp $ */ +/* $OpenBSD: dn11.c,v 1.9 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: dn11.c,v 1.4 1995/10/29 00:49:53 pk Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)dn11.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: dn11.c,v 1.5 2001/11/19 19:02:16 mpech Exp $"; +static const char rcsid[] = "$OpenBSD: dn11.c,v 1.9 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -46,14 +42,13 @@ static char rcsid[] = "$OpenBSD: dn11.c,v 1.5 2001/11/19 19:02:16 mpech Exp $"; */ #include "tip.h" -void dn_abort(); -void alarmtr(); static jmp_buf jmpbuf; -static int child = -1, dn; +static pid_t child = -1, dn; + +static void alarmtr(int); int -dn_dialer(num, acu) - char *num, *acu; +dn_dialer(char *num, char *acu) { int lt, nw; int timelim; @@ -116,8 +111,9 @@ dn_dialer(num, acu) return (1); } -void -alarmtr() +/*ARGSUSED*/ +static void +alarmtr(int signo) { alarm(0); longjmp(jmpbuf, 1); @@ -128,9 +124,8 @@ alarmtr() * hanging up... */ void -dn_disconnect() +dn_disconnect(void) { - sleep(2); if (FD > 0) ioctl(FD, TIOCCDTR, 0); @@ -138,9 +133,8 @@ dn_disconnect() } void -dn_abort() +dn_abort(void) { - sleep(2); if (child > 0) kill(child, SIGKILL); diff --git a/usr.bin/tip/libacu/hayes.c b/usr.bin/tip/libacu/hayes.c index 19ee8f80abe6..e7139435b6b6 100644 --- a/usr.bin/tip/libacu/hayes.c +++ b/usr.bin/tip/libacu/hayes.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hayes.c,v 1.8 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: hayes.c,v 1.13 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: hayes.c,v 1.6 1997/02/11 09:24:17 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)hayes.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: hayes.c,v 1.8 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: hayes.c,v 1.13 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -71,10 +67,9 @@ static char rcsid[] = "$OpenBSD: hayes.c,v 1.8 2001/10/24 18:38:58 millert Exp $ #define min(a,b) ((a < b) ? a : b) -static void sigALRM(); -static int timeout = 0; +static int dialtimeout = 0; static jmp_buf timeoutbuf; -static char gobble(); + #define DUMBUFLEN 40 static char dumbuf[DUMBUFLEN]; @@ -84,10 +79,14 @@ static char dumbuf[DUMBUFLEN]; #define FAILED 4 static int state = IDLE; +static void sigALRM(int); +static char gobble(char *); +static void error_rep(char); +static void goodbye(void); +static int hay_sync(void); + int -hay_dialer(num, acu) - char *num; - char *acu; +hay_dialer(char *num, char *acu) { char *cp; int connected = 0; @@ -130,20 +129,19 @@ hay_dialer(num, acu) } tcflush(FD, TCIOFLUSH); #ifdef ACULOG - if (timeout) { - (void)sprintf(line, "%ld second dial timeout", + if (dialtimeout) { + (void)snprintf(line, sizeof line, "%ld second dial timeout", number(value(DIALTIMEOUT))); logent(value(HOST), num, "hayes", line); } #endif - if (timeout) + if (dialtimeout) hay_disconnect(); /* insurance */ return (connected); } - void -hay_disconnect() +hay_disconnect(void) { /* first hang up the modem*/ #ifdef DEBUG @@ -156,32 +154,30 @@ hay_disconnect() } void -hay_abort() +hay_abort(void) { - write(FD, "\r", 1); /* send anything to abort the call */ hay_disconnect(); } +/*ARGSUSED*/ static void -sigALRM() +sigALRM(int signo) { - printf("\07timeout waiting for reply\n\r"); - timeout = 1; + dialtimeout = 1; longjmp(timeoutbuf, 1); } static char -gobble(match) - char *match; +gobble(char *match) { char c; sig_t f; int i, status = 0; f = signal(SIGALRM, sigALRM); - timeout = 0; + dialtimeout = 0; #ifdef DEBUG printf("\ngobble: waiting for %s\n", match); #endif @@ -209,8 +205,7 @@ gobble(match) } static void -error_rep(c) - char c; +error_rep(char c) { printf("\n\r"); switch (c) { @@ -222,23 +217,23 @@ error_rep(c) case '1': printf("CONNECT"); break; - + case '2': printf("RING"); break; - + case '3': printf("NO CARRIER"); break; - + case '4': printf("ERROR in input"); break; - + case '5': printf("CONNECT 1200"); break; - + default: printf("Unknown Modem error: %c (0x%x)", c, c); } @@ -249,8 +244,8 @@ error_rep(c) /* * set modem back to normal verbose status codes. */ -void -goodbye() +static void +goodbye(void) { int len; char c; @@ -294,8 +289,8 @@ goodbye() #define MAXRETRY 5 -int -hay_sync() +static int +hay_sync(void) { int len, retry = 0; diff --git a/usr.bin/tip/libacu/t3000.c b/usr.bin/tip/libacu/t3000.c index 1f0509104475..1bb81c5d375a 100644 --- a/usr.bin/tip/libacu/t3000.c +++ b/usr.bin/tip/libacu/t3000.c @@ -1,4 +1,4 @@ -/* $OpenBSD: t3000.c,v 1.9 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: t3000.c,v 1.14 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: t3000.c,v 1.5 1997/02/11 09:24:18 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)t3000.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: t3000.c,v 1.9 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: t3000.c,v 1.14 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -52,17 +48,22 @@ static char rcsid[] = "$OpenBSD: t3000.c,v 1.9 2001/10/24 18:38:58 millert Exp $ #define MAXRETRY 5 -static void sigALRM(); -static int timeout = 0; +static int dialtimeout = 0; static int connected = 0; -static jmp_buf timeoutbuf, intbuf; -static int t3000_sync(), t3000_connect(), t3000_swallow(); -static void t3000_nap(); +static jmp_buf timeoutbuf; + +static void sigALRM(int); +static int t3000_swallow(char *); +static int t3000_connect(void); +static int t3000_sync(void); +static void t3000_write(int, char *, int); +static void t3000_nap(void); +#ifdef DEBUG +static void t3000_verbose_read(void); +#endif int -t3000_dialer(num, acu) - char *num; - char *acu; +t3000_dialer(char *num, char *acu) { char *cp; struct termios cntrl; @@ -106,19 +107,19 @@ t3000_dialer(num, acu) t3000_write(FD, "\r", 1); connected = t3000_connect(); #ifdef ACULOG - if (timeout) { - (void)sprintf(line, "%ld second dial timeout", + if (dialtimeout) { + (void)snprintf(line, sizeof line, "%ld second dial timeout", number(value(DIALTIMEOUT))); logent(value(HOST), num, "t3000", line); } #endif - if (timeout) + if (dialtimeout) t3000_disconnect(); return (connected); } void -t3000_disconnect() +t3000_disconnect(void) { /* first hang up the modem*/ ioctl(FD, TIOCCDTR, 0); @@ -129,29 +130,29 @@ t3000_disconnect() } void -t3000_abort() +t3000_abort(void) { t3000_write(FD, "\r", 1); /* send anything to abort the call */ t3000_disconnect(); } +/*ARGSUSED*/ static void -sigALRM() +sigALRM(int signo) { printf("\07timeout waiting for reply\n"); - timeout = 1; + dialtimeout = 1; longjmp(timeoutbuf, 1); } static int -t3000_swallow(match) - char *match; +t3000_swallow(char *match) { sig_t f; char c; f = signal(SIGALRM, sigALRM); - timeout = 0; + dialtimeout = 0; do { if (*match =='\0') { signal(SIGALRM, f); @@ -188,24 +189,24 @@ struct tbaud_msg { int baud; int baud2; } tbaud_msg[] = { - "", B300, 0, - " 1200", B1200, 0, - " 2400", B2400, 0, - " 4800", B4800, 0, - " 9600", B9600, 0, - " 14400", B19200, B9600, - " 19200", B19200, B9600, - " 38400", B38400, B9600, - " 57600", B38400, B9600, - " 7512", B9600, 0, - " 1275", B2400, 0, - " 7200", B9600, 0, - " 12000", B19200, B9600, - 0, 0, 0, + { "", B300, 0 }, + { " 1200", B1200, 0 }, + { " 2400", B2400, 0 }, + { " 4800", B4800, 0 }, + { " 9600", B9600, 0 }, + { " 14400", B19200, B9600 }, + { " 19200", B19200, B9600 }, + { " 38400", B38400, B9600 }, + { " 57600", B38400, B9600 }, + { " 7512", B9600, 0 }, + { " 1275", B2400, 0 }, + { " 7200", B9600, 0 }, + { " 12000", B19200, B9600 }, + { 0, 0, 0 }, }; static int -t3000_connect() +t3000_connect(void) { char c; int nc, nl, n; @@ -219,7 +220,7 @@ t3000_connect() again: nc = 0; nl = sizeof(dialer_buf)-1; bzero(dialer_buf, sizeof(dialer_buf)); - timeout = 0; + dialtimeout = 0; for (nc = 0, nl = sizeof(dialer_buf)-1 ; nl > 0 ; nc++, nl--) { if (setjmp(timeoutbuf)) break; @@ -278,7 +279,7 @@ t3000_connect() * the t3000 in sync. */ static int -t3000_sync() +t3000_sync(void) { int already = 0; int len; @@ -322,11 +323,8 @@ if (len == 0) len = 1; return (0); } -static int -t3000_write(fd, cp, n) -int fd; -char *cp; -int n; +static void +t3000_write(int fd, char *cp, int n) { #ifdef notdef if (boolean(value(VERBOSE))) @@ -342,7 +340,8 @@ int n; } #ifdef DEBUG -t3000_verbose_read() +static void +t3000_verbose_read(void) { int n = 0; char buf[BUFSIZ]; @@ -358,8 +357,8 @@ t3000_verbose_read() #endif /* Give the t3000 50 milliseconds between characters */ -void -t3000_nap() +static void +t3000_nap(void) { struct timespec ts; diff --git a/usr.bin/tip/libacu/v3451.c b/usr.bin/tip/libacu/v3451.c index 1440c551e0e0..96624409f274 100644 --- a/usr.bin/tip/libacu/v3451.c +++ b/usr.bin/tip/libacu/v3451.c @@ -1,4 +1,4 @@ -/* $OpenBSD: v3451.c,v 1.6 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: v3451.c,v 1.9 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: v3451.c,v 1.6 1997/02/11 09:24:20 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)v3451.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: v3451.c,v 1.6 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: v3451.c,v 1.9 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -48,13 +44,14 @@ static char rcsid[] = "$OpenBSD: v3451.c,v 1.6 2001/10/24 18:38:58 millert Exp $ static jmp_buf Sjbuf; -static int expect(), notin(), prefix(); -static void vawrite(), alarmtr(); +static void vawrite(char *, int); +static int expect(char *); +static void alarmtr(int); +static int notin(char *, char *); +static int prefix(char *, char *); int -v3451_dialer(num, acu) - char *num; - char *acu; +v3451_dialer(char *num, char *acu) { sig_t func; int ok; @@ -128,32 +125,26 @@ v3451_dialer(num, acu) } void -v3451_disconnect() +v3451_disconnect(void) { - close(FD); } void -v3451_abort() +v3451_abort(void) { - close(FD); } static void -vawrite(cp, delay) - char *cp; - int delay; +vawrite(char *cp, int delay) { - for (; *cp; sleep(delay), cp++) write(FD, cp, 1); } static int -expect(cp) - char *cp; +expect(char *cp) { char buf[300]; char *rp = buf; @@ -190,17 +181,16 @@ expect(cp) return (1); } +/*ARGSUSED*/ static void -alarmtr() +alarmtr(int signo) { longjmp(Sjbuf, 1); } static int -notin(sh, lg) - char *sh, *lg; +notin(char *sh, char *lg) { - for (; *lg; lg++) if (prefix(sh, lg)) return (0); @@ -208,8 +198,7 @@ notin(sh, lg) } static int -prefix(s1, s2) - char *s1, *s2; +prefix(char *s1, char *s2) { char c; diff --git a/usr.bin/tip/libacu/v831.c b/usr.bin/tip/libacu/v831.c index 005e5d931e52..383a540f1f6d 100644 --- a/usr.bin/tip/libacu/v831.c +++ b/usr.bin/tip/libacu/v831.c @@ -1,4 +1,4 @@ -/* $OpenBSD: v831.c,v 1.6 2001/11/19 19:02:16 mpech Exp $ */ +/* $OpenBSD: v831.c,v 1.11 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: v831.c,v 1.5 1996/12/29 10:42:01 cgd Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)v831.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: v831.c,v 1.6 2001/11/19 19:02:16 mpech Exp $"; +static const char rcsid[] = "$OpenBSD: v831.c,v 1.11 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -47,20 +43,19 @@ static char rcsid[] = "$OpenBSD: v831.c,v 1.6 2001/11/19 19:02:16 mpech Exp $"; #include "tip.h" #include -void v831_abort(); -static void alarmtr(); -static int dialit(); -static char *sanitize(); - static jmp_buf jmpbuf; -static int child = -1; +static pid_t child = -1; + +static void alarmtr(int); +static int dialit(char *, char *); +static char * sanitize(char *); int -v831_dialer(num, acu) - char *num, *acu; +v831_dialer(char *num, char *acu) { - int status, pid; + int status; int timelim; + pid_t pid; if (boolean(value(VERBOSE))) printf("\nstarting call..."); @@ -119,8 +114,9 @@ v831_dialer(num, acu) return (1); } +/*ARGSUSED*/ static void -alarmtr() +alarmtr(int signo) { alarm(0); longjmp(jmpbuf, 1); @@ -131,7 +127,7 @@ alarmtr() * hanging up... */ void -v831_disconnect() +v831_disconnect(void) { struct termios cntrl; @@ -151,18 +147,17 @@ v831_disconnect() } void -v831_abort() +v831_abort(void) { - #ifdef DEBUG printf("[abort: AC=%d]\n", AC); #endif sleep(2); if (child > 0) kill(child, SIGKILL); - if (AC > 0) + if (FD > 0) ioctl(FD, TIOCNXCL, NULL); - close(AC); + close(AC); if (FD > 0) ioctl(FD, TIOCCDTR, 0); close(FD); @@ -188,9 +183,7 @@ struct vaconfig { #define ETX 03 static int -dialit(phonenum, acu) - char *phonenum; - char *acu; +dialit(char *phonenum, char *acu) { struct vaconfig *vp; struct termios cntrl; @@ -250,8 +243,7 @@ dialit(phonenum, acu) } static char * -sanitize(s) - char *s; +sanitize(char *s) { static char buf[128]; char *cp; diff --git a/usr.bin/tip/libacu/ventel.c b/usr.bin/tip/libacu/ventel.c index 48035c177d2d..04ca30e61998 100644 --- a/usr.bin/tip/libacu/ventel.c +++ b/usr.bin/tip/libacu/ventel.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ventel.c,v 1.7 2001/11/19 19:02:16 mpech Exp $ */ +/* $OpenBSD: ventel.c,v 1.12 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: ventel.c,v 1.6 1997/02/11 09:24:21 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)ventel.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: ventel.c,v 1.7 2001/11/19 19:02:16 mpech Exp $"; +static const char rcsid[] = "$OpenBSD: ventel.c,v 1.12 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ /* @@ -51,12 +47,13 @@ static char rcsid[] = "$OpenBSD: ventel.c,v 1.7 2001/11/19 19:02:16 mpech Exp $" #define MAXRETRY 5 -static void sigALRM(); -static int timeout = 0; +static int dialtimeout = 0; static jmp_buf timeoutbuf; -static int gobble(), vensync(); -static void echo(); +static void echo(char *); +static void sigALRM(int); +static int gobble(char, char *); +static int vensync(int); /* * some sleep calls have been replaced by this macro @@ -69,9 +66,7 @@ static void echo(); #define busyloop(n) do { DELAY(n); } while (0) int -ven_dialer(num, acu) - char *num; - char *acu; +ven_dialer(char *num, char *acu) { char *cp; int connected = 0; @@ -106,21 +101,21 @@ ven_dialer(num, acu) connected = gobble('!', line); tcflush(FD, TCIOFLUSH); #ifdef ACULOG - if (timeout) { - (void)sprintf(line, "%ld second dial timeout", + if (dialtimeout) { + (void)snprintf(line, sizeof line, "%ld second dial timeout", number(value(DIALTIMEOUT))); logent(value(HOST), num, "ventel", line); } #endif - if (timeout) + if (dialtimeout) ven_disconnect(); /* insurance */ - if (connected || timeout || !boolean(value(VERBOSE))) + if (connected || dialtimeout || !boolean(value(VERBOSE))) return (connected); /* call failed, parse response for user */ cp = strchr(line, '\r'); if (cp) *cp = '\0'; - for (cp = line; cp = strchr(cp, ' '); cp++) + for (cp = line; (cp = strchr(cp, ' ')) != NULL; cp++) if (cp[1] == ' ') break; if (cp) { @@ -138,63 +133,59 @@ ven_dialer(num, acu) } void -ven_disconnect() +ven_disconnect(void) { - close(FD); } void -ven_abort() +ven_abort(void) { - write(FD, "\03", 1); close(FD); } static void -echo(s) - char *s; +echo(char *s) { char c; - while (c = *s++) switch (c) { + while ((c = *s++) != NULL) + switch (c) { + case '$': + read(FD, &c, 1); + s++; + break; - case '$': - read(FD, &c, 1); - s++; - break; + case '#': + c = *s++; + write(FD, &c, 1); + break; - case '#': - c = *s++; - write(FD, &c, 1); - break; - - default: - write(FD, &c, 1); - read(FD, &c, 1); - } + default: + write(FD, &c, 1); + read(FD, &c, 1); + } } +/*ARGSUSED*/ static void -sigALRM() +sigALRM(int signo) { printf("\07timeout waiting for reply\n"); - timeout = 1; + dialtimeout = 1; longjmp(timeoutbuf, 1); } static int -gobble(match, response) - char match; - char response[]; +gobble(char match, char response[]) { char *cp = response; sig_t f; char c; f = signal(SIGALRM, sigALRM); - timeout = 0; + dialtimeout = 0; do { if (setjmp(timeoutbuf)) { signal(SIGALRM, f); @@ -222,7 +213,7 @@ gobble(match, response) * there are gory ways to simulate this. */ static int -vensync(fd) +vensync(int fd) { int already = 0, nread; char buf[60]; @@ -263,4 +254,3 @@ vensync(fd) } return (0); } - diff --git a/usr.bin/tip/tip/Makefile b/usr.bin/tip/tip/Makefile index 8d269d65cbd3..9cfce293f3fc 100644 --- a/usr.bin/tip/tip/Makefile +++ b/usr.bin/tip/tip/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.9 2001/09/23 06:15:30 pvalchev Exp $ +# $OpenBSD: Makefile,v 1.11 2006/05/25 08:41:52 jmc Exp $ # # Files are: # /etc/remote remote host description file @@ -32,10 +32,9 @@ PROG= tip LINKS= ${BINDIR}/tip ${BINDIR}/cu -MLINKS= tip.1 cu.1 -CFLAGS+=-I${.CURDIR} -ansi -pedantic \ - -DDEFBR=9600 -DDEFFS=BUFSIZ -DACULOG -DPRISTINE -DCONNECT \ - -DV831 -DVENTEL -DHAYES -DCOURIER -DT3000 +MAN= tip.1 cu.1 +CFLAGS+=-I${.CURDIR} -DDEFBR=9600 -DDEFFS=BUFSIZ -DACULOG -DPRISTINE \ + -DCONNECT -DV831 -DVENTEL -DHAYES -DCOURIER -DT3000 .PATH: ${.CURDIR}/aculib SRCS= acu.c acutab.c cmds.c cmdtab.c cu.c hunt.c log.c partab.c \ remote.c tip.c tipout.c uucplock.c value.c vars.c \ diff --git a/usr.bin/tip/tip/acu.c b/usr.bin/tip/tip/acu.c index 91549e917417..4fdbea30afa0 100644 --- a/usr.bin/tip/tip/acu.c +++ b/usr.bin/tip/tip/acu.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acu.c,v 1.7 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: acu.c,v 1.12 2006/03/17 14:43:06 moritz Exp $ */ /* $NetBSD: acu.c,v 1.4 1996/12/29 10:34:03 cgd Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,15 +34,15 @@ #if 0 static char sccsid[] = "@(#)acu.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: acu.c,v 1.7 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: acu.c,v 1.12 2006/03/17 14:43:06 moritz Exp $"; #endif /* not lint */ #include "tip.h" static acu_t *acu = NOACU; static int conflag; -static void acuabort(); -static acu_t *acutype(); +static void acuabort(int); +static acu_t *acutype(char *); static jmp_buf jmpbuf; /* * Establish connection for tip @@ -65,7 +61,7 @@ static jmp_buf jmpbuf; * found in the file). */ char * -connect() +con(void) { char *cp = PN; char *phnum, string[256]; @@ -140,7 +136,7 @@ connect() conflag = (*acu->acu_dialer)(phnum, CU); if (conflag) break; - + logent(value(HOST), phnum, acu->acu_name, "call failed"); tried++; } @@ -161,8 +157,7 @@ connect() } void -disconnect(reason) - char *reason; +disconnect(char *reason) { if (!conflag) { logent(value(HOST), "", DV, "call terminated"); @@ -172,21 +167,20 @@ disconnect(reason) logent(value(HOST), "", acu->acu_name, "call terminated"); if (boolean(value(VERBOSE))) printf("\r\ndisconnecting..."); - } else + } else logent(value(HOST), "", acu->acu_name, reason); (*acu->acu_disconnect)(); } static void -acuabort(s) +acuabort(int s) { signal(s, SIG_IGN); longjmp(jmpbuf, 1); } static acu_t * -acutype(s) - char *s; +acutype(char *s) { acu_t *p; extern acu_t acutable[]; diff --git a/usr.bin/tip/tip/acutab.c b/usr.bin/tip/tip/acutab.c index 193b8cc70cac..85101f317e27 100644 --- a/usr.bin/tip/tip/acutab.c +++ b/usr.bin/tip/tip/acutab.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acutab.c,v 1.2 1996/06/26 05:40:41 deraadt Exp $ */ +/* $OpenBSD: acutab.c,v 1.5 2006/03/17 19:17:13 moritz Exp $ */ /* $NetBSD: acutab.c,v 1.3 1994/12/08 09:30:41 jtc Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,66 +34,53 @@ #if 0 static char sccsid[] = "@(#)acutab.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: acutab.c,v 1.2 1996/06/26 05:40:41 deraadt Exp $"; +static const char rcsid[] = "$OpenBSD: acutab.c,v 1.5 2006/03/17 19:17:13 moritz Exp $"; #endif /* not lint */ #include "tip.h" -extern int df02_dialer(), df03_dialer(), df_disconnect(), df_abort(), - biz31f_dialer(), biz31_disconnect(), biz31_abort(), - biz31w_dialer(), - biz22f_dialer(), biz22_disconnect(), biz22_abort(), - biz22w_dialer(), - ven_dialer(), ven_disconnect(), ven_abort(), - hay_dialer(), hay_disconnect(), hay_abort(), - cour_dialer(), cour_disconnect(), cour_abort(), - t3000_dialer(), t3000_disconnect(), t3000_abort(), - v3451_dialer(), v3451_disconnect(), v3451_abort(), - v831_dialer(), v831_disconnect(), v831_abort(), - dn_dialer(), dn_disconnect(), dn_abort(); - acu_t acutable[] = { #if BIZ1031 - "biz31f", biz31f_dialer, biz31_disconnect, biz31_abort, - "biz31w", biz31w_dialer, biz31_disconnect, biz31_abort, + { "biz31f", biz31f_dialer, biz31_disconnect, biz31_abort }, + { "biz31w", biz31w_dialer, biz31_disconnect, biz31_abort }, #endif #if BIZ1022 - "biz22f", biz22f_dialer, biz22_disconnect, biz22_abort, - "biz22w", biz22w_dialer, biz22_disconnect, biz22_abort, + { "biz22f", biz22f_dialer, biz22_disconnect, biz22_abort }, + { "biz22w", biz22w_dialer, biz22_disconnect, biz22_abort }, #endif #if DF02 - "df02", df02_dialer, df_disconnect, df_abort, + { "df02", df02_dialer, df_disconnect, df_abort }, #endif #if DF03 - "df03", df03_dialer, df_disconnect, df_abort, + { "df03", df03_dialer, df_disconnect, df_abort }, #endif #if DN11 - "dn11", dn_dialer, dn_disconnect, dn_abort, + { "dn11", dn_dialer, dn_disconnect, dn_abort }, #endif #ifdef VENTEL - "ventel",ven_dialer, ven_disconnect, ven_abort, + { "ventel", ven_dialer, ven_disconnect, ven_abort }, #endif #ifdef HAYES - "hayes",hay_dialer, hay_disconnect, hay_abort, + { "hayes", hay_dialer, hay_disconnect, hay_abort }, #endif #ifdef COURIER - "courier",cour_dialer, cour_disconnect, cour_abort, + { "courier", cour_dialer, cour_disconnect, cour_abort }, #endif #ifdef T3000 - "t3000",t3000_dialer, t3000_disconnect, t3000_abort, + { "t3000", t3000_dialer, t3000_disconnect, t3000_abort }, #endif #ifdef V3451 #ifndef V831 - "vadic",v3451_dialer, v3451_disconnect, v3451_abort, + { "vadic", v3451_dialer, v3451_disconnect, v3451_abort }, #endif - "v3451",v3451_dialer, v3451_disconnect, v3451_abort, + { "v3451", v3451_dialer, v3451_disconnect, v3451_abort }, #endif #ifdef V831 #ifndef V3451 - "vadic",v831_dialer, v831_disconnect, v831_abort, + { "vadic", v831_dialer, v831_disconnect, v831_abort }, #endif - "v831",v831_dialer, v831_disconnect, v831_abort, + { "v831", v831_dialer, v831_disconnect, v831_abort }, #endif - 0, 0, 0, 0 + { 0, 0, 0, 0 } }; diff --git a/usr.bin/tip/tip/cmds.c b/usr.bin/tip/tip/cmds.c index 07d7f51f08d0..c03934689a32 100644 --- a/usr.bin/tip/tip/cmds.c +++ b/usr.bin/tip/tip/cmds.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmds.c,v 1.13 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: cmds.c,v 1.26 2006/06/06 23:24:52 deraadt Exp $ */ /* $NetBSD: cmds.c,v 1.7 1997/02/11 09:24:03 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)cmds.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: cmds.c,v 1.13 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: cmds.c,v 1.26 2006/06/06 23:24:52 deraadt Exp $"; #endif /* not lint */ #include "tip.h" @@ -58,20 +54,28 @@ char null = '\0'; char *sep[] = { "second", "minute", "hour" }; static char *argv[10]; /* argument vector for take and put */ -void timeout(); /* timeout function called on alarm */ -void stopsnd(); /* SIGINT handler during file transfers */ -void intcopy(); /* interrupt routine for file transfers */ +static void transfer(char *, int, char *); +static void stopsnd(int); /* SIGINT handler during file transfers */ +static void intcopy(int); /* interrupt routine for file transfers */ +static void transmit(FILE *, char *, char *); +static void send(int); +static void execute(char *); +static int args(char *, char **, int); +static void prtime(char *, time_t); +static void tandem(char *); +static void hardwareflow(char *); +void linedisc(char *); +static int anyof(char *, char *); /* * FTP - remote ==> local * get a file from the remote host */ void -getfl(c) - char c; +getfl(int c) { - char buf[256], *cp, *expand(); - + char buf[256], *cp; + putchar(c); /* * get the UNIX receiving file's name @@ -83,7 +87,7 @@ getfl(c) printf("\r\n%s: cannot creat\r\n", copyname); return; } - + /* * collect parameters */ @@ -98,11 +102,10 @@ getfl(c) * Cu-like take command */ void -cu_take(cc) - char cc; +cu_take(int c) { int fd, argc; - char line[BUFSIZ], *expand(), *cp; + char line[BUFSIZ], *cp; if (prompt("[take] ", copyname, sizeof(copyname))) return; @@ -118,7 +121,7 @@ cu_take(cc) printf("\r\n%s: cannot create\r\n", argv[1]); return; } - (void)snprintf(line, sizeof(line), "cat %s;echo \01", argv[0]); + (void)snprintf(line, sizeof(line), "cat %s;echo ''|tr '\\012' '\\01'", argv[0]); transfer(line, fd, "\01"); } @@ -128,34 +131,38 @@ static jmp_buf intbuf; * Bulk transfer routine -- * used by getfl(), cu_take(), and pipefile() */ -void -transfer(buf, fd, eofchars) - char *buf, *eofchars; - int fd; +static void +transfer(char *buf, int fd, char *eofchars) { - int ct; + int ct, eof; char c, buffer[BUFSIZ]; char *p = buffer; - int cnt, eof; + size_t cnt; time_t start; sig_t f; char r; + if (number(value(FRAMESIZE)) > BUFSIZ || number(value(FRAMESIZE)) < 1) { + printf("framesize must be >= 1 and <= %d\r\n", BUFSIZ); + close(fd); + return; + } + parwrite(FD, buf, size(buf)); quit = 0; - kill(pid, SIGIOT); + kill(tipout_pid, SIGIOT); read(repdes[0], (char *)&ccc, 1); /* Wait until read process stops */ - + /* * finish command */ r = '\r'; parwrite(FD, &r, 1); do - read(FD, &c, 1); + read(FD, &c, 1); while ((c&STRIP_PAR) != '\n'); tcsetattr(0, TCSAFLUSH, &defchars); - + (void) setjmp(intbuf); f = signal(SIGINT, intcopy); start = time(0); @@ -198,12 +205,14 @@ transfer(buf, fd, eofchars) * FTP - remote ==> local process * send remote input to local process via pipe */ +/*ARGSUSED*/ void -pipefile() +pipefile(int c) { - int cpid, pdes[2]; + int pdes[2]; char buf[256]; int status, p; + pid_t cpid; if (prompt("Local command? ", buf, sizeof(buf))) return; @@ -244,10 +253,10 @@ pipefile() /* * Interrupt service routine for FTP */ -void -stopsnd() +/*ARGSUSED*/ +static void +stopsnd(int signo) { - stop = 1; signal(SIGINT, SIG_IGN); } @@ -258,14 +267,12 @@ stopsnd() * terminate transmission with pseudo EOF sequence */ void -sendfile(cc) - char cc; +sendfile(int c) { - FILE *fd; + FILE *fp; char *fnamex; - char *expand(); - putchar(cc); + putchar(c); /* * get file name */ @@ -276,11 +283,11 @@ sendfile(cc) * look up file */ fnamex = expand(fname); - if ((fd = fopen(fnamex, "r")) == NULL) { + if ((fp = fopen(fnamex, "r")) == NULL) { printf("%s: cannot open\r\n", fname); return; } - transmit(fd, value(EOFWRITE), NULL); + transmit(fp, value(EOFWRITE), NULL); if (!boolean(value(ECHOCHECK))) tcdrain(FD); } @@ -289,17 +296,15 @@ sendfile(cc) * Bulk transfer routine to remote host -- * used by sendfile() and cu_put() */ -void -transmit(fd, eofchars, command) - FILE *fd; - char *eofchars, *command; +static void +transmit(FILE *fp, char *eofchars, char *command) { char *pc, lastc; int c, ccount, lcount; time_t start_t, stop_t; sig_t f; - kill(pid, SIGIOT); /* put TIPOUT into a wait state */ + kill(tipout_pid, SIGIOT); /* put TIPOUT into a wait state */ stop = 0; f = signal(SIGINT, stopsnd); tcsetattr(0, TCSAFLUSH, &defchars); @@ -320,7 +325,7 @@ transmit(fd, eofchars, command) while (1) { ccount = 0; do { - c = getc(fd); + c = getc(fp); if (stop) goto out; if (c == EOF) @@ -332,8 +337,7 @@ transmit(fd, eofchars, command) if (c == '\n') { if (!boolean(value(RAWFTP))) c = '\r'; - } - else if (c == '\t') { + } else if (c == '\t') { if (!boolean(value(RAWFTP))) { if (boolean(value(TABEXPAND))) { send(' '); @@ -352,7 +356,7 @@ transmit(fd, eofchars, command) printf("\r%d", ++lcount); if (boolean(value(ECHOCHECK))) { timedout = 0; - alarm((long)value(ETIMEOUT)); + alarm((unsigned int)lvalue(ETIMEOUT)); do { /* wait for prompt */ read(FD, (char *)&c, 1); if (timedout || stop) { @@ -373,7 +377,7 @@ transmit(fd, eofchars, command) send(*pc); } stop_t = time(0); - fclose(fd); + fclose(fp); signal(SIGINT, f); if (boolean(value(VERBOSE))) { if (boolean(value(RAWFTP))) @@ -388,14 +392,13 @@ transmit(fd, eofchars, command) /* * Cu-like put command */ +/*ARGSUSED*/ void -cu_put(cc) - char cc; +cu_put(int c) { - FILE *fd; + FILE *fp; char line[BUFSIZ]; int argc; - char *expand(); char *copynamex; if (prompt("[put] ", copyname, sizeof(copyname))) @@ -408,7 +411,7 @@ cu_put(cc) if (argc == 1) argv[1] = argv[0]; copynamex = expand(argv[0]); - if ((fd = fopen(copynamex, "r")) == NULL) { + if ((fp = fopen(copynamex, "r")) == NULL) { printf("%s: cannot open\r\n", copynamex); return; } @@ -417,36 +420,31 @@ cu_put(cc) else (void)snprintf(line, sizeof(line), "stty -echo;cat>%s;stty echo\r", argv[1]); - transmit(fd, "\04", line); + transmit(fp, "\04", line); } /* * FTP - send single character * wait for echo & handle timeout */ -void -send(c) - int c; +static void +send(int c) { char cc; int retry = 0; cc = c; parwrite(FD, &cc, 1); -#ifdef notdef if (number(value(CDELAY)) > 0 && c != '\r') - nap(number(value(CDELAY))); -#endif + usleep(number(value(CDELAY))); if (!boolean(value(ECHOCHECK))) { -#ifdef notdef if (number(value(LDELAY)) > 0 && c == '\r') - nap(number(value(LDELAY))); -#endif + usleep(number(value(LDELAY))); return; } tryagain: timedout = 0; - alarm((long)value(ETIMEOUT)); + alarm((unsigned int)lvalue(ETIMEOUT)); read(FD, &cc, 1); alarm(0); if (timedout) { @@ -458,8 +456,9 @@ send(c) } } +/*ARGSUSED*/ void -timeout() +timeout(int signo) { signal(SIGALRM, timeout); timedout = 1; @@ -470,16 +469,17 @@ timeout() * Identical to consh() except for where stdout goes. */ void -pipeout(c) +pipeout(int c) { char buf[256]; - int cpid, status, p; + int status, p; + pid_t cpid; time_t start = time(NULL); putchar(c); if (prompt("Local command? ", buf, sizeof(buf))) return; - kill(pid, SIGIOT); /* put TIPOUT into a wait state */ + kill(tipout_pid, SIGIOT); /* put TIPOUT into a wait state */ signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); tcsetattr(0, TCSAFLUSH, &defchars); @@ -519,19 +519,20 @@ pipeout(c) * Fork a program with: * 0 <-> remote tty in * 1 <-> remote tty out - * 2 <-> local tty out + * 2 <-> local tty stderr */ void -consh(c) +consh(int c) { char buf[256]; - int cpid, status, p; + int status, p; + pid_t cpid; time_t start = time(NULL); putchar(c); if (prompt("Local command? ", buf, sizeof(buf))) return; - kill(pid, SIGIOT); /* put TIPOUT into a wait state */ + kill(tipout_pid, SIGIOT); /* put TIPOUT into a wait state */ signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); tcsetattr(0, TCSAFLUSH, &defchars); @@ -547,12 +548,9 @@ consh(c) while ((p = wait(&status)) > 0 && p != cpid) ; } else { - int i; - dup2(FD, 0); dup2(3, 1); - for (i = 3; i < 20; i++) - close(i); + closefrom(3); signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); execute(buf); @@ -571,11 +569,13 @@ consh(c) /* * Escape to local shell */ +/*ARGSUSED*/ void -shell() +shell(int c) { - int shpid, status; + int status; char *cp; + pid_t shpid; printf("[sh]\r\n"); signal(SIGINT, SIG_IGN); @@ -607,13 +607,14 @@ shell() * initiate the conversation with TIPOUT */ void -setscript() +setscript(void) { char c; + /* * enable TIPOUT side for dialogue */ - kill(pid, SIGEMT); + kill(tipout_pid, SIGEMT); if (boolean(value(SCRIPT))) write(fildes[1], value(RECORD), size(value(RECORD))); write(fildes[1], "\n", 1); @@ -629,8 +630,9 @@ setscript() * Change current working directory of * local portion of tip */ +/*ARGSUSED*/ void -chdirectory() +chdirectory(int c) { char dirname[PATH_MAX]; char *cp = dirname; @@ -646,11 +648,11 @@ chdirectory() } void -tipabort(msg) - char *msg; +tipabort(char *msg) { - kill(pid, SIGTERM); + signal(SIGTERM, SIG_IGN); + kill(tipout_pid, SIGTERM); disconnect(msg); if (msg != NOSTR) printf("\r\n%s", msg); @@ -661,8 +663,9 @@ tipabort(msg) exit(0); } +/*ARGSUSED*/ void -finish() +finish(int c) { char *dismsg; @@ -673,17 +676,17 @@ finish() tipabort(NOSTR); } -void -intcopy() +/*ARGSUSED*/ +static void +intcopy(int signo) { raw(); quit = 1; longjmp(intbuf, 1); } -void -execute(s) - char *s; +static void +execute(char *s) { char *cp; @@ -695,10 +698,8 @@ execute(s) execl(value(SHELL), cp, "-c", s, (char *)NULL); } -int -args(buf, a, num) - char *buf, *a[]; - int num; +static int +args(char *buf, char *a[], int num) { char *p = buf, *start; char **parg = a; @@ -721,10 +722,8 @@ args(buf, a, num) return(n); } -void -prtime(s, a) - char *s; - time_t a; +static void +prtime(char *s, time_t a) { int i; int nums[3]; @@ -735,14 +734,15 @@ prtime(s, a) } printf("%s", s); while (--i >= 0) - if (nums[i] || i == 0 && nums[1] == 0 && nums[2] == 0) + if (nums[i] || (i == 0 && nums[1] == 0 && nums[2] == 0)) printf("%d %s%c ", nums[i], sep[i], nums[i] == 1 ? '\0' : 's'); printf("\r\n!\r\n"); } +/*ARGSUSED*/ void -variable() +variable(int c) { char buf[256]; @@ -751,7 +751,7 @@ variable() vlex(buf); if (vtable[BEAUTIFY].v_access&CHANGED) { vtable[BEAUTIFY].v_access &= ~CHANGED; - kill(pid, SIGSYS); + kill(tipout_pid, SIGSYS); } if (vtable[SCRIPT].v_access&CHANGED) { vtable[SCRIPT].v_access &= ~CHANGED; @@ -775,18 +775,30 @@ variable() else tandem("off"); } - if (vtable[LECHO].v_access&CHANGED) { - vtable[LECHO].v_access &= ~CHANGED; - HD = boolean(value(LECHO)); - } + if (vtable[LECHO].v_access&CHANGED) { + vtable[LECHO].v_access &= ~CHANGED; + HD = boolean(value(LECHO)); + } if (vtable[PARITY].v_access&CHANGED) { vtable[PARITY].v_access &= ~CHANGED; setparity(NOSTR); } + if (vtable[HARDWAREFLOW].v_access&CHANGED) { + vtable[HARDWAREFLOW].v_access &= ~CHANGED; + if (boolean(value(HARDWAREFLOW))) + hardwareflow("on"); + else + hardwareflow("off"); + } + if (vtable[LINEDISC].v_access&CHANGED) { + vtable[LINEDISC].v_access &= ~CHANGED; + linedisc(NOSTR); + } } +/*ARGSUSED*/ void -listvariables() +listvariables(int c) { value_t *p; char buf[BUFSIZ]; @@ -809,22 +821,21 @@ listvariables() break; case BOOL: printf(" %s\r\n", - boolean(p->v_value) == '!' ? "false" : "true"); + !boolean(p->v_value) ? "false" : "true"); break; case CHAR: vis(buf, character(p->v_value), VIS_WHITE|VIS_OCTAL, 0); printf(" %s\r\n", buf); break; } - } + } } /* * Turn tandem mode on or off for remote tty. */ -void -tandem(option) - char *option; +static void +tandem(char *option) { struct termios rmtty; @@ -841,12 +852,39 @@ tandem(option) } /* - * Send a break. + * Turn hardware flow control on or off for remote tty. + */ +static void +hardwareflow(char *option) +{ + struct termios rmtty; + + tcgetattr(FD, &rmtty); + if (strcmp(option, "on") == 0) + rmtty.c_iflag |= CRTSCTS; + else + rmtty.c_iflag &= ~CRTSCTS; + tcsetattr(FD, TCSADRAIN, &rmtty); +} + +/* + * Change line discipline to the specified one. */ void -genbrk() +linedisc(char *option) { + int ld = (int)value(LINEDISC); + ioctl(FD, TIOCSETD, &ld); +} + +/* + * Send a break. + */ +/*ARGSUSED*/ +void +genbrk(int c) +{ ioctl(FD, TIOCSBRK, NULL); sleep(1); ioctl(FD, TIOCCBRK, NULL); @@ -856,10 +894,8 @@ genbrk() * Suspend tip */ void -suspend(c) - char c; +suspend(int c) { - unraw(); kill(c == CTRL('y') ? getpid() : 0, SIGTSTP); raw(); @@ -868,16 +904,15 @@ suspend(c) /* * expand a file name if it includes shell meta characters */ - char * -expand(name) - char name[]; +expand(char name[]) { static char xname[BUFSIZ]; char cmdbuf[BUFSIZ]; - int pid, l; + int l; char *cp, *Shell; int s, pivec[2]; + pid_t pid; if (!anyof(name, "~{[*?$`'\"\\")) return(name); @@ -939,9 +974,8 @@ expand(name) /* * Are any of the characters in the two strings the same? */ -int -anyof(s1, s2) - char *s1, *s2; +static int +anyof(char *s1, char *s2) { int c; diff --git a/usr.bin/tip/tip/cmdtab.c b/usr.bin/tip/tip/cmdtab.c index 7f77e2777749..99b563d7ad73 100644 --- a/usr.bin/tip/tip/cmdtab.c +++ b/usr.bin/tip/tip/cmdtab.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmdtab.c,v 1.3 2001/09/09 17:58:41 millert Exp $ */ +/* $OpenBSD: cmdtab.c,v 1.7 2006/03/17 14:43:06 moritz Exp $ */ /* $NetBSD: cmdtab.c,v 1.3 1994/12/08 09:30:46 jtc Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,15 +34,11 @@ #if 0 static char sccsid[] = "@(#)cmdtab.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: cmdtab.c,v 1.3 2001/09/09 17:58:41 millert Exp $"; +static const char rcsid[] = "$OpenBSD: cmdtab.c,v 1.7 2006/03/17 14:43:06 moritz Exp $"; #endif /* not lint */ #include "tip.h" -extern int shell(), getfl(), sendfile(), chdirectory(); -extern int finish(), help(), pipefile(), pipeout(), consh(), variable(); -extern int cu_take(), cu_put(), dollar(), genbrk(), suspend(), listvariables(); - esctable_t etable[] = { { '!', NORM, "shell", shell }, { '<', NORM, "receive file from remote host", getfl }, diff --git a/usr.bin/tip/tip/cu.1 b/usr.bin/tip/tip/cu.1 new file mode 100644 index 000000000000..09b6128fc1a2 --- /dev/null +++ b/usr.bin/tip/tip/cu.1 @@ -0,0 +1,470 @@ +.\" $OpenBSD: cu.1,v 1.3 2006/06/07 06:35:59 mbalmer Exp $ +.\" +.\" Copyright (c) 1980, 1990, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)tip.1 8.4 (Berkeley) 4/18/94 +.\" +.Dd September 9, 2001 +.Dt CU 1 +.Os +.Sh NAME +.Nm cu +.Nd call UNIX +.Sh SYNOPSIS +.Nm +.Op Fl ehot +.Op Fl a Ar acu +.Op Fl l Ar line +.Op Fl s Ar speed \*(Ba Fl speed +.Op Ar phone-number +.Sh DESCRIPTION +.Nm +establishes a full-duplex connection to another machine, giving the +appearance of being logged in directly on the remote CPU. +It goes without saying that you must have a login on the machine (or +equivalent) to which you wish to connect. +.Pp +The options are as follows: +.Bl -tag -width 4n +.It Fl a Ar acu +Set the acu. +.It Fl e +Use even parity. +If both +.Fl e +and +.Fl o +are given, then no parity is used +(the default). +.It Fl h +Echo characters locally (half-duplex mode). +.It Fl l Ar line +Specify the line to use. +Either of the forms like +.Pa tty00 +or +.Pa /dev/tty00 +are permitted. +.It Fl o +Use odd parity. +If both +.Fl e +and +.Fl o +are given, then no parity is used +(the default). +.It Fl s Ar speed \*(Ba Fl speed +Set the speed of the connection. +The default is 9600. +.It Fl t +Connect via a hard-wired connection to a host on a dial-up line. +.El +.Pp +Typed characters are normally transmitted directly to the remote +machine (which does the echoing as well). +A tilde +.Pq Ql ~ +appearing as the first character of a line is an escape signal; the +following are recognized: +.Bl -tag -offset indent -width Fl +.It Ic ~^D No or Ic ~. +Drop the connection and exit. +Only the connection is dropped \(en the login session is not terminated. +.It Ic ~c Op Ar name +Change directory to +.Ar name +(no argument implies change to home directory). +.It Ic ~! +Escape to a shell (exiting the shell will return to +.Nm ) . +.It Ic ~\*(Gt +Copy file from local to remote. +.Nm +prompts for the name of a local file to transmit. +.It Ic ~\*(Lt +Copy file from remote to local. +.Nm +prompts first for the name of the file to be sent, then for a command +to be executed on the remote machine. +.It Ic ~p Ar from Op Ar to +Send a file to a remote +.Ux +host. +This command causes the remote +.Ux +system to run the following command string, +sending it the +.Sq from +file: +.Bd -literal -offset indent +stty -echo; cat \*(Gt 'to'; stty echo +.Ed +.Pp +If the +.Sq to +file isn't specified, the +.Sq from +file name is used. +This command is actually a +.Ux +specific version of the +.Ic ~\*(Gt +command. +.It Ic ~t Ar from Op Ar to +Take a file from a remote +.Ux +host. +As in the +.Ic ~p +command, the +.Sq to +file defaults to the +.Sq from +file name if it isn't specified. +The remote host executes the following command string +to send the file to +.Nm : +.Bd -literal -offset indent +cat 'from'; echo '' | tr '\e012' '\e01' +.Ed +.It Ic ~| +Pipe the output from a remote command to a local +.Ux +process. +The command string sent to the local +.Ux +system is processed by the shell. +.It Ic ~$ +Pipe the output from a local +.Ux +process to the remote host. +The command string sent to the local +.Ux +system is processed by the shell. +.It Ic ~C +Fork a child process on the local system to perform special protocols +such as \s-1XMODEM\s+1. +The child program will be run with the following arrangement of +file descriptors: +.Bd -literal -offset indent +0 \*(Lt-\*(Gt remote tty in +1 \*(Lt-\*(Gt remote tty out +2 \*(Lt-\*(Gt local tty stderr +.Ed +.It Ic ~# +Send a +.Dv BREAK +to the remote system. +For systems which don't support the necessary +.Fn ioctl +call, the break is simulated by a sequence of line speed changes and +DEL characters. +.It Ic ~s +Set a variable (see the discussion below). +.It Ic ~v +List all variables and their values (if set). +.It Ic ~^Z +Stop +.Nm +(only available with job control). +.It Ic ~^Y +Stop only the +.Dq local side +of +.Nm +(only available with job control); the +.Dq remote side +of +.Nm , +the side that displays output from the remote host, is left running. +.It Ic ~? +Get a summary of the tilde escapes. +.El +.Pp +When +.Nm +prompts for an argument, for example during setup of a file transfer, +the line typed may be edited with the standard erase and kill characters. +A null line in response to a prompt, or an interrupt, will abort the +dialogue and return the user to the remote machine. +.Pp +.Nm +guards against multiple users connecting to a remote system by opening +modems and terminal lines with exclusive access, and by honoring the +locking protocol used by +.Xr uucico . +.Pp +During file transfers +.Nm +provides a running count of the number of lines transferred. +When using the +.Ic ~\*(Gt +and +.Ic ~\*(Lt +commands, the +.Dq eofread +and +.Dq eofwrite +variables are used to recognize end-of-file when reading, and specify +end-of-file when writing (see below). +File transfers normally depend on hardwareflow or tandem mode for flow control. +If the remote system does not support hardwareflow or tandem mode, +.Dq echocheck +may be set to indicate +.Nm +should synchronize with the remote system on the echo of each +transmitted character. +.Pp +When +.Nm +must dial a phone number to connect to a system, it will print various +messages indicating its actions. +.Nm +supports a variety of auto-call units and modems with the +.Ar at +capability in system descriptions. +.Pp +Support for Ventel 212+ (ventel), Hayes AT-style (hayes), +USRobotics Courier (courier), Telebit T3000 (t3000) and +Racal-Vadic 831 (vadic) units is enabled by default. +.Pp +Support for Bizcomp 1031[fw] (biz31[fw]), Bizcomp 1022[fw] +(biz22[fw]), DEC DF0[23]-AC (df0[23]), DEC DN-11 (dn11) and +Racal-Vadic 3451 (v3451) units can be added by recompiling +.Nm +with the appropriate defines. +.Pp +Note that if support for both the Racal-Vadic 831 and 3451 is enabled, +they are referred to as the v831 and v3451 respectively. +If only one of the two is supported, it is referred to as vadic. +.Ss VARIABLES +.Nm +maintains a set of variables which control its operation. +Some of these variables are read-only to normal users (root is allowed +to change anything of interest). +Variables may be displayed and set through the +.Sq s +escape. +The syntax for variables is patterned after +.Xr vi 1 +and +.Xr Mail 1 . +Supplying +.Dq all +as an argument to the set command displays all variables readable by +the user. +Alternatively, the user may request display of a particular variable +by attaching a +.Ql \&? +to the end. +For example, +.Dq escape? +displays the current escape character. +.Pp +Variables are numeric, string, character, or boolean values. +Boolean variables are set merely by specifying their name; they may be +reset by prepending a +.Ql !\& +to the name. +Other variable types are set by concatenating an +.Ql = +and the value. +The entire assignment must not have any blanks in it. +A single set command may be used to interrogate as well as set a +number of variables. +Certain common variables have abbreviations. +The following is a list of common variables, their abbreviations, and +their default values: +.Bl -tag -width Ar +.It Ar baudrate +(num) The baud rate at which the connection was established; +abbreviated +.Ar ba . +.It Ar beautify +(bool) Discard unprintable characters when a session is being +scripted; abbreviated +.Ar be . +.It Ar dialtimeout +(num) When dialing a phone number, the time (in seconds) to wait for a +connection to be established; abbreviated +.Ar dial . +.It Ar echocheck +(bool) Synchronize with the remote host during file transfer by +waiting for the echo of the last character transmitted; default is +.Ar off . +.It Ar eofread +(str) The set of characters which signify an end-of-transmission +during a +.Ic ~\*(Lt +file transfer command; abbreviated +.Ar eofr . +.It Ar eofwrite +(str) The string sent to indicate end-of-transmission during a +.Ic ~\*(Gt +file transfer command; abbreviated +.Ar eofw . +.It Ar eol +(str) The set of characters which indicate an end-of-line. +.Nm +will recognize escape characters only after an end-of-line. +.It Ar escape +(char) The command prefix (escape) character; abbreviated +.Ar es ; +default value is +.Ql ~ . +.It Ar exceptions +(str) The set of characters which should not be discarded due to the +beautification switch; abbreviated +.Ar ex ; +default value is +.Dq \et\en\ef\eb . +.It Ar force +(char) The character used to force literal data transmission; +abbreviated +.Ar fo ; +default value is +.Ql ^P . +.It Ar framesize +(num) The amount of data (in bytes) to buffer between filesystem +writes when receiving files; abbreviated +.Ar fr . +.It Ar hardwareflow +(bool) Whether hardware flow control (CRTSCTS) is enabled for the +connection; abbreviated +.Ar hf ; +default value is +.Ql off . +.It Ar host +(str) The name of the host to which you are connected; abbreviated +.Ar ho . +.It Ar linedisc +(num) The line discipline to use; abbreviated +.Ar ld . +.It Ar prompt +(char) The character which indicates an end-of-line on the remote +host; abbreviated +.Ar pr ; +default value is +.Ql \en . +This value is used to synchronize during data transfers. +The count of lines transferred during a file transfer command is based +on receipt of this character. +.It Ar raise +(bool) Upper case mapping mode; abbreviated +.Ar ra ; +default value is +.Ar off . +When this mode is enabled, all lowercase letters will be mapped to +uppercase by +.Nm +for transmission to the remote machine. +.It Ar raisechar +(char) The input character used to toggle uppercase mapping mode; +abbreviated +.Ar rc ; +default value is +.Ql ^A . +.It Ar record +(str) The name of the file in which a session script is recorded; +abbreviated +.Ar rec . +.It Ar script +(bool) Session scripting mode; abbreviated +.Ar sc ; +default is +.Ar off . +When +.Ar script +is +.Li true , +.Nm +will record everything transmitted by the remote machine in the script +record file specified in +.Ar record . +If the +.Ar beautify +switch is on, only printable +.Tn ASCII +characters will be included in the script file (those characters +between 040 and 0177). +The variable +.Ar exceptions +is used to indicate characters which are an exception to the normal +beautification rules. +.It Ar tabexpand +(bool) Expand tabs to spaces during file transfers; abbreviated +.Ar tab ; +default value is +.Ar false . +Each tab is expanded to 8 spaces. +.It Ar tandem +(bool) Use XON/XOFF flow control to throttle data from the remote host; +abbreviated +.Ar ta . +The default value is +.Ar true . +.It Ar verbose +(bool) Verbose mode; abbreviated +.Ar verb ; +default is +.Ar true . +When verbose mode is enabled, +.Nm +prints messages while dialing, shows the current number of lines +transferred during a file transfer operations, and more. +.El +.Sh ENVIRONMENT +.Bl -tag -width Fl +.It Ev HOME +The home directory to use for the +.Ic ~c +command. +.It Ev SHELL +The name of the shell to use for the +.Ic ~!\& +command; default value is +.Dq /bin/sh . +.El +.Sh FILES +.Bl -tag -width "/var/spool/lock/LCK..*" -compact +.It Pa /var/log/aculog +line access log +.It Pa /var/spool/lock/LCK..* +lock file to avoid conflicts with +.Xr uucp +.El +.Sh SEE ALSO +.Xr tip 1 +.Sh HISTORY +The +.Nm +command appeared in +.Bx 4.2 . +.Sh BUGS +The full set of variables is undocumented and should, probably, be +pared down. diff --git a/usr.bin/tip/tip/cu.c b/usr.bin/tip/tip/cu.c index 8a44845b4269..9cff32bdc332 100644 --- a/usr.bin/tip/tip/cu.c +++ b/usr.bin/tip/tip/cu.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cu.c,v 1.10 2001/09/26 06:07:28 pvalchev Exp $ */ +/* $OpenBSD: cu.c,v 1.19 2006/05/25 08:41:52 jmc Exp $ */ /* $NetBSD: cu.c,v 1.5 1997/02/11 09:24:05 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,23 +34,20 @@ #if 0 static char sccsid[] = "@(#)cu.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: cu.c,v 1.10 2001/09/26 06:07:28 pvalchev Exp $"; +static const char rcsid[] = "$OpenBSD: cu.c,v 1.19 2006/05/25 08:41:52 jmc Exp $"; #endif /* not lint */ #include "tip.h" -void cleanup(); -void cuusage(); +static void cuusage(void); /* * Botch the interface to look like cu's */ void -cumain(argc, argv) - int argc; - char *argv[]; +cumain(int argc, char *argv[]) { - int ch, i; + int ch, i, parity; long l; char *cp; static char sbuf[12]; @@ -63,8 +56,9 @@ cumain(argc, argv) cuusage(); CU = DV = NOSTR; BR = DEFBR; + parity = 0; /* none */ while ((ch = getopt(argc, argv, "a:l:s:htoe0123456789")) != -1) { - switch(ch) { + switch (ch) { case 'a': CU = optarg; break; @@ -82,8 +76,7 @@ cumain(argc, argv) break; case 's': l = strtol(optarg, &cp, 10); - if (*cp != '\0' || l < 0 || l >= INT_MAX || - speed((int)l) == 0) { + if (*cp != '\0' || l < 0 || l >= INT_MAX) { fprintf(stderr, "%s: unsupported speed %s\n", __progname, optarg); exit(3); @@ -98,10 +91,16 @@ cumain(argc, argv) HW = 1, DU = -1; break; case 'o': - setparity("odd"); + if (parity != 0) + parity = 0; /* -e -o */ + else + parity = 1; /* odd */ break; case 'e': - setparity("even"); + if (parity != 0) + parity = 0; /* -o -e */ + else + parity = -1; /* even */ break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': @@ -133,6 +132,7 @@ cumain(argc, argv) signal(SIGQUIT, cleanup); signal(SIGHUP, cleanup); signal(SIGTERM, cleanup); + signal(SIGCHLD, SIG_DFL); /* * The "cu" host name is used to define the @@ -152,24 +152,44 @@ cumain(argc, argv) loginit(); user_uid(); vinit(); - setparity("none"); + switch (parity) { + case -1: + setparity("even"); + break; + case 1: + setparity("odd"); + break; + default: + setparity("none"); + break; + } setboolean(value(VERBOSE), FALSE); - if (HW) - ttysetup(speed(BR)); - if (connect()) { + if (HW && ttysetup(BR)) { + fprintf(stderr, "%s: unsupported speed %ld\n", + __progname, BR); + daemon_uid(); + (void)uu_unlock(uucplock); + exit(3); + } + if (con()) { printf("Connect failed\n"); daemon_uid(); (void)uu_unlock(uucplock); exit(1); } - if (!HW) - ttysetup(speed(BR)); + if (!HW && ttysetup(BR)) { + fprintf(stderr, "%s: unsupported speed %ld\n", + __progname, BR); + daemon_uid(); + (void)uu_unlock(uucplock); + exit(3); + } } -void -cuusage() +static void +cuusage(void) { - fprintf(stderr, "usage: cu [-ehot] [-a acu] [-l line] [-s speed] [-#] " - "[phone-number]\n"); + fprintf(stderr, "usage: cu [-ehot] [-a acu] [-l line] " + "[-s speed | -speed] [phone-number]\n"); exit(8); } diff --git a/usr.bin/tip/tip/hunt.c b/usr.bin/tip/tip/hunt.c index 60aaa2350957..a6cf72ec6c5a 100644 --- a/usr.bin/tip/tip/hunt.c +++ b/usr.bin/tip/tip/hunt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hunt.c,v 1.8 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: hunt.c,v 1.13 2006/03/17 19:39:46 deraadt Exp $ */ /* $NetBSD: hunt.c,v 1.6 1997/04/20 00:02:10 mellon Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,26 +34,26 @@ #if 0 static char sccsid[] = "@(#)hunt.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: hunt.c,v 1.8 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: hunt.c,v 1.13 2006/03/17 19:39:46 deraadt Exp $"; #endif /* not lint */ #include "tip.h" -extern char *getremote(); - static jmp_buf deadline; static int deadfl; -void -dead() +static void dead(int); + +/*ARGSUSED*/ +static void +dead(int signo) { deadfl = 1; longjmp(deadline, 1); } long -hunt(name) - char *name; +hunt(char *name) { char *cp; sig_t f; @@ -85,7 +81,7 @@ hunt(name) if (setjmp(deadline) == 0) { alarm(10); FD = open(cp, (O_RDWR | - (boolean(value(DC)) ? O_NONBLOCK : 0))); + (boolean(value(DC)) ? O_NONBLOCK : 0))); } alarm(0); if (FD < 0) { diff --git a/usr.bin/tip/tip/log.c b/usr.bin/tip/tip/log.c index 1a715c0d5f52..bb899d896a4c 100644 --- a/usr.bin/tip/tip/log.c +++ b/usr.bin/tip/tip/log.c @@ -1,4 +1,4 @@ -/* $OpenBSD: log.c,v 1.5 2001/09/09 19:30:49 millert Exp $ */ +/* $OpenBSD: log.c,v 1.8 2006/03/16 19:32:46 deraadt Exp $ */ /* $NetBSD: log.c,v 1.4 1994/12/24 17:56:28 cgd Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)log.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: log.c,v 1.5 2001/09/09 19:30:49 millert Exp $"; +static const char rcsid[] = "$OpenBSD: log.c,v 1.8 2006/03/16 19:32:46 deraadt Exp $"; #endif /* not lint */ #include "tip.h" @@ -50,8 +46,7 @@ static FILE *flog = NULL; * Log file maintenance routines */ void -logent(group, num, acu, message) - char *group, *num, *acu, *message; +logent(char *group, char *num, char *acu, char *message) { char *user, *timestamp; struct passwd *pwd; @@ -85,7 +80,7 @@ logent(group, num, acu, message) } void -loginit() +loginit(void) { flog = fopen(value(LOG), "a"); if (flog == NULL) diff --git a/usr.bin/tip/tip/partab.c b/usr.bin/tip/tip/partab.c index b0e4dc2f732e..0b8df9c65a4c 100644 --- a/usr.bin/tip/tip/partab.c +++ b/usr.bin/tip/tip/partab.c @@ -1,4 +1,4 @@ -/* $OpenBSD: partab.c,v 1.3 1997/04/02 01:47:02 millert Exp $ */ +/* $OpenBSD: partab.c,v 1.5 2003/06/03 02:56:18 millert Exp $ */ /* $NetBSD: partab.c,v 1.4 1996/12/29 10:38:21 cgd Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)partab.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: partab.c,v 1.3 1997/04/02 01:47:02 millert Exp $"; +static const char rcsid[] = "$OpenBSD: partab.c,v 1.5 2003/06/03 02:56:18 millert Exp $"; #endif /* not lint */ /* diff --git a/usr.bin/tip/tip/pathnames.h b/usr.bin/tip/tip/pathnames.h index cc7cbf4a7a2a..cc5995756c64 100644 --- a/usr.bin/tip/tip/pathnames.h +++ b/usr.bin/tip/tip/pathnames.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pathnames.h,v 1.2 1996/06/26 05:40:45 deraadt Exp $ */ +/* $OpenBSD: pathnames.h,v 1.3 2003/06/03 02:56:18 millert Exp $ */ /* $NetBSD: pathnames.h,v 1.3 1994/12/08 09:30:59 jtc Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * diff --git a/usr.bin/tip/tip/remote.c b/usr.bin/tip/tip/remote.c index f2aaeb243523..249b315fe058 100644 --- a/usr.bin/tip/tip/remote.c +++ b/usr.bin/tip/tip/remote.c @@ -1,4 +1,4 @@ -/* $OpenBSD: remote.c,v 1.10 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: remote.c,v 1.16 2006/06/06 23:24:52 deraadt Exp $ */ /* $NetBSD: remote.c,v 1.5 1997/04/20 00:02:45 mellon Exp $ */ /* @@ -14,11 +14,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -36,7 +32,7 @@ */ #ifndef lint -static char copyright[] = +static const char copyright[] = "@(#) Copyright (c) 1992, 1993\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ @@ -45,7 +41,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)remote.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: remote.c,v 1.10 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: remote.c,v 1.16 2006/06/06 23:24:52 deraadt Exp $"; #endif /* not lint */ #include @@ -72,13 +68,12 @@ static char *db_array[3] = { _PATH_REMOTE, 0, 0 }; #define cgetflag(f) (cgetcap(bp, f, ':') != NULL) +static void getremcap(char *); + static void -getremcap(host) - char *host; +getremcap(char *host) { - char **p, ***q; - char *bp; - char *rempath; + char **p, ***q, *bp, *rempath; int stat; rempath = getenv("REMOTE"); @@ -93,8 +88,8 @@ getremcap(host) } if ((stat = cgetent(&bp, db_array, host)) < 0) { - if (DV || - host[0] == '/' && access(DV = host, R_OK | W_OK) == 0) { + if ((DV != NULL) || + (host[0] == '/' && access(DV = host, R_OK | W_OK) == 0)) { CU = DV; HO = host; HW = 1; @@ -104,18 +99,18 @@ getremcap(host) FS = DEFFS; return; } - switch(stat) { + switch (stat) { case -1: fprintf(stderr, "%s: unknown host %s\n", __progname, host); break; case -2: - fprintf(stderr, + fprintf(stderr, "%s: can't open host description file\n", __progname); break; case -3: - fprintf(stderr, + fprintf(stderr, "%s: possible reference loop in host description file\n", __progname); break; } @@ -127,6 +122,8 @@ getremcap(host) cgetstr(bp, *p, *q); if (!BR && (cgetnum(bp, "br", &BR) == -1)) BR = DEFBR; + if (!LD && (cgetnum(bp, "ld", &LD) == -1)) + LD = TTYDISC; if (cgetnum(bp, "fs", &FS) == -1) FS = DEFFS; if (DU < 0) @@ -186,6 +183,8 @@ getremcap(host) setboolean(value(HALFDUPLEX), 1); if (cgetflag("dc")) setboolean(value(DC), 1); + if (cgetflag("hf")) + setboolean(value(HARDWAREFLOW), 1); if (RE == NOSTR) RE = (char *)"tip.record"; if (EX == NOSTR) @@ -207,8 +206,7 @@ getremcap(host) } char * -getremote(host) - char *host; +getremote(char *host) { char *cp; static char *next; diff --git a/usr.bin/tip/tip/tip.1 b/usr.bin/tip/tip/tip.1 index 805d77c4151c..1c072208aa23 100644 --- a/usr.bin/tip/tip/tip.1 +++ b/usr.bin/tip/tip/tip.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tip.1,v 1.19 2001/09/23 06:15:30 pvalchev Exp $ +.\" $OpenBSD: tip.1,v 1.37 2006/06/07 06:35:59 mbalmer Exp $ .\" $NetBSD: tip.1,v 1.7 1994/12/08 09:31:05 jtc Exp $ .\" .\" Copyright (c) 1980, 1990, 1993 @@ -12,11 +12,7 @@ .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors +.\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" @@ -38,67 +34,31 @@ .Dt TIP 1 .Os .Sh NAME -.Nm tip , -.Nm cu +.Nm tip .Nd connect to a remote system .Sh SYNOPSIS -.Nm tip +.Nm .Op Fl nv .Op Fl Ar speed -.Op Ar system\-name -.Nm cu -.Op Fl ehot -.Op Fl a Ar acu -.Op Fl l Ar line -.Op Fl s Ar speed -.Op Fl # -.Op Ar phone\-number +.Op Ar system-name .Sh DESCRIPTION .Nm -and -.Nm cu -establish a full-duplex connection to another machine, giving the +establishes a full-duplex connection to another machine, giving the appearance of being logged in directly on the remote CPU. It goes without saying that you must have a login on the machine (or equivalent) to which you wish to connect. -The preferred interface is -.Nm tip . -The -.Nm cu -interface is included for those people attached to the -``call -.Ux Ns '' -command of -.At v7 . -This manual page -describes only -.Nm tip . .Pp The options are as follows: .Bl -tag -width 4n -.It Fl a Ar acu -Set the acu. -.It Fl l Ar line -For -.Nm cu , -specify the line to use. Either of the forms like -.Pa tty00 -or -.Pa /dev/tty00 -are permitted. .It Fl n No escape (disable tilde). -.It Fl s Ar speed -For -.Nm cu , -set the speed of the connection. Defaults to 9600. .It Fl v Set verbose mode. .El .Pp If .Ar speed -is specified it will override any baudrate specified in the system +is specified, it will override any baudrate specified in the system description being used. .Pp If neither @@ -120,7 +80,7 @@ is not, will be set to a value of 'tip' with .Ar speed appended. -e.g. +For example, .Ic tip -1200 will set .Ar system-name @@ -133,104 +93,107 @@ A tilde appearing as the first character of a line is an escape signal; the following are recognized: .Bl -tag -offset indent -width Fl -.It Ic \&~^D No or Ic \&~ . -Drop the connection and exit (you may still be logged in on the remote -machine). -.It Ic \&~c Op Ar name +.It Ic ~^D No or Ic ~. +Drop the connection and exit. +Only the connection is dropped \(en the login session is not terminated. +.It Ic ~c Op Ar name Change directory to .Ar name -(no argument implies change to your home directory). -.It Ic \&~! -Escape to a shell (exiting the shell will return you to -.Nm tip Ns ). -.It Ic \&~> +(no argument implies change to home directory). +.It Ic ~! +Escape to a shell (exiting the shell will return to +.Nm ) . +.It Ic ~\*(Gt Copy file from local to remote. .Nm prompts for the name of a local file to transmit. -.It Ic \&~< +.It Ic ~\*(Lt Copy file from remote to local. .Nm prompts first for the name of the file to be sent, then for a command to be executed on the remote machine. -.It Ic \&~p Ar from Op Ar to +.It Ic ~p Ar from Op Ar to Send a file to a remote .Ux host. -The put command causes the remote +This command causes the remote .Ux -system to run the command string -.Dq cat > 'to' , -while -.Nm -sends it the -.Dq from -file. +system to run the following command string, +sending it the +.Sq from +file: +.Bd -literal -offset indent +stty -echo; cat \*(Gt 'to'; stty echo +.Ed +.Pp If the -.Dq to -file isn't specified the -.Dq from +.Sq to +file isn't specified, the +.Sq from file name is used. -this command is actually a +This command is actually a .Ux specific version of the -.Ic ~> +.Ic ~\*(Gt command. -.It Ic \&~t Ar from Op Ar to +.It Ic ~t Ar from Op Ar to Take a file from a remote .Ux host. -As in the put command the -.Dq to +As in the +.Ic ~p +command, the +.Sq to file defaults to the -.Dq from +.Sq from file name if it isn't specified. -The remote host executes the command string -.Dq cat 'from';echo ^A +The remote host executes the following command string to send the file to -.Nm tip . -.It Ic \&~| +.Nm : +.Bd -literal -offset indent +cat 'from'; echo '' | tr '\e012' '\e01' +.Ed +.It Ic ~| Pipe the output from a remote command to a local .Ux process. The command string sent to the local .Ux system is processed by the shell. -.It Ic \&~$ +.It Ic ~$ Pipe the output from a local .Ux process to the remote host. The command string sent to the local .Ux system is processed by the shell. -.It Ic \&~C +.It Ic ~C Fork a child process on the local system to perform special protocols such as \s-1XMODEM\s+1. -The child program will be run with the following somewhat unusual -arrangement of file descriptors: +The child program will be run with the following arrangement of +file descriptors: .Bd -literal -offset indent -0 <-> local tty in -1 <-> local tty out -2 <-> local tty out -3 <-> remote tty in -4 <-> remote tty out +0 \*(Lt-\*(Gt remote tty in +1 \*(Lt-\*(Gt remote tty out +2 \*(Lt-\*(Gt local tty stderr .Ed -.It Ic \&~# +.It Ic ~# Send a .Dv BREAK to the remote system. For systems which don't support the necessary .Fn ioctl -call the break is simulated by a sequence of line speed changes and +call, the break is simulated by a sequence of line speed changes and DEL characters. -.It Ic \&~s +.It Ic ~s Set a variable (see the discussion below). -.It Ic \&~v +.It Ic ~v List all variables and their values (if set). -.It Ic \&~^Z +.It Ic ~^Z Stop .Nm (only available with job control). -.It Ic \&~^Y +.It Ic ~^Y Stop only the .Dq local side of @@ -238,13 +201,13 @@ of (only available with job control); the .Dq remote side of -.Nm tip , +.Nm , the side that displays output from the remote host, is left running. -.It Ic \&~? +.It Ic ~? Get a summary of the tilde escapes. .El .Pp -To find the system description and thus the operating characteristics +To find the system description, and thus the operating characteristics of .Ar system-name , .Nm @@ -256,17 +219,17 @@ The search order is If the environment variable .Ev REMOTE does not start with a -.Ql \&/ +.Ql / it is assumed to be a system description, and is considered first. .It If the environment variable .Ev REMOTE begins with a -.Ql \&/ +.Ql / it is assumed to be a path to a .Xr remote 5 database, and the specified database is searched. -.It +.It The default .Xr remote 5 database, @@ -279,48 +242,48 @@ See for full documentation on system descriptions. .Pp The -.Ar ba +.Ar br capability is used in system descriptions to specify the baud rate with which to establish a connection. If the value specified is not suitable, the baud rate to be used may -be given on the command line, e.g., -.Ql "tip -300 mds" . +be given on the command line, e.g.\& +.Ql tip -300 mds . .Pp When .Nm -establishes a connection it sends out the connection message +establishes a connection, it sends out the connection message specified in the .Ar cm capability of the system description being used. .Pp When .Nm -prompts for an argument (e.g., during setup of a file transfer) the +prompts for an argument, for example during setup of a file transfer, the line typed may be edited with the standard erase and kill characters. A null line in response to a prompt, or an interrupt, will abort the -dialogue and return you to the remote machine. +dialogue and return the user to the remote machine. .Pp .Nm guards against multiple users connecting to a remote system by opening modems and terminal lines with exclusive access, and by honoring the locking protocol used by -.Xr uucico 8 . +.Xr uucico . .Pp During file transfers .Nm provides a running count of the number of lines transferred. When using the -.Ic ~> +.Ic ~\*(Gt and -.Ic ~< +.Ic ~\*(Lt commands, the .Dq eofread and .Dq eofwrite variables are used to recognize end-of-file when reading, and specify end-of-file when writing (see below). -File transfers normally depend on tandem mode for flow control. -If the remote system does not support tandem mode, +File transfers normally depend on hardwareflow or tandem mode for flow control. +If the remote system does not support hardwareflow or tandem mode, .Dq echocheck may be set to indicate .Nm @@ -343,7 +306,7 @@ Racal-Vadic 831 (vadic) units is enabled by default. Support for Bizcomp 1031[fw] (biz31[fw]), Bizcomp 1022[fw] (biz22[fw]), DEC DF0[23]-AC (df0[23]), DEC DN-11 (dn11) and Racal-Vadic 3451 (v3451) units can be added by recompiling -.Xr tip 1 +.Nm tip with the appropriate defines. .Pp Note that if support for both the Racal-Vadic 831 and 3451 is enabled @@ -367,7 +330,7 @@ as an argument to the set command displays all variables readable by the user. Alternatively, the user may request display of a particular variable by attaching a -.Ql ? +.Ql \&? to the end. For example, .Dq escape? @@ -376,7 +339,7 @@ displays the current escape character. Variables are numeric, string, character, or boolean values. Boolean variables are set merely by specifying their name; they may be reset by prepending a -.Ql ! +.Ql \&! to the name. Other variable types are set by concatenating an .Ql = @@ -387,26 +350,25 @@ number of variables. Variables may be initialized at run time by placing set commands (without the .Ql ~s -prefix in a file -.Pa .tiprc -in one's home directory). -The +prefix) in the initialization file +.Pa ~/.tiprc ; +the .Fl v -option causes +option additionally causes .Nm to display the sets as they are made. Certain common variables have abbreviations. The following is a list of common variables, their abbreviations, and their default values: .Bl -tag -width Ar -.It Ar beautify -(bool) Discard unprintable characters when a session is being -scripted; abbreviated -.Ar be . .It Ar baudrate (num) The baud rate at which the connection was established; abbreviated .Ar ba . +.It Ar beautify +(bool) Discard unprintable characters when a session is being +scripted; abbreviated +.Ar be . .It Ar dialtimeout (num) When dialing a phone number, the time (in seconds) to wait for a connection to be established; abbreviated @@ -418,12 +380,12 @@ waiting for the echo of the last character transmitted; default is .It Ar eofread (str) The set of characters which signify an end-of-transmission during a -.Ic ~< +.Ic ~\*(Lt file transfer command; abbreviated .Ar eofr . .It Ar eofwrite (str) The string sent to indicate end-of-transmission during a -.Ic ~> +.Ic ~\*(Gt file transfer command; abbreviated .Ar eofw . .It Ar eol @@ -451,9 +413,18 @@ default value is (num) The amount of data (in bytes) to buffer between filesystem writes when receiving files; abbreviated .Ar fr . +.It Ar hardwareflow +(bool) Whether hardware flow control (CRTSCTS) is enabled for the +connection; abbreviated +.Ar hf ; +default value is +.Ql off . .It Ar host (str) The name of the host to which you are connected; abbreviated .Ar ho . +.It Ar linedisc +(num) The line discipline to use; abbreviated +.Ar ld . .It Ar prompt (char) The character which indicates an end-of-line on the remote host; abbreviated @@ -513,6 +484,18 @@ beautification rules. default value is .Ar false . Each tab is expanded to 8 spaces. +.It Ar tandem +(bool) Use XON/XOFF flow control to throttle data from the remote host; +abbreviated +.Ar ta . +The default value is +.Ar true +unless the +.Ar nt +capability has been specified in +.Pa /etc/remote , +in which case the default value is +.Ar false . .It Ar verbose (bool) Verbose mode; abbreviated .Ar verb ; @@ -525,11 +508,6 @@ transferred during a file transfer operations, and more. .El .Sh ENVIRONMENT .Bl -tag -width Fl -.It Ev SHELL -The name of the shell to use for the -.Ic ~! -command; default value is -.Dq /bin/sh . .It Ev HOME The home directory to use for the .Ic ~c @@ -538,29 +516,34 @@ command. The default value for .Ar system-name if none is specified via the command line. -.It Ev REMOTE -A system description, or an absolute path to a -.Xr remote 5 -system description database. .It Ev PHONES A path to a .Xr phones 5 database. +.It Ev REMOTE +A system description, or an absolute path to a +.Xr remote 5 +system description database. +.It Ev SHELL +The name of the shell to use for the +.Ic ~!\& +command; default value is +.Dq /bin/sh . .El .Sh FILES .Bl -tag -width "/var/spool/lock/LCK..*" -compact -.It Pa /etc/remote -global -.Xr remote 5 -database -.It Pa /etc/phones -default -.Xr phones 5 -file .It Pa ~/.tiprc initialization file .It Pa tip.record record file +.It Pa /etc/phones +default +.Xr phones 5 +file +.It Pa /etc/remote +global +.Xr remote 5 +database .It Pa /var/log/aculog line access log .It Pa /var/spool/lock/LCK..* @@ -568,12 +551,13 @@ lock file to avoid conflicts with .Xr uucp .El .Sh SEE ALSO +.Xr cu 1 , .Xr phones 5 , .Xr remote 5 .Sh HISTORY The .Nm -appeared command in +command appeared in .Bx 4.2 . .Sh BUGS The full set of variables is undocumented and should, probably, be diff --git a/usr.bin/tip/tip/tip.c b/usr.bin/tip/tip/tip.c index 64cd76021531..f8eddf59120e 100644 --- a/usr.bin/tip/tip/tip.c +++ b/usr.bin/tip/tip/tip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tip.c,v 1.15 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: tip.c,v 1.30 2006/08/18 03:06:18 jason Exp $ */ /* $NetBSD: tip.c,v 1.13 1997/04/20 00:03:05 mellon Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -35,7 +31,7 @@ */ #ifndef lint -static char copyright[] = +static const char copyright[] = "@(#) Copyright (c) 1983, 1993\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ @@ -44,7 +40,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)tip.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: tip.c,v 1.15 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: tip.c,v 1.30 2006/08/18 03:06:18 jason Exp $"; #endif /* not lint */ /* @@ -56,29 +52,21 @@ static char rcsid[] = "$OpenBSD: tip.c,v 1.15 2001/10/24 18:38:58 millert Exp $" #include "tip.h" #include "pathnames.h" -/* - * Baud rate mapping table - */ -int rates[] = { - 0, 50, 75, 110, 134, 150, 200, 300, 600, - 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200, -1 -}; - int disc = TTYDISC; /* tip normally runs this way */ -void intprompt(); -void timeout(); -void cleanup(); char PNbuf[256]; /* This limits the size of a number */ +static void intprompt(int); +static void tipin(void); +static int escape(void); + int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char *argv[]) { - char *system = NOSTR; + char *sys = NOSTR, sbuf[12], *p; int i; - char *p; - char sbuf[12]; + + /* XXX preserve previous braindamaged behavior */ + setboolean(value(DC), TRUE); gid = getgid(); egid = getegid(); @@ -101,7 +89,7 @@ main(argc, argv) for (; argc > 1; argv++, argc--) { if (argv[1][0] != '-') - system = argv[1]; + sys = argv[1]; else switch (argv[1][1]) { case 'v': @@ -124,34 +112,35 @@ main(argc, argv) } } - if (system == NOSTR) + if (sys == NOSTR) goto notnumber; - if (isalpha(*system)) + if (isalpha(*sys)) goto notnumber; /* * System name is really a phone number... * Copy the number then stomp on the original (in case the number * is private, we don't want 'ps' or 'w' to find it). */ - if (strlen(system) > sizeof PNbuf - 1) { + if (strlen(sys) > sizeof PNbuf - 1) { fprintf(stderr, "%s: phone number too long (max = %d bytes)\n", __progname, (int)sizeof(PNbuf) - 1); exit(1); } - strncpy( PNbuf, system, sizeof PNbuf - 1 ); - for (p = system; *p; p++) + strlcpy(PNbuf, sys, sizeof PNbuf - 1); + for (p = sys; *p; p++) *p = '\0'; PN = PNbuf; (void)snprintf(sbuf, sizeof(sbuf), "tip%ld", BR); - system = sbuf; + sys = sbuf; notnumber: (void)signal(SIGINT, cleanup); (void)signal(SIGQUIT, cleanup); (void)signal(SIGHUP, cleanup); (void)signal(SIGTERM, cleanup); + (void)signal(SIGCHLD, SIG_DFL); - if ((i = hunt(system)) == 0) { + if ((i = hunt(sys)) == 0) { printf("all ports busy\n"); exit(3); } @@ -180,29 +169,32 @@ main(argc, argv) PH = _PATH_PHONES; vinit(); /* init variables */ setparity("none"); /* set the parity table */ - if ((i = speed(number(value(BAUDRATE)))) == 0) { - printf("%s: bad baud rate %ld\n", __progname, - number(value(BAUDRATE))); - daemon_uid(); - (void)uu_unlock(uucplock); - exit(3); - } /* * Hardwired connections require the * line speed set before they make any transmissions * (this is particularly true of things like a DF03-AC) */ - if (HW) - ttysetup(i); - if ((p = connect())) { + if (HW && ttysetup(number(value(BAUDRATE)))) { + fprintf(stderr, "%s: bad baud rate %ld\n", __progname, + number(value(BAUDRATE))); + daemon_uid(); + (void)uu_unlock(uucplock); + exit(3); + } + if ((p = con())) { printf("\07%s\n[EOT]\n", p); daemon_uid(); (void)uu_unlock(uucplock); exit(1); } - if (!HW) - ttysetup(i); + if (!HW && ttysetup(number(value(BAUDRATE)))) { + fprintf(stderr, "%s: bad baud rate %ld\n", __progname, + number(value(BAUDRATE))); + daemon_uid(); + (void)uu_unlock(uucplock); + exit(3); + } cucommon: /* * From here down the code is shared with @@ -212,15 +204,16 @@ main(argc, argv) i = fcntl(FD, F_GETFL); if (i == -1) { perror("fcntl"); - cleanup(); + cleanup(0); } i = fcntl(FD, F_SETFL, i & ~O_NONBLOCK); if (i == -1) { perror("fcntl"); - cleanup(); + cleanup(0); } tcgetattr(0, &defterm); + gotdefterm = 1; term = defterm; term.c_lflag &= ~(ICANON|IEXTEN|ECHO); term.c_iflag &= ~(INPCK|ICRNL); @@ -229,13 +222,18 @@ main(argc, argv) term.c_cc[VTIME] = 0; defchars = term; term.c_cc[VINTR] = term.c_cc[VQUIT] = term.c_cc[VSUSP] = - term.c_cc[VDSUSP] = term.c_cc[VDISCARD] = - term.c_cc[VLNEXT] = _POSIX_VDISABLE; + term.c_cc[VDSUSP] = term.c_cc[VDISCARD] = + term.c_cc[VLNEXT] = _POSIX_VDISABLE; raw(); pipe(fildes); pipe(repdes); (void)signal(SIGALRM, timeout); + if (value(LINEDISC) != TTYDISC) { + int ld = (int)value(LINEDISC); + ioctl(FD, TIOCSETD, &ld); + } + /* * Everything's set up now: * connection established (hardwired or dialup) @@ -244,7 +242,8 @@ main(argc, argv) * so, fork one process for local side and one for remote. */ printf(cumode ? "Connected\r\n" : "\07connected\r\n"); - if ((pid = fork())) + tipin_pid = getpid(); + if ((tipout_pid = fork())) tipin(); else tipout(); @@ -253,13 +252,17 @@ main(argc, argv) } void -cleanup() +cleanup(int signo) { - daemon_uid(); (void)uu_unlock(uucplock); if (odisc) - ioctl(0, TIOCSETD, (char *)&odisc); + ioctl(0, TIOCSETD, &odisc); + unraw(); + if (signo && tipout_pid) { + kill(tipout_pid, signo); + wait(NULL); + } exit(0); } @@ -274,7 +277,7 @@ cleanup() static int uidswapped; void -user_uid() +user_uid(void) { if (uidswapped == 0) { seteuid(uid); @@ -283,7 +286,7 @@ user_uid() } void -daemon_uid() +daemon_uid(void) { if (uidswapped) { @@ -293,7 +296,7 @@ daemon_uid() } void -shell_uid() +shell_uid(void) { setegid(gid); seteuid(uid); @@ -303,7 +306,7 @@ shell_uid() * put the controlling keyboard into raw mode */ void -raw() +raw(void) { tcsetattr(0, TCSADRAIN, &term); } @@ -313,9 +316,10 @@ raw() * return keyboard to normal mode */ void -unraw() +unraw(void) { - tcsetattr(0, TCSADRAIN, &defterm); + if (gotdefterm) + tcsetattr(0, TCSADRAIN, &defterm); } static jmp_buf promptbuf; @@ -326,10 +330,7 @@ static jmp_buf promptbuf; * normal erase and kill characters. */ int -prompt(s, p, sz) - char *s; - char *p; - size_t sz; +prompt(char *s, char *p, size_t sz) { int c; char *b = p; @@ -354,10 +355,10 @@ prompt(s, p, sz) /* * Interrupt service routine during prompting */ -void -intprompt() +/*ARGSUSED*/ +static void +intprompt(int signo) { - (void)signal(SIGINT, SIG_IGN); stoprompt = 1; printf("\r\n"); @@ -367,10 +368,12 @@ intprompt() /* * ****TIPIN TIPIN**** */ -void -tipin() +static void +tipin(void) { - char gch, bol = 1; + int bol = 1; + int gch; + char ch; /* * Kinda klugey here... @@ -386,6 +389,7 @@ tipin() while (1) { gch = getchar()&STRIP_PAR; + /* XXX does not check for EOF */ if ((gch == character(value(ESCAPE))) && bol) { if (!noesc) { if (!(gch = escape())) @@ -396,7 +400,8 @@ tipin() continue; } else if (gch == '\r') { bol = 1; - parwrite(FD, &gch, 1); + ch = gch; + parwrite(FD, &ch, 1); if (boolean(value(HALFDUPLEX))) printf("\r\n"); continue; @@ -405,9 +410,10 @@ tipin() bol = any(gch, value(EOL)); if (boolean(value(RAISE)) && islower(gch)) gch = toupper(gch); - parwrite(FD, &gch, 1); + ch = gch; + parwrite(FD, &ch, 1); if (boolean(value(HALFDUPLEX))) - printf("%c", gch); + printf("%c", ch); } } @@ -417,14 +423,15 @@ extern esctable_t etable[]; * Escape handler -- * called on recognition of ``escapec'' at the beginning of a line */ -int -escape() +static int +escape(void) { - char gch; + int gch; esctable_t *p; char c = character(value(ESCAPE)); gch = (getchar()&STRIP_PAR); + /* XXX does not check for EOF */ for (p = etable; p->e_char; p++) if (p->e_char == gch) { if ((p->e_flags&PRIV) && uid) @@ -440,21 +447,7 @@ escape() } int -speed(n) - int n; -{ - int *p; - - for (p = rates; *p != -1; p++) - if (*p == n) - return n; - return 0; -} - -int -any(cc, p) - int cc; - char *p; +any(int cc, char *p) { char c = cc; while (p && *p) @@ -463,11 +456,10 @@ any(cc, p) return (0); } -int -size(s) - char *s; +size_t +size(char *s) { - int i = 0; + size_t i = 0; while (s && *s++) i++; @@ -475,8 +467,7 @@ size(s) } char * -interp(s) - char *s; +interp(char *s) { static char buf[256]; char *p = buf, c, *q; @@ -501,8 +492,7 @@ interp(s) } char * -ctrl(c) - char c; +ctrl(char c) { static char s[3]; @@ -521,8 +511,7 @@ ctrl(c) * Help command */ void -help(c) - char c; +help(int c) { esctable_t *p; @@ -539,19 +528,20 @@ help(c) /* * Set up the "remote" tty's state */ -void -ttysetup(speed) - int speed; +int +ttysetup(int speed) { struct termios cntrl; - tcgetattr(FD, &cntrl); - cfsetospeed(&cntrl, speed); - cfsetispeed(&cntrl, speed); + if (tcgetattr(FD, &cntrl)) + return (-1); + cfsetspeed(&cntrl, speed); cntrl.c_cflag &= ~(CSIZE|PARENB); cntrl.c_cflag |= CS8; if (boolean(value(DC))) cntrl.c_cflag |= CLOCAL; + if (boolean(value(HARDWAREFLOW))) + cntrl.c_cflag |= CRTSCTS; cntrl.c_iflag &= ~(ISTRIP|ICRNL); cntrl.c_oflag &= ~OPOST; cntrl.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO); @@ -559,7 +549,7 @@ ttysetup(speed) cntrl.c_cc[VTIME] = 0; if (boolean(value(TAND))) cntrl.c_iflag |= IXOFF; - tcsetattr(FD, TCSAFLUSH, &cntrl); + return (tcsetattr(FD, TCSAFLUSH, &cntrl)); } static char partab[0200]; @@ -570,10 +560,7 @@ static char partab[0200]; * with the right parity and output it. */ void -parwrite(fd, buf, n) - int fd; - char *buf; - int n; +parwrite(int fd, char *buf, size_t n) { int i; char *bp; @@ -596,8 +583,7 @@ parwrite(fd, buf, n) * Build a parity table with appropriate high-order bit. */ void -setparity(defparity) - char *defparity; +setparity(char *defparity) { int i, flip, clr, set; char *parity; @@ -625,5 +611,5 @@ setparity(defparity) (void) fflush(stderr); } for (i = 0; i < 0200; i++) - partab[i] = (evenpartab[i] ^ flip | set) & clr; + partab[i] = ((evenpartab[i] ^ flip) | set) & clr; } diff --git a/usr.bin/tip/tip/tip.h b/usr.bin/tip/tip/tip.h index 4c5ab2064eec..975590029aca 100644 --- a/usr.bin/tip/tip/tip.h +++ b/usr.bin/tip/tip/tip.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tip.h,v 1.11 2001/09/09 19:30:49 millert Exp $ */ +/* $OpenBSD: tip.h,v 1.27 2006/08/18 03:06:18 jason Exp $ */ /* $NetBSD: tip.h,v 1.7 1997/04/20 00:02:46 mellon Exp $ */ /* @@ -14,11 +14,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -91,8 +87,8 @@ char *PR; /* remote prompt */ long DL; /* line delay for file transfers to remote */ long CL; /* char delay for file transfers to remote */ long ET; /* echocheck timeout */ +long LD; /* line disc */ short HD; /* this host is half duplex - do local echo */ -short DC; /* this host is directly connected. */ /* * String value table @@ -134,9 +130,9 @@ typedef typedef struct { char *acu_name; - int (*acu_dialer)(); - int (*acu_disconnect)(); - int (*acu_abort)(); + int (*acu_dialer)(char *, char *); + void (*acu_disconnect)(void); + void (*acu_abort)(void); } acu_t; @@ -150,6 +146,7 @@ typedef */ #define value(v) vtable[v].v_value +#define lvalue(v) (long)vtable[v].v_value #define number(v) ((long)(v)) #define boolean(v) ((short)(long)(v)) @@ -169,16 +166,16 @@ typedef typedef struct { - char e_char; /* char to match on */ - char e_flags; /* experimental, priviledged */ - char *e_help; /* help string */ - int (*e_func)(); /* command */ + char e_char; /* char to match on */ + char e_flags; /* experimental, privileged */ + char *e_help; /* help string */ + void (*e_func)(int); /* command */ } esctable_t; #define NORM 00 /* normal protection, execute anyone */ #define EXP 01 /* experimental, mark it with a `*' on help */ -#define PRIV 02 /* priviledged, root execute only */ +#define PRIV 02 /* privileged, root execute only */ extern int vflag; /* verbose during reading of .tiprc file */ extern int noesc; /* no escape `~' char */ @@ -227,6 +224,9 @@ extern value_t vtable[]; /* variable table */ #define HALFDUPLEX 30 #define LECHO 31 #define PARITY 32 +#define HARDWAREFLOW 33 +#define LINEDISC 34 +#define DC 35 #define NOVAL ((value_t *)NULL) #define NOACU ((acu_t *)NULL) @@ -237,6 +237,7 @@ extern value_t vtable[]; /* variable table */ struct termios term; /* current mode of terminal */ struct termios defterm; /* initial mode of terminal */ struct termios defchars; /* current mode with initial chars */ +int gotdefterm; FILE *fscript; /* FILE for scripting */ @@ -247,7 +248,8 @@ int AC; /* open file descriptor to dialer (v831 only) */ int vflag; /* print .tiprc initialization sequence */ int noesc; /* no `~' escape char */ int sfd; /* for ~< operation */ -int pid; /* pid of tipout */ +pid_t tipin_pid; /* pid of tipin */ +pid_t tipout_pid; /* pid of tipout */ uid_t uid, euid; /* real and effective user id's */ gid_t gid, egid; /* real and effective group id's */ int stop; /* stop transfer session flag */ @@ -262,7 +264,6 @@ int bits8; /* terminal is is 8-bit mode */ char fname[PATH_MAX]; /* file name buffer for ~< */ char copyname[PATH_MAX]; /* file name buffer for ~> */ char ccc; /* synchronization character */ -char ch; /* for tipout */ char *uucplock; /* name of lock file for uucp's */ int odisc; /* initial tty line discipline */ @@ -270,43 +271,82 @@ extern int disc; /* current tty discpline */ extern char *__progname; /* program name */ -extern char *ctrl(); -extern char *vinterp(); -extern char *connect(); - -char *sname __P((char *s)); -int any __P((int cc, char *p)); -int anyof __P((char *s1, char *s2)); -int args __P((char *buf, char *a[], int num)); -int escape __P((void)); -int prompt __P((char *s, char *p, size_t sz)); -int size __P((char *s)); -int speed __P((int n)); -int uu_lock __P((char *ttyname)); -int uu_unlock __P((char *ttyname)); -int vstring __P((char *s, char *v)); -long hunt __P((char *name)); -void cumain __P((int argc, char *argv[])); -void daemon_uid __P((void)); -void disconnect __P((char *reason)); -void execute __P((char *s)); -void logent __P((char *group, char *num, char *acu, char *message)); -void loginit __P((void)); -void prtime __P((char *s, time_t a)); -void parwrite __P((int fd, char *buf, int n)); -void raw __P((void)); -void send __P((int c)); -void setparity __P((char *defparity)); -void setscript __P((void)); -void shell_uid __P((void)); -void tandem __P((char *option)); -void tipabort __P((char *msg)); -void tipin __P((void)); -void tipout __P((void)); -void transfer __P((char *buf, int fd, char *eofchars)); -void transmit __P((FILE *fd, char *eofchars, char *command)); -void ttysetup __P((int speed)); -void unraw __P((void)); -void user_uid __P((void)); -void vinit __P((void)); -void vlex __P((char *s)); +char *con(void); +char *ctrl(char); +char *expand(char *); +char *getremote(char *); +char *interp(char *); +int any(int, char *); +int biz22w_dialer(char *, char *); +int biz22f_dialer(char *, char *); +int biz31w_dialer(char *, char *); +int biz31f_dialer(char *, char *); +int cour_dialer(char *, char *); +int df02_dialer(char *, char *); +int df03_dialer(char *, char *); +int dn_dialer(char *, char *); +int hay_dialer(char *, char *); +int prompt(char *, char *, size_t); +size_t size(char *); +int t3000_dialer(char *, char *); +int ttysetup(int); +int uu_lock(char *); +int uu_unlock(char *); +int v3451_dialer(char *, char *); +int v831_dialer(char *, char *); +int ven_dialer(char *, char *); +int vstring(char *, char *); +long hunt(char *); +void biz22_disconnect(void); +void biz22_abort(void); +void biz31_disconnect(void); +void biz31_abort(void); +void chdirectory(int); +void cleanup(int); +void consh(int); +void cour_abort(void); +void cour_disconnect(void); +void cu_put(int); +void cu_take(int); +void cumain(int, char **); +void daemon_uid(void); +void df_abort(void); +void df_disconnect(void); +void disconnect(char *); +void dn_abort(void); +void dn_disconnect(void); +void finish(int); +void genbrk(int); +void getfl(int); +void hay_abort(void); +void hay_disconnect(void); +void help(int); +void listvariables(int); +void logent(char *, char *, char *, char *); +void loginit(void); +void parwrite(int, char *, size_t); +void pipefile(int); +void pipeout(int); +void raw(void); +void sendfile(int); +void setparity(char *); +void setscript(void); +void shell(int); +void shell_uid(void); +void suspend(int); +void t3000_disconnect(void); +void t3000_abort(void); +void timeout(int); +void tipabort(char *); +void tipout(void); +void user_uid(void); +void unraw(void); +void v3451_abort(void); +void v3451_disconnect(void); +void v831_disconnect(void); +void v831_abort(void); +void variable(int); +void ven_disconnect(void); +void ven_abort(void); +void vinit(void); +void vlex(char *); diff --git a/usr.bin/tip/tip/tipout.c b/usr.bin/tip/tip/tipout.c index d1ff53cdc0bb..0ebe017276eb 100644 --- a/usr.bin/tip/tip/tipout.c +++ b/usr.bin/tip/tip/tipout.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tipout.c,v 1.8 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: tipout.c,v 1.18 2006/05/31 07:03:08 jason Exp $ */ /* $NetBSD: tipout.c,v 1.5 1996/12/29 10:34:12 cgd Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,10 +34,11 @@ #if 0 static char sccsid[] = "@(#)tipout.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: tipout.c,v 1.8 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: tipout.c,v 1.18 2006/05/31 07:03:08 jason Exp $"; #endif /* not lint */ #include "tip.h" + /* * tip * @@ -51,14 +48,19 @@ static char rcsid[] = "$OpenBSD: tipout.c,v 1.8 2001/10/24 18:38:58 millert Exp static jmp_buf sigbuf; +static void intIOT(int); +static void intEMT(int); +static void intTERM(int); +static void intSYS(int); + /* * TIPOUT wait state routine -- * sent by TIPIN when it wants to posses the remote host */ -void -intIOT() +/*ARGSUSED*/ +static void +intIOT(int signo) { - write(repdes[1],&ccc,1); read(fildes[0], &ccc,1); longjmp(sigbuf, 1); @@ -68,8 +70,9 @@ intIOT() * Scripting command interpreter -- * accepts script file name over the pipe and acts accordingly */ -void -intEMT() +/*ARGSUSED*/ +static void +intEMT(int signo) { char c, line[256]; char *pline = line; @@ -98,19 +101,20 @@ intEMT() longjmp(sigbuf, 1); } -void -intTERM() +static void +intTERM(int signo) { - if (boolean(value(SCRIPT)) && fscript != NULL) fclose(fscript); + if (signo && tipin_pid) + kill(tipin_pid, signo); exit(0); } -void -intSYS() +/*ARGSUSED*/ +static void +intSYS(int signo) { - setboolean(value(BEAUTIFY), !boolean(value(BEAUTIFY))); longjmp(sigbuf, 1); } @@ -119,11 +123,12 @@ intSYS() * ****TIPOUT TIPOUT**** */ void -tipout() +tipout(void) { char buf[BUFSIZ]; char *cp; - int cnt; + ssize_t scnt; + size_t cnt; sigset_t mask, omask; signal(SIGINT, SIG_IGN); @@ -137,18 +142,19 @@ tipout() sigprocmask(SIG_BLOCK, NULL, &omask); for (;;) { sigprocmask(SIG_SETMASK, &omask, NULL); - cnt = read(FD, buf, BUFSIZ); - if (cnt <= 0) { + scnt = read(FD, buf, BUFSIZ); + if (scnt <= 0) { /* lost carrier */ - if (cnt < 0 && errno == EIO) { + if (scnt == 0 || (scnt < 0 && errno == EIO)) { sigemptyset(&mask); sigaddset(&mask, SIGTERM); sigprocmask(SIG_BLOCK, &mask, NULL); - intTERM(); + intTERM(0); /*NOTREACHED*/ } continue; } + cnt = scnt; sigemptyset(&mask); sigaddset(&mask, SIGEMT); sigaddset(&mask, SIGTERM); @@ -157,7 +163,7 @@ tipout() sigprocmask(SIG_BLOCK, &mask, NULL); for (cp = buf; cp < buf + cnt; cp++) *cp &= STRIP_PAR; - write(1, buf, cnt); + write(STDOUT_FILENO, buf, cnt); if (boolean(value(SCRIPT)) && fscript != NULL) { if (!boolean(value(BEAUTIFY))) { fwrite(buf, 1, cnt, fscript); diff --git a/usr.bin/tip/tip/uucplock.c b/usr.bin/tip/tip/uucplock.c index a2a703b9edbe..d1581b9c5454 100644 --- a/usr.bin/tip/tip/uucplock.c +++ b/usr.bin/tip/tip/uucplock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uucplock.c,v 1.6 1998/07/13 02:11:44 millert Exp $ */ +/* $OpenBSD: uucplock.c,v 1.11 2006/03/16 19:32:46 deraadt Exp $ */ /* $NetBSD: uucplock.c,v 1.7 1997/02/11 09:24:08 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)uucplock.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: uucplock.c,v 1.6 1998/07/13 02:11:44 millert Exp $"; +static const char rcsid[] = "$OpenBSD: uucplock.c,v 1.11 2006/03/16 19:32:46 deraadt Exp $"; #endif /* not lint */ #include @@ -52,20 +48,19 @@ static char rcsid[] = "$OpenBSD: uucplock.c,v 1.6 1998/07/13 02:11:44 millert Ex #include #include "pathnames.h" -/* +/* * uucp style locking routines * return: 0 - success - * -1 - failure + * -1 - failure */ int -uu_lock(ttyname) - char *ttyname; +uu_lock(char *ttyname) { - int fd, pid; + int fd, len; char tbuf[sizeof(_PATH_LOCKDIRNAME) + MAXNAMLEN]; char text_pid[81]; - int len; + pid_t pid; (void)snprintf(tbuf, sizeof tbuf, _PATH_LOCKDIRNAME, ttyname); fd = open(tbuf, O_RDWR|O_CREAT|O_EXCL, 0660); @@ -81,7 +76,7 @@ uu_lock(ttyname) return(-1); } len = read(fd, text_pid, sizeof(text_pid)-1); - if(len<=0) { + if (len<=0) { perror(tbuf); (void)close(fd); fprintf(stderr, "Can't read lock file.\n"); @@ -98,8 +93,8 @@ uu_lock(ttyname) * The process that locked the file isn't running, so * we'll lock it ourselves */ - fprintf(stderr, "Stale lock on %s PID=%d... overriding.\n", - ttyname, pid); + fprintf(stderr, "Stale lock on %s PID=%ld... overriding.\n", + ttyname, (long)pid); if (lseek(fd, (off_t)0, SEEK_SET) < 0) { perror(tbuf); (void)close(fd); @@ -109,7 +104,7 @@ uu_lock(ttyname) /* fall out and finish the locking process */ } pid = getpid(); - (void)sprintf(text_pid, "%10d\n", pid); + (void)snprintf(text_pid, sizeof text_pid, "%10ld\n", (long)pid); len = strlen(text_pid); if (write(fd, text_pid, len) != len) { (void)close(fd); @@ -122,8 +117,7 @@ uu_lock(ttyname) } int -uu_unlock(ttyname) - char *ttyname; +uu_unlock(char *ttyname) { char tbuf[sizeof(_PATH_LOCKDIRNAME) + MAXNAMLEN]; diff --git a/usr.bin/tip/tip/value.c b/usr.bin/tip/tip/value.c index 20817e9cdffc..f381a1f1773d 100644 --- a/usr.bin/tip/tip/value.c +++ b/usr.bin/tip/tip/value.c @@ -1,4 +1,4 @@ -/* $OpenBSD: value.c,v 1.7 2001/10/24 18:38:58 millert Exp $ */ +/* $OpenBSD: value.c,v 1.14 2006/03/17 22:02:58 moritz Exp $ */ /* $NetBSD: value.c,v 1.6 1997/02/11 09:24:09 mrg Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,26 +34,31 @@ #if 0 static char sccsid[] = "@(#)value.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: value.c,v 1.7 2001/10/24 18:38:58 millert Exp $"; +static const char rcsid[] = "$OpenBSD: value.c,v 1.14 2006/03/17 22:02:58 moritz Exp $"; #endif /* not lint */ #include "tip.h" #define MIDDLE 35 -static value_t *vlookup(); -static int col = 0; +static value_t *vlookup(char *); +static void vassign(value_t *, char *); +static void vtoken(char *); +static void vprint(value_t *); +static int vaccess(unsigned int, unsigned int); +static char *vinterp(char *, int); + +static size_t col = 0; /* * Variable manipulation */ void -vinit() +vinit(void) { + char file[FILENAME_MAX], *cp; value_t *p; - char *cp; - FILE *f; - char file[FILENAME_MAX]; + FILE *fp; for (p = vtable; p->v_name != NULL; p++) { if (p->v_type&ENVIRON) @@ -72,20 +73,20 @@ vinit() */ if (strlen(value(HOME)) + sizeof("/.tiprc") > sizeof(file)) { (void)fprintf(stderr, "Home directory path too long: %s\n", - value(HOME)); + value(HOME)); } else { snprintf(file, sizeof file, "%s/.tiprc", value(HOME)); - if ((f = fopen(file, "r")) != NULL) { + if ((fp = fopen(file, "r")) != NULL) { char *tp; - while (fgets(file, sizeof(file)-1, f) != NULL) { + while (fgets(file, sizeof(file)-1, fp) != NULL) { if (vflag) printf("set %s", file); if ((tp = strrchr(file, '\n'))) *tp = '\0'; vlex(file); } - fclose(f); + fclose(fp); } } /* @@ -94,21 +95,16 @@ vinit() vtable[EXCEPTIONS].v_access &= ~(WRITE<v_access, WRITE)) { printf("access denied\r\n"); return; } - switch (p->v_type&TMASK) { + switch (p->v_type&TMASK) { case STRING: if (p->v_value && equal(p->v_value, v)) return; @@ -120,19 +116,16 @@ vassign(p, v) } p->v_type &= ~(ENVIRON|INIT); break; - case NUMBER: if (number(p->v_value) == number(v)) return; setnumber(p->v_value, number(v)); break; - case BOOL: if (boolean(p->v_value) == (*v != '!')) return; setboolean(p->v_value, (*v != '!')); break; - case CHAR: if (character(p->v_value) == *v) return; @@ -141,22 +134,17 @@ vassign(p, v) p->v_access |= CHANGED; } -static void vprint(); -static void vtoken(); - void -vlex(s) - char *s; +vlex(char *s) { value_t *p; + char *cp; if (equal(s, "all")) { for (p = vtable; p->v_name; p++) if (vaccess(p->v_access, READ)) vprint(p); } else { - char *cp; - do { if ((cp = vinterp(s, ' '))) cp++; @@ -171,19 +159,17 @@ vlex(s) } static void -vtoken(s) - char *s; +vtoken(char *s) { value_t *p; char *cp; - char *expand(); if ((cp = strchr(s, '='))) { *cp = '\0'; if ((p = vlookup(s))) { cp++; if (p->v_type&NUMBER) - vassign(p, atoi(cp)); + vassign(p, (char *)atoi(cp)); else { if (strcmp(s, "record") == 0) cp = expand(cp); @@ -211,11 +197,9 @@ vtoken(s) } static void -vprint(p) - value_t *p; +vprint(value_t *p) { char *cp; - extern char *interp(), *ctrl(); if (col > 0 && col < MIDDLE) while (col++ < MIDDLE) @@ -235,7 +219,7 @@ vprint(p) printf("%s=", p->v_name); col++; if (p->v_value) { - cp = interp(p->v_value, NULL); + cp = interp(p->v_value); col += size(cp); printf("%s", cp); } @@ -263,10 +247,8 @@ vprint(p) } } - static int -vaccess(mode, rw) - unsigned mode, rw; +vaccess(unsigned int mode, unsigned int rw) { if (mode & (rw<v_type&NUMBER) - vassign(p, atoi(v)); + vassign(p, (char *)atoi(v)); else { if (strcmp(s, "record") == 0) v = expand(v); diff --git a/usr.bin/tip/tip/vars.c b/usr.bin/tip/tip/vars.c index 6131dd29f97d..56027ca2011a 100644 --- a/usr.bin/tip/tip/vars.c +++ b/usr.bin/tip/tip/vars.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vars.c,v 1.2 1996/06/26 05:40:50 deraadt Exp $ */ +/* $OpenBSD: vars.c,v 1.8 2006/08/18 03:06:18 jason Exp $ */ /* $NetBSD: vars.c,v 1.3 1994/12/08 09:31:19 jtc Exp $ */ /* @@ -13,11 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)vars.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$OpenBSD: vars.c,v 1.2 1996/06/26 05:40:50 deraadt Exp $"; +static const char rcsid[] = "$OpenBSD: vars.c,v 1.8 2006/08/18 03:06:18 jason Exp $"; #endif /* not lint */ #include "tip.h" @@ -79,7 +75,7 @@ value_t vtable[] = { { "raise", BOOL, (READ|WRITE)<