diff --git a/.cvsignore b/.cvsignore index cdb6499..890bc44 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ -netkit-telnet-0.17-pre20000412.tar.gz +netkit-telnet-0.17.tar.gz telnet-client.tar.gz diff --git a/sources b/sources index 175e4ed..6e5b87d 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -e2d1af881cd1527dd30f4d4551000cf6 netkit-telnet-0.17-pre20000412.tar.gz +d6beabaaf53fe6e382c42ce3faa05a36 netkit-telnet-0.17.tar.gz d74983062470c5a3e7ae14f34c489e00 telnet-client.tar.gz diff --git a/telnet-0.17-env.patch b/telnet-0.17-env.patch index bbcea39..88e7c01 100644 --- a/telnet-0.17-env.patch +++ b/telnet-0.17-env.patch @@ -32,8 +32,8 @@ free(tnamep); - if ((tname = (char *)env_getvalue((unsigned char *)"TERM")) && + if ((tname = (char *)env_getvalue((unsigned char *)"TERM", 0)) && - (telnet_setupterm(tname, 1, &err) == 0)) { - tnamep = mklist(termbuf, tname); + (setupterm(tname, 1, &errret) == 0)) { + tnamep = mklist(ttytype, tname); } else { @@ -870,7 +870,7 @@ unsigned char temp[50], *dp; @@ -82,75 +82,3 @@ int get_status (void); int dosynch (void); ---- netkit-telnet-0.17-pre-20000204/telnet-NETKIT/telnet.cc.env Thu Aug 19 05:34:15 1999 -+++ netkit-telnet-0.17-pre-20000204/telnet-NETKIT/telnet.cc Tue May 16 17:22:40 2000 -@@ -456,7 +456,7 @@ - break; - - case TELOPT_XDISPLOC: /* X Display location */ -- if (env_getvalue("DISPLAY")) -+ if (env_getvalue("DISPLAY", 0)) - new_state_ok = 1; - break; - -@@ -636,7 +636,7 @@ - - if (resettermname) { - resettermname = 0; -- tname = env_getvalue("TERM"); -+ tname = env_getvalue("TERM", 0); - if (!tname || my_setupterm(tname, 1, &err)) { - termbuf[0] = 0; - tname = "UNKNOWN"; -@@ -769,7 +769,7 @@ - if (SB_EOF()) - return; - if (SB_GET() == TELQUAL_SEND) { -- const char *dp = env_getvalue("DISPLAY"); -+ const char *dp = env_getvalue("DISPLAY", 0); - if (dp == NULL) { - /* - * Something happened, we no longer have a DISPLAY -@@ -1182,7 +1182,7 @@ - for (ep = env_next(&i,1); ep; ep = env_next(&i,1)) env_opt_add(ep); - return; - } -- vp = env_getvalue(ep); -+ vp = env_getvalue(ep, 1); - if (opt_replyp + (vp ? strlen(vp) : 0) + strlen(ep) + 6 > opt_replyend) - { - register int len; -@@ -1736,7 +1736,7 @@ - send_will(TELOPT_LINEMODE, 1); - send_will(TELOPT_ENVIRON, 1); - send_do(TELOPT_STATUS, 1); -- if (env_getvalue("DISPLAY")) -+ if (env_getvalue("DISPLAY", 0)) - send_will(TELOPT_XDISPLOC, 1); - if (eight) - tel_enter_binary(eight); ---- netkit-telnet-0.17-pre-20000204/telnet-NETKIT/environ.cc.env Thu Aug 19 05:34:15 1999 -+++ netkit-telnet-0.17-pre-20000204/telnet-NETKIT/environ.cc Tue May 16 17:19:47 2000 -@@ -193,8 +193,9 @@ - return NULL; - } - --const char *env_getvalue(const char *var) { -+const char *env_getvalue(const char *var, int exported_only) { - enviro *ep = env_find(var); -- if (ep) return ep->getval(); -+ if (ep && (!exported_only || ep->getexport())) -+ return ep->getval(); - return NULL; - } ---- netkit-telnet-0.17-pre-20000204/telnet-NETKIT/environ.h.env Tue Aug 13 20:48:59 1996 -+++ netkit-telnet-0.17-pre-20000204/telnet-NETKIT/environ.h Tue May 16 17:19:47 2000 -@@ -4,7 +4,7 @@ - void env_unexport(const char *); - void env_send(const char *); - void env_list(void); --const char *env_getvalue(const char *); -+const char *env_getvalue(const char *, int exported_only); - - void env_iterate(int *, int exported_only); - const char *env_next(int *, int exported_only); diff --git a/telnet-0.17-issue.patch b/telnet-0.17-issue.patch new file mode 100644 index 0000000..c00df43 --- /dev/null +++ b/telnet-0.17-issue.patch @@ -0,0 +1,81 @@ +--- netkit-telnet-0.17/telnetd/utility.c.issue Sun Dec 12 09:59:45 1999 ++++ netkit-telnet-0.17/telnetd/utility.c Wed Jul 18 11:14:11 2001 +@@ -460,13 +460,13 @@ + putlocation = where; + + while (*cp) { +- if (*cp != '%') { ++ if (*cp != '%' && *cp != '\\') { + putchr(*cp++); + continue; + } + switch (*++cp) { + +- case 't': ++ case 'l': + slash = strrchr(line, '/'); + if (slash == NULL) + putstr(line); +@@ -474,21 +474,28 @@ + putstr(slash+1); + break; + ++ case 'n': + case 'h': + putstr(editedhost); + break; + ++ case 't': + case 'd': + (void)time(&t); + (void)strftime(db, sizeof(db), fmtstr, localtime(&t)); + putstr(db); + break; + ++ case '\\': ++ putchr('\\'); ++ break; ++ + case '%': + putchr('%'); + break; + + case 'D': ++ case 'o': + { + char buff[128]; + +@@ -515,7 +522,7 @@ + c = fgetc(fp); + } while (c != EOF && c != '\n'); + continue; +- } else if (c == '%') { ++ } else if (c == '%' || c == '\\') { + buff[0] = c; + c = fgetc(fp); + if (c == EOF) break; +--- netkit-telnet-0.17/telnetd/issue.net.5.issue Sun Jul 30 19:57:09 2000 ++++ netkit-telnet-0.17/telnetd/issue.net.5 Wed Jul 18 11:03:09 2001 +@@ -15,16 +15,17 @@ + .Pa /etc/issue.net + is a text file which contains a message or system identification to be + printed before the login prompt of a telnet session. It may contain +-various `%-char' sequences. The following sequences are supported by ++various `%-char' (or, alternatively, '\\-char') sequences. The following ++sequences are supported by + .Ic telnetd : + .Bl -tag -offset indent -compact -width "abcde" +-.It %t ++.It %l + - show the current tty +-.It %h ++.It %h, %n + - show the system node name (FQDN) +-.It %D ++.It %D, %o + - show the name of the NIS domain +-.It %d ++.It %d, %t + - show the current time and date + .It %s + - show the name of the operating system diff --git a/telnet-client-cvs.patch b/telnet-client-cvs.patch new file mode 100644 index 0000000..5fc57a7 --- /dev/null +++ b/telnet-client-cvs.patch @@ -0,0 +1,1721 @@ +diff -uNr telnet/Makefile telnet.obsd-cvs/Makefile +--- telnet/Makefile Mon Jul 27 18:25:13 1998 ++++ telnet.obsd-cvs/Makefile Sat Mar 10 10:54:26 2001 +@@ -36,22 +36,20 @@ + + PROG= telnet + +-CFLAGS+=-DTERMCAP -DKLUDGELINEMODE -DUSE_TERMIO -DSKEY -Dunix +-CFLAGS+=-DENV_HACK -D_USE_OLD_CURSES_ ++CFLAGS+=-DKLUDGELINEMODE -DUSE_TERMIO -DENV_HACK -DSKEY -Dunix + CFLAGS+=-I${.CURDIR}/../../lib +-LDADD+= -locurses -ltelnet +-DPADD= ${LIBOLDCURSES} ${LIBTELNET} ++LDADD+= -lcurses -ltelnet ++DPADD= ${LIBCURSES} ${LIBTELNET + + SRCS= authenc.c commands.c main.c network.c ring.c sys_bsd.c telnet.c \ + terminal.c tn3270.c utilities.c + + .include # for KERBEROS + +-.if (${KERBEROS} == "yes") ++.if (${KERBEROS:L} == "yes") + CFLAGS+=-DENCRYPTION -DAUTHENTICATION -DKRB4 + LDADD+= -lkrb -ldes + DPADD+= ${LIBDES} ${LIBKRB} + .endif + + .include +- +diff -uNr telnet/commands.c telnet.obsd-cvs/commands.c +--- telnet/commands.c Fri Apr 9 02:30:20 1999 ++++ telnet.obsd-cvs/commands.c Sat Mar 10 10:51:22 2001 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: commands.c,v 1.20 1999/01/04 07:55:05 art Exp $ */ ++/* $OpenBSD: commands.c,v 1.34 2000/11/08 21:49:44 aaron Exp $ */ + /* $NetBSD: commands.c,v 1.14 1996/03/24 22:03:48 jtk Exp $ */ + + /* +@@ -69,7 +69,7 @@ + int status; + + if(argc != 3) { +- printf("%s sequence challenge\n", argv[0]); ++ printf("usage: %s sequence challenge\n", argv[0]); + return 0; + } + +@@ -2175,17 +2175,19 @@ + int gotmachine = 0; + int l1 = strlen(m1); + int l2 = strlen(m2); +- char m1save[64]; ++ char m1save[MAXHOSTNAMELEN]; + + if (skiprc) + return; + +- strcpy(m1save, m1); ++ strncpy(m1save, m1, sizeof(m1save)); + m1 = m1save; + + if (rcname[0] == 0) { + char *home = getenv("HOME"); + ++ if (home == NULL || *home == '\0') ++ return; + snprintf (rcname, sizeof(rcname), "%s/.telnetrc", + home ? home : ""); + } +@@ -2248,15 +2250,9 @@ + int + tn(int argc, char *argv[]) + { +- struct hostent *host = 0, *alias = 0; +-#if defined(AF_INET6) +- struct sockaddr_in6 sin6; +-#endif ++ struct addrinfo hints, *res, *res0; ++ int error; + struct sockaddr_in sin; +- struct sockaddr_in ladr; +- struct sockaddr *sa; +- int sa_size; +- struct servent *sp = 0; + unsigned long temp; + #if !defined(__linux__) + extern char *inet_ntoa(); +@@ -2266,15 +2262,18 @@ + int srlen; + #endif + char *cmd, *hostp = 0, *portp = 0, *user = 0, *aliasp = 0; +- int family, port = 0; +- ++ int retry; ++#ifdef NI_WITHSCOPEID ++ const int niflags = NI_NUMERICHOST | NI_WITHSCOPEID; ++#else ++ const int niflags = NI_NUMERICHOST; ++#endif ++ + /* clear the socket address prior to use */ + memset((char *)&sin, 0, sizeof(sin)); + + if (connected) { + printf("?Already connected to %s\r\n", hostname); +- seteuid(getuid()); +- setuid(getuid()); + return 0; + } + if (argc < 2) { +@@ -2324,8 +2323,6 @@ + } + usage: + printf("usage: %s [-l user] [-a] host-name [port]\r\n", cmd); +- seteuid(getuid()); +- setuid(getuid()); + return 0; + } + if (hostp == 0) +@@ -2340,185 +2337,80 @@ + temp = sourceroute(hostp, &srp, &srlen); + if (temp == 0) { + herror(srp); +- seteuid(getuid()); +- setuid(getuid()); + return 0; + } else if (temp == -1) { + printf("Bad source route option: %s\r\n", hostp); +- seteuid(getuid()); +- setuid(getuid()); + return 0; + } else { + abort(); + } +- } else { +-#endif +- memset (&sin, 0, sizeof(sin)); +-#if defined(HAVE_INET_PTON) && defined(AF_INET6) +- memset (&sin6, 0, sizeof(sin6)); +- +- if(inet_pton(AF_INET6, hostp, &sin6.sin6_addr)) { +- sin6.sin6_family = family = AF_INET6; +- sa = (struct sockaddr *)&sin6; +- sa_size = sizeof(sin6); +- strcpy(_hostname, hostp); +- hostname =_hostname; +- } else +-#endif +- if(inet_aton(hostp, &sin.sin_addr)){ +- sin.sin_family = family = AF_INET; +- sa = (struct sockaddr *)&sin; +- sa_size = sizeof(sin); +- strcpy(_hostname, hostp); +- hostname = _hostname; +- } else { +-#ifdef HAVE_GETHOSTBYNAME2 +- host = gethostbyname2(hostp, AF_INET6); +- if(host == NULL) +- host = gethostbyname2(hostp, AF_INET); +-#else +- host = gethostbyname(hostp); +-#endif +- if (host) { +- strncpy(_hostname, host->h_name, sizeof(_hostname)); +- family = host->h_addrtype; +- +- switch(family) { +- case AF_INET: +- memset(&sin, 0, sizeof(sin)); +- sa_size = sizeof(sin); +- sa = (struct sockaddr *)&sin; +- sin.sin_family = family; +- +- memcpy(&sin.sin_addr, *host->h_addr_list, sizeof(struct in_addr)); +- break; +-#if defined(AF_INET6) && defined(HAVE_STRUCT_SOCKADDR_IN6) +- case AF_INET6: +- memset(&sin6, 0, sizeof(sin6)); +- sa_size = sizeof(sin6); +- sa = (struct sockaddr *)&sin6; +- sin6.sin6_family = family; +- memcpy(&sin6.sin6_addr, *host->h_addr_list, sizeof(struct in6_addr)); +- break; +-#endif +- default: +- fprintf(stderr, "Bad address family: %d\n", family); +- return 0; +- } +- +- _hostname[sizeof(_hostname)-1] = '\0'; +- hostname = _hostname; +- } else { +- herror(hostp); +- seteuid(getuid()); +- setuid(getuid()); +- return 0; +- } +- } +-#if defined(IP_OPTIONS) && defined(IPPROTO_IP) +- } ++ } else + #endif +- if (portp) { +- if (*portp == '-') { +- portp++; +- telnetport = 1; +- } else +- telnetport = 0; +- port = atoi(portp); +- if (port == 0) { +- sp = getservbyname(portp, "tcp"); +- if (sp) +- port = sp->s_port; +- else { +- printf("%s: bad port number\r\n", portp); +- seteuid(getuid()); +- setuid(getuid()); +- return 0; +- } +- } else { +- port = htons(port); +- } +- } else { +- if (sp == 0) { +- sp = getservbyname("telnet", "tcp"); +- if (sp == 0) { +- fprintf(stderr, "telnet: tcp/telnet: unknown service\r\n"); +- seteuid(getuid()); +- setuid(getuid()); +- return 0; +- } +- port = sp->s_port; ++ { ++ hostname = hostp; ++ memset(&hints, 0, sizeof(hints)); ++ hints.ai_family = PF_UNSPEC; ++ hints.ai_socktype = SOCK_STREAM; ++ hints.ai_flags = AI_CANONNAME; ++ if (portp == NULL) { ++ portp = "telnet"; ++ } else if (*portp == '-') { ++ portp++; ++ telnetport = 1; ++ } ++ h_errno = 0; ++ error = getaddrinfo(hostp, portp, &hints, &res0); ++ if (error) { ++ if (error == EAI_SERVICE) ++ warnx("%s: bad port", portp); ++ else ++ warnx("%s: %s", hostp, gai_strerror(error)); ++ if (h_errno) ++ herror(hostp); ++ return 0; + } +- telnetport = 1; + } +- switch(family) { +- case AF_INET: +- sin.sin_port = port; +- printf("Trying %s...\r\n", inet_ntoa(sin.sin_addr)); +- break; +-#if defined(AF_INET6) && defined(HAVE_STRUCT_SOCKADDR_IN6) +- case AF_INET6: { +-#ifndef INET6_ADDRSTRLEN +-#define INET6_ADDRSTRLEN 46 +-#endif + +- char buf[INET6_ADDRSTRLEN]; +- +- sin6.sin6_port = port; +-#ifdef HAVE_INET_NTOP +- printf("Trying %s...\r\n", inet_ntop(AF_INET6, +- &sin6.sin6_addr, +- buf, +- sizeof(buf))); +-#endif +- break; +- } +-#endif +- default: +- abort(); +- } +- +- do { +- net = socket(family, SOCK_STREAM, 0); +- seteuid(getuid()); +- setuid(getuid()); +- if (net < 0) { +- perror("telnet: socket"); +- return 0; ++ net = -1; ++ retry = 0; ++ for (res = res0; res; res = res->ai_next) { ++ if (1 /* retry */) { ++ char hbuf[NI_MAXHOST]; ++ ++ if (getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf), ++ NULL, 0, niflags) != 0) { ++ strcpy(hbuf, "(invalid)"); ++ } ++ printf("Trying %s...\r\n", hbuf); + } ++ net = socket(res->ai_family, res->ai_socktype, res->ai_protocol); ++ if (net < 0) ++ continue; ++ + if (aliasp) { +- memset ((caddr_t)&ladr, 0, sizeof (ladr)); +- temp = inet_addr(aliasp); +- if (temp != INADDR_NONE) { +- ladr.sin_addr.s_addr = temp; +- ladr.sin_family = AF_INET; +- alias = gethostbyaddr((char *)&temp, sizeof(temp), AF_INET); +- } else { +- alias = gethostbyname(aliasp); +- if (alias) { +- ladr.sin_family = alias->h_addrtype; +-#if defined(h_addr) /* In 4.3, this is a #define */ +- memmove((caddr_t)&ladr.sin_addr, +- alias->h_addr_list[0], alias->h_length); +-#else /* defined(h_addr) */ +- memmove((caddr_t)&ladr.sin_addr, alias->h_addr, +- alias->h_length); +-#endif /* defined(h_addr) */ +- } else { +- herror(aliasp); +- return 0; +- } ++ struct addrinfo ahints, *ares; ++ memset(&ahints, 0, sizeof(ahints)); ++ ahints.ai_family = PF_UNSPEC; ++ ahints.ai_socktype = SOCK_STREAM; ++ ahints.ai_flags = AI_PASSIVE; ++ error = getaddrinfo(aliasp, "0", &ahints, &ares); ++ if (error) { ++ warn("%s: %s", aliasp, gai_strerror(error)); ++ close(net); ++ freeaddrinfo(ares); ++ continue; + } +- ladr.sin_port = htons(0); +- +- if (bind (net, (struct sockaddr *)&ladr, sizeof(ladr)) < 0) { +- perror(aliasp);; ++ if (bind(net, ares->ai_addr, ares->ai_addrlen) < 0) { ++ perror(aliasp); + (void) close(net); /* dump descriptor */ +- return 0; ++ freeaddrinfo(ares); ++ continue; + } ++ freeaddrinfo(ares); + } + #if defined(IP_OPTIONS) && defined(IPPROTO_IP) +- if (srp && setsockopt(net, IPPROTO_IP, IP_OPTIONS, (char *)srp, srlen) < 0) ++ if (srp && res->ai_family == AF_INET ++ && setsockopt(net, IPPROTO_IP, IP_OPTIONS, (char *)srp, srlen) < 0) + perror("setsockopt (IP_OPTIONS)"); + #endif + #if defined(IPPROTO_IP) && defined(IP_TOS) +@@ -2542,65 +2434,32 @@ + perror("setsockopt (SO_DEBUG)"); + } + +- if (connect(net, sa, sa_size) < 0) { +- int retry = 0; +- +- if (host && host->h_addr_list[1]) { +- int oerrno = errno; +- retry = 1; +- +- switch(family) { +- case AF_INET : +- fprintf(stderr, "telnet: connect to address %s: ", +- inet_ntoa(sin.sin_addr)); +- ++host->h_addr_list; +- memcpy(&sin.sin_addr, *host->h_addr_list, sizeof(struct in_addr)); +- break; +-#if defined(AF_INET6) && defined(HAVE_STRUCT_SOCKADDR_IN6) +- case AF_INET6: { +- char buf[INET6_ADDRSTRLEN]; +- +- fprintf(stderr, "telnet: connect to address %s: ", +- inet_ntop(AF_INET6, &sin6.sin6_addr, buf, +- sizeof(buf))); +- ++host->h_addr_list; +- memcpy(&sin6.sin6_addr, *host->h_addr_list, sizeof(struct in6_addr)); +- break; +- } +-#endif +- default: +- abort(); +- } +- +- errno = oerrno; +- perror(NULL); +- +- switch(family) { +- case AF_INET : +- printf("Trying %s...\r\n", inet_ntoa(sin.sin_addr)); +- break; +-#if defined(AF_INET6) && defined(HAVE_STRUCT_SOCKADDR_IN6) +- case AF_INET6: { +- printf("Trying %s...\r\n", inet_ntop(AF_INET6, +- &sin6.sin6_addr, +- buf, +- sizeof(buf))); +- break; +- } +-#endif +- } +- +- (void) NetClose(net); +- continue; ++ if (connect(net, res->ai_addr, res->ai_addrlen) < 0) { ++ char hbuf[NI_MAXHOST]; ++ ++ if (getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf), ++ NULL, 0, NI_NUMERICHOST) != 0) { ++ strcpy(hbuf, "(invalid)"); + } +- perror("telnet: Unable to connect to remote host"); +- return 0; ++ fprintf(stderr, "telnet: connect to address %s: %s\n", hbuf, ++ strerror(errno)); ++ ++ close(net); ++ net = -1; ++ retry++; ++ continue; + } ++ + connected++; + #if defined(AUTHENTICATION) || defined(ENCRYPTION) + auth_encrypt_connect(connected); + #endif /* defined(AUTHENTICATION) */ +- } while (connected == 0); ++ break; ++ } ++ freeaddrinfo(res0); ++ if (net < 0) { ++ return 0; ++ } + cmdrc(hostp, hostname); + if (autologin && user == NULL) { + struct passwd *pw; +@@ -2652,6 +2511,9 @@ + encrypthelp[] = "turn on (off) encryption ('encrypt ?' for more)", + #endif + zhelp[] = "suspend telnet", ++#ifdef SKEY ++ skeyhelp[] = "compute response to s/key challenge", ++#endif + shellhelp[] = "invoke a subshell", + envhelp[] = "change environment variables ('environ ?' for more)", + modestring[] = "try to enter line or character mode ('mode ?' for more)"; +@@ -2690,7 +2552,7 @@ + { "environ", envhelp, env_cmd, 0 }, + { "?", helphelp, help, 0 }, + #if defined(SKEY) +- { "skey", NULL, skey_calc, 0 }, ++ { "skey", skeyhelp, skey_calc, 0 }, + #endif + { 0, 0, 0, 0 } + }; +diff -uNr telnet/externs.h telnet.obsd-cvs/externs.h +--- telnet/externs.h Mon Feb 8 22:56:11 1999 ++++ telnet.obsd-cvs/externs.h Sat Mar 10 10:54:35 2001 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: externs.h,v 1.4 1998/03/12 17:31:32 deraadt Exp $ */ ++/* $OpenBSD: externs.h,v 1.5 1998/03/12 2001/01/22 11:03:38 fgsch Exp $ */ + /* $KTH: externs.h,v 1.16 1997/11/29 02:28:35 joda Exp $ */ + + /* +@@ -447,7 +447,7 @@ + *Ibackp, /* Oldest byte of 3270 data */ + Ibuf[], /* 3270 buffer */ + *Ifrontp, /* Where next 3270 byte goes */ +- tline[], ++ tline[200], + *transcom; /* Transparent command */ + + extern int +diff -uNr telnet/main.c telnet.obsd-cvs/main.c +--- telnet/main.c Wed Apr 7 23:23:35 1999 ++++ telnet.obsd-cvs/main.c Sat Mar 10 09:59:35 2001 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: main.c,v 1.7 1998/05/15 03:16:38 art Exp $ */ ++/* $OpenBSD: main.c,v 1.10 2001/01/21 22:46:37 aaron Exp $ */ + /* $NetBSD: main.c,v 1.5 1996/02/28 21:04:05 thorpej Exp $ */ + + /* +@@ -81,10 +81,10 @@ + prompt, + #ifdef AUTHENTICATION + "[-8] [-E] [-K] [-L] [-S tos] [-X atype] [-a] [-c] [-d] [-e char]", +- "\n\t[-k realm] [-l user] [-f/-F] [-n tracefile] [-b hostalias ]", ++ "\n\t[-k realm] [-l user] [-f/-F] [-n tracefile] [-b hostalias ] ", + #else + "[-8] [-E] [-L] [-S tos] [-a] [-c] [-d] [-e char] [-l user]", +- "\n\t[-n tracefile] [-b hostalias ]", ++ "\n\t[-n tracefile] [-b hostalias ] ", + #endif + #if defined(TN3270) && defined(unix) + # ifdef AUTHENTICATION +@@ -95,13 +95,11 @@ + #else + "[-r] ", + #endif ++ "\n\r " + #ifdef ENCRYPTION +- "[-x] [host-name [port]]" +-#else +- +- "[host-name [port]]" ++ "[-x] " + #endif +- ); ++ "[host-name [port]]"); + exit(1); + } + +@@ -276,8 +274,8 @@ + break; + case 't': + #if defined(TN3270) && defined(unix) ++ (void)strncpy(tline, optarg, sizeof(tline)); + transcom = tline; +- (void)strcpy(transcom, optarg); + #else + fprintf(stderr, + "%s: Warning: -t ignored, no TN3270 support.\n", +diff -uNr telnet/sys_bsd.c telnet.obsd-cvs/sys_bsd.c +--- telnet/sys_bsd.c Wed Apr 7 21:38:31 1999 ++++ telnet.obsd-cvs/sys_bsd.c Sat Mar 10 10:55:18 2001 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: sys_bsd.c,v 1.6 1998/12/28 11:13:51 deraadt Exp $ */ ++/* $OpenBSD: sys_bsd.c,v 1.8 2000/10/10 15:41:10 millert Exp $ */ + /* $NetBSD: sys_bsd.c,v 1.11 1996/02/28 21:04:10 thorpej Exp $ */ + + /* +@@ -35,6 +35,7 @@ + */ + + #include "telnet_locl.h" ++#include + + /* + * The following routines try to encapsulate what is system dependent +@@ -198,9 +199,10 @@ + TerminalFlushOutput(void) + { + #ifdef TIOCFLUSH +- (void) ioctl(fileno(stdout), TIOCFLUSH, (char *) 0); ++ int com = FWRITE; ++ (void) ioctl(fileno(stdout), TIOCFLUSH, (int *) &com); + #else +- (void) ioctl(fileno(stdout), TCFLSH, (char *) 0); ++ (void) ioctl(fileno(stdout), TCFLSH, (int *) 0); + #endif + } + +diff -uNr telnet/telnet.c telnet.obsd-cvs/telnet.c +--- telnet/telnet.c Wed Apr 7 23:22:14 1999 ++++ telnet.obsd-cvs/telnet.c Sat Mar 10 11:02:34 2001 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: telnet.c,v 1.6 1998/07/27 15:29:29 millert Exp $ */ ++/* $OpenBSD: telnet.c,v 1.11 2000/11/10 15:33:13 provos millert Exp $ */ + /* $NetBSD: telnet.c,v 1.7 1996/02/28 21:04:15 thorpej Exp $ */ + + /* +@@ -35,6 +35,8 @@ + */ + + #include "telnet_locl.h" ++#include ++#include + + #define strip(x) (eight ? (x) : ((x) & 0x7f)) + +@@ -523,10 +525,9 @@ + } + + /* +- * Given a buffer returned by tgetent(), this routine will turn +- * the pipe seperated list of names in the buffer into an array +- * of pointers to null terminated names. We toss out any bad, +- * duplicate, or verbose names (names with spaces). ++ * This routine will turn a pipe seperated list of names in the buffer ++ * into an array of pointers to NUL terminated names. We toss out any ++ * bad, duplicate, or verbose names (names with spaces). + */ + + int is_unique P((char *, char **, char **)); +@@ -554,7 +555,7 @@ + /* + * Count up the number of names. + */ +- for (n = 1, cp = buf; *cp && *cp != ':'; cp++) { ++ for (n = 1, cp = buf; *cp; cp++) { + if (*cp == '|') + n++; + } +@@ -659,25 +660,6 @@ + return (1); + } + +-static char termbuf[1024]; +- +-int telnet_setupterm P((char *tname, int fd, int *errp)); /* XXX move elsewhere */ +- /*ARGSUSED*/ +- int +-telnet_setupterm(char *tname, int fd, int *errp) +-{ +- (void)fd; +- if (tgetent(termbuf, tname) == 1) { +- termbuf[1023] = '\0'; +- if (errp) +- *errp = 1; +- return(0); +- } +- if (errp) +- *errp = 0; +- return(-1); +-} +- + int resettermname = 1; + + char *gettermname P((void)); /* XXX move elsewhere */ +@@ -687,15 +669,15 @@ + char *tname; + static char **tnamep = 0; + static char **next; +- int err; ++ int errret; + + if (resettermname) { + resettermname = 0; + if (tnamep && tnamep != unknown) + free(tnamep); + if ((tname = (char *)env_getvalue((unsigned char *)"TERM")) && +- (telnet_setupterm(tname, 1, &err) == 0)) { +- tnamep = mklist(termbuf, tname); ++ (setupterm(tname, 1, &errret) == 0)) { ++ tnamep = mklist(ttytype, tname); + } else { + if (tname && ((int)strlen(tname) <= 40)) { + unknown[0] = tname; +@@ -1482,10 +1464,15 @@ + void + env_opt_start(void) + { +- if (opt_reply) +- opt_reply = (unsigned char *)realloc(opt_reply, OPT_REPLY_SIZE); +- else +- opt_reply = (unsigned char *)malloc(OPT_REPLY_SIZE); ++ unsigned char *p; ++ ++ if (opt_reply) { ++ p = (unsigned char *)realloc(opt_reply, OPT_REPLY_SIZE); ++ if (p == NULL) ++ free(opt_reply); ++ } else ++ p = (unsigned char *)malloc(OPT_REPLY_SIZE); ++ opt_reply = p; + if (opt_reply == NULL) { + /*@*/ printf("env_opt_start: malloc()/realloc() failed!!!\n"); + opt_reply = opt_replyp = opt_replyend = NULL; +@@ -1532,9 +1519,13 @@ + strlen((char *)ep) + 6 > opt_replyend) + { + int len; ++ unsigned char *p; + opt_replyend += OPT_REPLY_SIZE; + len = opt_replyend - opt_reply; +- opt_reply = (unsigned char *)realloc(opt_reply, len); ++ p = (unsigned char *)realloc(opt_reply, len); ++ if (p == NULL) ++ free(opt_reply); ++ opt_reply = p; + if (opt_reply == NULL) { + /*@*/ printf("env_opt_add: realloc() failed!!!\n"); + opt_reply = opt_replyp = opt_replyend = NULL; +@@ -1945,7 +1936,7 @@ + command(0, "z\n", 2); + continue; + } +- if (sc == escape) { ++ if (sc == escape && escape != _POSIX_VDISABLE) { + command(0, (char *)tbp, tcc); + bol = 1; + count += tcc; +@@ -1962,7 +1953,7 @@ + } + if ((sc == '\n') || (sc == '\r')) + bol = 1; +- } else if (sc == escape) { ++ } else if (sc == escape && escape != _POSIX_VDISABLE) { + /* + * Double escape is a pass through of a single escape character. + */ +diff -uNr telnet/telnet_locl.h telnet.obsd-cvs/telnet_locl.h +--- telnet/telnet_locl.h Thu Mar 12 06:57:44 1998 ++++ telnet.obsd-cvs/telnet_locl.h Sat Mar 10 11:12:37 2001 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: telnet_locl.h,v 1.1 1998/03/12 04:57:44 art Exp $ */ ++/* $OpenBSD: telnet_locl.h,v 1.2 1999/12/11 09:08:09 itojun Exp $ */ + /* $KTH: telnet_locl.h,v 1.13 1997/11/03 21:37:55 assar Exp $ */ + + /* +@@ -86,7 +86,5 @@ + #include "defines.h" + #include "types.h" + +-#undef AF_INET6 /* XXX - it has not been tested and it doesn't exist yet */ +- + /* prototypes */ + +diff -uNr libtelnet/kerberos.c libtelnet.obsd-cvs/kerberos.c +--- libtelnet/kerberos.c Mon Feb 8 23:38:17 1999 ++++ libtelnet.obsd-cvs/kerberos.c Sat Mar 10 11:11:03 2001 +@@ -320,11 +320,10 @@ + char ts[MAXPATHLEN]; + struct passwd *pw = getpwnam(UserNameRequested); + +- if(pw){ ++ if (pw) { + snprintf(ts, sizeof(ts), +- "%s%u", +- TKT_ROOT, +- (unsigned)pw->pw_uid); ++ "%s%u", TKT_ROOT, (unsigned)pw->pw_uid); ++ /* XXX allocation failure? */ + setenv("KRBTKFILE", ts, 1); + } + Data(ap, KRB_ACCEPT, NULL, 0); +@@ -609,16 +608,26 @@ + { + unsigned char *p = buf; + +- p += krb_put_nir(cred->service, cred->instance, cred->realm, p); ++ memcpy (p, cred->service, ANAME_SZ); ++ p += ANAME_SZ; ++ memcpy (p, cred->instance, INST_SZ); ++ p += INST_SZ; ++ memcpy (p, cred->realm, REALM_SZ); ++ p += REALM_SZ; + memcpy(p, cred->session, 8); + p += 8; + *p++ = cred->lifetime; + *p++ = cred->kvno; +- p += krb_put_int(cred->ticket_st.length, p, 4); ++ p += krb_put_int(cred->ticket_st.length, p, 4, 4); + memcpy(p, cred->ticket_st.dat, cred->ticket_st.length); + p += cred->ticket_st.length; +- p += krb_put_int(cred->issue_date, p, 4); +- p += krb_put_nir(cred->pname, cred->pinst, NULL, p); ++ p += krb_put_int(cred->issue_date, p, 4, 4); ++ strncpy (cred->pname, p, ANAME_SZ); ++ cred->pname[ANAME_SZ - 1] = '\0'; ++ p += ANAME_SZ; ++ strncpy (cred->pinst, p, INST_SZ); ++ cred->pinst[INST_SZ - 1] = '\0'; ++ p += INST_SZ; + return p - buf; + } + +@@ -627,7 +636,16 @@ + { + unsigned char *p = buf; + +- p += krb_get_nir(p, cred->service, cred->instance, cred->realm); ++ strncpy (cred->service, p, ANAME_SZ); ++ cred->service[ANAME_SZ - 1] = '\0'; ++ p += ANAME_SZ; ++ strncpy (cred->instance, p, INST_SZ); ++ cred->instance[INST_SZ - 1] = '\0'; ++ p += INST_SZ; ++ strncpy (cred->realm, p, REALM_SZ); ++ cred->realm[REALM_SZ - 1] = '\0'; ++ p += REALM_SZ; ++ + memcpy(cred->session, p, 8); + p += 8; + cred->lifetime = *p++; +@@ -636,7 +654,10 @@ + memcpy(cred->ticket_st.dat, p, cred->ticket_st.length); + cred->ticket_st.mbz = 0; + p += krb_get_int(p, (u_int32_t *)&cred->issue_date, 4, 0); +- p += krb_get_nir(p, cred->pname, cred->pinst, NULL); ++ p += krb_get_nir(p, ++ cred->pname, sizeof(cred->pname), ++ cred->pinst, sizeof(cred->pinst), ++ NULL, 0); + return 0; + } + +--- telnet/telnet.1 Thu Nov 12 01:01:46 1998 ++++ telnet.obsd-cvs/telnet.1 Thu Nov 9 19:52:41 2000 +@@ -1,4 +1,4 @@ +-.\" $OpenBSD: telnet.1,v 1.14 1998/11/11 23:01:46 aaron Exp $ ++.\" $OpenBSD: telnet.1,v 1.27 2000/11/09 17:52:41 aaron Exp $ + .\" $NetBSD: telnet.1,v 1.5 1996/02/28 21:04:12 thorpej Exp $ + .\" + .\" Copyright (c) 1983, 1990, 1993 +@@ -36,45 +36,34 @@ + .\" + .Dd February 3, 1994 + .Dt TELNET 1 +-.Os BSD 4.2 ++.Os + .Sh NAME + .Nm telnet +-.Nd user interface to the ++.Nd user interface to the + .Tn TELNET + protocol + .Sh SYNOPSIS + .Nm telnet +-.Op Fl 8 +-.Op Fl E +-.Op Fl F +-.Op Fl K +-.Op Fl L +-.Op Fl S Ar tos ++.Op Fl 8EFKLacdfrx + .Op Fl X Ar authtype +-.Op Fl a + .Op Fl b Ar hostalias +-.Op Fl c +-.Op Fl d + .Op Fl e Ar escapechar +-.Op Fl f + .Op Fl k Ar realm + .Op Fl l Ar user + .Op Fl n Ar tracefile +-.Op Fl r +-.Op Fl x + .Oo + .Ar host + .Op Ar port + .Oc + .Sh DESCRIPTION + The +-.Nm telnet ++.Nm + command +-is used to communicate with another host using the ++is used to communicate with another host using the + .Tn TELNET + protocol. + If +-.Nm telnet ++.Nm + is invoked without the + .Ar host + argument, it enters command mode, +@@ -85,11 +74,11 @@ + .Ic open + command with those arguments. + .Pp +-Options: +-.Bl -tag -width indent ++The options are as follows: ++.Bl -tag -width Ds + .It Fl 8 +-Specifies an 8-bit data path. This causes an attempt to +-negotiate the ++Specifies an 8-bit data path. ++This causes an attempt to negotiate the + .Dv TELNET BINARY + option on both input and output. + .It Fl E +@@ -103,18 +92,9 @@ + .It Fl K + Specifies no automatic login to the remote system. + .It Fl L +-Specifies an 8-bit data path on output. This causes the +-BINARY option to be negotiated on output. +-.It Fl S Ar tos +-Sets the IP type-of-service (TOS) option for the telnet +-connection to the value +-.Ar tos , +-which can be a numeric TOS value +-or, on systems that support it, a symbolic +-TOS name found in the +-.Pa /etc/iptos +-file. +-.It Fl X Ar atype ++Specifies an 8-bit data path on output. ++This causes the BINARY option to be negotiated on output. ++.It Fl X Ar atype + Disables the + .Ar atype + type of authentication. +@@ -144,7 +124,8 @@ + .It Fl c + Disables the reading of the user's + .Pa \&.telnetrc +-file. (See the ++file. ++(See the + .Ic toggle skiprc + command on this man page.) + .It Fl d +@@ -152,7 +133,7 @@ + .Ic debug + toggle to + .Dv TRUE . +-.It Fl e Ar escapechar ++.It Fl e Ar escapechar + Sets the initial + .Nm + escape character to +@@ -169,14 +150,14 @@ + If Kerberos authentication is being used, the + .Fl k + option requests that +-.Nm telnet ++.Nm + obtain tickets for the remote host in + realm + .Ar realm + instead of the remote host's realm, as determined + by + .Xr krb_realmofhost 3 . +-.It Fl l Ar user ++.It Fl l Ar user + When connecting to the remote system, if the remote system + understands the + .Ev ENVIRON +@@ -189,7 +170,7 @@ + This option may also be used with the + .Ic open + command. +-.It Fl n Ar tracefile ++.It Fl n Ar tracefile + Opens + .Ar tracefile + for recording trace information. +@@ -210,35 +191,38 @@ + Indicates the official name, an alias, or the Internet address + of a remote host. + .It Ar port +-Indicates a port number (address of an application). If a number is +-not specified, the default +-.Nm telnet ++Indicates a port number (address of an application). ++If a number is not specified, the default ++.Nm + port is used. + .El + .Pp +-When in rlogin mode, a line of the form ~. disconnects from the ++When in rlogin mode, a line of the form ~. ++disconnects from the + remote host; ~ is the telnet escape character. + Similarly, the line ~^Z suspends the telnet session. + The line ~^] escapes to the normal telnet escape prompt. + .Pp + Once a connection has been opened, +-.Nm telnet ++.Nm + will attempt to enable the + .Dv TELNET LINEMODE + option. + If this fails, +-.Nm telnet ++.Nm + will revert to one of two input modes: + either ``character at a time'' + or ``old line by line'' + depending on what the remote system supports. + .Pp +-When ++When + .Dv LINEMODE + is enabled, character processing is done on the +-local system, under the control of the remote system. When input ++local system, under the control of the remote system. ++When input + editing or character echoing is to be disabled, the remote system +-will relay that information. The remote system will also relay ++will relay that information. ++The remote system will also relay + changes to any special characters that happen on the remote + system, so that they can take effect on the local system. + .Pp +@@ -252,7 +236,7 @@ + (this would mostly be used to enter passwords + without the password being echoed). + .Pp +-If the ++If the + .Dv LINEMODE + option is enabled, or if the + .Ic localchars +@@ -267,7 +251,7 @@ + characters are trapped locally, and sent as + .Tn TELNET + protocol sequences to the remote side. +-If ++If + .Dv LINEMODE + has ever been enabled, then the user's + .Ic susp +@@ -278,9 +262,9 @@ + protocol sequences, + and + .Ic quit +-is sent as a ++is sent as a + .Dv TELNET ABORT +-instead of ++instead of + .Dv BREAK . + There are options (see + .Ic toggle +@@ -296,17 +280,26 @@ + (in the case of + .Ic quit + and +-.Ic intr ) . ++.Ic intr ) . + .Pp + While connected to a remote host, +-.Nm telnet ++.Nm + command mode may be entered by typing the +-.Nm telnet ++.Nm + ``escape character'' (initially ``^]''). + When in command mode, the normal terminal editing conventions are available. ++Note that the escape character will return to the command mode of the initial ++invocation of ++.Nm ++that has the controlling terminal. ++Use the ++.Cm send escape ++command to switch to command mode in subsequent ++.Nm ++processes on remote hosts. + .Pp + The following +-.Nm telnet ++.Nm + commands are available. + Only enough of each command to uniquely identify it need be typed + (this is also true for arguments to the +@@ -320,26 +313,28 @@ + .Ic display + commands). + .Bl -tag -width "mode type" +-.It Ic auth Ar argument Op Ar ... ++.It Ic auth Ar argument Op Ar ... + The + .Ic auth + command manipulates the information sent through the + .Dv TELNET AUTHENTICATE +-option. Valid arguments for the +-auth command are as follows: ++option. ++Valid arguments for the ++.Ic auth ++command are as follows: + .Bl -tag -width "disable type" + .It Ic disable Ar type + Disables the specified + .Ar type +-of authentication. To +-obtain a list of available types, use the ++of authentication. ++To obtain a list of available types, use the + .Ic auth disable \&? + command. + .It Ic enable Ar type + Enables the specified + .Ar type +-of authentication. To +-obtain a list of available types, use the ++of authentication. ++To obtain a list of available types, use the + .Ic auth enable \&? + command. + .It Ic status +@@ -350,7 +345,7 @@ + Close a + .Tn TELNET + session and return to command mode. +-.It Ic display Ar argument Op Ar ... ++.It Ic display Ar argument Op Ar ... + Displays all, or some, of the + .Ic set + and +@@ -368,26 +363,27 @@ + .It Ic disable Ar type Ic [input|output] + Disables the specified + .Ar type +-of encryption. If you +-omit ++of encryption. ++If you omit + .Ic input + and + .Ic output , + both input and output +-are disabled. To obtain a list of available +-types, use the ++are disabled. ++To obtain a list of available types, use the + .Ic encrypt disable \&? + command. + .It Ic enable Ar type Ic [input|output] + Enables the specified + .Ar type +-of encryption. If you +-omit ++of encryption. ++If you omit + .Ic input + and + .Ic output , + both input and output are +-enabled. To obtain a list of available types, use the ++enabled. ++To obtain a list of available types, use the + .Ic encrypt enable \&? + command. + .It Ic input +@@ -407,18 +403,20 @@ + .Ic encrypt stop output + command. + .It Ic start Ic [input|output] +-Attempts to start encryption. If you omit ++Attempts to start encryption. ++If you omit + .Ic input + and +-.Ic output, +-both input and output are enabled. To +-obtain a list of available types, use the ++.Ic output , ++both input and output are enabled. ++To obtain a list of available types, use the + .Ic encrypt enable \&? + command. + .It Ic status + Lists the current status of encryption. + .It Ic stop Ic [input|output] +-Stops encryption. If you omit ++Stops encryption. ++If you omit + .Ic input + and + .Ic output , +@@ -431,7 +429,7 @@ + .Ic encrypt stop + commands. + .El +-.It Ic environ Ar arguments Op Ar ... ++.It Ic environ Ar arguments Op Ar ... + The + .Ic environ + command is used to manipulate the +@@ -456,7 +454,7 @@ + .Ic environ + command are: + .Bl -tag -width Fl +-.It Ic define Ar variable value ++.It Ic define Ar variable value + Define the variable + .Ar variable + to have a value of +@@ -466,15 +464,15 @@ + .Ar value + may be enclosed in single or double quotes so + that tabs and spaces may be included. +-.It Ic undefine Ar variable ++.It Ic undefine Ar variable + Remove + .Ar variable + from the list of environment variables. +-.It Ic export Ar variable ++.It Ic export Ar variable + Mark the variable + .Ar variable + to be exported to the remote side. +-.It Ic unexport Ar variable ++.It Ic unexport Ar variable + Mark the variable + .Ar variable + to not be exported unless +@@ -508,7 +506,7 @@ + suspending a user's session for later reattachment, + the logout argument indicates that you + should terminate the session immediately. +-.It Ic mode Ar type ++.It Ic mode Ar type + .Ar type + is one of several options, depending on the state of the + .Tn TELNET +@@ -529,40 +527,40 @@ + option, or, if the remote side does not understand the + .Dv LINEMODE + option, then attempt to enter ``old-line-by-line'' mode. +-.It Ic isig Pq Ic \-isig +-Attempt to enable (disable) the ++.It Ic isig Pq Ic \-isig ++Attempt to enable (disable) the + .Dv TRAPSIG +-mode of the ++mode of the + .Dv LINEMODE + option. +-This requires that the ++This requires that the + .Dv LINEMODE + option be enabled. +-.It Ic edit Pq Ic \-edit +-Attempt to enable (disable) the ++.It Ic edit Pq Ic \-edit ++Attempt to enable (disable) the + .Dv EDIT +-mode of the ++mode of the + .Dv LINEMODE + option. +-This requires that the ++This requires that the + .Dv LINEMODE + option be enabled. +-.It Ic softtabs Pq Ic \-softtabs +-Attempt to enable (disable) the ++.It Ic softtabs Pq Ic \-softtabs ++Attempt to enable (disable) the + .Dv SOFT_TAB +-mode of the ++mode of the + .Dv LINEMODE + option. +-This requires that the ++This requires that the + .Dv LINEMODE + option be enabled. +-.It Ic litecho Pq Ic \-litecho +-Attempt to enable (disable) the ++.It Ic litecho Pq Ic \-litecho ++Attempt to enable (disable) the + .Dv LIT_ECHO +-mode of the ++mode of the + .Dv LINEMODE + option. +-This requires that the ++This requires that the + .Dv LINEMODE + option be enabled. + .It Ic \&? +@@ -579,7 +577,7 @@ + Open a connection to the named host. + If no port number + is specified, +-.Nm telnet ++.Nm + will attempt to contact a + .Tn TELNET + server at the default port. +@@ -594,24 +592,29 @@ + .Ev ENVIRON + option. + When connecting to a non-standard port, +-.Nm telnet ++.Nm + omits any automatic initiation of + .Tn TELNET +-options. When the port number is preceded by a minus sign, ++options. ++When the port number is preceded by a minus sign, + the initial option negotiation is done. + After establishing a connection, the file + .Pa \&.telnetrc + in the +-user's home directory is opened. Lines beginning with a ``#'' are +-comment lines. Blank lines are ignored. Lines that begin +-without white space are the start of a machine entry. The +-first thing on the line is the name of the machine that is +-being connected to. The rest of the line, and successive +-lines that begin with white space are assumed to be +-.Nm telnet ++user's home directory is opened. ++Lines beginning with a ``#'' are ++comment lines. ++Blank lines are ignored. ++Lines that begin ++without whitespace are the start of a machine entry. ++The first thing on the line is the name of the machine that is ++being connected to. ++The rest of the line, and successive ++lines that begin with whitespace are assumed to be ++.Nm + commands and are processed as if they had been typed + in manually to the +-.Nm telnet ++.Nm + command prompt. + .It Ic quit + Close any open +@@ -619,7 +622,7 @@ + session and exit + .Nm telnet . + An end-of-file (in command mode) will also close a session and exit. +-.It Ic send Ar arguments ++.It Ic send Ar arguments + Sends one or more special character sequences to the remote host. + The following are the arguments which may be specified + (more than one argument may be specified at a time): +@@ -673,7 +676,7 @@ + sequence. + .It Ic escape + Sends the current +-.Nm telnet ++.Nm + escape character (initially ``^]''). + .It Ic ga + Sends the +@@ -788,12 +791,12 @@ + .Ic send + command. + .El +-.It Ic set Ar argument value +-.It Ic unset Ar argument value ++.It Ic set Ar argument value ++.It Ic unset Ar argument value + The + .Ic set + command will set any one of a number of +-.Nm telnet ++.Nm + variables to a specific value or to + .Dv TRUE . + The special value +@@ -811,7 +814,8 @@ + .Ic display + command. + The variables which may be set or unset, but not toggled, are +-listed here. In addition, any of the variables for the ++listed here. ++In addition, any of the variables for the + .Ic toggle + command may be explicitly set or unset using + the +@@ -832,7 +836,8 @@ + sequence (see + .Ic send ayt + preceding) is sent to the +-remote host. The initial value for the "Are You There" ++remote host. ++The initial value for the "Are You There" + character is the terminal's status character. + .It Ic echo + This is the value (initially ``^E'') which, when in +@@ -841,7 +846,7 @@ + echoing of entered characters (for entering, say, a password). + .It Ic eof + If +-.Nm telnet ++.Nm + is operating in + .Dv LINEMODE + or ``old line by line'' mode, entering this character +@@ -854,7 +859,7 @@ + character. + .It Ic erase + If +-.Nm telnet ++.Nm + is in + .Ic localchars + mode (see +@@ -862,7 +867,7 @@ + .Ic localchars + below), + and if +-.Nm telnet ++.Nm + is operating in ``character at a time'' mode, then when this + character is typed, a + .Dv TELNET EC +@@ -879,14 +884,14 @@ + character. + .It Ic escape + This is the +-.Nm telnet ++.Nm + escape character (initially ``^['') which causes entry + into +-.Nm telnet ++.Nm + command mode (when connected to a remote system). + .It Ic flushoutput + If +-.Nm telnet ++.Nm + is in + .Ic localchars + mode (see +@@ -916,12 +921,13 @@ + .Dv LINEMODE , + these are the + characters that, when typed, cause partial lines to be +-forwarded to the remote system. The initial value for ++forwarded to the remote system. ++The initial value for + the forwarding characters are taken from the terminal's + eol and eol2 characters. + .It Ic interrupt + If +-.Nm telnet ++.Nm + is in + .Ic localchars + mode (see +@@ -945,7 +951,7 @@ + character. + .It Ic kill + If +-.Nm telnet ++.Nm + is in + .Ic localchars + mode (see +@@ -953,7 +959,7 @@ + .Ic localchars + below), + and if +-.Nm telnet ++.Nm + is operating in ``character at a time'' mode, then when this + character is typed, a + .Dv TELNET EL +@@ -970,7 +976,7 @@ + character. + .It Ic lnext + If +-.Nm telnet ++.Nm + is operating in + .Dv LINEMODE + or ``old line by line'' mode, then this character is taken to +@@ -985,7 +991,7 @@ + character. + .It Ic quit + If +-.Nm telnet ++.Nm + is in + .Ic localchars + mode (see +@@ -1009,7 +1015,7 @@ + character. + .It Ic reprint + If +-.Nm telnet ++.Nm + is operating in + .Dv LINEMODE + or old line by line'' mode, then this character is taken to +@@ -1031,8 +1037,9 @@ + This character, at the beginning of a line, followed by + a "." closes the connection; when followed by a ^Z it + suspends the +-.Nm telnet +-command. The initial state is to ++.Nm ++command. ++The initial state is to + disable the + .Ic rlogin + escape character. +@@ -1066,7 +1073,7 @@ + character. + .It Ic susp + If +-.Nm telnet ++.Nm + is in + .Ic localchars + mode, or +@@ -1093,12 +1100,13 @@ + .Ic option + tracing being + .Dv TRUE , +-will be written. If it is set to ++will be written. ++If it is set to + .Dq Fl , + then tracing information will be written to standard output (the default). + .It Ic worderase + If +-.Nm telnet ++.Nm + is operating in + .Dv LINEMODE + or ``old line by line'' mode, then this character is taken to +@@ -1117,25 +1125,32 @@ + .Pq Ic unset + commands. + .El +-.It Ic slc Ar state ++.It Ic skey Ar sequence challenge ++The ++.Ic skey ++command computes a response to the S/Key challenge. ++See ++.Xr skey 1 ++for more information on the S/Key system. ++.It Ic slc Ar state + The + .Ic slc + command (Set Local Characters) is used to set + or change the state of the special +-characters when the ++characters when the + .Dv TELNET LINEMODE + option has +-been enabled. Special characters are characters that get +-mapped to ++been enabled. ++Special characters are characters that get mapped to + .Tn TELNET + commands sequences (like + .Ic ip + or +-.Ic quit ) ++.Ic quit ) + or line editing characters (like + .Ic erase + and +-.Ic kill ) . ++.Ic kill ) . + By default, the local special characters are exported. + .Bl -tag -width Fl + .It Ic check +@@ -1144,15 +1159,15 @@ + character settings, and if there are any discrepancies with + the local side, the local side will switch to the remote value. + .It Ic export +-Switch to the local defaults for the special characters. The +-local default characters are those of the local terminal at ++Switch to the local defaults for the special characters. ++The local default characters are those of the local terminal at + the time when +-.Nm telnet ++.Nm + was started. + .It Ic import + Switch to the remote defaults for the special characters. + The remote default characters are those of the remote system +-at the time when the ++at the time when the + .Tn TELNET + connection was established. + .It Ic \&? +@@ -1165,13 +1180,13 @@ + .Nm telnet . + This includes the peer one is connected to, as well + as the current mode. +-.It Ic toggle Ar arguments Op Ar ... ++.It Ic toggle Ar arguments Op Ar ... + Toggle (between + .Dv TRUE + and + .Dv FALSE ) + various flags that control how +-.Nm telnet ++.Nm + responds to events. + These flags may be set explicitly to + .Dv TRUE +@@ -1206,7 +1221,7 @@ + sequences; see + .Ic set + above for details), +-.Nm telnet ++.Nm + refuses to display any data on the user's terminal + until the remote system acknowledges (via a + .Dv TELNET TIMING MARK +@@ -1220,13 +1235,14 @@ + done an "stty noflsh", otherwise + .Dv FALSE + (see +-.Xr stty 1 ) . ++.Xr stty 1 ) . + .It Ic autodecrypt + When the + .Dv TELNET ENCRYPT + option is negotiated, by + default the actual encryption (decryption) of the data +-stream does not start automatically. The ++stream does not start automatically. ++The + .Ic autoencrypt + .Pq Ic autodecrypt + command states that encryption of the +@@ -1238,7 +1254,8 @@ + .Dv TELNET AUTHENTICATION + option + .Tn TELNET +-attempts to use it to perform automatic authentication. If the ++attempts to use it to perform automatic authentication. ++If the + .Dv AUTHENTICATION + option is not supported, the user's login + name are propagated through the +@@ -1314,7 +1331,7 @@ + The initial value for this toggle is + .Dv FALSE . + .It Ic debug +-Toggles socket level debugging (useful only to the super-user). ++Toggles socket level debugging (useful only to the superuser). + The initial value for this toggle is + .Dv FALSE . + .It Ic encdebug +@@ -1340,7 +1357,7 @@ + .Ic brk , + .Ic ec , + and +-.Ic el ; ++.Ic el ; + see + .Ic send + above). +@@ -1379,7 +1396,7 @@ + .Dv FALSE . + .It Ic options + Toggles the display of some internal +-.Nm telnet ++.Nm + protocol processing (having to do with + .Tn TELNET + options). +@@ -1404,8 +1421,8 @@ + skips the reading of the + .Pa \&.telnetrc + file in the user's home +-directory when connections are opened. The initial +-value for this toggle is ++directory when connections are opened. ++The initial value for this toggle is + .Dv FALSE . + .It Ic termdata + Toggles the display of all terminal data (in hexadecimal format). +@@ -1416,9 +1433,10 @@ + .Ic verbose_encrypt + toggle is + .Dv TRUE , +-.Nm telnet ++.Nm + prints out a message each time encryption is enabled or +-disabled. The initial value for this toggle is ++disabled. ++The initial value for this toggle is + .Dv FALSE . + .It Ic \&? + Displays the legal +@@ -1430,22 +1448,24 @@ + .Nm telnet . + This command only works when the user is using the + .Xr csh 1 . +-.It Ic \&! Op Ar command ++.It Ic \&! Op Ar command + Execute a single command in a subshell on the local +-system. If ++system. ++If + .Ar command + is omitted, then an interactive + subshell is invoked. +-.It Ic \&? Op Ar command +-Get help. With no arguments, +-.Nm telnet ++.It Ic \&? Op Ar command ++Get help. ++With no arguments, ++.Nm + prints a help summary. + If a command is specified, +-.Nm telnet ++.Nm + will print the help information for just that command. + .El + .Sh ENVIRONMENT +-.Nm telnet ++.Nm + uses at least the + .Ev HOME , + .Ev SHELL , +@@ -1464,16 +1484,18 @@ + .El + .Sh HISTORY + The +-.Nm telnet ++.Nm + command appeared in + .Bx 4.2 . + .Sh NOTES + On some remote systems, echo has to be turned off manually when in + ``old line by line'' mode. + .Pp +-In ``old line by line'' mode or ++In ``old line by line'' mode or + .Dv LINEMODE + the terminal's + .Ic eof + character is only recognized (and sent to the remote system) + when it is the first character on a line. ++.Pp ++Source routing is not supported yet for IPv6. diff --git a/telnet.spec b/telnet.spec index 4c6fb66..c57773a 100644 --- a/telnet.spec +++ b/telnet.spec @@ -1,16 +1,17 @@ -%define _snapshot -pre20000412 - Summary: The client program for the telnet remote login protocol. Name: telnet Version: 0.17 -Release: 10 +Release: 15 Copyright: BSD Group: Applications/Internet -Source0: ftp://ftp.uk.linux.org/pub/linux/Networking/netkit-devel/netkit-telnet-%{version}%{_snapshot}.tar.gz +Source0: ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/netkit-telnet-%{version}.tar.gz Source2: telnet-client.tar.gz Source3: telnet-xinetd -Patch4: telnet-0.10-escapechar.patch +Patch1: telnet-client-cvs.patch +Patch5: telnetd-0.17.diff Patch6: telnet-0.17-env.patch +Patch7: telnet-0.17-issue.patch +BuildPreReq: ncurses-devel Buildroot: %{_tmppath}/%{name}-root %description @@ -19,6 +20,8 @@ Internet. The telnet package provides a command line telnet client. Install the telnet package if you want to telnet to remote machines. +This version has support for IPv6. + %package server Requires: xinetd Group: System Environment/Daemons @@ -35,16 +38,17 @@ Install the telnet-server package if you want to support remote logins to your own machine. %prep -%setup -q -n netkit-telnet-%{version}%{_snapshot} +%setup -q -n netkit-telnet-%{version} mv telnet telnet-NETKIT -%setup -T -D -q -a 2 -n netkit-telnet-%{version}%{_snapshot} -%patch4 -p1 -b .escapechar - +%setup -T -D -q -a 2 -n netkit-telnet-%{version} +%patch1 -p0 -b .cvs +%patch5 -p0 -b .fix %patch6 -p1 -b .env +%patch7 -p1 -b .issue %build -sh configure +sh configure --with-c-compiler=gcc perl -pi -e ' s,^CC=.*$,CC=cc,; s,-O2,\$(RPM_OPT_FLAGS),; @@ -91,7 +95,7 @@ rm -rf ${RPM_BUILD_ROOT} %files %defattr(-,root,root) -%config(missingok) /etc/X11/applnk/Internet/telnet.desktop +#%config(missingok) /etc/X11/applnk/Internet/telnet.desktop %{_bindir}/telnet %{_mandir}/man1/telnet.1* @@ -104,6 +108,26 @@ rm -rf ${RPM_BUILD_ROOT} %{_mandir}/man8/telnetd.8* %changelog +* Sat Jul 21 2001 Tim Powers +- no applnk file, it's clutrtering the menus + +* Wed Jul 17 2001 Bill Nottingham +- apply the patch, duh (and fix it while we're here) + +* Tue Jul 10 2001 Bill Nottingham +- make /etc/issue.net parsing match the various gettys + +* Mon Jun 18 2001 Harald Hoyer +- merged Jakubs and Pekka's patches + +* Wed Apr 4 2001 Jakub Jelinek +- don't let configure to guess compiler, it can pick up egcs + +* Fri Mar 9 2001 Pekka Savola +- update to 0.17 +- apply latest changes from CVS to telnet client, enable IPv6 +- BuildPreReq ncurses-devel + * Mon Jan 22 2001 Helge Deller - added swedish & german translation to .desktop-file (#15332) diff --git a/telnetd-0.17.diff b/telnetd-0.17.diff new file mode 100644 index 0000000..f53415f --- /dev/null +++ b/telnetd-0.17.diff @@ -0,0 +1,21 @@ +--- telnetd/telnetd.c Thu Apr 13 00:36:12 2000 ++++ telnetd.new/telnetd.c Sun Mar 11 03:10:43 2001 +@@ -44,7 +44,7 @@ + #include "../version.h" + + #include +-#include ++#include + #include + /* #include */ /* Don't think this is used at all here */ + #include +--- telnetd/defs.h Mon Aug 2 06:14:03 1999 ++++ telnetd.new/defs.h Sun Mar 11 03:28:13 2001 +@@ -56,6 +56,7 @@ + #include + #include + #include ++#include + #include + #include + #include