Stop building multiple versions of telnet.
authorPeter Avalos <pavalos@theshell.com>
Sun, 12 Jul 2009 01:50:58 +0000 (15:50 -1000)
committerPeter Avalos <pavalos@theshell.com>
Sun, 12 Jul 2009 01:50:58 +0000 (15:50 -1000)
It's ok to move this code outside of crypto/ because it doesn't actually
contain any crypto -- only routines that call the crypto functions.
This keeps the code centralized, and the usual make.conf defines will
control what gets built (the default is still non-kerberos and with
crypto).

89 files changed:
crypto/telnet/arpa/telnet.h [deleted file]
crypto/telnet/libtelnet/genget.c [deleted file]
crypto/telnet/libtelnet/getent.c [deleted file]
crypto/telnet/libtelnet/misc-proto.h [deleted file]
crypto/telnet/libtelnet/misc.c [deleted file]
crypto/telnet/libtelnet/misc.h [deleted file]
crypto/telnet/telnet/authenc.c [deleted file]
crypto/telnet/telnet/commands.c [deleted file]
crypto/telnet/telnet/defines.h [deleted file]
crypto/telnet/telnet/externs.h [deleted file]
crypto/telnet/telnet/fdset.h [deleted file]
crypto/telnet/telnet/general.h [deleted file]
crypto/telnet/telnet/main.c [deleted file]
crypto/telnet/telnet/network.c [deleted file]
crypto/telnet/telnet/ring.c [deleted file]
crypto/telnet/telnet/ring.h [deleted file]
crypto/telnet/telnet/sys_bsd.c [deleted file]
crypto/telnet/telnet/telnet.1 [deleted file]
crypto/telnet/telnet/telnet.c [deleted file]
crypto/telnet/telnet/terminal.c [deleted file]
crypto/telnet/telnet/types.h [deleted file]
crypto/telnet/telnet/utilities.c [deleted file]
crypto/telnet/telnetd/defs.h [deleted file]
crypto/telnet/telnetd/ext.h [deleted file]
crypto/telnet/telnetd/global.c [deleted file]
crypto/telnet/telnetd/pathnames.h [deleted file]
crypto/telnet/telnetd/slc.c [deleted file]
crypto/telnet/telnetd/state.c [deleted file]
crypto/telnet/telnetd/sys_term.c [deleted file]
crypto/telnet/telnetd/telnetd.8 [deleted file]
crypto/telnet/telnetd/telnetd.c [deleted file]
crypto/telnet/telnetd/telnetd.h [deleted file]
crypto/telnet/telnetd/termstat.c [deleted file]
crypto/telnet/telnetd/utility.c [deleted file]
lib/libtelnet/Makefile
lib/libtelnet/auth-proto.h [moved from crypto/telnet/libtelnet/auth-proto.h with 100% similarity]
lib/libtelnet/auth.c [moved from crypto/telnet/libtelnet/auth.c with 100% similarity]
lib/libtelnet/auth.h [moved from crypto/telnet/libtelnet/auth.h with 100% similarity]
lib/libtelnet/enc-proto.h [moved from crypto/telnet/libtelnet/enc-proto.h with 100% similarity]
lib/libtelnet/enc_des.c [moved from crypto/telnet/libtelnet/enc_des.c with 100% similarity]
lib/libtelnet/encrypt.c [moved from crypto/telnet/libtelnet/encrypt.c with 100% similarity]
lib/libtelnet/encrypt.h [moved from crypto/telnet/libtelnet/encrypt.h with 100% similarity]
lib/libtelnet/genget.c
lib/libtelnet/getent.c
lib/libtelnet/kerberos5.c [moved from crypto/telnet/libtelnet/kerberos5.c with 100% similarity]
lib/libtelnet/key-proto.h [moved from crypto/telnet/libtelnet/key-proto.h with 100% similarity]
lib/libtelnet/krb4encpwd.c [moved from crypto/telnet/libtelnet/krb4encpwd.c with 100% similarity]
lib/libtelnet/misc-proto.h
lib/libtelnet/misc.c
lib/libtelnet/pk.c [moved from crypto/telnet/libtelnet/pk.c with 100% similarity]
lib/libtelnet/pk.h [moved from crypto/telnet/libtelnet/pk.h with 100% similarity]
lib/libtelnet/read_password.c [moved from crypto/telnet/libtelnet/read_password.c with 100% similarity]
lib/libtelnet/rsaencpwd.c [moved from crypto/telnet/libtelnet/rsaencpwd.c with 100% similarity]
lib/libtelnet/sra.c [moved from crypto/telnet/libtelnet/sra.c with 100% similarity]
libexec/telnetd/Makefile
libexec/telnetd/authenc.c [moved from crypto/telnet/telnetd/authenc.c with 100% similarity]
libexec/telnetd/defs.h
libexec/telnetd/ext.h
libexec/telnetd/global.c
libexec/telnetd/pathnames.h
libexec/telnetd/slc.c
libexec/telnetd/state.c
libexec/telnetd/sys_term.c
libexec/telnetd/telnetd.8
libexec/telnetd/telnetd.c
libexec/telnetd/telnetd.h
libexec/telnetd/termstat.c
libexec/telnetd/utility.c
secure/Makefile.inc
secure/lib/Makefile
secure/lib/libtelnet/Makefile [deleted file]
secure/libexec/Makefile
secure/libexec/telnetd/Makefile [deleted file]
secure/usr.bin/Makefile
secure/usr.bin/telnet/Makefile [deleted file]
usr.bin/telnet/Makefile
usr.bin/telnet/authenc.c
usr.bin/telnet/commands.c
usr.bin/telnet/defines.h
usr.bin/telnet/externs.h
usr.bin/telnet/main.c
usr.bin/telnet/network.c
usr.bin/telnet/ring.c
usr.bin/telnet/ring.h
usr.bin/telnet/sys_bsd.c
usr.bin/telnet/telnet.1
usr.bin/telnet/telnet.c
usr.bin/telnet/terminal.c
usr.bin/telnet/utilities.c

diff --git a/crypto/telnet/arpa/telnet.h b/crypto/telnet/arpa/telnet.h
deleted file mode 100644 (file)
index 2863269..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (c) 1983, 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. 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
- *    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.
- *
- *     @(#)telnet.h    8.2 (Berkeley) 12/15/93
- * $FreeBSD: src/crypto/telnet/arpa/telnet.h,v 1.3.2.3 2002/04/13 10:59:07 markm Exp $
- * $DragonFly: src/crypto/telnet/arpa/telnet.h,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#ifndef _ARPA_TELNET_H_
-#define        _ARPA_TELNET_H_
-
-/*
- * Definitions for the TELNET protocol.
- */
-#define        IAC     255             /* interpret as command: */
-#define        DONT    254             /* you are not to use option */
-#define        DO      253             /* please, you use option */
-#define        WONT    252             /* I won't use option */
-#define        WILL    251             /* I will use option */
-#define        SB      250             /* interpret as subnegotiation */
-#define        GA      249             /* you may reverse the line */
-#define        EL      248             /* erase the current line */
-#define        EC      247             /* erase the current character */
-#define        AYT     246             /* are you there */
-#define        AO      245             /* abort output--but let prog finish */
-#define        IP      244             /* interrupt process--permanently */
-#define        BREAK   243             /* break */
-#define        DM      242             /* data mark--for connect. cleaning */
-#define        NOP     241             /* nop */
-#define        SE      240             /* end sub negotiation */
-#define EOR     239             /* end of record (transparent mode) */
-#define        ABORT   238             /* Abort process */
-#define        SUSP    237             /* Suspend process */
-#define        xEOF    236             /* End of file: EOF is already used... */
-
-#define SYNCH  242             /* for telfunc calls */
-
-#ifdef TELCMDS
-const char *telcmds[] = {
-       "EOF", "SUSP", "ABORT", "EOR",
-       "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
-       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC",
-       0
-};
-#else
-extern char *telcmds[];
-#endif
-
-#define        TELCMD_FIRST    xEOF
-#define        TELCMD_LAST     IAC
-#define        TELCMD_OK(x)    ((unsigned int)(x) <= TELCMD_LAST && \
-                        (unsigned int)(x) >= TELCMD_FIRST)
-#define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
-
-/* telnet options */
-#define TELOPT_BINARY  0       /* 8-bit data path */
-#define TELOPT_ECHO    1       /* echo */
-#define        TELOPT_RCP      2       /* prepare to reconnect */
-#define        TELOPT_SGA      3       /* suppress go ahead */
-#define        TELOPT_NAMS     4       /* approximate message size */
-#define        TELOPT_STATUS   5       /* give status */
-#define        TELOPT_TM       6       /* timing mark */
-#define        TELOPT_RCTE     7       /* remote controlled transmission and echo */
-#define TELOPT_NAOL    8       /* negotiate about output line width */
-#define TELOPT_NAOP    9       /* negotiate about output page size */
-#define TELOPT_NAOCRD  10      /* negotiate about CR disposition */
-#define TELOPT_NAOHTS  11      /* negotiate about horizontal tabstops */
-#define TELOPT_NAOHTD  12      /* negotiate about horizontal tab disposition */
-#define TELOPT_NAOFFD  13      /* negotiate about formfeed disposition */
-#define TELOPT_NAOVTS  14      /* negotiate about vertical tab stops */
-#define TELOPT_NAOVTD  15      /* negotiate about vertical tab disposition */
-#define TELOPT_NAOLFD  16      /* negotiate about output LF disposition */
-#define TELOPT_XASCII  17      /* extended ascic character set */
-#define        TELOPT_LOGOUT   18      /* force logout */
-#define        TELOPT_BM       19      /* byte macro */
-#define        TELOPT_DET      20      /* data entry terminal */
-#define        TELOPT_SUPDUP   21      /* supdup protocol */
-#define        TELOPT_SUPDUPOUTPUT 22  /* supdup output */
-#define        TELOPT_SNDLOC   23      /* send location */
-#define        TELOPT_TTYPE    24      /* terminal type */
-#define        TELOPT_EOR      25      /* end or record */
-#define        TELOPT_TUID     26      /* TACACS user identification */
-#define        TELOPT_OUTMRK   27      /* output marking */
-#define        TELOPT_TTYLOC   28      /* terminal location number */
-#define        TELOPT_3270REGIME 29    /* 3270 regime */
-#define        TELOPT_X3PAD    30      /* X.3 PAD */
-#define        TELOPT_NAWS     31      /* window size */
-#define        TELOPT_TSPEED   32      /* terminal speed */
-#define        TELOPT_LFLOW    33      /* remote flow control */
-#define TELOPT_LINEMODE        34      /* Linemode option */
-#define TELOPT_XDISPLOC        35      /* X Display Location */
-#define TELOPT_OLD_ENVIRON 36  /* Old - Environment variables */
-#define        TELOPT_AUTHENTICATION 37/* Authenticate */
-#define        TELOPT_ENCRYPT  38      /* Encryption option */
-#define TELOPT_NEW_ENVIRON 39  /* New - Environment variables */
-#define        TELOPT_EXOPL    255     /* extended-options-list */
-
-
-#define        NTELOPTS        (1+TELOPT_NEW_ENVIRON)
-#ifdef TELOPTS
-const char *telopts[NTELOPTS+1] = {
-       "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
-       "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
-       "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
-       "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
-       "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
-       "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
-       "TACACS UID", "OUTPUT MARKING", "TTYLOC",
-       "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
-       "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
-       "ENCRYPT", "NEW-ENVIRON",
-       0
-};
-#define        TELOPT_FIRST    TELOPT_BINARY
-#define        TELOPT_LAST     TELOPT_NEW_ENVIRON
-#define        TELOPT_OK(x)    ((unsigned int)(x) <= TELOPT_LAST)
-#define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
-#endif
-
-/* sub-option qualifiers */
-#define        TELQUAL_IS      0       /* option is... */
-#define        TELQUAL_SEND    1       /* send option */
-#define        TELQUAL_INFO    2       /* ENVIRON: informational version of IS */
-#define        TELQUAL_REPLY   2       /* AUTHENTICATION: client version of IS */
-#define        TELQUAL_NAME    3       /* AUTHENTICATION: client version of IS */
-
-#define        LFLOW_OFF               0       /* Disable remote flow control */
-#define        LFLOW_ON                1       /* Enable remote flow control */
-#define        LFLOW_RESTART_ANY       2       /* Restart output on any char */
-#define        LFLOW_RESTART_XON       3       /* Restart output only on XON */
-
-/*
- * LINEMODE suboptions
- */
-
-#define        LM_MODE         1
-#define        LM_FORWARDMASK  2
-#define        LM_SLC          3
-
-#define        MODE_EDIT       0x01
-#define        MODE_TRAPSIG    0x02
-#define        MODE_ACK        0x04
-#define MODE_SOFT_TAB  0x08
-#define MODE_LIT_ECHO  0x10
-
-#define        MODE_MASK       0x1f
-
-/* Not part of protocol, but needed to simplify things... */
-#define MODE_FLOW              0x0100
-#define MODE_ECHO              0x0200
-#define MODE_INBIN             0x0400
-#define MODE_OUTBIN            0x0800
-#define MODE_FORCE             0x1000
-
-#define        SLC_SYNCH       1
-#define        SLC_BRK         2
-#define        SLC_IP          3
-#define        SLC_AO          4
-#define        SLC_AYT         5
-#define        SLC_EOR         6
-#define        SLC_ABORT       7
-#define        SLC_EOF         8
-#define        SLC_SUSP        9
-#define        SLC_EC          10
-#define        SLC_EL          11
-#define        SLC_EW          12
-#define        SLC_RP          13
-#define        SLC_LNEXT       14
-#define        SLC_XON         15
-#define        SLC_XOFF        16
-#define        SLC_FORW1       17
-#define        SLC_FORW2       18
-#define SLC_MCL         19
-#define SLC_MCR         20
-#define SLC_MCWL        21
-#define SLC_MCWR        22
-#define SLC_MCBOL       23
-#define SLC_MCEOL       24
-#define SLC_INSRT       25
-#define SLC_OVER        26
-#define SLC_ECR         27
-#define SLC_EWR         28
-#define SLC_EBOL        29
-#define SLC_EEOL        30
-
-#define        NSLC            30
-
-/*
- * For backwards compatibility, we define SLC_NAMES to be the
- * list of names if SLC_NAMES is not defined.
- */
-#define        SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR",  \
-                       "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
-                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2",       \
-                       "MCL", "MCR", "MCWL", "MCWR", "MCBOL",          \
-                       "MCEOL", "INSRT", "OVER", "ECR", "EWR",         \
-                       "EBOL", "EEOL",                                 \
-                       0
-
-#ifdef SLC_NAMES
-const char *slc_names[] = {
-       SLC_NAMELIST
-};
-#else
-extern char *slc_names[];
-#define        SLC_NAMES SLC_NAMELIST
-#endif
-
-#define        SLC_NAME_OK(x)  ((unsigned int)(x) <= NSLC)
-#define SLC_NAME(x)    slc_names[x]
-
-#define        SLC_NOSUPPORT   0
-#define        SLC_CANTCHANGE  1
-#define        SLC_VARIABLE    2
-#define        SLC_DEFAULT     3
-#define        SLC_LEVELBITS   0x03
-
-#define        SLC_FUNC        0
-#define        SLC_FLAGS       1
-#define        SLC_VALUE       2
-
-#define        SLC_ACK         0x80
-#define        SLC_FLUSHIN     0x40
-#define        SLC_FLUSHOUT    0x20
-
-#define        OLD_ENV_VAR     1
-#define        OLD_ENV_VALUE   0
-#define        NEW_ENV_VAR     0
-#define        NEW_ENV_VALUE   1
-#define        ENV_ESC         2
-#define ENV_USERVAR    3
-
-/*
- * AUTHENTICATION suboptions
- */
-
-/*
- * Who is authenticating who ...
- */
-#define        AUTH_WHO_CLIENT         0       /* Client authenticating server */
-#define        AUTH_WHO_SERVER         1       /* Server authenticating client */
-#define        AUTH_WHO_MASK           1
-
-/*
- * amount of authentication done
- */
-#define        AUTH_HOW_ONE_WAY        0
-#define        AUTH_HOW_MUTUAL         2
-#define        AUTH_HOW_MASK           2
-
-#define        AUTHTYPE_NULL           0
-#define        AUTHTYPE_KERBEROS_V4    1
-#define        AUTHTYPE_KERBEROS_V5    2
-#define        AUTHTYPE_SPX            3
-#define        AUTHTYPE_MINK           4
-#define        AUTHTYPE_SRA            6
-#define        AUTHTYPE_CNT            7
-
-#define        AUTHTYPE_TEST           99
-
-#ifdef AUTH_NAMES
-const char *authtype_names[] = {
-       "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", NULL, "SRA",
-       0
-};
-#else
-extern char *authtype_names[];
-#endif
-
-#define        AUTHTYPE_NAME_OK(x)     ((unsigned int)(x) < AUTHTYPE_CNT)
-#define        AUTHTYPE_NAME(x)        authtype_names[x]
-
-/*
- * ENCRYPTion suboptions
- */
-#define        ENCRYPT_IS              0       /* I pick encryption type ... */
-#define        ENCRYPT_SUPPORT         1       /* I support encryption types ... */
-#define        ENCRYPT_REPLY           2       /* Initial setup response */
-#define        ENCRYPT_START           3       /* Am starting to send encrypted */
-#define        ENCRYPT_END             4       /* Am ending encrypted */
-#define        ENCRYPT_REQSTART        5       /* Request you start encrypting */
-#define        ENCRYPT_REQEND          6       /* Request you end encrypting */
-#define        ENCRYPT_ENC_KEYID       7
-#define        ENCRYPT_DEC_KEYID       8
-#define        ENCRYPT_CNT             9
-
-#define        ENCTYPE_ANY             0
-#define        ENCTYPE_DES_CFB64       1
-#define        ENCTYPE_DES_OFB64       2
-#define        ENCTYPE_CNT             3
-
-#ifdef ENCRYPT_NAMES
-const char *encrypt_names[] = {
-       "IS", "SUPPORT", "REPLY", "START", "END",
-       "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
-       0
-};
-const char *enctype_names[] = {
-       "ANY", "DES_CFB64",  "DES_OFB64",
-       0
-};
-#else
-extern char *encrypt_names[];
-extern char *enctype_names[];
-#endif
-
-
-#define        ENCRYPT_NAME_OK(x)      ((unsigned int)(x) < ENCRYPT_CNT)
-#define        ENCRYPT_NAME(x)         encrypt_names[x]
-
-#define        ENCTYPE_NAME_OK(x)      ((unsigned int)(x) < ENCTYPE_CNT)
-#define        ENCTYPE_NAME(x)         enctype_names[x]
-
-#endif /* !_TELNET_H_ */
diff --git a/crypto/telnet/libtelnet/genget.c b/crypto/telnet/libtelnet/genget.c
deleted file mode 100644 (file)
index d940492..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * Copyright (c) 1991, 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. 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
- *    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.
- *
- * @(#)genget.c        8.2 (Berkeley) 5/30/95
- * $FreeBSD: src/crypto/telnet/libtelnet/genget.c,v 1.2.8.2 2002/04/13 10:59:07 markm Exp $
- * $DragonFly: src/crypto/telnet/libtelnet/genget.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#include <ctype.h>
-
-#include "misc-proto.h"
-
-#define        LOWER(x) (isupper(x) ? tolower(x) : (x))
-/*
- * The prefix function returns 0 if *s1 is not a prefix
- * of *s2.  If *s1 exactly matches *s2, the negative of
- * the length is returned.  If *s1 is a prefix of *s2,
- * the length of *s1 is returned.
- */
-int
-isprefix(char *s1, const char *s2)
-{
-       char *os1;
-       char c1, c2;
-
-       if (*s1 == '\0')
-               return(-1);
-       os1 = s1;
-       c1 = *s1;
-       c2 = *s2;
-       while (LOWER(c1) == LOWER(c2)) {
-               if (c1 == '\0')
-                       break;
-               c1 = *++s1;
-               c2 = *++s2;
-       }
-       return(*s1 ? 0 : (*s2 ? (s1 - os1) : (os1 - s1)));
-}
-
-static char *ambiguous;                /* special return value for command routines */
-
-char **
-genget(char *name, char **table, int stlen)
-{
-       char **c, **found;
-       int n;
-
-       if (name == 0)
-           return 0;
-
-       found = 0;
-       for (c = table; *c != 0; c = (char **)((char *)c + stlen)) {
-               if ((n = isprefix(name, *c)) == 0)
-                       continue;
-               if (n < 0)              /* exact match */
-                       return(c);
-               if (found)
-                       return(&ambiguous);
-               found = c;
-       }
-       return(found);
-}
-
-/*
- * Function call version of Ambiguous()
- */
-int
-Ambiguous(char **s)
-{
-       return(s == &ambiguous);
-}
diff --git a/crypto/telnet/libtelnet/getent.c b/crypto/telnet/libtelnet/getent.c
deleted file mode 100644 (file)
index 68c39ce..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*-
- * Copyright (c) 1991, 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. 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
- *    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.
- *
- * @(#)getent.c        8.2 (Berkeley) 12/15/93
- * $FreeBSD: src/crypto/telnet/libtelnet/getent.c,v 1.2.6.2 2002/04/13 10:59:07 markm Exp $
- * $DragonFly: src/crypto/telnet/libtelnet/getent.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "misc-proto.h"
-
-static char *area;
-static char gettytab[] = "/etc/gettytab";
-
-/*ARGSUSED*/
-int
-getent(char *cp __unused, const char *name)
-{
-       int retval;
-       char *tempnam, *dba[2] = { gettytab, NULL };
-
-       tempnam = strdup(name);
-       retval =  cgetent(&area, dba, tempnam) == 0 ? 1 : 0;
-       free(tempnam);
-       return(retval);
-}
-
-/*ARGSUSED*/
-char *
-Getstr(const char *id, char **cpp __unused)
-{
-       int retval;
-       char *answer, *tempid;
-
-       tempid = strdup(id);
-       retval = cgetstr(area, tempid, &answer);
-       free(tempid);
-       return((retval > 0) ? answer : NULL);
-}
diff --git a/crypto/telnet/libtelnet/misc-proto.h b/crypto/telnet/libtelnet/misc-proto.h
deleted file mode 100644 (file)
index 5568f2f..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*-
- * Copyright (c) 1991, 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. 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
- *    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.
- *
- *     @(#)misc-proto.h        8.1 (Berkeley) 6/4/93
- * $FreeBSD: src/crypto/telnet/libtelnet/misc-proto.h,v 1.1.1.1.8.1 2002/04/13 10:59:07 markm Exp $
- * $DragonFly: src/crypto/telnet/libtelnet/misc-proto.h,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-/*
- * Copyright (C) 1990 by the Massachusetts Institute of Technology
- *
- * Export of this software from the United States of America is assumed
- * to require a specific license from the United States Government.
- * It is the responsibility of any person or organization contemplating
- * export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- */
-
-#ifndef        __MISC_PROTO__
-#define        __MISC_PROTO__
-
-void auth_encrypt_init(char *, char *, const char *, int);
-void auth_encrypt_connect(int);
-void printd(const unsigned char *, int);
-
-int isprefix(char *, const char *);
-char **genget(char *, char **, int);
-int Ambiguous(char **);
-
-int getent(char *, const char *);
-char *Getstr(const char *, char **);
-
-/*
- * These functions are imported from the application
- */
-int net_write(unsigned char *, int);
-void net_encrypt(void);
-int telnet_spin(void);
-char *telnet_getenv(char *);
-char *telnet_gets(const char *, char *, int, int);
-void printsub(char, unsigned char *, int);
-#endif
diff --git a/crypto/telnet/libtelnet/misc.c b/crypto/telnet/libtelnet/misc.c
deleted file mode 100644 (file)
index 1d60dc0..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*-
- * Copyright (c) 1991, 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. 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
- *    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.
- *
- * @(#)misc.c  8.1 (Berkeley) 6/4/93
- * $FreeBSD: src/crypto/telnet/libtelnet/misc.c,v 1.2.8.2 2002/04/13 10:59:07 markm Exp $
- * $DragonFly: src/crypto/telnet/libtelnet/misc.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "misc.h"
-#ifdef AUTHENTICATION
-#include "auth.h"
-#endif
-#ifdef ENCRYPTION
-#include "encrypt.h"
-#endif /* ENCRYPTION */
-
-char *RemoteHostName;
-char *LocalHostName;
-char *UserNameRequested = 0;
-int ConnectedCount = 0;
-
-#ifndef AUTHENTICATION
-#define undef1 __unused
-#else
-#define undef1
-#endif
-
-void
-auth_encrypt_init(char *local, char *remote, const char *name undef1, int server undef1)
-{
-       RemoteHostName = remote;
-       LocalHostName = local;
-#ifdef AUTHENTICATION
-       auth_init(name, server);
-#endif
-#ifdef ENCRYPTION
-       encrypt_init(name, server);
-#endif /* ENCRYPTION */
-       if (UserNameRequested) {
-               free(UserNameRequested);
-               UserNameRequested = 0;
-       }
-}
-
-#ifdef ENCRYPTION
-void
-auth_encrypt_user(char *name)
-{
-       if (UserNameRequested)
-               free(UserNameRequested);
-       UserNameRequested = name ? strdup(name) : 0;
-}
-
-void
-auth_encrypt_connect(int cnt __unused)
-{
-}
-#endif /* ENCRYPTION */
-
-void
-printd(const unsigned char *data, int cnt)
-{
-       if (cnt > 16)
-               cnt = 16;
-       while (cnt-- > 0) {
-               printf(" %02x", *data);
-               ++data;
-       }
-}
diff --git a/crypto/telnet/libtelnet/misc.h b/crypto/telnet/libtelnet/misc.h
deleted file mode 100644 (file)
index 41ffa7f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * Copyright (c) 1991, 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. 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
- *    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.
- *
- *     @(#)misc.h      8.1 (Berkeley) 6/4/93
- */
-
-extern char *UserNameRequested;
-extern char *LocalHostName;
-extern char *RemoteHostName;
-extern int ConnectedCount;
-extern int ReservedPort;
-
-#include "misc-proto.h"
diff --git a/crypto/telnet/telnet/authenc.c b/crypto/telnet/telnet/authenc.c
deleted file mode 100644 (file)
index ea355ab..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*-
- * Copyright (c) 1991, 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. 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
- *    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.
- *
- * @(#)authenc.c       8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/crypto/telnet/telnet/authenc.c,v 1.2.8.2 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/authenc.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#ifdef AUTHENTICATION
-#ifdef ENCRYPTION
-#include <sys/types.h>
-#include <arpa/telnet.h>
-#include <pwd.h>
-#include <unistd.h>
-#include <libtelnet/encrypt.h>
-#include <libtelnet/misc.h>
-
-#include "general.h"
-#include "ring.h"
-#include "externs.h"
-#include "defines.h"
-#include "types.h"
-
-int
-net_write(unsigned char *str, int len)
-{
-       if (NETROOM() > len) {
-               ring_supply_data(&netoring, str, len);
-               if (str[0] == IAC && str[1] == SE)
-                       printsub('>', &str[2], len-2);
-               return(len);
-       }
-       return(0);
-}
-
-void
-net_encrypt(void)
-{
-#ifdef ENCRYPTION
-       if (encrypt_output)
-               ring_encrypt(&netoring, encrypt_output);
-       else
-               ring_clearto(&netoring);
-#endif /* ENCRYPTION */
-}
-
-int
-telnet_spin(void)
-{
-       return(-1);
-}
-
-char *
-telnet_getenv(char *val)
-{
-       return((char *)env_getvalue((unsigned char *)val));
-}
-
-char *
-telnet_gets(const char *prom, char *result, int length, int echo)
-{
-       extern int globalmode;
-       int om = globalmode;
-       char *res;
-
-       TerminalNewMode(-1);
-       if (echo) {
-               printf("%s", prom);
-               res = fgets(result, length, stdin);
-       } else if ((res = getpass(prom))) {
-               strncpy(result, res, length);
-               res = result;
-       }
-       TerminalNewMode(om);
-       return(res);
-}
-#endif /* ENCRYPTION */
-#endif /* AUTHENTICATION */
diff --git a/crypto/telnet/telnet/commands.c b/crypto/telnet/telnet/commands.c
deleted file mode 100644 (file)
index 990d007..0000000
+++ /dev/null
@@ -1,3005 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- * @(#)commands.c      8.4 (Berkeley) 5/30/95
- * $FreeBSD: src/crypto/telnet/telnet/commands.c,v 1.12.2.7 2003/04/23 07:16:32 ru Exp $
- * $DragonFly: src/crypto/telnet/telnet/commands.c,v 1.3 2008/09/04 11:54:24 hasso Exp $
- */
-
-#include <sys/param.h>
-#include <sys/un.h>
-#include <sys/file.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-#include <ctype.h>
-#include <err.h>
-#include <errno.h>
-#include <netdb.h>
-#include <pwd.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <arpa/telnet.h>
-#include <arpa/inet.h>
-
-#include "general.h"
-
-#include "ring.h"
-
-#include "externs.h"
-#include "defines.h"
-#include "types.h"
-#include "misc.h"
-
-#ifdef AUTHENTICATION
-#include <libtelnet/auth.h>
-#endif
-#ifdef ENCRYPTION
-#include <libtelnet/encrypt.h>
-#endif
-
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/ip6.h>
-
-#ifndef       MAXHOSTNAMELEN
-#define       MAXHOSTNAMELEN 256
-#endif        /* MAXHOSTNAMELEN */
-
-typedef int (*intrtn_t)(int, char **);
-
-#ifdef AUTHENTICATION
-extern int auth_togdebug(int);
-#endif
-#ifdef ENCRYPTION
-extern int EncryptAutoEnc(int);
-extern int EncryptAutoDec(int);
-extern int EncryptDebug(int);
-extern int EncryptVerbose(int);
-#endif /* ENCRYPTION */
-#if    defined(IPPROTO_IP) && defined(IP_TOS)
-int tos = -1;
-#endif /* defined(IPPROTO_IP) && defined(IP_TOS) */
-
-char   *hostname;
-static char _hostname[MAXHOSTNAMELEN];
-
-static int help(int, char **);
-static int call(intrtn_t, ...);
-static void cmdrc(char *, char *);
-#ifdef INET6
-static int switch_af(struct addrinfo **);
-#endif
-static int togglehelp(void);
-static int send_tncmd(void (*)(int, int), const char *, char *);
-static int setmod(int);
-static int clearmode(int);
-static int modehelp(void);
-static int sourceroute(struct addrinfo *, char *, char **, int *, int *, int *);
-
-typedef struct {
-       const char *name;       /* command name */
-       const char *help;       /* help string (NULL for no help) */
-       int     (*handler)(int, char **); /* routine which executes command */
-       int     needconnect;    /* Do we need to be connected to execute? */
-} Command;
-
-static char line[256];
-static char saveline[256];
-static int margc;
-static char *margv[20];
-
-#ifdef OPIE
-#include <sys/wait.h>
-#define PATH_OPIEKEY   "/usr/bin/opiekey"
-static int
-opie_calc(int argc, char *argv[])
-{
-       int status;
-
-       if(argc != 3) {
-               printf("%s sequence challenge\n", argv[0]);
-               return (0);
-       }
-
-       switch(fork()) {
-       case 0:
-               execv(PATH_OPIEKEY, argv);
-               exit (1);
-       case -1:
-               perror("fork");
-               break;
-       default:
-               (void) wait(&status);
-               if (WIFEXITED(status))
-                       return (WEXITSTATUS(status));
-       }
-       return (0);
-}
-#endif
-
-static void
-makeargv(void)
-{
-    char *cp, *cp2, c;
-    char **argp = margv;
-
-    margc = 0;
-    cp = line;
-    if (*cp == '!') {          /* Special case shell escape */
-       strcpy(saveline, line); /* save for shell command */
-       *argp++ = strdup("!");          /* No room in string to get this */
-       margc++;
-       cp++;
-    }
-    while ((c = *cp)) {
-       int inquote = 0;
-       while (isspace(c))
-           c = *++cp;
-       if (c == '\0')
-           break;
-       *argp++ = cp;
-       margc += 1;
-       for (cp2 = cp; c != '\0'; c = *++cp) {
-           if (inquote) {
-               if (c == inquote) {
-                   inquote = 0;
-                   continue;
-               }
-           } else {
-               if (c == '\\') {
-                   if ((c = *++cp) == '\0')
-                       break;
-               } else if (c == '"') {
-                   inquote = '"';
-                   continue;
-               } else if (c == '\'') {
-                   inquote = '\'';
-                   continue;
-               } else if (isspace(c))
-                   break;
-           }
-           *cp2++ = c;
-       }
-       *cp2 = '\0';
-       if (c == '\0')
-           break;
-       cp++;
-    }
-    *argp++ = 0;
-}
-
-/*
- * Make a character string into a number.
- *
- * Todo:  1.  Could take random integers (12, 0x12, 012, 0b1).
- */
-
-static int
-special(char *s)
-{
-       char c;
-       char b;
-
-       switch (*s) {
-       case '^':
-               b = *++s;
-               if (b == '?') {
-                   c = b | 0x40;               /* DEL */
-               } else {
-                   c = b & 0x1f;
-               }
-               break;
-       default:
-               c = *s;
-               break;
-       }
-       return c;
-}
-
-/*
- * Construct a control character sequence
- * for a special character.
- */
-static const char *
-control(cc_t c)
-{
-       static char buf[5];
-       /*
-        * The only way I could get the Sun 3.5 compiler
-        * to shut up about
-        *      if ((unsigned int)c >= 0x80)
-        * was to assign "c" to an unsigned int variable...
-        * Arggg....
-        */
-       unsigned int uic = (unsigned int)c;
-
-       if (uic == 0x7f)
-               return ("^?");
-       if (c == (cc_t)_POSIX_VDISABLE) {
-               return "off";
-       }
-       if (uic >= 0x80) {
-               buf[0] = '\\';
-               buf[1] = ((c>>6)&07) + '0';
-               buf[2] = ((c>>3)&07) + '0';
-               buf[3] = (c&07) + '0';
-               buf[4] = 0;
-       } else if (uic >= 0x20) {
-               buf[0] = c;
-               buf[1] = 0;
-       } else {
-               buf[0] = '^';
-               buf[1] = '@'+c;
-               buf[2] = 0;
-       }
-       return (buf);
-}
-
-/*
- *     The following are data structures and routines for
- *     the "send" command.
- *
- */
-
-struct sendlist {
-    const char *name;          /* How user refers to it (case independent) */
-    const char *help;          /* Help information (0 ==> no help) */
-    int                needconnect;    /* Need to be connected */
-    int                narg;           /* Number of arguments */
-    int                (*handler)(char *, ...); /* Routine to perform (for special ops) */
-    int                nbyte;          /* Number of bytes to send this command */
-    int                what;           /* Character to be sent (<0 ==> special) */
-};
-\f
-
-static int
-       send_esc(void),
-       send_help(void),
-       send_docmd(char *),
-       send_dontcmd(char *),
-       send_willcmd(char *),
-       send_wontcmd(char *);
-
-static struct sendlist Sendlist[] = {
-    { "ao",    "Send Telnet Abort output",     1, 0, NULL, 2, AO },
-    { "ayt",   "Send Telnet 'Are You There'",  1, 0, NULL, 2, AYT },
-    { "brk",   "Send Telnet Break",            1, 0, NULL, 2, BREAK },
-    { "break", NULL,                           1, 0, NULL, 2, BREAK },
-    { "ec",    "Send Telnet Erase Character",  1, 0, NULL, 2, EC },
-    { "el",    "Send Telnet Erase Line",       1, 0, NULL, 2, EL },
-    { "escape",        "Send current escape character",1, 0, (int (*)(char *, ...))send_esc, 1, 0 },
-    { "ga",    "Send Telnet 'Go Ahead' sequence", 1, 0, NULL, 2, GA },
-    { "ip",    "Send Telnet Interrupt Process",1, 0, NULL, 2, IP },
-    { "intp",  NULL,                           1, 0, NULL, 2, IP },
-    { "interrupt", NULL,                       1, 0, NULL, 2, IP },
-    { "intr",  NULL,                           1, 0, NULL, 2, IP },
-    { "nop",   "Send Telnet 'No operation'",   1, 0, NULL, 2, NOP },
-    { "eor",   "Send Telnet 'End of Record'",  1, 0, NULL, 2, EOR },
-    { "abort", "Send Telnet 'Abort Process'",  1, 0, NULL, 2, ABORT },
-    { "susp",  "Send Telnet 'Suspend Process'",1, 0, NULL, 2, SUSP },
-    { "eof",   "Send Telnet End of File Character", 1, 0, NULL, 2, xEOF },
-    { "synch", "Perform Telnet 'Synch operation'", 1, 0, (int (*)(char *, ...))dosynch, 2, 0 },
-    { "getstatus", "Send request for STATUS",  1, 0, (int (*)(char *, ...))get_status, 6, 0 },
-    { "?",     "Display send options",         0, 0, (int (*)(char *, ...))send_help, 0, 0 },
-    { "help",  NULL,                           0, 0, (int (*)(char *, ...))send_help, 0, 0 },
-    { "do",    NULL,                           0, 1, (int (*)(char *, ...))send_docmd, 3, 0 },
-    { "dont",  NULL,                           0, 1, (int (*)(char *, ...))send_dontcmd, 3, 0 },
-    { "will",  NULL,                           0, 1, (int (*)(char *, ...))send_willcmd, 3, 0 },
-    { "wont",  NULL,                           0, 1, (int (*)(char *, ...))send_wontcmd, 3, 0 },
-    { NULL,    NULL,                           0, 0, NULL, 0, 0 }
-};
-
-#define        GETSEND(name) ((struct sendlist *) genget(name, (char **) Sendlist, \
-                               sizeof(struct sendlist)))
-
-static int
-sendcmd(int argc, char *argv[])
-{
-    int count;         /* how many bytes we are going to need to send */
-    int i;
-    struct sendlist *s;        /* pointer to current command */
-    int success = 0;
-    int needconnect = 0;
-
-    if (argc < 2) {
-       printf("need at least one argument for 'send' command\n");
-       printf("'send ?' for help\n");
-       return 0;
-    }
-    /*
-     * First, validate all the send arguments.
-     * In addition, we see how much space we are going to need, and
-     * whether or not we will be doing a "SYNCH" operation (which
-     * flushes the network queue).
-     */
-    count = 0;
-    for (i = 1; i < argc; i++) {
-       s = GETSEND(argv[i]);
-       if (s == 0) {
-           printf("Unknown send argument '%s'\n'send ?' for help.\n",
-                       argv[i]);
-           return 0;
-       } else if (Ambiguous((void *)s)) {
-           printf("Ambiguous send argument '%s'\n'send ?' for help.\n",
-                       argv[i]);
-           return 0;
-       }
-       if (i + s->narg >= argc) {
-           fprintf(stderr,
-           "Need %d argument%s to 'send %s' command.  'send %s ?' for help.\n",
-               s->narg, s->narg == 1 ? "" : "s", s->name, s->name);
-           return 0;
-       }
-       count += s->nbyte;
-       if ((void *)s->handler == (void *)send_help) {
-           send_help();
-           return 0;
-       }
-
-       i += s->narg;
-       needconnect += s->needconnect;
-    }
-    if (!connected && needconnect) {
-       printf("?Need to be connected first.\n");
-       printf("'send ?' for help\n");
-       return 0;
-    }
-    /* Now, do we have enough room? */
-    if (NETROOM() < count) {
-       printf("There is not enough room in the buffer TO the network\n");
-       printf("to process your request.  Nothing will be done.\n");
-       printf("('send synch' will throw away most data in the network\n");
-       printf("buffer, if this might help.)\n");
-       return 0;
-    }
-    /* OK, they are all OK, now go through again and actually send */
-    count = 0;
-    for (i = 1; i < argc; i++) {
-       if ((s = GETSEND(argv[i])) == 0) {
-           fprintf(stderr, "Telnet 'send' error - argument disappeared!\n");
-           quit();
-           /*NOTREACHED*/
-       }
-       if (s->handler) {
-           count++;
-           success += (*s->handler)((s->narg > 0) ? argv[i+1] : 0,
-                                 (s->narg > 1) ? argv[i+2] : 0);
-           i += s->narg;
-       } else {
-           NET2ADD(IAC, s->what);
-           printoption("SENT", IAC, s->what);
-       }
-    }
-    return (count == success);
-}
-
-static int
-send_esc(void)
-{
-    NETADD(escape);
-    return 1;
-}
-
-static int
-send_docmd(char *name)
-{
-    return(send_tncmd(send_do, "do", name));
-}
-
-static int
-send_dontcmd(name)
-    char *name;
-{
-    return(send_tncmd(send_dont, "dont", name));
-}
-
-static int
-send_willcmd(char *name)
-{
-    return(send_tncmd(send_will, "will", name));
-}
-
-static int
-send_wontcmd(char *name)
-{
-    return(send_tncmd(send_wont, "wont", name));
-}
-
-static int
-send_tncmd(void (*func)(int, int), const char *cmd, char *name)
-{
-    char **cpp;
-    extern char *telopts[];
-    int val = 0;
-
-    if (isprefix(name, "help") || isprefix(name, "?")) {
-       int col, len;
-
-       printf("Usage: send %s <value|option>\n", cmd);
-       printf("\"value\" must be from 0 to 255\n");
-       printf("Valid options are:\n\t");
-
-       col = 8;
-       for (cpp = telopts; *cpp; cpp++) {
-           len = strlen(*cpp) + 3;
-           if (col + len > 65) {
-               printf("\n\t");
-               col = 8;
-           }
-           printf(" \"%s\"", *cpp);
-           col += len;
-       }
-       printf("\n");
-       return 0;
-    }
-    cpp = (char **)genget(name, telopts, sizeof(char *));
-    if (Ambiguous(cpp)) {
-       fprintf(stderr,"'%s': ambiguous argument ('send %s ?' for help).\n",
-                                       name, cmd);
-       return 0;
-    }
-    if (cpp) {
-       val = cpp - telopts;
-    } else {
-       char *cp = name;
-
-       while (*cp >= '0' && *cp <= '9') {
-           val *= 10;
-           val += *cp - '0';
-           cp++;
-       }
-       if (*cp != 0) {
-           fprintf(stderr, "'%s': unknown argument ('send %s ?' for help).\n",
-                                       name, cmd);
-           return 0;
-       } else if (val < 0 || val > 255) {
-           fprintf(stderr, "'%s': bad value ('send %s ?' for help).\n",
-                                       name, cmd);
-           return 0;
-       }
-    }
-    if (!connected) {
-       printf("?Need to be connected first.\n");
-       return 0;
-    }
-    (*func)(val, 1);
-    return 1;
-}
-
-static int
-send_help(void)
-{
-    struct sendlist *s;        /* pointer to current command */
-    for (s = Sendlist; s->name; s++) {
-       if (s->help)
-           printf("%-15s %s\n", s->name, s->help);
-    }
-    return(0);
-}
-\f
-/*
- * The following are the routines and data structures referred
- * to by the arguments to the "toggle" command.
- */
-
-static int
-lclchars(void)
-{
-    donelclchars = 1;
-    return 1;
-}
-
-static int
-togdebug(void)
-{
-#ifndef        NOT43
-    if (net > 0 &&
-       (SetSockOpt(net, SOL_SOCKET, SO_DEBUG, debug)) < 0) {
-           perror("setsockopt (SO_DEBUG)");
-    }
-#else  /* NOT43 */
-    if (debug) {
-       if (net > 0 && SetSockOpt(net, SOL_SOCKET, SO_DEBUG, 1) < 0)
-           perror("setsockopt (SO_DEBUG)");
-    } else
-       printf("Cannot turn off socket debugging\n");
-#endif /* NOT43 */
-    return 1;
-}
-
-
-static int
-togcrlf(void)
-{
-    if (crlf) {
-       printf("Will send carriage returns as telnet <CR><LF>.\n");
-    } else {
-       printf("Will send carriage returns as telnet <CR><NUL>.\n");
-    }
-    return 1;
-}
-
-int binmode;
-
-static int
-togbinary(int val)
-{
-    donebinarytoggle = 1;
-
-    if (val >= 0) {
-       binmode = val;
-    } else {
-       if (my_want_state_is_will(TELOPT_BINARY) &&
-                               my_want_state_is_do(TELOPT_BINARY)) {
-           binmode = 1;
-       } else if (my_want_state_is_wont(TELOPT_BINARY) &&
-                               my_want_state_is_dont(TELOPT_BINARY)) {
-           binmode = 0;
-       }
-       val = binmode ? 0 : 1;
-    }
-
-    if (val == 1) {
-       if (my_want_state_is_will(TELOPT_BINARY) &&
-                                       my_want_state_is_do(TELOPT_BINARY)) {
-           printf("Already operating in binary mode with remote host.\n");
-       } else {
-           printf("Negotiating binary mode with remote host.\n");
-           tel_enter_binary(3);
-       }
-    } else {
-       if (my_want_state_is_wont(TELOPT_BINARY) &&
-                                       my_want_state_is_dont(TELOPT_BINARY)) {
-           printf("Already in network ascii mode with remote host.\n");
-       } else {
-           printf("Negotiating network ascii mode with remote host.\n");
-           tel_leave_binary(3);
-       }
-    }
-    return 1;
-}
-
-static int
-togrbinary(int val)
-{
-    donebinarytoggle = 1;
-
-    if (val == -1)
-       val = my_want_state_is_do(TELOPT_BINARY) ? 0 : 1;
-
-    if (val == 1) {
-       if (my_want_state_is_do(TELOPT_BINARY)) {
-           printf("Already receiving in binary mode.\n");
-       } else {
-           printf("Negotiating binary mode on input.\n");
-           tel_enter_binary(1);
-       }
-    } else {
-       if (my_want_state_is_dont(TELOPT_BINARY)) {
-           printf("Already receiving in network ascii mode.\n");
-       } else {
-           printf("Negotiating network ascii mode on input.\n");
-           tel_leave_binary(1);
-       }
-    }
-    return 1;
-}
-
-static int
-togxbinary(int val)
-{
-    donebinarytoggle = 1;
-
-    if (val == -1)
-       val = my_want_state_is_will(TELOPT_BINARY) ? 0 : 1;
-
-    if (val == 1) {
-       if (my_want_state_is_will(TELOPT_BINARY)) {
-           printf("Already transmitting in binary mode.\n");
-       } else {
-           printf("Negotiating binary mode on output.\n");
-           tel_enter_binary(2);
-       }
-    } else {
-       if (my_want_state_is_wont(TELOPT_BINARY)) {
-           printf("Already transmitting in network ascii mode.\n");
-       } else {
-           printf("Negotiating network ascii mode on output.\n");
-           tel_leave_binary(2);
-       }
-    }
-    return 1;
-}
-
-struct togglelist {
-    const char *name;          /* name of toggle */
-    const char *help;          /* help message */
-    int                (*handler)(int); /* routine to do actual setting */
-    int                *variable;
-    const char *actionexplanation;
-};
-
-static struct togglelist Togglelist[] = {
-    { "autoflush",
-       "flushing of output when sending interrupt characters",
-           0,
-               &autoflush,
-                   "flush output when sending interrupt characters" },
-    { "autosynch",
-       "automatic sending of interrupt characters in urgent mode",
-           0,
-               &autosynch,
-                   "send interrupt characters in urgent mode" },
-#ifdef AUTHENTICATION
-    { "autologin",
-       "automatic sending of login and/or authentication info",
-           0,
-               &autologin,
-                   "send login name and/or authentication information" },
-    { "authdebug",
-       "Toggle authentication debugging",
-           auth_togdebug,
-               0,
-                    "print authentication debugging information" },
-#endif
-#ifdef ENCRYPTION
-    { "autoencrypt",
-       "automatic encryption of data stream",
-           EncryptAutoEnc,
-               0,
-                   "automatically encrypt output" },
-    { "autodecrypt",
-       "automatic decryption of data stream",
-           EncryptAutoDec,
-               0,
-                   "automatically decrypt input" },
-    { "verbose_encrypt",
-       "Toggle verbose encryption output",
-           EncryptVerbose,
-               0,
-                   "print verbose encryption output" },
-    { "encdebug",
-       "Toggle encryption debugging",
-           EncryptDebug,
-               0,
-                   "print encryption debugging information" },
-#endif /* ENCRYPTION */
-    { "skiprc",
-       "don't read ~/.telnetrc file",
-           0,
-               &skiprc,
-                   "skip reading of ~/.telnetrc file" },
-    { "binary",
-       "sending and receiving of binary data",
-           togbinary,
-               0,
-                   0 },
-    { "inbinary",
-       "receiving of binary data",
-           togrbinary,
-               0,
-                   0 },
-    { "outbinary",
-       "sending of binary data",
-           togxbinary,
-               0,
-                   0 },
-    { "crlf",
-       "sending carriage returns as telnet <CR><LF>",
-           (int (*)(int))togcrlf,
-               &crlf,
-                   0 },
-    { "crmod",
-       "mapping of received carriage returns",
-           0,
-               &crmod,
-                   "map carriage return on output" },
-    { "localchars",
-       "local recognition of certain control characters",
-           (int (*)(int))lclchars,
-               &localchars,
-                   "recognize certain control characters" },
-    { " ", "", NULL, NULL, NULL },             /* empty line */
-    { "debug",
-       "debugging",
-           (int (*)(int))togdebug,
-               &debug,
-                   "turn on socket level debugging" },
-    { "netdata",
-       "printing of hexadecimal network data (debugging)",
-           0,
-               &netdata,
-                   "print hexadecimal representation of network traffic" },
-    { "prettydump",
-       "output of \"netdata\" to user readable format (debugging)",
-           0,
-               &prettydump,
-                   "print user readable output for \"netdata\"" },
-    { "options",
-       "viewing of options processing (debugging)",
-           0,
-               &showoptions,
-                   "show option processing" },
-    { "termdata",
-       "(debugging) toggle printing of hexadecimal terminal data",
-           0,
-               &termdata,
-                   "print hexadecimal representation of terminal traffic" },
-    { "?",
-       NULL,
-           (int (*)(int))togglehelp,
-               NULL,
-                   NULL },
-    { NULL, NULL, NULL, NULL, NULL },
-    { "help",
-       NULL,
-           (int (*)(int))togglehelp,
-               NULL,
-                   NULL },
-    { NULL, NULL, NULL, NULL, NULL }
-};
-
-static int
-togglehelp(void)
-{
-    struct togglelist *c;
-
-    for (c = Togglelist; c->name; c++) {
-       if (c->help) {
-           if (*c->help)
-               printf("%-15s toggle %s\n", c->name, c->help);
-           else
-               printf("\n");
-       }
-    }
-    printf("\n");
-    printf("%-15s %s\n", "?", "display help information");
-    return 0;
-}
-
-static void
-settogglehelp(int set)
-{
-    struct togglelist *c;
-
-    for (c = Togglelist; c->name; c++) {
-       if (c->help) {
-           if (*c->help)
-               printf("%-15s %s %s\n", c->name, set ? "enable" : "disable",
-                                               c->help);
-           else
-               printf("\n");
-       }
-    }
-}
-
-#define        GETTOGGLE(name) (struct togglelist *) \
-               genget(name, (char **) Togglelist, sizeof(struct togglelist))
-
-static int
-toggle(int argc, char *argv[])
-{
-    int retval = 1;
-    char *name;
-    struct togglelist *c;
-
-    if (argc < 2) {
-       fprintf(stderr,
-           "Need an argument to 'toggle' command.  'toggle ?' for help.\n");
-       return 0;
-    }
-    argc--;
-    argv++;
-    while (argc--) {
-       name = *argv++;
-       c = GETTOGGLE(name);
-       if (Ambiguous((void *)c)) {
-           fprintf(stderr, "'%s': ambiguous argument ('toggle ?' for help).\n",
-                                       name);
-           return 0;
-       } else if (c == 0) {
-           fprintf(stderr, "'%s': unknown argument ('toggle ?' for help).\n",
-                                       name);
-           return 0;
-       } else {
-           if (c->variable) {
-               *c->variable = !*c->variable;           /* invert it */
-               if (c->actionexplanation) {
-                   printf("%s %s.\n", *c->variable? "Will" : "Won't",
-                                                       c->actionexplanation);
-               }
-           }
-           if (c->handler) {
-               retval &= (*c->handler)(-1);
-           }
-       }
-    }
-    return retval;
-}
-\f
-/*
- * The following perform the "set" command.
- */
-
-#ifdef USE_TERMIO
-struct termio new_tc = { 0, 0, 0, 0, {}, 0, 0 };
-#endif
-
-struct setlist {
-    const char *name;                  /* name */
-    const char *help;                  /* help information */
-    void (*handler)(char *);
-    cc_t *charp;                       /* where it is located at */
-};
-
-static struct setlist Setlist[] = {
-#ifdef KLUDGELINEMODE
-    { "echo",  "character to toggle local echoing on/off", NULL, &echoc },
-#endif
-    { "escape",        "character to escape back to telnet command mode", NULL, &escape },
-    { "rlogin", "rlogin escape character", 0, &rlogin },
-    { "tracefile", "file to write trace information to", SetNetTrace, (cc_t *)NetTraceFile},
-    { " ", "", NULL, NULL },
-    { " ", "The following need 'localchars' to be toggled true", NULL, NULL },
-    { "flushoutput", "character to cause an Abort Output", NULL, termFlushCharp },
-    { "interrupt", "character to cause an Interrupt Process", NULL, termIntCharp },
-    { "quit",  "character to cause an Abort process", NULL, termQuitCharp },
-    { "eof",   "character to cause an EOF ", NULL, termEofCharp },
-    { " ", "", NULL, NULL },
-    { " ", "The following are for local editing in linemode", NULL, NULL },
-    { "erase", "character to use to erase a character", NULL, termEraseCharp },
-    { "kill",  "character to use to erase a line", NULL, termKillCharp },
-    { "lnext", "character to use for literal next", NULL, termLiteralNextCharp },
-    { "susp",  "character to cause a Suspend Process", NULL, termSuspCharp },
-    { "reprint", "character to use for line reprint", NULL, termRprntCharp },
-    { "worderase", "character to use to erase a word", NULL, termWerasCharp },
-    { "start", "character to use for XON", NULL, termStartCharp },
-    { "stop",  "character to use for XOFF", NULL, termStopCharp },
-    { "forw1", "alternate end of line character", NULL, termForw1Charp },
-    { "forw2", "alternate end of line character", NULL, termForw2Charp },
-    { "ayt",   "alternate AYT character", NULL, termAytCharp },
-    { NULL, NULL, NULL, NULL }
-};
-
-static struct setlist *
-getset(char *name)
-{
-    return (struct setlist *)
-               genget(name, (char **) Setlist, sizeof(struct setlist));
-}
-
-void
-set_escape_char(char *s)
-{
-       if (rlogin != _POSIX_VDISABLE) {
-               rlogin = (s && *s) ? special(s) : _POSIX_VDISABLE;
-               printf("Telnet rlogin escape character is '%s'.\n",
-                                       control(rlogin));
-       } else {
-               escape = (s && *s) ? special(s) : _POSIX_VDISABLE;
-               printf("Telnet escape character is '%s'.\n", control(escape));
-       }
-}
-
-static int
-setcmd(int argc, char *argv[])
-{
-    int value;
-    struct setlist *ct;
-    struct togglelist *c;
-
-    if (argc < 2 || argc > 3) {
-       printf("Format is 'set Name Value'\n'set ?' for help.\n");
-       return 0;
-    }
-    if ((argc == 2) && (isprefix(argv[1], "?") || isprefix(argv[1], "help"))) {
-       for (ct = Setlist; ct->name; ct++)
-           printf("%-15s %s\n", ct->name, ct->help);
-       printf("\n");
-       settogglehelp(1);
-       printf("%-15s %s\n", "?", "display help information");
-       return 0;
-    }
-
-    ct = getset(argv[1]);
-    if (ct == 0) {
-       c = GETTOGGLE(argv[1]);
-       if (c == 0) {
-           fprintf(stderr, "'%s': unknown argument ('set ?' for help).\n",
-                       argv[1]);
-           return 0;
-       } else if (Ambiguous((void *)c)) {
-           fprintf(stderr, "'%s': ambiguous argument ('set ?' for help).\n",
-                       argv[1]);
-           return 0;
-       }
-       if (c->variable) {
-           if ((argc == 2) || (strcmp("on", argv[2]) == 0))
-               *c->variable = 1;
-           else if (strcmp("off", argv[2]) == 0)
-               *c->variable = 0;
-           else {
-               printf("Format is 'set togglename [on|off]'\n'set ?' for help.\n");
-               return 0;
-           }
-           if (c->actionexplanation) {
-               printf("%s %s.\n", *c->variable? "Will" : "Won't",
-                                                       c->actionexplanation);
-           }
-       }
-       if (c->handler)
-           (*c->handler)(1);
-    } else if (argc != 3) {
-       printf("Format is 'set Name Value'\n'set ?' for help.\n");
-       return 0;
-    } else if (Ambiguous((void *)ct)) {
-       fprintf(stderr, "'%s': ambiguous argument ('set ?' for help).\n",
-                       argv[1]);
-       return 0;
-    } else if (ct->handler) {
-       (*ct->handler)(argv[2]);
-       printf("%s set to \"%s\".\n", ct->name, (char *)ct->charp);
-    } else {
-       if (strcmp("off", argv[2])) {
-           value = special(argv[2]);
-       } else {
-           value = _POSIX_VDISABLE;
-       }
-       *(ct->charp) = (cc_t)value;
-       printf("%s character is '%s'.\n", ct->name, control(*(ct->charp)));
-    }
-    slc_check();
-    return 1;
-}
-
-static int
-unsetcmd(int argc, char *argv[])
-{
-    struct setlist *ct;
-    struct togglelist *c;
-    char *name;
-
-    if (argc < 2) {
-       fprintf(stderr,
-           "Need an argument to 'unset' command.  'unset ?' for help.\n");
-       return 0;
-    }
-    if (isprefix(argv[1], "?") || isprefix(argv[1], "help")) {
-       for (ct = Setlist; ct->name; ct++)
-           printf("%-15s %s\n", ct->name, ct->help);
-       printf("\n");
-       settogglehelp(0);
-       printf("%-15s %s\n", "?", "display help information");
-       return 0;
-    }
-
-    argc--;
-    argv++;
-    while (argc--) {
-       name = *argv++;
-       ct = getset(name);
-       if (ct == 0) {
-           c = GETTOGGLE(name);
-           if (c == 0) {
-               fprintf(stderr, "'%s': unknown argument ('unset ?' for help).\n",
-                       name);
-               return 0;
-           } else if (Ambiguous((void *)c)) {
-               fprintf(stderr, "'%s': ambiguous argument ('unset ?' for help).\n",
-                       name);
-               return 0;
-           }
-           if (c->variable) {
-               *c->variable = 0;
-               if (c->actionexplanation) {
-                   printf("%s %s.\n", *c->variable? "Will" : "Won't",
-                                                       c->actionexplanation);
-               }
-           }
-           if (c->handler)
-               (*c->handler)(0);
-       } else if (Ambiguous((void *)ct)) {
-           fprintf(stderr, "'%s': ambiguous argument ('unset ?' for help).\n",
-                       name);
-           return 0;
-       } else if (ct->handler) {
-           (*ct->handler)(0);
-           printf("%s reset to \"%s\".\n", ct->name, (char *)ct->charp);
-       } else {
-           *(ct->charp) = _POSIX_VDISABLE;
-           printf("%s character is '%s'.\n", ct->name, control(*(ct->charp)));
-       }
-    }
-    return 1;
-}
-\f
-/*
- * The following are the data structures and routines for the
- * 'mode' command.
- */
-#ifdef KLUDGELINEMODE
-extern int kludgelinemode;
-
-static int
-dokludgemode(void)
-{
-    kludgelinemode = 1;
-    send_wont(TELOPT_LINEMODE, 1);
-    send_dont(TELOPT_SGA, 1);
-    send_dont(TELOPT_ECHO, 1);
-    return 1;
-}
-#endif
-
-static int
-dolinemode(void)
-{
-#ifdef KLUDGELINEMODE
-    if (kludgelinemode)
-       send_dont(TELOPT_SGA, 1);
-#endif
-    send_will(TELOPT_LINEMODE, 1);
-    send_dont(TELOPT_ECHO, 1);
-    return 1;
-}
-
-static int
-docharmode(void)
-{
-#ifdef KLUDGELINEMODE
-    if (kludgelinemode)
-       send_do(TELOPT_SGA, 1);
-    else
-#endif
-    send_wont(TELOPT_LINEMODE, 1);
-    send_do(TELOPT_ECHO, 1);
-    return 1;
-}
-
-static int
-dolmmode(int bit, int on)
-{
-    unsigned char c;
-    extern int linemode;
-
-    if (my_want_state_is_wont(TELOPT_LINEMODE)) {
-       printf("?Need to have LINEMODE option enabled first.\n");
-       printf("'mode ?' for help.\n");
-       return 0;
-    }
-
-    if (on)
-       c = (linemode | bit);
-    else
-       c = (linemode & ~bit);
-    lm_mode(&c, 1, 1);
-    return 1;
-}
-
-static int
-setmod(int bit)
-{
-    return dolmmode(bit, 1);
-}
-
-static int
-clearmode(int bit)
-{
-    return dolmmode(bit, 0);
-}
-
-struct modelist {
-       const char      *name;  /* command name */
-       const char      *help;  /* help string */
-       int     (*handler)(int);/* routine which executes command */
-       int     needconnect;    /* Do we need to be connected to execute? */
-       int     arg1;
-};
-
-static struct modelist ModeList[] = {
-    { "character", "Disable LINEMODE option",  (int (*)(int))docharmode, 1, 0 },
-#ifdef KLUDGELINEMODE
-    { "",      "(or disable obsolete line-by-line mode)", NULL, 0, 0 },
-#endif
-    { "line",  "Enable LINEMODE option",       (int (*)(int))dolinemode, 1, 0 },
-#ifdef KLUDGELINEMODE
-    { "",      "(or enable obsolete line-by-line mode)", NULL, 0, 0 },
-#endif
-    { "", "", NULL, 0, 0 },
-    { "",      "These require the LINEMODE option to be enabled", NULL, 0, 0 },
-    { "isig",  "Enable signal trapping",       setmod, 1, MODE_TRAPSIG },
-    { "+isig", 0,                              setmod, 1, MODE_TRAPSIG },
-    { "-isig", "Disable signal trapping",      clearmode, 1, MODE_TRAPSIG },
-    { "edit",  "Enable character editing",     setmod, 1, MODE_EDIT },
-    { "+edit", 0,                              setmod, 1, MODE_EDIT },
-    { "-edit", "Disable character editing",    clearmode, 1, MODE_EDIT },
-    { "softtabs", "Enable tab expansion",      setmod, 1, MODE_SOFT_TAB },
-    { "+softtabs", 0,                          setmod, 1, MODE_SOFT_TAB },
-    { "-softtabs", "Disable character editing",        clearmode, 1, MODE_SOFT_TAB },
-    { "litecho", "Enable literal character echo", setmod, 1, MODE_LIT_ECHO },
-    { "+litecho", 0,                           setmod, 1, MODE_LIT_ECHO },
-    { "-litecho", "Disable literal character echo", clearmode, 1, MODE_LIT_ECHO },
-    { "help",  0,                              (int (*)(int))modehelp, 0, 0 },
-#ifdef KLUDGELINEMODE
-    { "kludgeline", 0,                         (int (*)(int))dokludgemode, 1, 0 },
-#endif
-    { "", "", NULL, 0, 0 },
-    { "?",     "Print help information",       (int (*)(int))modehelp, 0, 0 },
-    { NULL, NULL, NULL, 0, 0 },
-};
-
-
-static int
-modehelp(void)
-{
-    struct modelist *mt;
-
-    printf("format is:  'mode Mode', where 'Mode' is one of:\n\n");
-    for (mt = ModeList; mt->name; mt++) {
-       if (mt->help) {
-           if (*mt->help)
-               printf("%-15s %s\n", mt->name, mt->help);
-           else
-               printf("\n");
-       }
-    }
-    return 0;
-}
-
-#define        GETMODECMD(name) (struct modelist *) \
-               genget(name, (char **) ModeList, sizeof(struct modelist))
-
-static int
-modecmd(int argc, char *argv[])
-{
-    struct modelist *mt;
-
-    if (argc != 2) {
-       printf("'mode' command requires an argument\n");
-       printf("'mode ?' for help.\n");
-    } else if ((mt = GETMODECMD(argv[1])) == 0) {
-       fprintf(stderr, "Unknown mode '%s' ('mode ?' for help).\n", argv[1]);
-    } else if (Ambiguous((void *)mt)) {
-       fprintf(stderr, "Ambiguous mode '%s' ('mode ?' for help).\n", argv[1]);
-    } else if (mt->needconnect && !connected) {
-       printf("?Need to be connected first.\n");
-       printf("'mode ?' for help.\n");
-    } else if (mt->handler) {
-       return (*mt->handler)(mt->arg1);
-    }
-    return 0;
-}
-\f
-/*
- * The following data structures and routines implement the
- * "display" command.
- */
-
-static int
-display(int argc, char *argv[])
-{
-    struct togglelist *tl;
-    struct setlist *sl;
-
-#define        dotog(tl)       if (tl->variable && tl->actionexplanation) { \
-                           if (*tl->variable) { \
-                               printf("will"); \
-                           } else { \
-                               printf("won't"); \
-                           } \
-                           printf(" %s.\n", tl->actionexplanation); \
-                       }
-
-#define        doset(sl)   if (sl->name && *sl->name != ' ') { \
-                       if (sl->handler == 0) \
-                           printf("%-15s [%s]\n", sl->name, control(*sl->charp)); \
-                       else \
-                           printf("%-15s \"%s\"\n", sl->name, (char *)sl->charp); \
-                   }
-
-    if (argc == 1) {
-       for (tl = Togglelist; tl->name; tl++) {
-           dotog(tl);
-       }
-       printf("\n");
-       for (sl = Setlist; sl->name; sl++) {
-           doset(sl);
-       }
-    } else {
-       int i;
-
-       for (i = 1; i < argc; i++) {
-           sl = getset(argv[i]);
-           tl = GETTOGGLE(argv[i]);
-           if (Ambiguous((void *)sl) || Ambiguous((void *)tl)) {
-               printf("?Ambiguous argument '%s'.\n", argv[i]);
-               return 0;
-           } else if (!sl && !tl) {
-               printf("?Unknown argument '%s'.\n", argv[i]);
-               return 0;
-           } else {
-               if (tl) {
-                   dotog(tl);
-               }
-               if (sl) {
-                   doset(sl);
-               }
-           }
-       }
-    }
-/*@*/optionstatus();
-#ifdef ENCRYPTION
-    EncryptStatus();
-#endif /* ENCRYPTION */
-    return 1;
-#undef doset
-#undef dotog
-}
-\f
-/*
- * The following are the data structures, and many of the routines,
- * relating to command processing.
- */
-
-/*
- * Set the escape character.
- */
-static int
-setescape(int argc, char *argv[])
-{
-       char *arg;
-       char buf[50];
-
-       printf(
-           "Deprecated usage - please use 'set escape%s%s' in the future.\n",
-                               (argc > 2)? " ":"", (argc > 2)? argv[1]: "");
-       if (argc > 2)
-               arg = argv[1];
-       else {
-               printf("new escape character: ");
-               (void) fgets(buf, sizeof(buf), stdin);
-               arg = buf;
-       }
-       if (arg[0] != '\0')
-               escape = arg[0];
-       (void) fflush(stdout);
-       return 1;
-}
-
-static int
-togcrmod(void)
-{
-    crmod = !crmod;
-    printf("Deprecated usage - please use 'toggle crmod' in the future.\n");
-    printf("%s map carriage return on output.\n", crmod ? "Will" : "Won't");
-    (void) fflush(stdout);
-    return 1;
-}
-
-static int
-suspend(void)
-{
-#ifdef SIGTSTP
-    setcommandmode();
-    {
-       long oldrows, oldcols, newrows, newcols, err_;
-
-       err_ = (TerminalWindowSize(&oldrows, &oldcols) == 0) ? 1 : 0;
-       (void) kill(0, SIGTSTP);
-       /*
-        * If we didn't get the window size before the SUSPEND, but we
-        * can get them now (?), then send the NAWS to make sure that
-        * we are set up for the right window size.
-        */
-       if (TerminalWindowSize(&newrows, &newcols) && connected &&
-           (err_ || ((oldrows != newrows) || (oldcols != newcols)))) {
-               sendnaws();
-       }
-    }
-    /* reget parameters in case they were changed */
-    TerminalSaveState();
-    setconnmode(0);
-#else
-    printf("Suspend is not supported.  Try the '!' command instead\n");
-#endif
-    return 1;
-}
-
-static int
-shell(int argc, char *argv[] __unused)
-{
-    long oldrows, oldcols, newrows, newcols, err_;
-
-    setcommandmode();
-
-    err_ = (TerminalWindowSize(&oldrows, &oldcols) == 0) ? 1 : 0;
-    switch(vfork()) {
-    case -1:
-       perror("Fork failed\n");
-       break;
-
-    case 0:
-       {
-           /*
-            * Fire up the shell in the child.
-            */
-           const char *shellp, *shellname;
-
-           shellp = getenv("SHELL");
-           if (shellp == NULL)
-               shellp = "/bin/sh";
-           if ((shellname = strrchr(shellp, '/')) == 0)
-               shellname = shellp;
-           else
-               shellname++;
-           if (argc > 1)
-               execl(shellp, shellname, "-c", &saveline[1], (char *)0);
-           else
-               execl(shellp, shellname, (char *)0);
-           perror("Execl");
-           _exit(1);
-       }
-    default:
-           (void)wait((int *)0);       /* Wait for the shell to complete */
-
-           if (TerminalWindowSize(&newrows, &newcols) && connected &&
-               (err_ || ((oldrows != newrows) || (oldcols != newcols)))) {
-                   sendnaws();
-           }
-           break;
-    }
-    return 1;
-}
-
-static int
-bye(int argc, char *argv[])
-{
-    extern int resettermname;
-
-    if (connected) {
-       (void) shutdown(net, 2);
-       printf("Connection closed.\n");
-       (void) NetClose(net);
-       connected = 0;
-       resettermname = 1;
-#ifdef AUTHENTICATION
-#ifdef ENCRYPTION
-       auth_encrypt_connect(connected);
-#endif
-#endif
-       /* reset options */
-       tninit();
-    }
-    if ((argc != 2) || (strcmp(argv[1], "fromquit") != 0)) {
-       longjmp(toplevel, 1);
-       /* NOTREACHED */
-    }
-    return 1;                  /* Keep lint, etc., happy */
-}
-
-void
-quit(void)
-{
-       (void) call(bye, "bye", "fromquit", 0);
-       Exit(0);
-}
-
-static int
-logout(void)
-{
-       send_do(TELOPT_LOGOUT, 1);
-       (void) netflush();
-       return 1;
-}
-
-\f
-/*
- * The SLC command.
- */
-
-struct slclist {
-       const char      *name;
-       const char      *help;
-       void    (*handler)(int);
-       int     arg;
-};
-
-static void slc_help(void);
-
-struct slclist SlcList[] = {
-    { "export",        "Use local special character definitions",
-                                               (void (*)(int))slc_mode_export, 0 },
-    { "import",        "Use remote special character definitions",
-                                               slc_mode_import,        1 },
-    { "check", "Verify remote special character definitions",
-                                               slc_mode_import,        0 },
-    { "help",  NULL,                           (void (*)(int))slc_help,                0 },
-    { "?",     "Print help information",       (void (*)(int))slc_help,                0 },
-    { NULL, NULL, NULL, 0 },
-};
-
-static void
-slc_help(void)
-{
-    struct slclist *c;
-
-    for (c = SlcList; c->name; c++) {
-       if (c->help) {
-           if (*c->help)
-               printf("%-15s %s\n", c->name, c->help);
-           else
-               printf("\n");
-       }
-    }
-}
-
-static struct slclist *
-getslc(char *name)
-{
-    return (struct slclist *)
-               genget(name, (char **) SlcList, sizeof(struct slclist));
-}
-
-static int
-slccmd(int argc, char *argv[])
-{
-    struct slclist *c;
-
-    if (argc != 2) {
-       fprintf(stderr,
-           "Need an argument to 'slc' command.  'slc ?' for help.\n");
-       return 0;
-    }
-    c = getslc(argv[1]);
-    if (c == 0) {
-       fprintf(stderr, "'%s': unknown argument ('slc ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    if (Ambiguous((void *)c)) {
-       fprintf(stderr, "'%s': ambiguous argument ('slc ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    (*c->handler)(c->arg);
-    slcstate();
-    return 1;
-}
-\f
-/*
- * The ENVIRON command.
- */
-
-struct envlist {
-       const char      *name;
-       const char      *help;
-       void    (*handler)(unsigned char *, unsigned char *);
-       int     narg;
-};
-
-extern struct env_lst *
-       env_define(const unsigned char *, unsigned char *);
-extern void
-       env_undefine(unsigned char *),
-       env_export(const unsigned char *),
-       env_unexport(const unsigned char *),
-       env_send(unsigned char *),
-#if defined(OLD_ENVIRON) && defined(ENV_HACK)
-       env_varval(unsigned char *),
-#endif
-       env_list(void);
-static void
-       env_help(void);
-
-struct envlist EnvList[] = {
-    { "define",        "Define an environment variable",
-                                               (void (*)(unsigned char *, unsigned char *))env_define, 2 },
-    { "undefine", "Undefine an environment variable",
-                                               (void (*)(unsigned char *, unsigned char *))env_undefine,       1 },
-    { "export",        "Mark an environment variable for automatic export",
-                                               (void (*)(unsigned char *, unsigned char *))env_export, 1 },
-    { "unexport", "Don't mark an environment variable for automatic export",
-                                               (void (*)(unsigned char *, unsigned char *))env_unexport,       1 },
-    { "send",  "Send an environment variable", (void (*)(unsigned char *, unsigned char *))env_send,   1 },
-    { "list",  "List the current environment variables",
-                                               (void (*)(unsigned char *, unsigned char *))env_list,   0 },
-#if defined(OLD_ENVIRON) && defined(ENV_HACK)
-    { "varval", "Reverse VAR and VALUE (auto, right, wrong, status)",
-                                               (void (*)(unsigned char *, unsigned char *))env_varval,    1 },
-#endif
-    { "help",  NULL,                           (void (*)(unsigned char *, unsigned char *))env_help,           0 },
-    { "?",     "Print help information",       (void (*)(unsigned char *, unsigned char *))env_help,           0 },
-    { NULL, NULL, NULL, 0 },
-};
-
-static void
-env_help(void)
-{
-    struct envlist *c;
-
-    for (c = EnvList; c->name; c++) {
-       if (c->help) {
-           if (*c->help)
-               printf("%-15s %s\n", c->name, c->help);
-           else
-               printf("\n");
-       }
-    }
-}
-
-static struct envlist *
-getenvcmd(char *name)
-{
-    return (struct envlist *)
-               genget(name, (char **) EnvList, sizeof(struct envlist));
-}
-
-static int
-env_cmd(int argc, char *argv[])
-{
-    struct envlist *c;
-
-    if (argc < 2) {
-       fprintf(stderr,
-           "Need an argument to 'environ' command.  'environ ?' for help.\n");
-       return 0;
-    }
-    c = getenvcmd(argv[1]);
-    if (c == 0) {
-       fprintf(stderr, "'%s': unknown argument ('environ ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    if (Ambiguous((void *)c)) {
-       fprintf(stderr, "'%s': ambiguous argument ('environ ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    if (c->narg + 2 != argc) {
-       fprintf(stderr,
-           "Need %s%d argument%s to 'environ %s' command.  'environ ?' for help.\n",
-               c->narg < argc + 2 ? "only " : "",
-               c->narg, c->narg == 1 ? "" : "s", c->name);
-       return 0;
-    }
-    (*c->handler)(argv[2], argv[3]);
-    return 1;
-}
-
-struct env_lst {
-       struct env_lst *next;   /* pointer to next structure */
-       struct env_lst *prev;   /* pointer to previous structure */
-       unsigned char *var;     /* pointer to variable name */
-       unsigned char *value;   /* pointer to variable value */
-       int export;             /* 1 -> export with default list of variables */
-       int welldefined;        /* A well defined variable */
-};
-
-struct env_lst envlisthead;
-
-static struct env_lst *
-env_find(const unsigned char *var)
-{
-       struct env_lst *ep;
-
-       for (ep = envlisthead.next; ep; ep = ep->next) {
-               if (strcmp(ep->var, var) == 0)
-                       return(ep);
-       }
-       return(NULL);
-}
-
-void
-env_init(void)
-{
-       extern char **environ;
-       char **epp, *cp;
-       struct env_lst *ep;
-
-       for (epp = environ; *epp; epp++) {
-               if ((cp = strchr(*epp, '='))) {
-                       *cp = '\0';
-                       ep = env_define((unsigned char *)*epp,
-                                       (unsigned char *)cp+1);
-                       ep->export = 0;
-                       *cp = '=';
-               }
-       }
-       /*
-        * Special case for DISPLAY variable.  If it is ":0.0" or
-        * "unix:0.0", we have to get rid of "unix" and insert our
-        * hostname.
-        */
-       if ((ep = env_find("DISPLAY"))
-           && ((*ep->value == ':')
-               || (strncmp((char *)ep->value, "unix:", 5) == 0))) {
-               char hbuf[256+1];
-               char *cp2 = strchr((char *)ep->value, ':');
-
-               gethostname(hbuf, 256);
-               hbuf[256] = '\0';
-               cp = (char *)malloc(strlen(hbuf) + strlen(cp2) + 1);
-               sprintf((char *)cp, "%s%s", hbuf, cp2);
-               free(ep->value);
-               ep->value = (unsigned char *)cp;
-       }
-       /*
-        * If USER is not defined, but LOGNAME is, then add
-        * USER with the value from LOGNAME.  By default, we
-        * don't export the USER variable.
-        */
-       if ((env_find("USER") == NULL) && (ep = env_find("LOGNAME"))) {
-               env_define("USER", ep->value);
-               env_unexport("USER");
-       }
-       env_export("DISPLAY");
-       env_export("PRINTER");
-}
-
-struct env_lst *
-env_define(const unsigned char *var, unsigned char *value)
-{
-       struct env_lst *ep;
-
-       if ((ep = env_find(var))) {
-               if (ep->var)
-                       free(ep->var);
-               if (ep->value)
-                       free(ep->value);
-       } else {
-               ep = (struct env_lst *)malloc(sizeof(struct env_lst));
-               ep->next = envlisthead.next;
-               envlisthead.next = ep;
-               ep->prev = &envlisthead;
-               if (ep->next)
-                       ep->next->prev = ep;
-       }
-       ep->welldefined = opt_welldefined(var);
-       ep->export = 1;
-       ep->var = strdup(var);
-       ep->value = strdup(value);
-       return(ep);
-}
-
-void
-env_undefine(unsigned char *var)
-{
-       struct env_lst *ep;
-
-       if ((ep = env_find(var))) {
-               ep->prev->next = ep->next;
-               if (ep->next)
-                       ep->next->prev = ep->prev;
-               if (ep->var)
-                       free(ep->var);
-               if (ep->value)
-                       free(ep->value);
-               free(ep);
-       }
-}
-
-void
-env_export(const unsigned char *var)
-{
-       struct env_lst *ep;
-
-       if ((ep = env_find(var)))
-               ep->export = 1;
-}
-
-void
-env_unexport(const unsigned char *var)
-{
-       struct env_lst *ep;
-
-       if ((ep = env_find(var)))
-               ep->export = 0;
-}
-
-void
-env_send(unsigned char *var)
-{
-       struct env_lst *ep;
-
-       if (my_state_is_wont(TELOPT_NEW_ENVIRON)
-#ifdef OLD_ENVIRON
-           && my_state_is_wont(TELOPT_OLD_ENVIRON)
-#endif
-               ) {
-               fprintf(stderr,
-                   "Cannot send '%s': Telnet ENVIRON option not enabled\n",
-                                                                       var);
-               return;
-       }
-       ep = env_find(var);
-       if (ep == 0) {
-               fprintf(stderr, "Cannot send '%s': variable not defined\n",
-                                                                       var);
-               return;
-       }
-       env_opt_start_info();
-       env_opt_add(ep->var);
-       env_opt_end(0);
-}
-
-void
-env_list(void)
-{
-       struct env_lst *ep;
-
-       for (ep = envlisthead.next; ep; ep = ep->next) {
-               printf("%c %-20s %s\n", ep->export ? '*' : ' ',
-                                       ep->var, ep->value);
-       }
-}
-
-unsigned char *
-env_default(int init, int welldefined)
-{
-       static struct env_lst *nep = NULL;
-
-       if (init) {
-               nep = &envlisthead;
-               return(NULL);
-       }
-       if (nep) {
-               while ((nep = nep->next)) {
-                       if (nep->export && (nep->welldefined == welldefined))
-                               return(nep->var);
-               }
-       }
-       return(NULL);
-}
-
-unsigned char *
-env_getvalue(const unsigned char *var)
-{
-       struct env_lst *ep;
-
-       if ((ep = env_find(var)))
-               return(ep->value);
-       return(NULL);
-}
-
-#if defined(OLD_ENVIRON) && defined(ENV_HACK)
-void
-env_varval(unsigned char *what)
-{
-       extern int old_env_var, old_env_value, env_auto;
-       int len = strlen((char *)what);
-
-       if (len == 0)
-               goto unknown;
-
-       if (strncasecmp((char *)what, "status", len) == 0) {
-               if (env_auto)
-                       printf("%s%s", "VAR and VALUE are/will be ",
-                                       "determined automatically\n");
-               if (old_env_var == OLD_ENV_VAR)
-                       printf("VAR and VALUE set to correct definitions\n");
-               else
-                       printf("VAR and VALUE definitions are reversed\n");
-       } else if (strncasecmp((char *)what, "auto", len) == 0) {
-               env_auto = 1;
-               old_env_var = OLD_ENV_VALUE;
-               old_env_value = OLD_ENV_VAR;
-       } else if (strncasecmp((char *)what, "right", len) == 0) {
-               env_auto = 0;
-               old_env_var = OLD_ENV_VAR;
-               old_env_value = OLD_ENV_VALUE;
-       } else if (strncasecmp((char *)what, "wrong", len) == 0) {
-               env_auto = 0;
-               old_env_var = OLD_ENV_VALUE;
-               old_env_value = OLD_ENV_VAR;
-       } else {
-unknown:
-               printf("Unknown \"varval\" command. (\"auto\", \"right\", \"wrong\", \"status\")\n");
-       }
-}
-#endif
-
-#ifdef AUTHENTICATION
-/*
- * The AUTHENTICATE command.
- */
-
-struct authlist {
-       const char      *name;
-       const char      *help;
-       int     (*handler)(char *);
-       int     narg;
-};
-
-extern int
-       auth_enable(char *),
-       auth_disable(char *),
-       auth_status(void);
-static int
-       auth_help(void);
-
-struct authlist AuthList[] = {
-    { "status",        "Display current status of authentication information",
-                                               (int (*)(char *))auth_status,   0 },
-    { "disable", "Disable an authentication type ('auth disable ?' for more)",
-                                               auth_disable,   1 },
-    { "enable", "Enable an authentication type ('auth enable ?' for more)",
-                                               auth_enable,    1 },
-    { "help",  NULL,                           (int (*)(char *))auth_help,             0 },
-    { "?",     "Print help information",       (int (*)(char *))auth_help,             0 },
-    { NULL, NULL, NULL, 0 },
-};
-
-static int
-auth_help(void)
-{
-    struct authlist *c;
-
-    for (c = AuthList; c->name; c++) {
-       if (c->help) {
-           if (*c->help)
-               printf("%-15s %s\n", c->name, c->help);
-           else
-               printf("\n");
-       }
-    }
-    return 0;
-}
-
-int
-auth_cmd(int argc, char *argv[])
-{
-    struct authlist *c;
-
-    if (argc < 2) {
-       fprintf(stderr,
-           "Need an argument to 'auth' command.  'auth ?' for help.\n");
-       return 0;
-    }
-
-    c = (struct authlist *)
-               genget(argv[1], (char **) AuthList, sizeof(struct authlist));
-    if (c == 0) {
-       fprintf(stderr, "'%s': unknown argument ('auth ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    if (Ambiguous((void *)c)) {
-       fprintf(stderr, "'%s': ambiguous argument ('auth ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    if (c->narg + 2 != argc) {
-       fprintf(stderr,
-           "Need %s%d argument%s to 'auth %s' command.  'auth ?' for help.\n",
-               c->narg < argc + 2 ? "only " : "",
-               c->narg, c->narg == 1 ? "" : "s", c->name);
-       return 0;
-    }
-    return((*c->handler)(argv[2]));
-}
-#endif
-
-#ifdef ENCRYPTION
-/*
- * The ENCRYPT command.
- */
-
-struct encryptlist {
-       const char      *name;
-       const char      *help;
-       int     (*handler)(char *, char *);
-       int     needconnect;
-       int     minarg;
-       int     maxarg;
-};
-
-extern int
-       EncryptEnable(char *, char *),
-       EncryptDisable(char *, char *),
-       EncryptType(char *, char *),
-       EncryptStart(char *),
-       EncryptStartInput(void),
-       EncryptStartOutput(void),
-       EncryptStop(char *),
-       EncryptStopInput(void),
-       EncryptStopOutput(void),
-       EncryptStatus(void);
-static int
-       EncryptHelp(void);
-
-struct encryptlist EncryptList[] = {
-    { "enable", "Enable encryption. ('encrypt enable ?' for more)",
-                                               EncryptEnable, 1, 1, 2 },
-    { "disable", "Disable encryption. ('encrypt enable ?' for more)",
-                                               EncryptDisable, 0, 1, 2 },
-    { "type", "Set encryption type. ('encrypt type ?' for more)",
-                                               EncryptType, 0, 1, 1 },
-    { "start", "Start encryption. ('encrypt start ?' for more)",
-                                               (int (*)(char *, char *))EncryptStart, 1, 0, 1 },
-    { "stop", "Stop encryption. ('encrypt stop ?' for more)",
-                                               (int (*)(char *, char *))EncryptStop, 1, 0, 1 },
-    { "input", "Start encrypting the input stream",
-                                               (int (*)(char *, char *))EncryptStartInput, 1, 0, 0 },
-    { "-input", "Stop encrypting the input stream",
-                                               (int (*)(char *, char *))EncryptStopInput, 1, 0, 0 },
-    { "output", "Start encrypting the output stream",
-                                               (int (*)(char *, char *))EncryptStartOutput, 1, 0, 0 },
-    { "-output", "Stop encrypting the output stream",
-                                               (int (*)(char *, char *))EncryptStopOutput, 1, 0, 0 },
-
-    { "status",        "Display current status of authentication information",
-                                               (int (*)(char *, char *))EncryptStatus, 0, 0, 0 },
-    { "help",  NULL,                           (int (*)(char *, char *))EncryptHelp,   0, 0, 0 },
-    { "?",     "Print help information",       (int (*)(char *, char *))EncryptHelp,   0, 0, 0 },
-    { NULL, NULL, NULL, 0, 0, 0 },
-};
-
-static int
-EncryptHelp(void)
-{
-    struct encryptlist *c;
-
-    for (c = EncryptList; c->name; c++) {
-       if (c->help) {
-           if (*c->help)
-               printf("%-15s %s\n", c->name, c->help);
-           else
-               printf("\n");
-       }
-    }
-    return 0;
-}
-
-static int
-encrypt_cmd(int argc, char *argv[])
-{
-    struct encryptlist *c;
-
-    if (argc < 2) {
-       fprintf(stderr,
-           "Need an argument to 'encrypt' command.  'encrypt ?' for help.\n");
-       return 0;
-    }
-
-    c = (struct encryptlist *)
-               genget(argv[1], (char **) EncryptList, sizeof(struct encryptlist));
-    if (c == 0) {
-       fprintf(stderr, "'%s': unknown argument ('encrypt ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    if (Ambiguous((void *)c)) {
-       fprintf(stderr, "'%s': ambiguous argument ('encrypt ?' for help).\n",
-                               argv[1]);
-       return 0;
-    }
-    argc -= 2;
-    if (argc < c->minarg || argc > c->maxarg) {
-       if (c->minarg == c->maxarg) {
-           fprintf(stderr, "Need %s%d argument%s ",
-               c->minarg < argc ? "only " : "", c->minarg,
-               c->minarg == 1 ? "" : "s");
-       } else {
-           fprintf(stderr, "Need %s%d-%d arguments ",
-               c->maxarg < argc ? "only " : "", c->minarg, c->maxarg);
-       }
-       fprintf(stderr, "to 'encrypt %s' command.  'encrypt ?' for help.\n",
-               c->name);
-       return 0;
-    }
-    if (c->needconnect && !connected) {
-       if (!(argc && (isprefix(argv[2], "help") || isprefix(argv[2], "?")))) {
-           printf("?Need to be connected first.\n");
-           return 0;
-       }
-    }
-    return ((*c->handler)(argc > 0 ? argv[2] : 0,
-                       argc > 1 ? argv[3] : 0));
-}
-#endif /* ENCRYPTION */
-
-/*
- * Print status about the connection.
- */
-/*ARGSUSED*/
-static int
-status(int argc, char *argv[])
-{
-    if (connected) {
-       printf("Connected to %s.\n", hostname);
-       if ((argc < 2) || strcmp(argv[1], "notmuch")) {
-           int mode = getconnmode();
-
-           if (my_want_state_is_will(TELOPT_LINEMODE)) {
-               printf("Operating with LINEMODE option\n");
-               printf("%s line editing\n", (mode&MODE_EDIT) ? "Local" : "No");
-               printf("%s catching of signals\n",
-                                       (mode&MODE_TRAPSIG) ? "Local" : "No");
-               slcstate();
-#ifdef KLUDGELINEMODE
-           } else if (kludgelinemode && my_want_state_is_dont(TELOPT_SGA)) {
-               printf("Operating in obsolete linemode\n");
-#endif
-           } else {
-               printf("Operating in single character mode\n");
-               if (localchars)
-                   printf("Catching signals locally\n");
-           }
-           printf("%s character echo\n", (mode&MODE_ECHO) ? "Local" : "Remote");
-           if (my_want_state_is_will(TELOPT_LFLOW))
-               printf("%s flow control\n", (mode&MODE_FLOW) ? "Local" : "No");
-#ifdef ENCRYPTION
-           encrypt_display();
-#endif /* ENCRYPTION */
-       }
-    } else {
-       printf("No connection.\n");
-    }
-    printf("Escape character is '%s'.\n", control(escape));
-    (void) fflush(stdout);
-    return 1;
-}
-
-#ifdef SIGINFO
-/*
- * Function that gets called when SIGINFO is received.
- */
-void
-ayt_status(void)
-{
-    (void) call(status, "status", "notmuch", 0);
-}
-#endif
-
-static const char *
-sockaddr_ntop(struct sockaddr *sa)
-{
-    void *addr;
-    static char addrbuf[INET6_ADDRSTRLEN];
-
-    switch (sa->sa_family) {
-    case AF_INET:
-       addr = &((struct sockaddr_in *)sa)->sin_addr;
-       break;
-    case AF_UNIX:
-       addr = &((struct sockaddr_un *)sa)->sun_path;
-       break;
-#ifdef INET6
-    case AF_INET6:
-       addr = &((struct sockaddr_in6 *)sa)->sin6_addr;
-       break;
-#endif
-    default:
-       return NULL;
-    }
-    inet_ntop(sa->sa_family, addr, addrbuf, sizeof(addrbuf));
-    return addrbuf;
-}
-
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-static int
-setpolicy(int lnet, struct addrinfo *res, char *policy)
-{
-       char *buf;
-       int level;
-       int optname;
-
-       if (policy == NULL)
-               return 0;
-
-       buf = ipsec_set_policy(policy, strlen(policy));
-       if (buf == NULL) {
-               printf("%s\n", ipsec_strerror());
-               return -1;
-       }
-       level = res->ai_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
-       optname = res->ai_family == AF_INET ? IP_IPSEC_POLICY : IPV6_IPSEC_POLICY;
-       if (setsockopt(lnet, level, optname, buf, ipsec_get_policylen(buf)) < 0){
-               perror("setsockopt");
-               return -1;
-       }
-
-       free(buf);
-       return 0;
-}
-#endif
-
-#ifdef INET6
-/*
- * When an Address Family related error happend, check if retry with
- * another AF is possible or not.
- * Return 1, if retry with another af is OK. Else, return 0.
- */
-static int
-switch_af(struct addrinfo **aip)
-{
-    int nextaf;
-    struct addrinfo *ai;
-
-    ai = *aip;
-    nextaf = (ai->ai_family == AF_INET) ? AF_INET6 : AF_INET;
-    do
-        ai=ai->ai_next;
-    while (ai != NULL && ai->ai_family != nextaf);
-    *aip = ai;
-    if (*aip != NULL) {
-        return 1;
-    }
-    return 0;
-}
-#endif
-
-int
-tn(int argc, char *argv[])
-{
-    char *srp = 0;
-    int proto, opt;
-    int srlen;
-    int srcroute = 0, result;
-    char *cmd, *hostp = 0, *portp = 0, *user = 0;
-    char *src_addr = NULL;
-    struct addrinfo hints, *res, *res0 = NULL, *src_res, *src_res0 = NULL;
-    int error = 0, af_error = 0;
-
-    if (connected) {
-       printf("?Already connected to %s\n", hostname);
-       setuid(getuid());
-       return 0;
-    }
-    if (argc < 2) {
-       (void) strcpy(line, "open ");
-       printf("(to) ");
-       (void) fgets(&line[strlen(line)], sizeof(line) - strlen(line), stdin);
-       makeargv();
-       argc = margc;
-       argv = margv;
-    }
-    cmd = *argv;
-    --argc; ++argv;
-    while (argc) {
-       if (strcmp(*argv, "help") == 0 || isprefix(*argv, "?"))
-           goto usage;
-       if (strcmp(*argv, "-l") == 0) {
-           --argc; ++argv;
-           if (argc == 0)
-               goto usage;
-           user = *argv++;
-           --argc;
-           continue;
-       }
-       if (strcmp(*argv, "-a") == 0) {
-           --argc; ++argv;
-           autologin = 1;
-           continue;
-       }
-       if (strcmp(*argv, "-s") == 0) {
-           --argc; ++argv;
-           if (argc == 0)
-               goto usage;
-           src_addr = *argv++;
-           --argc;
-           continue;
-       }
-       if (hostp == 0) {
-           hostp = *argv++;
-           --argc;
-           continue;
-       }
-       if (portp == 0) {
-           portp = *argv++;
-           --argc;
-           continue;
-       }
-    usage:
-       printf("usage: %s [-l user] [-a] [-s src_addr] host-name [port]\n", cmd);
-       setuid(getuid());
-       return 0;
-    }
-    if (hostp == 0)
-       goto usage;
-
-    if (src_addr != NULL) {
-       memset(&hints, 0, sizeof(hints));
-       hints.ai_family = family;
-       hints.ai_socktype = SOCK_STREAM;
-       error = getaddrinfo(src_addr, 0, &hints, &src_res);
-       if (error == EAI_NODATA) {
-               hints.ai_flags = 0;
-               error = getaddrinfo(src_addr, 0, &hints, &src_res);
-       }
-       if (error != 0) {
-               fprintf(stderr, "%s: %s\n", src_addr, gai_strerror(error));
-               if (error == EAI_SYSTEM)
-                       fprintf(stderr, "%s: %s\n", src_addr, strerror(errno));
-               setuid(getuid());
-               return 0;
-       }
-       src_res0 = src_res;
-    }
-    if (hostp[0] == '/') {
-       struct sockaddr_un su;
-       
-       if (strlen(hostp) >= sizeof(su.sun_path)) {
-           fprintf(stderr, "hostname too long for unix domain socket: %s",
-                   hostp);
-               goto fail;
-       }
-       memset(&su, 0, sizeof su);
-       su.sun_family = AF_UNIX;
-       strncpy(su.sun_path, hostp, sizeof su.sun_path);
-       printf("Trying %s...\n", hostp);
-       net = socket(PF_UNIX, SOCK_STREAM, 0);
-       if ( net < 0) {
-           perror("socket");
-           goto fail;
-       }
-       if (connect(net, (struct sockaddr *)&su, sizeof su) == -1) {
-           perror(su.sun_path);
-           (void) NetClose(net);
-           goto fail;
-       }
-       goto af_unix;
-    } else if (hostp[0] == '@' || hostp[0] == '!') {
-       if (
-#ifdef INET6
-           family == AF_INET6 ||
-#endif
-           (hostname = strrchr(hostp, ':')) == NULL)
-           hostname = strrchr(hostp, '@');
-       if (hostname == NULL) {
-           hostname = hostp;
-       } else {
-           hostname++;
-           srcroute = 1;
-       }
-    } else
-        hostname = hostp;
-    if (!portp) {
-      telnetport = 1;
-      portp = strdup("telnet");
-    } else if (*portp == '-') {
-      portp++;
-      telnetport = 1;
-    } else
-      telnetport = 0;
-
-    memset(&hints, 0, sizeof(hints));
-    hints.ai_flags = AI_NUMERICHOST;
-    hints.ai_family = family;
-    hints.ai_socktype = SOCK_STREAM;
-    error = getaddrinfo(hostname, portp, &hints, &res);
-    if (error) {
-        hints.ai_flags = AI_CANONNAME;
-       error = getaddrinfo(hostname, portp, &hints, &res);
-    }
-    if (error != 0) {
-       fprintf(stderr, "%s: %s\n", hostname, gai_strerror(error));
-       if (error == EAI_SYSTEM)
-           fprintf(stderr, "%s: %s\n", hostname, strerror(errno));
-       setuid(getuid());
-       goto fail;
-    }
-    if (hints.ai_flags == AI_NUMERICHOST) {
-       /* hostname has numeric */
-        int gni_err = 1;
-
-       if (doaddrlookup)
-           gni_err = getnameinfo(res->ai_addr, res->ai_addr->sa_len,
-                                 _hostname, sizeof(_hostname) - 1, NULL, 0,
-                                 NI_NAMEREQD);
-       if (gni_err != 0)
-           (void) strncpy(_hostname, hostp, sizeof(_hostname) - 1);
-       _hostname[sizeof(_hostname)-1] = '\0';
-       hostname = _hostname;
-    } else {
-       /* hostname has FQDN */
-       if (srcroute != 0)
-           (void) strncpy(_hostname, hostname, sizeof(_hostname) - 1);
-       else if (res->ai_canonname != NULL)
-         strcpy(_hostname, res->ai_canonname);
-       else
-         (void) strncpy(_hostname, hostp, sizeof(_hostname) - 1);
-       _hostname[sizeof(_hostname)-1] = '\0';
-       hostname = _hostname;
-    }
-    res0 = res;
- #ifdef INET6
- af_again:
- #endif
-    if (srcroute != 0) {
-        static char hostbuf[BUFSIZ];
-
-       if (af_error == 0) { /* save intermediate hostnames for retry */
-               strncpy(hostbuf, hostp, BUFSIZ - 1);
-               hostbuf[BUFSIZ - 1] = '\0';
-       } else
-               hostp = hostbuf;
-       srp = 0;
-       result = sourceroute(res, hostp, &srp, &srlen, &proto, &opt);
-       if (result == 0) {
-#ifdef INET6
-           if (family == AF_UNSPEC && af_error == 0 &&
-               switch_af(&res) == 1) {
-               af_error = 1;
-               goto af_again;
-           }
-#endif
-           setuid(getuid());
-           goto fail;
-       } else if (result == -1) {
-           printf("Bad source route option: %s\n", hostp);
-           setuid(getuid());
-           goto fail;
-       }
-    }
-    do {
-        printf("Trying %s...\n", sockaddr_ntop(res->ai_addr));
-       net = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
-       setuid(getuid());
-       if (net < 0) {
-#ifdef INET6
-           if (family == AF_UNSPEC && af_error == 0 &&
-               switch_af(&res) == 1) {
-               af_error = 1;
-               goto af_again;
-           }
-#endif
-           perror("telnet: socket");
-           goto fail;
-       }
-       if (srp && setsockopt(net, proto, opt, (char *)srp, srlen) < 0)
-               perror("setsockopt (source route)");
-#if    defined(IPPROTO_IP) && defined(IP_TOS)
-       if (res->ai_family == PF_INET) {
-# if   defined(HAS_GETTOS)
-           struct tosent *tp;
-           if (tos < 0 && (tp = gettosbyname("telnet", "tcp")))
-               tos = tp->t_tos;
-# endif
-           if (tos < 0)
-               tos = IPTOS_LOWDELAY;
-           if (tos
-               && (setsockopt(net, IPPROTO_IP, IP_TOS,
-                   (char *)&tos, sizeof(int)) < 0)
-               && (errno != ENOPROTOOPT))
-                   perror("telnet: setsockopt (IP_TOS) (ignored)");
-       }
-#endif /* defined(IPPROTO_IP) && defined(IP_TOS) */
-
-       if (debug && SetSockOpt(net, SOL_SOCKET, SO_DEBUG, 1) < 0) {
-               perror("setsockopt (SO_DEBUG)");
-       }
-
-       if (src_addr != NULL) {
-           for (src_res = src_res0; src_res != 0; src_res = src_res->ai_next)
-               if (src_res->ai_family == res->ai_family)
-                   break;
-           if (src_res == NULL)
-               src_res = src_res0;
-           if (bind(net, src_res->ai_addr, src_res->ai_addrlen) == -1) {
-#ifdef INET6
-               if (family == AF_UNSPEC && af_error == 0 &&
-                   switch_af(&res) == 1) {
-                   af_error = 1;
-                   (void) NetClose(net);
-                   goto af_again;
-               }
-#endif
-               perror("bind");
-               (void) NetClose(net);
-               goto fail;
-           }
-       }
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-       if (setpolicy(net, res, ipsec_policy_in) < 0) {
-               (void) NetClose(net);
-               goto fail;
-       }
-       if (setpolicy(net, res, ipsec_policy_out) < 0) {
-               (void) NetClose(net);
-               goto fail;
-       }
-#endif
-
-       if (connect(net, res->ai_addr, res->ai_addrlen) < 0) {
-           struct addrinfo *next;
-
-           next = res->ai_next;
-           /* If already an af failed, only try same af. */
-           if (af_error != 0)
-               while (next != NULL && next->ai_family != res->ai_family)
-                   next = next->ai_next;
-           warn("connect to address %s", sockaddr_ntop(res->ai_addr));
-           if (next != NULL) {
-               res = next;
-               (void) NetClose(net);
-               continue;
-           }
-           warnx("Unable to connect to remote host");
-           (void) NetClose(net);
-           goto fail;
-       }
-       connected++;
-#ifdef AUTHENTICATION
-#ifdef ENCRYPTION
-       auth_encrypt_connect(connected);
-#endif
-#endif
-    } while (connected == 0);
-    freeaddrinfo(res0);
-    if (src_res0 != NULL)
-        freeaddrinfo(src_res0);
-    cmdrc(hostp, hostname);
- af_unix:    
-    if (autologin && user == NULL) {
-       struct passwd *pw;
-
-       user = getenv("USER");
-       if (user == NULL ||
-           ((pw = getpwnam(user)) && pw->pw_uid != getuid())) {
-               if ((pw = getpwuid(getuid())))
-                       user = pw->pw_name;
-               else
-                       user = NULL;
-       }
-    }
-    if (user) {
-       env_define("USER", user);
-       env_export("USER");
-    }
-    (void) call(status, "status", "notmuch", 0);
-    if (setjmp(peerdied) == 0)
-       telnet(user);
-    (void) NetClose(net);
-    ExitString("Connection closed by foreign host.\n",1);
-    /*NOTREACHED*/
- fail:
-    if (res0 != NULL)
-        freeaddrinfo(res0);
-    if (src_res0 != NULL)
-        freeaddrinfo(src_res0);
-    return 0;
-}
-
-#define HELPINDENT (sizeof ("connect"))
-
-static char
-       openhelp[] =    "connect to a site",
-       closehelp[] =   "close current connection",
-       logouthelp[] =  "forcibly logout remote user and close the connection",
-       quithelp[] =    "exit telnet",
-       statushelp[] =  "print status information",
-       helphelp[] =    "print help information",
-       sendhelp[] =    "transmit special characters ('send ?' for more)",
-       sethelp[] =     "set operating parameters ('set ?' for more)",
-       unsethelp[] =   "unset operating parameters ('unset ?' for more)",
-       togglestring[] ="toggle operating parameters ('toggle ?' for more)",
-       slchelp[] =     "change state of special charaters ('slc ?' for more)",
-       displayhelp[] = "display operating parameters",
-#ifdef AUTHENTICATION
-       authhelp[] =    "turn on (off) authentication ('auth ?' for more)",
-#endif
-#ifdef ENCRYPTION
-       encrypthelp[] = "turn on (off) encryption ('encrypt ?' for more)",
-#endif /* ENCRYPTION */
-       zhelp[] =       "suspend telnet",
-#ifdef OPIE
-       opiehelp[] =    "compute response to OPIE challenge",
-#endif
-       shellhelp[] =   "invoke a subshell",
-       envhelp[] =     "change environment variables ('environ ?' for more)",
-       modestring[] = "try to enter line or character mode ('mode ?' for more)";
-
-static Command cmdtab[] = {
-       { "close",      closehelp,      bye,            1 },
-       { "logout",     logouthelp,     (int (*)(int, char **))logout,          1 },
-       { "display",    displayhelp,    display,        0 },
-       { "mode",       modestring,     modecmd,        0 },
-       { "telnet",     openhelp,       tn,             0 },
-       { "open",       openhelp,       tn,             0 },
-       { "quit",       quithelp,       (int (*)(int, char **))quit,            0 },
-       { "send",       sendhelp,       sendcmd,        0 },
-       { "set",        sethelp,        setcmd,         0 },
-       { "unset",      unsethelp,      unsetcmd,       0 },
-       { "status",     statushelp,     status,         0 },
-       { "toggle",     togglestring,   toggle,         0 },
-       { "slc",        slchelp,        slccmd,         0 },
-#ifdef AUTHENTICATION
-       { "auth",       authhelp,       auth_cmd,       0 },
-#endif
-#ifdef ENCRYPTION
-       { "encrypt",    encrypthelp,    encrypt_cmd,    0 },
-#endif /* ENCRYPTION */
-       { "z",          zhelp,          (int (*)(int, char **))suspend, 0 },
-       { "!",          shellhelp,      shell,          1 },
-       { "environ",    envhelp,        env_cmd,        0 },
-       { "?",          helphelp,       help,           0 },
-#ifdef OPIE
-       { "opie",       opiehelp,       opie_calc,      0 },
-#endif         
-       { NULL, NULL, NULL, 0 }
-};
-
-static char    crmodhelp[] =   "deprecated command -- use 'toggle crmod' instead";
-static char    escapehelp[] =  "deprecated command -- use 'set escape' instead";
-
-static Command cmdtab2[] = {
-       { "help",       0,              help,           0 },
-       { "escape",     escapehelp,     setescape,      0 },
-       { "crmod",      crmodhelp,      (int (*)(int, char **))togcrmod,        0 },
-       { NULL, NULL, NULL, 0 }
-};
-
-
-/*
- * Call routine with argc, argv set from args (terminated by 0).
- */
-
-static int
-call(intrtn_t routine, ...)
-{
-    va_list ap;
-    char *args[100];
-    int argno = 0;
-
-    va_start(ap, routine);
-    while ((args[argno++] = va_arg(ap, char *)) != 0);
-    va_end(ap);
-    return (*routine)(argno-1, args);
-}
-
-
-static Command *
-getcmd(char *name)
-{
-    Command *cm;
-
-    if ((cm = (Command *) genget(name, (char **) cmdtab, sizeof(Command))))
-       return cm;
-    return (Command *) genget(name, (char **) cmdtab2, sizeof(Command));
-}
-
-void
-command(int top, const char *tbuf, int cnt)
-{
-    Command *c;
-
-    setcommandmode();
-    if (!top) {
-       putchar('\n');
-    } else {
-       (void) signal(SIGINT, SIG_DFL);
-       (void) signal(SIGQUIT, SIG_DFL);
-    }
-    for (;;) {
-       if (rlogin == _POSIX_VDISABLE)
-               printf("%s> ", prompt);
-       if (tbuf) {
-           char *cp;
-           cp = line;
-           while (cnt > 0 && (*cp++ = *tbuf++) != '\n')
-               cnt--;
-           tbuf = 0;
-           if (cp == line || *--cp != '\n' || cp == line)
-               goto getline;
-           *cp = '\0';
-           if (rlogin == _POSIX_VDISABLE)
-               printf("%s\n", line);
-       } else {
-       getline:
-           if (rlogin != _POSIX_VDISABLE)
-               printf("%s> ", prompt);
-           if (fgets(line, sizeof(line), stdin) == NULL) {
-               if (feof(stdin) || ferror(stdin)) {
-                   (void) quit();
-                   /*NOTREACHED*/
-               }
-               break;
-           }
-       }
-       if (line[0] == 0)
-           break;
-       makeargv();
-       if (margv[0] == 0) {
-           break;
-       }
-       c = getcmd(margv[0]);
-       if (Ambiguous((void *)c)) {
-           printf("?Ambiguous command\n");
-           continue;
-       }
-       if (c == 0) {
-           printf("?Invalid command\n");
-           continue;
-       }
-       if (c->needconnect && !connected) {
-           printf("?Need to be connected first.\n");
-           continue;
-       }
-       if ((*c->handler)(margc, margv)) {
-           break;
-       }
-    }
-    if (!top) {
-       if (!connected) {
-           longjmp(toplevel, 1);
-           /*NOTREACHED*/
-       }
-       setconnmode(0);
-    }
-}
-\f
-/*
- * Help command.
- */
-static int
-help(int argc, char *argv[])
-{
-       Command *c;
-
-       if (argc == 1) {
-               printf("Commands may be abbreviated.  Commands are:\n\n");
-               for (c = cmdtab; c->name; c++)
-                       if (c->help) {
-                               printf("%-*s\t%s\n", (int)HELPINDENT, c->name,
-                                                                   c->help);
-                       }
-               return 0;
-       }
-       else while (--argc > 0) {
-               char *arg;
-               arg = *++argv;
-               c = getcmd(arg);
-               if (Ambiguous((void *)c))
-                       printf("?Ambiguous help command %s\n", arg);
-               else if (c == (Command *)0)
-                       printf("?Invalid help command %s\n", arg);
-               else
-                       printf("%s\n", c->help);
-       }
-       return 0;
-}
-
-static char *rcname = 0;
-static char rcbuf[128];
-
-void
-cmdrc(char *m1, char *m2)
-{
-    Command *c;
-    FILE *rcfile;
-    int gotmachine = 0;
-    int l1 = strlen(m1);
-    int l2 = strlen(m2);
-    char m1save[MAXHOSTNAMELEN];
-
-    if (skiprc)
-       return;
-
-    strlcpy(m1save, m1, sizeof(m1save));
-    m1 = m1save;
-
-    if (rcname == 0) {
-       rcname = getenv("HOME");
-       if (rcname && (strlen(rcname) + 10) < sizeof(rcbuf))
-           strcpy(rcbuf, rcname);
-       else
-           rcbuf[0] = '\0';
-       strcat(rcbuf, "/.telnetrc");
-       rcname = rcbuf;
-    }
-
-    if ((rcfile = fopen(rcname, "r")) == 0) {
-       return;
-    }
-
-    for (;;) {
-       if (fgets(line, sizeof(line), rcfile) == NULL)
-           break;
-       if (line[0] == 0)
-           break;
-       if (line[0] == '#')
-           continue;
-       if (gotmachine) {
-           if (!isspace(line[0]))
-               gotmachine = 0;
-       }
-       if (gotmachine == 0) {
-           if (isspace(line[0]))
-               continue;
-           if (strncasecmp(line, m1, l1) == 0)
-               strncpy(line, &line[l1], sizeof(line) - l1);
-           else if (strncasecmp(line, m2, l2) == 0)
-               strncpy(line, &line[l2], sizeof(line) - l2);
-           else if (strncasecmp(line, "DEFAULT", 7) == 0)
-               strncpy(line, &line[7], sizeof(line) - 7);
-           else
-               continue;
-           if (line[0] != ' ' && line[0] != '\t' && line[0] != '\n')
-               continue;
-           gotmachine = 1;
-       }
-       makeargv();
-       if (margv[0] == 0)
-           continue;
-       c = getcmd(margv[0]);
-       if (Ambiguous((void *)c)) {
-           printf("?Ambiguous command: %s\n", margv[0]);
-           continue;
-       }
-       if (c == 0) {
-           printf("?Invalid command: %s\n", margv[0]);
-           continue;
-       }
-       /*
-        * This should never happen...
-        */
-       if (c->needconnect && !connected) {
-           printf("?Need to be connected first for %s.\n", margv[0]);
-           continue;
-       }
-       (*c->handler)(margc, margv);
-    }
-    fclose(rcfile);
-}
-
-/*
- * Source route is handed in as
- *     [!]@hop1@hop2...[@|:]dst
- * If the leading ! is present, it is a
- * strict source route, otherwise it is
- * assmed to be a loose source route.
- *
- * We fill in the source route option as
- *     hop1,hop2,hop3...dest
- * and return a pointer to hop1, which will
- * be the address to connect() to.
- *
- * Arguments:
- *
- *     res:    ponter to addrinfo structure which contains sockaddr to
- *             the host to connect to.
- *
- *     arg:    pointer to route list to decipher
- *
- *     cpp:    If *cpp is not equal to NULL, this is a
- *             pointer to a pointer to a character array
- *             that should be filled in with the option.
- *
- *     lenp:   pointer to an integer that contains the
- *             length of *cpp if *cpp != NULL.
- *
- *     protop: pointer to an integer that should be filled in with
- *             appropriate protocol for setsockopt, as socket 
- *             protocol family.
- *
- *     optp:   pointer to an integer that should be filled in with
- *             appropriate option for setsockopt, as socket protocol
- *             family.
- *
- * Return values:
- *
- *     If the return value is 1, then all operations are
- *     successful. If the
- *     return value is -1, there was a syntax error in the
- *     option, either unknown characters, or too many hosts.
- *     If the return value is 0, one of the hostnames in the
- *     path is unknown, and *cpp is set to point to the bad
- *     hostname.
- *
- *     *cpp:   If *cpp was equal to NULL, it will be filled
- *             in with a pointer to our static area that has
- *             the option filled in.  This will be 32bit aligned.
- *
- *     *lenp:  This will be filled in with how long the option
- *             pointed to by *cpp is.
- *
- *     *protop: This will be filled in with appropriate protocol for
- *              setsockopt, as socket protocol family.
- *
- *     *optp:  This will be filled in with appropriate option for
- *             setsockopt, as socket protocol family.
- */
-static int
-sourceroute(struct addrinfo *ai, char *arg, char **cpp, int *lenp, int *protop, int *optp)
-{
-       static char buf[1024 + ALIGNBYTES];     /*XXX*/
-       char *cp, *cp2, *lsrp, *ep;
-       struct sockaddr_in *_sin;
-#ifdef INET6
-       struct sockaddr_in6 *sin6;
-       struct cmsghdr *cmsg;
-#endif
-       struct addrinfo hints, *res;
-       int error;
-       char c;
-
-       /*
-        * Verify the arguments, and make sure we have
-        * at least 7 bytes for the option.
-        */
-       if (cpp == NULL || lenp == NULL)
-               return -1;
-       if (*cpp != NULL) {
-               switch (res->ai_family) {
-               case AF_INET:
-                       if (*lenp < 7)
-                               return -1;
-                       break;
-#ifdef INET6
-               case AF_INET6:
-                       if (*lenp < (int)CMSG_SPACE(sizeof(struct ip6_rthdr) +
-                                              sizeof(struct in6_addr)))
-                               return -1;
-                       break;
-#endif
-               }
-       }
-       /*
-        * Decide whether we have a buffer passed to us,
-        * or if we need to use our own static buffer.
-        */
-       if (*cpp) {
-               lsrp = *cpp;
-               ep = lsrp + *lenp;
-       } else {
-               *cpp = lsrp = (char *)ALIGN(buf);
-               ep = lsrp + 1024;
-       }
-
-       cp = arg;
-
-#ifdef INET6
-       if (ai->ai_family == AF_INET6) {
-               cmsg = NULL;
-               if (*cp != '@')
-                       return -1;
-               *protop = IPPROTO_IPV6;
-               *optp = IPV6_PKTOPTIONS;
-       } else
-#endif
-      {
-       /*
-        * Next, decide whether we have a loose source
-        * route or a strict source route, and fill in
-        * the begining of the option.
-        */
-       if (*cp == '!') {
-               cp++;
-               *lsrp++ = IPOPT_SSRR;
-       } else
-               *lsrp++ = IPOPT_LSRR;
-
-       if (*cp != '@')
-               return -1;
-
-       lsrp++;         /* skip over length, we'll fill it in later */
-       *lsrp++ = 4;
-       *protop = IPPROTO_IP;
-       *optp = IP_OPTIONS;
-      }
-
-       cp++;
-       memset(&hints, 0, sizeof(hints));
-       hints.ai_family = ai->ai_family;
-       hints.ai_socktype = SOCK_STREAM;
-       for (c = 0;;) {
-               if (
-#ifdef INET6
-                   ai->ai_family != AF_INET6 &&
-#endif
-                   c == ':')
-                       cp2 = 0;
-               else for (cp2 = cp; (c = *cp2); cp2++) {
-                       if (c == ',') {
-                               *cp2++ = '\0';
-                               if (*cp2 == '@')
-                                       cp2++;
-                       } else if (c == '@') {
-                               *cp2++ = '\0';
-                       } else if (
-#ifdef INET6
-                                  ai->ai_family != AF_INET6 &&
-#endif
-                                  c == ':') {
-                               *cp2++ = '\0';
-                       } else
-                               continue;
-                       break;
-               }
-               if (!c)
-                       cp2 = 0;
-
-               hints.ai_flags = AI_NUMERICHOST;
-               error = getaddrinfo(cp, NULL, &hints, &res);
-               if (error == EAI_NODATA) {
-                       hints.ai_flags = 0;
-                       error = getaddrinfo(cp, NULL, &hints, &res);
-               }
-               if (error != 0) {
-                       fprintf(stderr, "%s: %s\n", cp, gai_strerror(error));
-                       if (error == EAI_SYSTEM)
-                               fprintf(stderr, "%s: %s\n", cp,
-                                       strerror(errno));
-                       *cpp = cp;
-                       return(0);
-               }
-#ifdef INET6
-               if (res->ai_family == AF_INET6) {
-                       sin6 = (struct sockaddr_in6 *)res->ai_addr;
-               } else
-#endif
-             {
-               _sin = (struct sockaddr_in *)res->ai_addr;
-               memcpy(lsrp, (char *)&_sin->sin_addr, 4);
-               lsrp += 4;
-             }
-               if (cp2)
-                       cp = cp2;
-               else
-                       break;
-               /*
-                * Check to make sure there is space for next address
-                */
-#ifdef INET6
-               if (res->ai_family == AF_INET6) {
-                       if (((char *)CMSG_DATA(cmsg) +
-                            sizeof(struct ip6_rthdr)) > ep)
-                       return -1;
-               } else
-#endif
-               if (lsrp + 4 > ep)
-                       return -1;
-               freeaddrinfo(res);
-       }
-#ifdef INET6
-       if (res->ai_family == AF_INET6) {
-               *lenp = 0;
-       } else
-#endif
-      {
-       if ((*(*cpp+IPOPT_OLEN) = lsrp - *cpp) <= 7) {
-               *cpp = 0;
-               *lenp = 0;
-               return -1;
-       }
-       *lsrp++ = IPOPT_NOP; /* 32 bit word align it */
-       *lenp = lsrp - *cpp;
-      }
-       freeaddrinfo(res);
-       return 1;
-}
diff --git a/crypto/telnet/telnet/defines.h b/crypto/telnet/telnet/defines.h
deleted file mode 100644 (file)
index 9d1cd41..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- *     @(#)defines.h   8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/crypto/telnet/telnet/defines.h,v 1.1.1.1.8.1 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/defines.h,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#define        settimer(x)     clocks.x = clocks.system++
-
-#define        NETADD(c)       { *netoring.supply = c; ring_supplied(&netoring, 1); }
-#define        NET2ADD(c1,c2)  { NETADD(c1); NETADD(c2); }
-#define        NETBYTES()      (ring_full_count(&netoring))
-#define        NETROOM()       (ring_empty_count(&netoring))
-
-#define        TTYADD(c)       if (!(SYNCHing||flushout)) { \
-                               *ttyoring.supply = c; \
-                               ring_supplied(&ttyoring, 1); \
-                       }
-#define        TTYBYTES()      (ring_full_count(&ttyoring))
-#define        TTYROOM()       (ring_empty_count(&ttyoring))
-
-/*     Various modes */
-#define        MODE_LOCAL_CHARS(m)     ((m)&(MODE_EDIT|MODE_TRAPSIG))
-#define        MODE_LOCAL_ECHO(m)      ((m)&MODE_ECHO)
-#define        MODE_COMMAND_LINE(m)    ((m)==-1)
-
-#define        CONTROL(x)      ((x)&0x1f)              /* CTRL(x) is not portable */
diff --git a/crypto/telnet/telnet/externs.h b/crypto/telnet/telnet/externs.h
deleted file mode 100644 (file)
index 9cdbd2d..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- *     @(#)externs.h   8.3 (Berkeley) 5/30/95
- *     $FreeBSD: src/crypto/telnet/telnet/externs.h,v 1.4.2.2 2002/04/13 10:59:08 markm Exp $
- *     $DragonFly: src/crypto/telnet/telnet/externs.h,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#ifndef        BSD
-# define BSD 43
-#endif
-
-/*
- * ucb stdio.h defines BSD as something weird
- */
-#if defined(sun) && defined(__svr4__)
-#define BSD 43
-#endif
-
-#ifndef        USE_TERMIO
-# if BSD > 43 || defined(SYSV_TERMIO)
-#  define USE_TERMIO
-# endif
-#endif
-
-#include <stdio.h>
-#include <setjmp.h>
-#include <sys/ioctl.h>
-#include <errno.h>
-#ifdef USE_TERMIO
-# ifndef       VINTR
-#  include <sys/termios.h>
-# endif
-# define termio termios
-#endif
-#if defined(NO_CC_T) || !defined(USE_TERMIO)
-# if !defined(USE_TERMIO)
-typedef char cc_t;
-# else
-typedef unsigned char cc_t;
-# endif
-#endif
-
-#include <string.h>
-
-#if defined(IPSEC)
-#include <netinet6/ipsec.h>
-#if defined(IPSEC_POLICY_IPSEC)
-extern char *ipsec_policy_in;
-extern char *ipsec_policy_out;
-#endif
-#endif
-
-#ifndef        _POSIX_VDISABLE
-# ifdef sun
-#  include <sys/param.h>       /* pick up VDISABLE definition, mayby */
-# endif
-# ifdef VDISABLE
-#  define _POSIX_VDISABLE VDISABLE
-# else
-#  define _POSIX_VDISABLE ((cc_t)'\377')
-# endif
-#endif
-
-#define        SUBBUFSIZE      256
-
-#if    !defined(P)
-# ifdef        __STDC__
-#  define      P(x)    x
-# else
-#  define      P(x)    ()
-# endif
-#endif
-
-extern int
-    autologin,         /* Autologin enabled */
-    skiprc,            /* Don't process the ~/.telnetrc file */
-    eight,             /* use eight bit mode (binary in and/or out */
-    family,            /* address family of peer */
-    flushout,          /* flush output */
-    connected,         /* Are we connected to the other side? */
-    globalmode,                /* Mode tty should be in */
-    telnetport,                /* Are we connected to the telnet port? */
-    localflow,         /* Flow control handled locally */
-    restartany,                /* If flow control, restart output on any character */
-    localchars,                /* we recognize interrupt/quit */
-    donelclchars,      /* the user has set "localchars" */
-    showoptions,
-    net,               /* Network file descriptor */
-    tin,               /* Terminal input file descriptor */
-    tout,              /* Terminal output file descriptor */
-    crlf,              /* Should '\r' be mapped to <CR><LF> (or <CR><NUL>)? */
-    autoflush,         /* flush output when interrupting? */
-    autosynch,         /* send interrupt characters with SYNCH? */
-    SYNCHing,          /* Is the stream in telnet SYNCH mode? */
-    donebinarytoggle,  /* the user has put us in binary */
-    dontlecho,         /* do we suppress local echoing right now? */
-    crmod,
-    netdata,           /* Print out network data flow */
-    prettydump,                /* Print "netdata" output in user readable format */
-    termdata,          /* Print out terminal data flow */
-    debug,             /* Debug level */
-    doaddrlookup,      /* do a reverse lookup? */
-    clienteof;         /* Client received EOF */
-
-extern cc_t escape;    /* Escape to command mode */
-extern cc_t rlogin;    /* Rlogin mode escape character */
-#ifdef KLUDGELINEMODE
-extern cc_t echoc;     /* Toggle local echoing */
-#endif
-
-extern char
-    *prompt;           /* Prompt for command. */
-
-extern char
-    doopt[],
-    dont[],
-    will[],
-    wont[],
-    options[],         /* All the little options */
-    *hostname;         /* Who are we connected to? */
-#ifdef ENCRYPTION
-extern void (*encrypt_output)(unsigned char *, int);
-extern int (*decrypt_input)(int);
-#endif /* ENCRYPTION */
-
-/*
- * We keep track of each side of the option negotiation.
- */
-
-#define        MY_STATE_WILL           0x01
-#define        MY_WANT_STATE_WILL      0x02
-#define        MY_STATE_DO             0x04
-#define        MY_WANT_STATE_DO        0x08
-
-/*
- * Macros to check the current state of things
- */
-
-#define        my_state_is_do(opt)             (options[opt]&MY_STATE_DO)
-#define        my_state_is_will(opt)           (options[opt]&MY_STATE_WILL)
-#define my_want_state_is_do(opt)       (options[opt]&MY_WANT_STATE_DO)
-#define my_want_state_is_will(opt)     (options[opt]&MY_WANT_STATE_WILL)
-
-#define        my_state_is_dont(opt)           (!my_state_is_do(opt))
-#define        my_state_is_wont(opt)           (!my_state_is_will(opt))
-#define my_want_state_is_dont(opt)     (!my_want_state_is_do(opt))
-#define my_want_state_is_wont(opt)     (!my_want_state_is_will(opt))
-
-#define        set_my_state_do(opt)            {options[opt] |= MY_STATE_DO;}
-#define        set_my_state_will(opt)          {options[opt] |= MY_STATE_WILL;}
-#define        set_my_want_state_do(opt)       {options[opt] |= MY_WANT_STATE_DO;}
-#define        set_my_want_state_will(opt)     {options[opt] |= MY_WANT_STATE_WILL;}
-
-#define        set_my_state_dont(opt)          {options[opt] &= ~MY_STATE_DO;}
-#define        set_my_state_wont(opt)          {options[opt] &= ~MY_STATE_WILL;}
-#define        set_my_want_state_dont(opt)     {options[opt] &= ~MY_WANT_STATE_DO;}
-#define        set_my_want_state_wont(opt)     {options[opt] &= ~MY_WANT_STATE_WILL;}
-
-/*
- * Make everything symetrical
- */
-
-#define        HIS_STATE_WILL                  MY_STATE_DO
-#define        HIS_WANT_STATE_WILL             MY_WANT_STATE_DO
-#define HIS_STATE_DO                   MY_STATE_WILL
-#define HIS_WANT_STATE_DO              MY_WANT_STATE_WILL
-
-#define        his_state_is_do                 my_state_is_will
-#define        his_state_is_will               my_state_is_do
-#define his_want_state_is_do           my_want_state_is_will
-#define his_want_state_is_will         my_want_state_is_do
-
-#define        his_state_is_dont               my_state_is_wont
-#define        his_state_is_wont               my_state_is_dont
-#define his_want_state_is_dont         my_want_state_is_wont
-#define his_want_state_is_wont         my_want_state_is_dont
-
-#define        set_his_state_do                set_my_state_will
-#define        set_his_state_will              set_my_state_do
-#define        set_his_want_state_do           set_my_want_state_will
-#define        set_his_want_state_will         set_my_want_state_do
-
-#define        set_his_state_dont              set_my_state_wont
-#define        set_his_state_wont              set_my_state_dont
-#define        set_his_want_state_dont         set_my_want_state_wont
-#define        set_his_want_state_wont         set_my_want_state_dont
-
-#if    defined(USE_TERMIO)
-#define        SIG_FUNC_RET    void
-#else
-#define        SIG_FUNC_RET    int
-#endif
-
-#ifdef SIGINFO
-extern SIG_FUNC_RET
-    ayt_status(void);
-#endif
-
-extern FILE
-    *NetTrace;         /* Where debugging output goes */
-extern unsigned char
-    NetTraceFile[];    /* Name of file where debugging output goes */
-extern void
-    SetNetTrace(char *);       /* Function to change where debugging goes */
-
-extern jmp_buf
-    peerdied,
-    toplevel;          /* For error conditions. */
-
-extern void
-    command(int, const char *, int),
-    Dump(char, unsigned char *, int),
-    env_init(void),
-    Exit(int),
-    ExitString(const char *, int),
-    init_network(void),
-    init_sys(void),
-    init_telnet(void),
-    init_terminal(void),
-    intp(void),
-    optionstatus(void),
-    printoption(const char *, int, int),
-    printsub(char, unsigned char *, int),
-    quit(void),
-    sendabort(void),
-    sendbrk(void),
-    sendeof(void),
-    sendsusp(void),
-    sendnaws(void),
-    sendayt(void),
-    setconnmode(int),
-    setcommandmode(void),
-    set_escape_char(char *s),
-    setneturg(void),
-    sys_telnet_init(void),
-    telnet(char *),
-    tel_enter_binary(int),
-    tel_leave_binary(int),
-    TerminalFlushOutput(void),
-    TerminalNewMode(int),
-    TerminalRestoreState(void),
-    TerminalSaveState(void),
-    TerminalDefaultChars(void),
-    TerminalSpeeds(long *, long *),
-    tninit(void),
-    upcase(char *),
-    willoption(int),
-    wontoption(int);
-
-extern void
-    send_do(int, int),
-    send_dont(int, int),
-    send_will(int, int),
-    send_wont(int, int);
-
-extern void
-    lm_will(unsigned char *, int),
-    lm_wont(unsigned char *, int),
-    lm_do(unsigned char *, int),
-    lm_dont(unsigned char *, int),
-    lm_mode(unsigned char *, int, int);
-
-extern void
-    slc_init(void),
-    slcstate(void),
-    slc_mode_export(void),
-    slc_mode_import(int),
-    slc_import(int),
-    slc_export(void),
-    slc(unsigned char *, int),
-    slc_check(void),
-    slc_start_reply(void),
-    slc_add_reply(unsigned char, unsigned char, cc_t),
-    slc_end_reply(void);
-extern int
-    getconnmode(void),
-    opt_welldefined(const char *),
-    NetClose(int),
-    netflush(void),
-    process_rings(int, int, int, int, int, int),
-    rlogin_susp(void),
-    SetSockOpt(int, int, int, int),
-    slc_update(void),
-    stilloob(void),
-    telrcv(void),
-    TerminalRead(char *, int),
-    TerminalWrite(char *, int),
-    TerminalAutoFlush(void),
-    TerminalWindowSize(long *, long *),
-    TerminalSpecialChars(int),
-    tn(int, char **),
-    ttyflush(int);
-
-extern void
-    env_opt(unsigned char *, int),
-    env_opt_start(void),
-    env_opt_start_info(void),
-    env_opt_add(unsigned char *),
-    env_opt_end(int);
-
-extern unsigned char
-    *env_default(int, int),
-    *env_getvalue(const unsigned char *);
-
-extern int
-    get_status(char *),
-    dosynch(char *);
-
-extern cc_t
-    *tcval(int);
-
-#ifndef        USE_TERMIO
-
-extern struct  tchars ntc;
-extern struct  ltchars nltc;
-extern struct  sgttyb nttyb;
-
-# define termEofChar           ntc.t_eofc
-# define termEraseChar         nttyb.sg_erase
-# define termFlushChar         nltc.t_flushc
-# define termIntChar           ntc.t_intrc
-# define termKillChar          nttyb.sg_kill
-# define termLiteralNextChar   nltc.t_lnextc
-# define termQuitChar          ntc.t_quitc
-# define termSuspChar          nltc.t_suspc
-# define termRprntChar         nltc.t_rprntc
-# define termWerasChar         nltc.t_werasc
-# define termStartChar         ntc.t_startc
-# define termStopChar          ntc.t_stopc
-# define termForw1Char         ntc.t_brkc
-extern cc_t termForw2Char;
-extern cc_t termAytChar;
-
-# define termEofCharp          (cc_t *)&ntc.t_eofc
-# define termEraseCharp                (cc_t *)&nttyb.sg_erase
-# define termFlushCharp                (cc_t *)&nltc.t_flushc
-# define termIntCharp          (cc_t *)&ntc.t_intrc
-# define termKillCharp         (cc_t *)&nttyb.sg_kill
-# define termLiteralNextCharp  (cc_t *)&nltc.t_lnextc
-# define termQuitCharp         (cc_t *)&ntc.t_quitc
-# define termSuspCharp         (cc_t *)&nltc.t_suspc
-# define termRprntCharp                (cc_t *)&nltc.t_rprntc
-# define termWerasCharp                (cc_t *)&nltc.t_werasc
-# define termStartCharp                (cc_t *)&ntc.t_startc
-# define termStopCharp         (cc_t *)&ntc.t_stopc
-# define termForw1Charp                (cc_t *)&ntc.t_brkc
-# define termForw2Charp                (cc_t *)&termForw2Char
-# define termAytCharp          (cc_t *)&termAytChar
-
-# else
-
-extern struct  termio new_tc;
-
-# define termEofChar           new_tc.c_cc[VEOF]
-# define termEraseChar         new_tc.c_cc[VERASE]
-# define termIntChar           new_tc.c_cc[VINTR]
-# define termKillChar          new_tc.c_cc[VKILL]
-# define termQuitChar          new_tc.c_cc[VQUIT]
-
-# ifndef       VSUSP
-extern cc_t termSuspChar;
-# else
-#  define termSuspChar         new_tc.c_cc[VSUSP]
-# endif
-# if   defined(VFLUSHO) && !defined(VDISCARD)
-#  define VDISCARD VFLUSHO
-# endif
-# ifndef       VDISCARD
-extern cc_t termFlushChar;
-# else
-#  define termFlushChar                new_tc.c_cc[VDISCARD]
-# endif
-# ifndef VWERASE
-extern cc_t termWerasChar;
-# else
-#  define termWerasChar                new_tc.c_cc[VWERASE]
-# endif
-# ifndef       VREPRINT
-extern cc_t termRprntChar;
-# else
-#  define termRprntChar                new_tc.c_cc[VREPRINT]
-# endif
-# ifndef       VLNEXT
-extern cc_t termLiteralNextChar;
-# else
-#  define termLiteralNextChar  new_tc.c_cc[VLNEXT]
-# endif
-# ifndef       VSTART
-extern cc_t termStartChar;
-# else
-#  define termStartChar                new_tc.c_cc[VSTART]
-# endif
-# ifndef       VSTOP
-extern cc_t termStopChar;
-# else
-#  define termStopChar         new_tc.c_cc[VSTOP]
-# endif
-# ifndef       VEOL
-extern cc_t termForw1Char;
-# else
-#  define termForw1Char                new_tc.c_cc[VEOL]
-# endif
-# ifndef       VEOL2
-extern cc_t termForw2Char;
-# else
-#  define termForw2Char                new_tc.c_cc[VEOL]
-# endif
-# ifndef       VSTATUS
-extern cc_t termAytChar;
-#else
-#  define termAytChar          new_tc.c_cc[VSTATUS]
-#endif
-
-# if defined(__STDC__)
-#  define termEofCharp         &termEofChar
-#  define termEraseCharp       &termEraseChar
-#  define termIntCharp         &termIntChar
-#  define termKillCharp                &termKillChar
-#  define termQuitCharp                &termQuitChar
-#  define termSuspCharp                &termSuspChar
-#  define termFlushCharp       &termFlushChar
-#  define termWerasCharp       &termWerasChar
-#  define termRprntCharp       &termRprntChar
-#  define termLiteralNextCharp &termLiteralNextChar
-#  define termStartCharp       &termStartChar
-#  define termStopCharp                &termStopChar
-#  define termForw1Charp       &termForw1Char
-#  define termForw2Charp       &termForw2Char
-#  define termAytCharp         &termAytChar
-# else
-       /* Work around a compiler bug */
-#  define termEofCharp         0
-#  define termEraseCharp       0
-#  define termIntCharp         0
-#  define termKillCharp                0
-#  define termQuitCharp                0
-#  define termSuspCharp                0
-#  define termFlushCharp       0
-#  define termWerasCharp       0
-#  define termRprntCharp       0
-#  define termLiteralNextCharp 0
-#  define termStartCharp       0
-#  define termStopCharp                0
-#  define termForw1Charp       0
-#  define termForw2Charp       0
-#  define termAytCharp         0
-# endif
-#endif
-
-
-/* Ring buffer structures which are shared */
-
-extern Ring
-    netoring,
-    netiring,
-    ttyoring,
-    ttyiring;
-
-extern void
-    xmitAO(void),
-    xmitEC(void),
-    xmitEL(void);
diff --git a/crypto/telnet/telnet/fdset.h b/crypto/telnet/telnet/fdset.h
deleted file mode 100644 (file)
index 045bb72..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- *     @(#)fdset.h     8.1 (Berkeley) 6/6/93
- */
-
-/*
- * The following is defined just in case someone should want to run
- * this telnet on a 4.2 system.
- *
- */
-
-#ifndef        FD_SETSIZE
-
-#define        FD_SET(n, p)    ((p)->fds_bits[0] |= (1<<(n)))
-#define        FD_CLR(n, p)    ((p)->fds_bits[0] &= ~(1<<(n)))
-#define        FD_ISSET(n, p)  ((p)->fds_bits[0] & (1<<(n)))
-#define FD_ZERO(p)     ((p)->fds_bits[0] = 0)
-
-#endif
diff --git a/crypto/telnet/telnet/general.h b/crypto/telnet/telnet/general.h
deleted file mode 100644 (file)
index 4efa951..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- *     @(#)general.h   8.1 (Berkeley) 6/6/93
- */
-
-/*
- * Some general definitions.
- */
-
-
-#define        numberof(x)     (sizeof x/sizeof x[0])
-#define        highestof(x)    (numberof(x)-1)
-
-#define        ClearElement(x)         memset((char *)&x, 0, sizeof x)
-#define        ClearArray(x)           memset((char *)x, 0, sizeof x)
diff --git a/crypto/telnet/telnet/main.c b/crypto/telnet/telnet/main.c
deleted file mode 100644 (file)
index 55b37ac..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- * @(#)main.c  8.3 (Berkeley) 5/30/95
- * $FreeBSD: src/crypto/telnet/telnet/main.c,v 1.4.2.5 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/main.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "ring.h"
-#include "externs.h"
-#include "defines.h"
-
-#ifdef AUTHENTICATION
-#include <libtelnet/auth.h>
-#endif
-#ifdef ENCRYPTION
-#include <libtelnet/encrypt.h>
-#endif
-
-/* These values need to be the same as defined in libtelnet/kerberos5.c */
-/* Either define them in both places, or put in some common header file. */
-#define OPTS_FORWARD_CREDS     0x00000002
-#define OPTS_FORWARDABLE_CREDS 0x00000001
-
-#if 0
-#define FORWARD
-#endif
-
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-char *ipsec_policy_in = NULL;
-char *ipsec_policy_out = NULL;
-#endif
-
-int family = AF_UNSPEC;
-
-/*
- * Initialize variables.
- */
-void
-tninit(void)
-{
-    init_terminal();
-
-    init_network();
-
-    init_telnet();
-
-    init_sys();
-}
-
-static void
-usage(void)
-{
-       fprintf(stderr, "Usage: %s %s%s%s%s\n",
-           prompt,
-#ifdef AUTHENTICATION
-           "[-4] [-6] [-8] [-E] [-K] [-L] [-N] [-S tos] [-X atype] [-c] [-d]",
-           "\n\t[-e char] [-k realm] [-l user] [-f/-F] [-n tracefile] ",
-#else
-           "[-4] [-6] [-8] [-E] [-L] [-N] [-S tos] [-c] [-d]",
-           "\n\t[-e char] [-l user] [-n tracefile] ",
-#endif
-           "[-r] [-s src_addr] [-u] ",
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-           "[-P policy] "
-#endif
-#ifdef ENCRYPTION
-           "[-y] [host-name [port]]"
-#else  /* ENCRYPTION */
-           "[host-name [port]]"
-#endif /* ENCRYPTION */
-       );
-       exit(1);
-}
-
-/*
- * main.  Parse arguments, invoke the protocol or command parser.
- */
-
-int
-main(int argc, char *argv[])
-{
-       int ch;
-       char *user;
-       char *src_addr = NULL;
-#ifdef FORWARD
-       extern int forward_flags;
-#endif /* FORWARD */
-
-       tninit();               /* Clear out things */
-
-       TerminalSaveState();
-
-       if ((prompt = strrchr(argv[0], '/')))
-               ++prompt;
-       else
-               prompt = argv[0];
-
-       user = NULL;
-
-       rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE;
-#ifdef AUTHENTICATION
-       autologin = 1;
-#else
-       autologin = -1;
-#endif
-
-#ifdef ENCRYPTION
-       encrypt_auto(1);
-       decrypt_auto(1);
-#endif
-
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-#define IPSECOPT       "P:"
-#else
-#define IPSECOPT
-#endif
-       while ((ch = getopt(argc, argv,
-                           "468EKLNS:X:acde:fFk:l:n:rs:t:uxy" IPSECOPT)) != -1)
-#undef IPSECOPT
-       {
-               switch(ch) {
-               case '4':
-                       family = AF_INET;
-                       break;
-#ifdef INET6
-               case '6':
-                       family = AF_INET6;
-                       break;
-#endif
-               case '8':
-                       eight = 3;      /* binary output and input */
-                       break;
-               case 'E':
-                       rlogin = escape = _POSIX_VDISABLE;
-                       break;
-               case 'K':
-#ifdef AUTHENTICATION
-                       autologin = 0;
-#endif
-                       break;
-               case 'L':
-                       eight |= 2;     /* binary output only */
-                       break;
-               case 'N':
-                       doaddrlookup = 0;
-                       break;
-               case 'S':
-                   {
-#ifdef HAS_GETTOS
-                       extern int tos;
-
-                       if ((tos = parsetos(optarg, "tcp")) < 0)
-                               fprintf(stderr, "%s%s%s%s\n",
-                                       prompt, ": Bad TOS argument '",
-                                       optarg,
-                                       "; will try to use default TOS");
-#else
-                       fprintf(stderr,
-                          "%s: Warning: -S ignored, no parsetos() support.\n",
-                                                               prompt);
-#endif
-                   }
-                       break;
-               case 'X':
-#ifdef AUTHENTICATION
-                       auth_disable_name(optarg);
-#endif
-                       break;
-               case 'a':
-#ifdef AUTHENTICATION
-                       /* It's the default now, so ignore */
-#else
-                       autologin = 1;
-#endif
-                       break;
-               case 'c':
-                       skiprc = 1;
-                       break;
-               case 'd':
-                       debug = 1;
-                       break;
-               case 'e':
-                       set_escape_char(optarg);
-                       break;
-               case 'f':
-#ifdef AUTHENTICATION
-#if defined(KRB5) && defined(FORWARD)
-                       if (forward_flags & OPTS_FORWARD_CREDS) {
-                           fprintf(stderr,
-                                   "%s: Only one of -f and -F allowed.\n",
-                                   prompt);
-                           usage();
-                       }
-                       forward_flags |= OPTS_FORWARD_CREDS;
-#else
-                       fprintf(stderr,
-                        "%s: Warning: -f ignored, no Kerberos V5 support.\n",
-                               prompt);
-#endif
-#else
-                       fprintf(stderr,
-                        "%s: Warning: -f ignored, no Kerberos V5 support.\n",
-                               prompt);
-#endif
-                       break;
-               case 'F':
-#ifdef AUTHENTICATION
-#if defined(KRB5) && defined(FORWARD)
-                       if (forward_flags & OPTS_FORWARD_CREDS) {
-                           fprintf(stderr,
-                                   "%s: Only one of -f and -F allowed.\n",
-                                   prompt);
-                           usage();
-                       }
-                       forward_flags |= OPTS_FORWARD_CREDS;
-                       forward_flags |= OPTS_FORWARDABLE_CREDS;
-#else
-                       fprintf(stderr,
-                        "%s: Warning: -F ignored, no Kerberos V5 support.\n",
-                               prompt);
-#endif
-#else
-                       fprintf(stderr,
-                        "%s: Warning: -F ignored, no Kerberos V5 support.\n",
-                               prompt);
-#endif
-                       break;
-               case 'k':
-#ifdef AUTHENTICATION
-#if defined(KRB4)
-                   {
-                       extern char *dest_realm, dst_realm_buf[], dst_realm_sz;
-                       dest_realm = dst_realm_buf;
-                       (void)strncpy(dest_realm, optarg, dst_realm_sz);
-                   }
-#else
-                       fprintf(stderr,
-                          "%s: Warning: -k ignored, no Kerberos V4 support.\n",
-                                                               prompt);
-#endif
-#else
-                       fprintf(stderr,
-                          "%s: Warning: -k ignored, no Kerberos V4 support.\n",
-                                                               prompt);
-#endif
-                       break;
-               case 'l':
-#ifdef AUTHENTICATION
-                       /* This is the default now, so ignore it */
-#else
-                       autologin = 1;
-#endif
-                       user = optarg;
-                       break;
-               case 'n':
-                               SetNetTrace(optarg);
-                       break;
-               case 'r':
-                       rlogin = '~';
-                       break;
-               case 's':
-                       src_addr = optarg;
-                       break;
-               case 'u':
-                       family = AF_UNIX;
-                       break;
-               case 'x':
-#ifndef        ENCRYPTION
-                       fprintf(stderr,
-                           "%s: Warning: -x ignored, no ENCRYPT support.\n",
-                                                               prompt);
-#endif /* ENCRYPTION */
-                       break;
-               case 'y':
-#ifdef ENCRYPTION
-                       encrypt_auto(0);
-                       decrypt_auto(0);
-#else
-                       fprintf(stderr,
-                           "%s: Warning: -y ignored, no ENCRYPT support.\n",
-                                                               prompt);
-#endif /* ENCRYPTION */
-                       break;
-#if defined(IPSEC) && defined(IPSEC_POLICY_IPSEC)
-               case 'P':
-                       if (!strncmp("in", optarg, 2))
-                               ipsec_policy_in = strdup(optarg);
-                       else if (!strncmp("out", optarg, 3))
-                               ipsec_policy_out = strdup(optarg);
-                       else
-                               usage();
-                       break;
-#endif
-               case '?':
-               default:
-                       usage();
-                       /* NOTREACHED */
-               }
-       }
-       if (autologin == -1)
-               autologin = (rlogin == _POSIX_VDISABLE) ? 0 : 1;
-
-       argc -= optind;
-       argv += optind;
-
-       if (argc) {
-               char *args[9], **argp = args;
-
-               if (argc > 2)
-                       usage();
-               *argp++ = prompt;
-               if (user) {
-                       *argp++ = strdup("-l");
-                       *argp++ = user;
-               }
-               if (src_addr) {
-                       *argp++ = strdup("-s");
-                       *argp++ = src_addr;
-               }
-               *argp++ = argv[0];              /* host */
-               if (argc > 1)
-                       *argp++ = argv[1];      /* port */
-               *argp = 0;
-
-               if (setjmp(toplevel) != 0)
-                       Exit(0);
-               if (tn(argp - args, args) == 1)
-                       return (0);
-               else
-                       return (1);
-       }
-       (void)setjmp(toplevel);
-       for (;;) {
-                       command(1, 0, 0);
-       }
-       return 0;
-}
diff --git a/crypto/telnet/telnet/network.c b/crypto/telnet/telnet/network.c
deleted file mode 100644 (file)
index 7fe76d1..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- * @(#)network.c       8.2 (Berkeley) 12/15/93
- * $FreeBSD: src/crypto/telnet/telnet/network.c,v 1.2.8.2 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/network.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-
-#include <errno.h>
-
-#include <arpa/telnet.h>
-#include <unistd.h>
-
-#include "ring.h"
-
-#include "defines.h"
-#include "externs.h"
-#include "fdset.h"
-
-Ring           netoring, netiring;
-unsigned char  netobuf[2*BUFSIZ], netibuf[BUFSIZ];
-
-/*
- * Initialize internal network data structures.
- */
-
-void
-init_network(void)
-{
-    if (ring_init(&netoring, netobuf, sizeof netobuf) != 1) {
-       exit(1);
-    }
-    if (ring_init(&netiring, netibuf, sizeof netibuf) != 1) {
-       exit(1);
-    }
-    NetTrace = stdout;
-}
-
-
-/*
- * Check to see if any out-of-band data exists on a socket (for
- * Telnet "synch" processing).
- */
-
-int
-stilloob(void)
-{
-    static struct timeval timeout = { 0, 0 };
-    fd_set     excepts;
-    int value;
-
-    do {
-       FD_ZERO(&excepts);
-       FD_SET(net, &excepts);
-       value = select(net+1, (fd_set *)0, (fd_set *)0, &excepts, &timeout);
-    } while ((value == -1) && (errno == EINTR));
-
-    if (value < 0) {
-       perror("select");
-       (void) quit();
-       /* NOTREACHED */
-    }
-    if (FD_ISSET(net, &excepts)) {
-       return 1;
-    } else {
-       return 0;
-    }
-}
-
-
-/*
- *  setneturg()
- *
- *     Sets "neturg" to the current location.
- */
-
-void
-setneturg(void)
-{
-    ring_mark(&netoring);
-}
-
-
-/*
- *  netflush
- *             Send as much data as possible to the network,
- *     handling requests for urgent data.
- *
- *             The return value indicates whether we did any
- *     useful work.
- */
-
-int
-netflush(void)
-{
-    int n, n1;
-
-#ifdef ENCRYPTION
-    if (encrypt_output)
-       ring_encrypt(&netoring, encrypt_output);
-#endif /* ENCRYPTION */
-    if ((n1 = n = ring_full_consecutive(&netoring)) > 0) {
-       if (!ring_at_mark(&netoring)) {
-           n = send(net, (char *)netoring.consume, n, 0); /* normal write */
-       } else {
-           /*
-            * In 4.2 (and 4.3) systems, there is some question about
-            * what byte in a sendOOB operation is the "OOB" data.
-            * To make ourselves compatible, we only send ONE byte
-            * out of band, the one WE THINK should be OOB (though
-            * we really have more the TCP philosophy of urgent data
-            * rather than the Unix philosophy of OOB data).
-            */
-           n = send(net, (char *)netoring.consume, 1, MSG_OOB);/* URGENT data */
-       }
-    }
-    if (n < 0) {
-       if (errno != ENOBUFS && errno != EWOULDBLOCK) {
-           setcommandmode();
-           perror(hostname);
-           (void)NetClose(net);
-           ring_clear_mark(&netoring);
-           longjmp(peerdied, -1);
-           /*NOTREACHED*/
-       }
-       n = 0;
-    }
-    if (netdata && n) {
-       Dump('>', netoring.consume, n);
-    }
-    if (n) {
-       ring_consumed(&netoring, n);
-       /*
-        * If we sent all, and more to send, then recurse to pick
-        * up the other half.
-        */
-       if ((n1 == n) && ring_full_consecutive(&netoring)) {
-           (void) netflush();
-       }
-       return 1;
-    } else {
-       return 0;
-    }
-}
diff --git a/crypto/telnet/telnet/ring.c b/crypto/telnet/telnet/ring.c
deleted file mode 100644 (file)
index 51be182..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- * @(#)ring.c  8.2 (Berkeley) 5/30/95
- * $FreeBSD: src/crypto/telnet/telnet/ring.c,v 1.2.8.2 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/ring.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-/*
- * This defines a structure for a ring buffer.
- *
- * The circular buffer has two parts:
- *(((
- *     full:   [consume, supply)
- *     empty:  [supply, consume)
- *]]]
- *
- */
-
-#include       <errno.h>
-#include       <stdio.h>
-#include       <string.h>
-
-#ifdef size_t
-#undef size_t
-#endif
-
-#include       <sys/types.h>
-#ifndef        FILIO_H
-#include       <sys/ioctl.h>
-#endif
-#include       <sys/socket.h>
-
-#include       "ring.h"
-#include       "general.h"
-
-/* Internal macros */
-
-#if    !defined(MIN)
-#define        MIN(a,b)        (((a)<(b))? (a):(b))
-#endif /* !defined(MIN) */
-
-#define        ring_subtract(d,a,b)    (((a)-(b) >= 0)? \
-                                       (a)-(b): (((a)-(b))+(d)->size))
-
-#define        ring_increment(d,a,c)   (((a)+(c) < (d)->top)? \
-                                       (a)+(c) : (((a)+(c))-(d)->size))
-
-#define        ring_decrement(d,a,c)   (((a)-(c) >= (d)->bottom)? \
-                                       (a)-(c) : (((a)-(c))-(d)->size))
-
-
-/*
- * The following is a clock, used to determine full, empty, etc.
- *
- * There is some trickiness here.  Since the ring buffers are initialized
- * to ZERO on allocation, we need to make sure, when interpreting the
- * clock, that when the times are EQUAL, then the buffer is FULL.
- */
-static u_long ring_clock = 0;
-
-
-#define        ring_empty(d) (((d)->consume == (d)->supply) && \
-                               ((d)->consumetime >= (d)->supplytime))
-#define        ring_full(d) (((d)->supply == (d)->consume) && \
-                               ((d)->supplytime > (d)->consumetime))
-
-/* Buffer state transition routines */
-
-int
-ring_init(Ring *ring, unsigned char *buffer, int count)
-{
-    memset((char *)ring, 0, sizeof *ring);
-
-    ring->size = count;
-
-    ring->supply = ring->consume = ring->bottom = buffer;
-
-    ring->top = ring->bottom+ring->size;
-
-#ifdef ENCRYPTION
-    ring->clearto = 0;
-#endif /* ENCRYPTION */
-
-    return 1;
-}
-
-/* Mark routines */
-
-/*
- * Mark the most recently supplied byte.
- */
-
-void
-ring_mark(Ring *ring)
-{
-    ring->mark = ring_decrement(ring, ring->supply, 1);
-}
-
-/*
- * Is the ring pointing to the mark?
- */
-
-int
-ring_at_mark(Ring *ring)
-{
-    if (ring->mark == ring->consume) {
-       return 1;
-    } else {
-       return 0;
-    }
-}
-
-/*
- * Clear any mark set on the ring.
- */
-
-void
-ring_clear_mark(Ring *ring)
-{
-    ring->mark = 0;
-}
-
-/*
- * Add characters from current segment to ring buffer.
- */
-void
-ring_supplied(Ring *ring, int count)
-{
-    ring->supply = ring_increment(ring, ring->supply, count);
-    ring->supplytime = ++ring_clock;
-}
-
-/*
- * We have just consumed "c" bytes.
- */
-void
-ring_consumed(Ring *ring, int count)
-{
-    if (count == 0)    /* don't update anything */
-       return;
-
-    if (ring->mark &&
-               (ring_subtract(ring, ring->mark, ring->consume) < count)) {
-       ring->mark = 0;
-    }
-#ifdef ENCRYPTION
-    if (ring->consume < ring->clearto &&
-               ring->clearto <= ring->consume + count)
-       ring->clearto = 0;
-    else if (ring->consume + count > ring->top &&
-               ring->bottom <= ring->clearto &&
-               ring->bottom + ((ring->consume + count) - ring->top))
-       ring->clearto = 0;
-#endif /* ENCRYPTION */
-    ring->consume = ring_increment(ring, ring->consume, count);
-    ring->consumetime = ++ring_clock;
-    /*
-     * Try to encourage "ring_empty_consecutive()" to be large.
-     */
-    if (ring_empty(ring)) {
-       ring->consume = ring->supply = ring->bottom;
-    }
-}
-
-
-
-/* Buffer state query routines */
-
-
-/* Number of bytes that may be supplied */
-int
-ring_empty_count(Ring *ring)
-{
-    if (ring_empty(ring)) {    /* if empty */
-           return ring->size;
-    } else {
-       return ring_subtract(ring, ring->consume, ring->supply);
-    }
-}
-
-/* number of CONSECUTIVE bytes that may be supplied */
-int
-ring_empty_consecutive(Ring *ring)
-{
-    if ((ring->consume < ring->supply) || ring_empty(ring)) {
-                           /*
-                            * if consume is "below" supply, or empty, then
-                            * return distance to the top
-                            */
-       return ring_subtract(ring, ring->top, ring->supply);
-    } else {
-                                   /*
-                                    * else, return what we may.
-                                    */
-       return ring_subtract(ring, ring->consume, ring->supply);
-    }
-}
-
-/* Return the number of bytes that are available for consuming
- * (but don't give more than enough to get to cross over set mark)
- */
-
-int
-ring_full_count(Ring *ring)
-{
-    if ((ring->mark == 0) || (ring->mark == ring->consume)) {
-       if (ring_full(ring)) {
-           return ring->size;  /* nothing consumed, but full */
-       } else {
-           return ring_subtract(ring, ring->supply, ring->consume);
-       }
-    } else {
-       return ring_subtract(ring, ring->mark, ring->consume);
-    }
-}
-
-/*
- * Return the number of CONSECUTIVE bytes available for consuming.
- * However, don't return more than enough to cross over set mark.
- */
-int
-ring_full_consecutive(Ring *ring)
-{
-    if ((ring->mark == 0) || (ring->mark == ring->consume)) {
-       if ((ring->supply < ring->consume) || ring_full(ring)) {
-           return ring_subtract(ring, ring->top, ring->consume);
-       } else {
-           return ring_subtract(ring, ring->supply, ring->consume);
-       }
-    } else {
-       if (ring->mark < ring->consume) {
-           return ring_subtract(ring, ring->top, ring->consume);
-       } else {        /* Else, distance to mark */
-           return ring_subtract(ring, ring->mark, ring->consume);
-       }
-    }
-}
-
-/*
- * Move data into the "supply" portion of of the ring buffer.
- */
-void
-ring_supply_data(Ring *ring, unsigned char *buffer, int count)
-{
-    int i;
-
-    while (count) {
-       i = MIN(count, ring_empty_consecutive(ring));
-       memcpy(ring->supply, buffer, i);
-       ring_supplied(ring, i);
-       count -= i;
-       buffer += i;
-    }
-}
-
-#ifdef ENCRYPTION
-void
-ring_encrypt(Ring *ring, void (*encryptor)(unsigned char *, int))
-{
-    unsigned char *s, *c;
-
-    if (ring_empty(ring) || ring->clearto == ring->supply)
-       return;
-
-    if (!(c = ring->clearto))
-       c = ring->consume;
-
-    s = ring->supply;
-
-    if (s <= c) {
-       (*encryptor)(c, ring->top - c);
-       (*encryptor)(ring->bottom, s - ring->bottom);
-    } else
-       (*encryptor)(c, s - c);
-
-    ring->clearto = ring->supply;
-}
-
-    void
-ring_clearto(ring)
-    Ring *ring;
-{
-    if (!ring_empty(ring))
-       ring->clearto = ring->supply;
-    else
-       ring->clearto = 0;
-}
-#endif /* ENCRYPTION */
diff --git a/crypto/telnet/telnet/ring.h b/crypto/telnet/telnet/ring.h
deleted file mode 100644 (file)
index add544e..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- *     @(#)ring.h      8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/crypto/telnet/telnet/ring.h,v 1.1.1.1.8.1 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/ring.h,v 1.2 2003/06/17 04:24:37 dillon Exp $
- */
-
-#if defined(P)
-# undef P
-#endif
-
-#if defined(__STDC__) || defined(LINT_ARGS)
-# define       P(x)    x
-#else
-# define       P(x)    ()
-#endif
-
-/*
- * This defines a structure for a ring buffer.
- *
- * The circular buffer has two parts:
- *(((
- *     full:   [consume, supply)
- *     empty:  [supply, consume)
- *]]]
- *
- */
-typedef struct {
-    unsigned char      *consume,       /* where data comes out of */
-                       *supply,        /* where data comes in to */
-                       *bottom,        /* lowest address in buffer */
-                       *top,           /* highest address+1 in buffer */
-                       *mark;          /* marker (user defined) */
-#ifdef ENCRYPTION
-    unsigned char      *clearto;       /* Data to this point is clear text */
-    unsigned char      *encryyptedto;  /* Data is encrypted to here */
-#endif /* ENCRYPTION */
-    int                size;           /* size in bytes of buffer */
-    u_long     consumetime,    /* help us keep straight full, empty, etc. */
-               supplytime;
-} Ring;
-
-/* Here are some functions and macros to deal with the ring buffer */
-
-/* Initialization routine */
-extern int
-       ring_init(Ring *ring, unsigned char *buffer, int count);
-
-/* Data movement routines */
-extern void
-       ring_supply_data(Ring *ring, unsigned char *buffer, int count);
-#ifdef notdef
-extern void
-       ring_consume_data(Ring *ring, unsigned char *buffer, int count);
-#endif
-
-/* Buffer state transition routines */
-extern void
-       ring_supplied(Ring *ring, int count),
-       ring_consumed(Ring *ring, int count);
-
-/* Buffer state query routines */
-extern int
-       ring_at_mark(Ring *),
-       ring_empty_count(Ring *ring),
-       ring_empty_consecutive(Ring *ring),
-       ring_full_count(Ring *ring),
-       ring_full_consecutive(Ring *ring);
-
-#ifdef ENCRYPTION
-extern void
-       ring_encrypt(Ring *ring, void (*func)(unsigned char *, int)),
-       ring_clearto(Ring *ring);
-#endif /* ENCRYPTION */
-
-extern void
-       ring_clear_mark(Ring *),
-       ring_mark(Ring *);
diff --git a/crypto/telnet/telnet/sys_bsd.c b/crypto/telnet/telnet/sys_bsd.c
deleted file mode 100644 (file)
index d2d09cb..0000000
+++ /dev/null
@@ -1,1144 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- * @(#)sys_bsd.c       8.4 (Berkeley) 5/30/95
- * $FreeBSD: src/crypto/telnet/telnet/sys_bsd.c,v 1.2.8.4 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/sys_bsd.c,v 1.2 2003/06/17 04:24:37 dillon Exp $
-
- */
-
-#include <sys/cdefs.h>
-#include <stdlib.h>
-#include <err.h>
-
-/*
- * The following routines try to encapsulate what is system dependent
- * (at least between 4.x and dos) which is used in telnet.c.
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <unistd.h>
-#include <arpa/telnet.h>
-
-#include "ring.h"
-#include "fdset.h"
-#include "defines.h"
-#include "externs.h"
-#include "types.h"
-
-int
-       tout,                   /* Output file descriptor */
-       tin,                    /* Input file descriptor */
-       net;
-
-#ifndef        USE_TERMIO
-struct tchars otc = { 0 }, ntc = { 0 };
-struct ltchars oltc = { 0 }, nltc = { 0 };
-struct sgttyb ottyb = { 0 }, nttyb = { 0 };
-int    olmode = 0;
-# define cfgetispeed(ptr)      (ptr)->sg_ispeed
-# define cfgetospeed(ptr)      (ptr)->sg_ospeed
-# define old_tc ottyb
-
-#else  /* USE_TERMIO */
-struct termio old_tc = { 0, 0, 0, 0, {}, 0, 0 };
-
-# ifndef       TCSANOW
-#  ifdef TCSETS
-#   define     TCSANOW         TCSETS
-#   define     TCSADRAIN       TCSETSW
-#   define     tcgetattr(f, t) ioctl(f, TCGETS, (char *)t)
-#  else
-#   ifdef TCSETA
-#    define    TCSANOW         TCSETA
-#    define    TCSADRAIN       TCSETAW
-#    define    tcgetattr(f, t) ioctl(f, TCGETA, (char *)t)
-#   else
-#    define    TCSANOW         TIOCSETA
-#    define    TCSADRAIN       TIOCSETAW
-#    define    tcgetattr(f, t) ioctl(f, TIOCGETA, (char *)t)
-#   endif
-#  endif
-#  define      tcsetattr(f, a, t) ioctl(f, a, (char *)t)
-#  define      cfgetospeed(ptr)        ((ptr)->c_cflag&CBAUD)
-#  ifdef CIBAUD
-#   define     cfgetispeed(ptr)        (((ptr)->c_cflag&CIBAUD) >> IBSHIFT)
-#  else
-#   define     cfgetispeed(ptr)        cfgetospeed(ptr)
-#  endif
-# endif /* TCSANOW */
-# ifdef        sysV88
-# define TIOCFLUSH TC_PX_DRAIN
-# endif
-#endif /* USE_TERMIO */
-
-static fd_set *ibitsp, *obitsp, *xbitsp;
-int fdsn;
-
-#ifdef SIGINT
-static SIG_FUNC_RET intr(int);
-#endif /* SIGINT */
-#ifdef SIGQUIT
-static SIG_FUNC_RET intr2(int);
-#endif /* SIGQUIT */
-#ifdef SIGTSTP
-static SIG_FUNC_RET susp(int);
-#endif /* SIGTSTP */
-#ifdef SIGINFO
-static SIG_FUNC_RET ayt(int);
-#endif
-
-void
-init_sys(void)
-{
-    tout = fileno(stdout);
-    tin = fileno(stdin);
-    errno = 0;
-}
-
-int
-TerminalWrite(char *buf, int n)
-{
-    return write(tout, buf, n);
-}
-
-int
-TerminalRead(char *buf, int n)
-{
-    return read(tin, buf, n);
-}
-
-/*
- *
- */
-
-int
-TerminalAutoFlush(void)
-{
-#if    defined(LNOFLSH)
-    int flush;
-
-    ioctl(0, TIOCLGET, (char *)&flush);
-    return !(flush&LNOFLSH);   /* if LNOFLSH, no autoflush */
-#else  /* LNOFLSH */
-    return 1;
-#endif /* LNOFLSH */
-}
-
-#ifdef KLUDGELINEMODE
-extern int kludgelinemode;
-#endif
-/*
- * TerminalSpecialChars()
- *
- * Look at an input character to see if it is a special character
- * and decide what to do.
- *
- * Output:
- *
- *     0       Don't add this character.
- *     1       Do add this character
- */
-
-int
-TerminalSpecialChars(int c)
-{
-    if (c == termIntChar) {
-       intp();
-       return 0;
-    } else if (c == termQuitChar) {
-#ifdef KLUDGELINEMODE
-       if (kludgelinemode)
-           sendbrk();
-       else
-#endif
-           sendabort();
-       return 0;
-    } else if (c == termEofChar) {
-       if (my_want_state_is_will(TELOPT_LINEMODE)) {
-           sendeof();
-           return 0;
-       }
-       return 1;
-    } else if (c == termSuspChar) {
-       sendsusp();
-       return(0);
-    } else if (c == termFlushChar) {
-       xmitAO();               /* Transmit Abort Output */
-       return 0;
-    } else if (!MODE_LOCAL_CHARS(globalmode)) {
-       if (c == termKillChar) {
-           xmitEL();
-           return 0;
-       } else if (c == termEraseChar) {
-           xmitEC();           /* Transmit Erase Character */
-           return 0;
-       }
-    }
-    return 1;
-}
-
-
-/*
- * Flush output to the terminal
- */
-
-void
-TerminalFlushOutput(void)
-{
-#ifdef TIOCFLUSH
-    (void) ioctl(fileno(stdout), TIOCFLUSH, (char *) 0);
-#else
-    (void) ioctl(fileno(stdout), TCFLSH, (char *) 0);
-#endif
-}
-
-void
-TerminalSaveState(void)
-{
-#ifndef        USE_TERMIO
-    ioctl(0, TIOCGETP, (char *)&ottyb);
-    ioctl(0, TIOCGETC, (char *)&otc);
-    ioctl(0, TIOCGLTC, (char *)&oltc);
-    ioctl(0, TIOCLGET, (char *)&olmode);
-
-    ntc = otc;
-    nltc = oltc;
-    nttyb = ottyb;
-
-#else  /* USE_TERMIO */
-    tcgetattr(0, &old_tc);
-
-    new_tc = old_tc;
-
-#ifndef        VDISCARD
-    termFlushChar = CONTROL('O');
-#endif
-#ifndef        VWERASE
-    termWerasChar = CONTROL('W');
-#endif
-#ifndef        VREPRINT
-    termRprntChar = CONTROL('R');
-#endif
-#ifndef        VLNEXT
-    termLiteralNextChar = CONTROL('V');
-#endif
-#ifndef        VSTART
-    termStartChar = CONTROL('Q');
-#endif
-#ifndef        VSTOP
-    termStopChar = CONTROL('S');
-#endif
-#ifndef        VSTATUS
-    termAytChar = CONTROL('T');
-#endif
-#endif /* USE_TERMIO */
-}
-
-cc_t *
-tcval(int func)
-{
-    switch(func) {
-    case SLC_IP:       return(&termIntChar);
-    case SLC_ABORT:    return(&termQuitChar);
-    case SLC_EOF:      return(&termEofChar);
-    case SLC_EC:       return(&termEraseChar);
-    case SLC_EL:       return(&termKillChar);
-    case SLC_XON:      return(&termStartChar);
-    case SLC_XOFF:     return(&termStopChar);
-    case SLC_FORW1:    return(&termForw1Char);
-#ifdef USE_TERMIO
-    case SLC_FORW2:    return(&termForw2Char);
-# ifdef        VDISCARD
-    case SLC_AO:       return(&termFlushChar);
-# endif
-# ifdef        VSUSP
-    case SLC_SUSP:     return(&termSuspChar);
-# endif
-# ifdef        VWERASE
-    case SLC_EW:       return(&termWerasChar);
-# endif
-# ifdef        VREPRINT
-    case SLC_RP:       return(&termRprntChar);
-# endif
-# ifdef        VLNEXT
-    case SLC_LNEXT:    return(&termLiteralNextChar);
-# endif
-# ifdef        VSTATUS
-    case SLC_AYT:      return(&termAytChar);
-# endif
-#endif
-
-    case SLC_SYNCH:
-    case SLC_BRK:
-    case SLC_EOR:
-    default:
-       return((cc_t *)0);
-    }
-}
-
-void
-TerminalDefaultChars(void)
-{
-#ifndef        USE_TERMIO
-    ntc = otc;
-    nltc = oltc;
-    nttyb.sg_kill = ottyb.sg_kill;
-    nttyb.sg_erase = ottyb.sg_erase;
-#else  /* USE_TERMIO */
-    memcpy(new_tc.c_cc, old_tc.c_cc, sizeof(old_tc.c_cc));
-# ifndef       VDISCARD
-    termFlushChar = CONTROL('O');
-# endif
-# ifndef       VWERASE
-    termWerasChar = CONTROL('W');
-# endif
-# ifndef       VREPRINT
-    termRprntChar = CONTROL('R');
-# endif
-# ifndef       VLNEXT
-    termLiteralNextChar = CONTROL('V');
-# endif
-# ifndef       VSTART
-    termStartChar = CONTROL('Q');
-# endif
-# ifndef       VSTOP
-    termStopChar = CONTROL('S');
-# endif
-# ifndef       VSTATUS
-    termAytChar = CONTROL('T');
-# endif
-#endif /* USE_TERMIO */
-}
-
-/*
- * TerminalNewMode - set up terminal to a specific mode.
- *     MODE_ECHO: do local terminal echo
- *     MODE_FLOW: do local flow control
- *     MODE_TRAPSIG: do local mapping to TELNET IAC sequences
- *     MODE_EDIT: do local line editing
- *
- *     Command mode:
- *             MODE_ECHO|MODE_EDIT|MODE_FLOW|MODE_TRAPSIG
- *             local echo
- *             local editing
- *             local xon/xoff
- *             local signal mapping
- *
- *     Linemode:
- *             local/no editing
- *     Both Linemode and Single Character mode:
- *             local/remote echo
- *             local/no xon/xoff
- *             local/no signal mapping
- */
-
-void
-TerminalNewMode(int f)
-{
-    static int prevmode = 0;
-#ifndef        USE_TERMIO
-    struct tchars tc;
-    struct ltchars ltc;
-    struct sgttyb sb;
-    int lmode;
-#else  /* USE_TERMIO */
-    struct termio tmp_tc;
-#endif /* USE_TERMIO */
-    int onoff;
-    int old;
-    cc_t esc;
-
-    globalmode = f&~MODE_FORCE;
-    if (prevmode == f)
-       return;
-
-    /*
-     * Write any outstanding data before switching modes
-     * ttyflush() returns 0 only when there is no more data
-     * left to write out, it returns -1 if it couldn't do
-     * anything at all, otherwise it returns 1 + the number
-     * of characters left to write.
-#ifndef        USE_TERMIO
-     * We would really like ask the kernel to wait for the output
-     * to drain, like we can do with the TCSADRAIN, but we don't have
-     * that option.  The only ioctl that waits for the output to
-     * drain, TIOCSETP, also flushes the input queue, which is NOT
-     * what we want (TIOCSETP is like TCSADFLUSH).
-#endif
-     */
-    old = ttyflush(SYNCHing|flushout);
-    if (old < 0 || old > 1) {
-#ifdef USE_TERMIO
-       tcgetattr(tin, &tmp_tc);
-#endif /* USE_TERMIO */
-       do {
-           /*
-            * Wait for data to drain, then flush again.
-            */
-#ifdef USE_TERMIO
-           tcsetattr(tin, TCSADRAIN, &tmp_tc);
-#endif /* USE_TERMIO */
-           old = ttyflush(SYNCHing|flushout);
-       } while (old < 0 || old > 1);
-    }
-
-    old = prevmode;
-    prevmode = f&~MODE_FORCE;
-#ifndef        USE_TERMIO
-    sb = nttyb;
-    tc = ntc;
-    ltc = nltc;
-    lmode = olmode;
-#else
-    tmp_tc = new_tc;
-#endif
-
-    if (f&MODE_ECHO) {
-#ifndef        USE_TERMIO
-       sb.sg_flags |= ECHO;
-#else
-       tmp_tc.c_lflag |= ECHO;
-       tmp_tc.c_oflag |= ONLCR;
-       if (crlf)
-               tmp_tc.c_iflag |= ICRNL;
-#endif
-    } else {
-#ifndef        USE_TERMIO
-       sb.sg_flags &= ~ECHO;
-#else
-       tmp_tc.c_lflag &= ~ECHO;
-       tmp_tc.c_oflag &= ~ONLCR;
-#endif
-    }
-
-    if ((f&MODE_FLOW) == 0) {
-#ifndef        USE_TERMIO
-       tc.t_startc = _POSIX_VDISABLE;
-       tc.t_stopc = _POSIX_VDISABLE;
-#else
-       tmp_tc.c_iflag &= ~(IXOFF|IXON);        /* Leave the IXANY bit alone */
-    } else {
-       if (restartany < 0) {
-               tmp_tc.c_iflag |= IXOFF|IXON;   /* Leave the IXANY bit alone */
-       } else if (restartany > 0) {
-               tmp_tc.c_iflag |= IXOFF|IXON|IXANY;
-       } else {
-               tmp_tc.c_iflag |= IXOFF|IXON;
-               tmp_tc.c_iflag &= ~IXANY;
-       }
-#endif
-    }
-
-    if ((f&MODE_TRAPSIG) == 0) {
-#ifndef        USE_TERMIO
-       tc.t_intrc = _POSIX_VDISABLE;
-       tc.t_quitc = _POSIX_VDISABLE;
-       tc.t_eofc = _POSIX_VDISABLE;
-       ltc.t_suspc = _POSIX_VDISABLE;
-       ltc.t_dsuspc = _POSIX_VDISABLE;
-#else
-       tmp_tc.c_lflag &= ~ISIG;
-#endif
-       localchars = 0;
-    } else {
-#ifdef USE_TERMIO
-       tmp_tc.c_lflag |= ISIG;
-#endif
-       localchars = 1;
-    }
-
-    if (f&MODE_EDIT) {
-#ifndef        USE_TERMIO
-       sb.sg_flags &= ~CBREAK;
-       sb.sg_flags |= CRMOD;
-#else
-       tmp_tc.c_lflag |= ICANON;
-#endif
-    } else {
-#ifndef        USE_TERMIO
-       sb.sg_flags |= CBREAK;
-       if (f&MODE_ECHO)
-           sb.sg_flags |= CRMOD;
-       else
-           sb.sg_flags &= ~CRMOD;
-#else
-       tmp_tc.c_lflag &= ~ICANON;
-       tmp_tc.c_iflag &= ~ICRNL;
-       tmp_tc.c_cc[VMIN] = 1;
-       tmp_tc.c_cc[VTIME] = 0;
-#endif
-    }
-
-    if ((f&(MODE_EDIT|MODE_TRAPSIG)) == 0) {
-#ifndef        USE_TERMIO
-       ltc.t_lnextc = _POSIX_VDISABLE;
-#else
-# ifdef VLNEXT
-       tmp_tc.c_cc[VLNEXT] = (cc_t)(_POSIX_VDISABLE);
-# endif
-#endif
-    }
-
-    if (f&MODE_SOFT_TAB) {
-#ifndef USE_TERMIO
-       sb.sg_flags |= XTABS;
-#else
-# ifdef        OXTABS
-       tmp_tc.c_oflag |= OXTABS;
-# endif
-# ifdef        TABDLY
-       tmp_tc.c_oflag &= ~TABDLY;
-       tmp_tc.c_oflag |= TAB3;
-# endif
-#endif
-    } else {
-#ifndef USE_TERMIO
-       sb.sg_flags &= ~XTABS;
-#else
-# ifdef        OXTABS
-       tmp_tc.c_oflag &= ~OXTABS;
-# endif
-# ifdef        TABDLY
-       tmp_tc.c_oflag &= ~TABDLY;
-# endif
-#endif
-    }
-
-    if (f&MODE_LIT_ECHO) {
-#ifndef USE_TERMIO
-       lmode &= ~LCTLECH;
-#else
-# ifdef        ECHOCTL
-       tmp_tc.c_lflag &= ~ECHOCTL;
-# endif
-#endif
-    } else {
-#ifndef USE_TERMIO
-       lmode |= LCTLECH;
-#else
-# ifdef        ECHOCTL
-       tmp_tc.c_lflag |= ECHOCTL;
-# endif
-#endif
-    }
-
-    if (f == -1) {
-       onoff = 0;
-    } else {
-#ifndef        USE_TERMIO
-       if (f & MODE_OUTBIN)
-               lmode |= LLITOUT;
-       else
-               lmode &= ~LLITOUT;
-
-       if (f & MODE_INBIN)
-               lmode |= LPASS8;
-       else
-               lmode &= ~LPASS8;
-#else
-       if (f & MODE_INBIN)
-               tmp_tc.c_iflag &= ~ISTRIP;
-       else
-               tmp_tc.c_iflag |= ISTRIP;
-       if (f & MODE_OUTBIN) {
-               tmp_tc.c_cflag &= ~(CSIZE|PARENB);
-               tmp_tc.c_cflag |= CS8;
-               tmp_tc.c_oflag &= ~OPOST;
-       } else {
-               tmp_tc.c_cflag &= ~(CSIZE|PARENB);
-               tmp_tc.c_cflag |= old_tc.c_cflag & (CSIZE|PARENB);
-               tmp_tc.c_oflag |= OPOST;
-       }
-#endif
-       onoff = 1;
-    }
-
-    if (f != -1) {
-#ifdef  SIGINT
-       (void) signal(SIGINT, intr);
-#endif
-#ifdef  SIGQUIT
-       (void) signal(SIGQUIT, intr2);
-#endif
-#ifdef SIGTSTP
-       (void) signal(SIGTSTP, susp);
-#endif /* SIGTSTP */
-#ifdef SIGINFO
-       (void) signal(SIGINFO, ayt);
-#endif
-#if    defined(USE_TERMIO) && defined(NOKERNINFO)
-       tmp_tc.c_lflag |= NOKERNINFO;
-#endif
-       /*
-        * We don't want to process ^Y here.  It's just another
-        * character that we'll pass on to the back end.  It has
-        * to process it because it will be processed when the
-        * user attempts to read it, not when we send it.
-        */
-#ifndef        USE_TERMIO
-       ltc.t_dsuspc = _POSIX_VDISABLE;
-#else
-# ifdef        VDSUSP
-       tmp_tc.c_cc[VDSUSP] = (cc_t)(_POSIX_VDISABLE);
-# endif
-#endif
-#ifdef USE_TERMIO
-       /*
-        * If the VEOL character is already set, then use VEOL2,
-        * otherwise use VEOL.
-        */
-       esc = (rlogin != _POSIX_VDISABLE) ? rlogin : escape;
-       if ((tmp_tc.c_cc[VEOL] != esc)
-# ifdef        VEOL2
-           && (tmp_tc.c_cc[VEOL2] != esc)
-# endif
-           ) {
-               if (tmp_tc.c_cc[VEOL] == (cc_t)(_POSIX_VDISABLE))
-                   tmp_tc.c_cc[VEOL] = esc;
-# ifdef        VEOL2
-               else if (tmp_tc.c_cc[VEOL2] == (cc_t)(_POSIX_VDISABLE))
-                   tmp_tc.c_cc[VEOL2] = esc;
-# endif
-       }
-#else
-       if (tc.t_brkc == (cc_t)(_POSIX_VDISABLE))
-               tc.t_brkc = esc;
-#endif
-    } else {
-#ifdef SIGINFO
-       (void) signal(SIGINFO, (void (*)(int))ayt_status);
-#endif
-#ifdef  SIGINT
-       (void) signal(SIGINT, SIG_DFL);
-#endif
-#ifdef  SIGQUIT
-       (void) signal(SIGQUIT, SIG_DFL);
-#endif
-#ifdef SIGTSTP
-       (void) signal(SIGTSTP, SIG_DFL);
-# ifndef SOLARIS
-       (void) sigsetmask(sigblock(0) & ~(1<<(SIGTSTP-1)));
-# else SOLARIS
-       (void) sigrelse(SIGTSTP);
-# endif        SOLARIS
-#endif /* SIGTSTP */
-#ifndef USE_TERMIO
-       ltc = oltc;
-       tc = otc;
-       sb = ottyb;
-       lmode = olmode;
-#else
-       tmp_tc = old_tc;
-#endif
-    }
-#ifndef USE_TERMIO
-    ioctl(tin, TIOCLSET, (char *)&lmode);
-    ioctl(tin, TIOCSLTC, (char *)&ltc);
-    ioctl(tin, TIOCSETC, (char *)&tc);
-    ioctl(tin, TIOCSETN, (char *)&sb);
-#else
-    if (tcsetattr(tin, TCSADRAIN, &tmp_tc) < 0)
-       tcsetattr(tin, TCSANOW, &tmp_tc);
-#endif
-
-    ioctl(tin, FIONBIO, (char *)&onoff);
-    ioctl(tout, FIONBIO, (char *)&onoff);
-
-}
-
-/*
- * Try to guess whether speeds are "encoded" (4.2BSD) or just numeric (4.4BSD).
- */
-#if B4800 != 4800
-#define        DECODE_BAUD
-#endif
-
-#ifdef DECODE_BAUD
-#ifndef        B7200
-#define B7200   B4800
-#endif
-
-#ifndef        B14400
-#define B14400  B9600
-#endif
-
-#ifndef        B19200
-# define B19200 B14400
-#endif
-
-#ifndef        B28800
-#define B28800  B19200
-#endif
-
-#ifndef        B38400
-# define B38400 B28800
-#endif
-
-#ifndef B57600
-#define B57600  B38400
-#endif
-
-#ifndef B76800
-#define B76800  B57600
-#endif
-
-#ifndef B115200
-#define B115200 B76800
-#endif
-
-#ifndef B230400
-#define B230400 B115200
-#endif
-
-
-/*
- * This code assumes that the values B0, B50, B75...
- * are in ascending order.  They do not have to be
- * contiguous.
- */
-struct termspeeds {
-       long speed;
-       long value;
-} termspeeds[] = {
-       { 0,      B0 },      { 50,    B50 },    { 75,     B75 },
-       { 110,    B110 },    { 134,   B134 },   { 150,    B150 },
-       { 200,    B200 },    { 300,   B300 },   { 600,    B600 },
-       { 1200,   B1200 },   { 1800,  B1800 },  { 2400,   B2400 },
-       { 4800,   B4800 },   { 7200,  B7200 },  { 9600,   B9600 },
-       { 14400,  B14400 },  { 19200, B19200 }, { 28800,  B28800 },
-       { 38400,  B38400 },  { 57600, B57600 }, { 115200, B115200 },
-       { 230400, B230400 }, { -1,    B230400 }
-};
-#endif /* DECODE_BAUD */
-
-void
-TerminalSpeeds(long *ispeed, long *ospeed)
-{
-#ifdef DECODE_BAUD
-    struct termspeeds *tp;
-#endif /* DECODE_BAUD */
-    long in, out;
-
-    out = cfgetospeed(&old_tc);
-    in = cfgetispeed(&old_tc);
-    if (in == 0)
-       in = out;
-
-#ifdef DECODE_BAUD
-    tp = termspeeds;
-    while ((tp->speed != -1) && (tp->value < in))
-       tp++;
-    *ispeed = tp->speed;
-
-    tp = termspeeds;
-    while ((tp->speed != -1) && (tp->value < out))
-       tp++;
-    *ospeed = tp->speed;
-#else  /* DECODE_BAUD */
-       *ispeed = in;
-       *ospeed = out;
-#endif /* DECODE_BAUD */
-}
-
-int
-TerminalWindowSize(long *rows, long *cols)
-{
-#ifdef TIOCGWINSZ
-    struct winsize ws;
-
-    if (ioctl(fileno(stdin), TIOCGWINSZ, (char *)&ws) >= 0) {
-       *rows = ws.ws_row;
-       *cols = ws.ws_col;
-       return 1;
-    }
-#endif /* TIOCGWINSZ */
-    return 0;
-}
-
-int
-NetClose(int fd)
-{
-    return close(fd);
-}
-
-static void
-NetNonblockingIO(int fd, int onoff)
-{
-    ioctl(fd, FIONBIO, (char *)&onoff);
-}
-
-\f
-/*
- * Various signal handling routines.
- */
-
-/* ARGSUSED */
-static SIG_FUNC_RET
-deadpeer(int sig __unused)
-{
-       setcommandmode();
-       longjmp(peerdied, -1);
-}
-
-/* ARGSUSED */
-SIG_FUNC_RET
-intr(int sig __unused)
-{
-    if (localchars) {
-       intp();
-       return;
-    }
-    setcommandmode();
-    longjmp(toplevel, -1);
-}
-
-/* ARGSUSED */
-SIG_FUNC_RET
-intr2(int sig __unused)
-{
-    if (localchars) {
-#ifdef KLUDGELINEMODE
-       if (kludgelinemode)
-           sendbrk();
-       else
-#endif
-           sendabort();
-       return;
-    }
-}
-
-#ifdef SIGTSTP
-/* ARGSUSED */
-SIG_FUNC_RET
-susp(int sig __unused)
-{
-    if ((rlogin != _POSIX_VDISABLE) && rlogin_susp())
-       return;
-    if (localchars)
-       sendsusp();
-}
-#endif
-
-#ifdef SIGWINCH
-/* ARGSUSED */
-static SIG_FUNC_RET
-sendwin(int sig __unused)
-{
-    if (connected) {
-       sendnaws();
-    }
-}
-#endif
-
-#ifdef SIGINFO
-/* ARGSUSED */
-SIG_FUNC_RET
-ayt(int sig __unused)
-{
-    if (connected)
-       sendayt();
-    else
-       ayt_status();
-}
-#endif
-
-\f
-void
-sys_telnet_init(void)
-{
-    (void) signal(SIGINT, intr);
-    (void) signal(SIGQUIT, intr2);
-    (void) signal(SIGPIPE, deadpeer);
-#ifdef SIGWINCH
-    (void) signal(SIGWINCH, sendwin);
-#endif
-#ifdef SIGTSTP
-    (void) signal(SIGTSTP, susp);
-#endif
-#ifdef SIGINFO
-    (void) signal(SIGINFO, ayt);
-#endif
-
-    setconnmode(0);
-
-    NetNonblockingIO(net, 1);
-
-#if    defined(SO_OOBINLINE)
-    if (SetSockOpt(net, SOL_SOCKET, SO_OOBINLINE, 1) == -1) {
-       perror("SetSockOpt");
-    }
-#endif /* defined(SO_OOBINLINE) */
-}
-
-/*
- * Process rings -
- *
- *     This routine tries to fill up/empty our various rings.
- *
- *     The parameter specifies whether this is a poll operation,
- *     or a block-until-something-happens operation.
- *
- *     The return value is 1 if something happened, 0 if not.
- */
-
-int
-process_rings(int netin, int netout, int netex, int ttyin, int ttyout, int poll)
-{
-    int c;
-    int returnValue = 0;
-    static struct timeval TimeValue = { 0, 0 };
-    int maxfd = -1;
-    int tmp;
-
-    if ((netout || netin || netex) && net > maxfd)
-       maxfd = net;
-    
-    if (ttyout && tout > maxfd)
-       maxfd = tout;
-    if (ttyin && tin > maxfd)
-       maxfd = tin;
-    tmp = howmany(maxfd+1, NFDBITS) * sizeof(fd_mask);
-    if (tmp > fdsn) {
-       if (ibitsp)
-           free(ibitsp);
-       if (obitsp)
-           free(obitsp);
-       if (xbitsp)
-           free(xbitsp);
-       
-       fdsn = tmp;
-       if ((ibitsp = (fd_set *)malloc(fdsn)) == NULL)
-           err(1, "malloc");
-       if ((obitsp = (fd_set *)malloc(fdsn)) == NULL)
-           err(1, "malloc");
-       if ((xbitsp = (fd_set *)malloc(fdsn)) == NULL)
-           err(1, "malloc");
-       memset(ibitsp, 0, fdsn);
-       memset(obitsp, 0, fdsn);
-       memset(xbitsp, 0, fdsn);
-    }
-    
-    if (netout)
-       FD_SET(net, obitsp);
-    if (ttyout)
-       FD_SET(tout, obitsp);
-    if (ttyin)
-       FD_SET(tin, ibitsp);
-    if (netin)
-       FD_SET(net, ibitsp);
-    if (netex)
-       FD_SET(net, xbitsp);
-    if ((c = select(maxfd + 1, ibitsp, obitsp, xbitsp,
-            (poll == 0)? (struct timeval *)0 : &TimeValue)) < 0) {
-       if (c == -1) {
-                   /*
-                    * we can get EINTR if we are in line mode,
-                    * and the user does an escape (TSTP), or
-                    * some other signal generator.
-                    */
-           if (errno == EINTR) {
-               return 0;
-           }
-                   /* I don't like this, does it ever happen? */
-           printf("sleep(5) from telnet, after select: %s\r\n", strerror(errno));
-           sleep(5);
-       }
-       return 0;
-    }
-
-    /*
-     * Any urgent data?
-     */
-    if (FD_ISSET(net, xbitsp)) {
-       FD_CLR(net, xbitsp);
-       SYNCHing = 1;
-       (void) ttyflush(1);     /* flush already enqueued data */
-    }
-
-    /*
-     * Something to read from the network...
-     */
-    if (FD_ISSET(net, ibitsp)) {
-       int canread;
-
-       FD_CLR(net, ibitsp);
-       canread = ring_empty_consecutive(&netiring);
-#if    !defined(SO_OOBINLINE)
-           /*
-            * In 4.2 (and some early 4.3) systems, the
-            * OOB indication and data handling in the kernel
-            * is such that if two separate TCP Urgent requests
-            * come in, one byte of TCP data will be overlaid.
-            * This is fatal for Telnet, but we try to live
-            * with it.
-            *
-            * In addition, in 4.2 (and...), a special protocol
-            * is needed to pick up the TCP Urgent data in
-            * the correct sequence.
-            *
-            * What we do is:  if we think we are in urgent
-            * mode, we look to see if we are "at the mark".
-            * If we are, we do an OOB receive.  If we run
-            * this twice, we will do the OOB receive twice,
-            * but the second will fail, since the second
-            * time we were "at the mark", but there wasn't
-            * any data there (the kernel doesn't reset
-            * "at the mark" until we do a normal read).
-            * Once we've read the OOB data, we go ahead
-            * and do normal reads.
-            *
-            * There is also another problem, which is that
-            * since the OOB byte we read doesn't put us
-            * out of OOB state, and since that byte is most
-            * likely the TELNET DM (data mark), we would
-            * stay in the TELNET SYNCH (SYNCHing) state.
-            * So, clocks to the rescue.  If we've "just"
-            * received a DM, then we test for the
-            * presence of OOB data when the receive OOB
-            * fails (and AFTER we did the normal mode read
-            * to clear "at the mark").
-            */
-       if (SYNCHing) {
-           int atmark;
-           static int bogus_oob = 0, first = 1;
-
-           ioctl(net, SIOCATMARK, (char *)&atmark);
-           if (atmark) {
-               c = recv(net, netiring.supply, canread, MSG_OOB);
-               if ((c == -1) && (errno == EINVAL)) {
-                   c = recv(net, netiring.supply, canread, 0);
-                   if (clocks.didnetreceive < clocks.gotDM) {
-                       SYNCHing = stilloob(net);
-                   }
-               } else if (first && c > 0) {
-                   /*
-                    * Bogosity check.  Systems based on 4.2BSD
-                    * do not return an error if you do a second
-                    * recv(MSG_OOB).  So, we do one.  If it
-                    * succeeds and returns exactly the same
-                    * data, then assume that we are running
-                    * on a broken system and set the bogus_oob
-                    * flag.  (If the data was different, then
-                    * we probably got some valid new data, so
-                    * increment the count...)
-                    */
-                   int i;
-                   i = recv(net, netiring.supply + c, canread - c, MSG_OOB);
-                   if (i == c &&
-                       memcmp(netiring.supply, netiring.supply + c, i) == 0) {
-                       bogus_oob = 1;
-                       first = 0;
-                   } else if (i < 0) {
-                       bogus_oob = 0;
-                       first = 0;
-                   } else
-                       c += i;
-               }
-               if (bogus_oob && c > 0) {
-                   int i;
-                   /*
-                    * Bogosity.  We have to do the read
-                    * to clear the atmark to get out of
-                    * an infinate loop.
-                    */
-                   i = read(net, netiring.supply + c, canread - c);
-                   if (i > 0)
-                       c += i;
-               }
-           } else {
-               c = recv(net, netiring.supply, canread, 0);
-           }
-       } else {
-           c = recv(net, netiring.supply, canread, 0);
-       }
-       settimer(didnetreceive);
-#else  /* !defined(SO_OOBINLINE) */
-       c = recv(net, (char *)netiring.supply, canread, 0);
-#endif /* !defined(SO_OOBINLINE) */
-       if (c < 0 && errno == EWOULDBLOCK) {
-           c = 0;
-       } else if (c <= 0) {
-           return -1;
-       }
-       if (netdata) {
-           Dump('<', netiring.supply, c);
-       }
-       if (c)
-           ring_supplied(&netiring, c);
-       returnValue = 1;
-    }
-
-    /*
-     * Something to read from the tty...
-     */
-    if (FD_ISSET(tin, ibitsp)) {
-       FD_CLR(tin, ibitsp);
-       c = TerminalRead(ttyiring.supply, ring_empty_consecutive(&ttyiring));
-       if (c < 0 && errno == EIO)
-           c = 0;
-       if (c < 0 && errno == EWOULDBLOCK) {
-           c = 0;
-       } else {
-           /* EOF detection for line mode!!!! */
-           if ((c == 0) && MODE_LOCAL_CHARS(globalmode) && isatty(tin)) {
-                       /* must be an EOF... */
-               *ttyiring.supply = termEofChar;
-               c = 1;
-           }
-           if (c <= 0) {
-               return -1;
-           }
-           if (termdata) {
-               Dump('<', ttyiring.supply, c);
-           }
-           ring_supplied(&ttyiring, c);
-       }
-       returnValue = 1;                /* did something useful */
-    }
-
-    if (FD_ISSET(net, obitsp)) {
-       FD_CLR(net, obitsp);
-       returnValue |= netflush();
-    }
-    if (FD_ISSET(tout, obitsp)) {
-       FD_CLR(tout, obitsp);
-       returnValue |= (ttyflush(SYNCHing|flushout) > 0);
-    }
-
-    return returnValue;
-}
diff --git a/crypto/telnet/telnet/telnet.1 b/crypto/telnet/telnet/telnet.1
deleted file mode 100644 (file)
index 3f9d7dd..0000000
+++ /dev/null
@@ -1,1425 +0,0 @@
-.\" Copyright (c) 1983, 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. 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
-.\"    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.
-.\"
-.\"    @(#)telnet.1    8.6 (Berkeley) 6/1/94
-.\" $FreeBSD: src/crypto/telnet/telnet/telnet.1,v 1.4.2.9 2002/04/13 10:59:08 markm Exp $
-.\" $DragonFly: src/crypto/telnet/telnet/telnet.1,v 1.2 2003/06/17 04:24:37 dillon Exp $
-.\"
-.Dd January 27, 2000
-.Dt TELNET 1
-.Os
-.Sh NAME
-.Nm telnet
-.Nd user interface to the
-.Tn TELNET
-protocol
-.Sh SYNOPSIS
-.Nm
-.Op Fl 468EFKLNacdfruxy
-.Op Fl S Ar tos
-.Op Fl X Ar authtype
-.Op Fl e Ar escapechar
-.Op Fl k Ar realm
-.Op Fl l Ar user
-.Op Fl n Ar tracefile
-.Op Fl s Ar src_addr
-.Oo
-.Ar host
-.Op Ar port
-.Oc
-.Sh DESCRIPTION
-The
-.Nm
-command
-is used to communicate with another host using the
-.Tn TELNET
-protocol.
-If
-.Nm
-is invoked without the
-.Ar host
-argument, it enters command mode,
-indicated by its prompt
-.Pq Dq Li telnet\&> .
-In this mode, it accepts and executes the commands listed below.
-If it is invoked with arguments, it performs an
-.Ic open
-command with those arguments.
-.Pp
-Options:
-.Bl -tag -width indent
-.It Fl 4
-Forces
-.Nm
-to use IPv4 addresses only.
-.It Fl 6
-Forces
-.Nm
-to use IPv6 addresses only.
-.It Fl 8
-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
-Stops any character from being recognized as an escape character.
-.It Fl F
-If Kerberos V5 authentication is being used, the
-.Fl F
-option allows the local credentials to be forwarded
-to the remote system, including any credentials that
-have already been forwarded into the local environment.
-.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
-.Dv BINARY
-option to be negotiated on output.
-.It Fl N
-Prevents IP address to name lookup when destination host is given
-as an IP address.
-.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
-Disables the
-.Ar atype
-type of authentication.
-.It Fl a
-Attempt automatic login.
-This is now the default, so this option is ignored.
-Currently, this sends the user name via the
-.Ev USER
-variable
-of the
-.Ev ENVIRON
-option if supported by the remote system.
-The name used is that of the current user as returned by
-.Xr getlogin 2
-if it agrees with the current user ID,
-otherwise it is the name associated with the user ID.
-.It Fl c
-Disables the reading of the user's
-.Pa \&.telnetrc
-file.  (See the
-.Ic toggle skiprc
-command on this man page.)
-.It Fl d
-Sets the initial value of the
-.Ic debug
-toggle to
-.Dv TRUE .
-.It Fl e Ar escapechar
-Sets the initial
-.Nm
-escape character to
-.Ar escapechar .
-If
-.Ar escapechar
-is omitted, then
-there will be no escape character.
-.It Fl f
-If Kerberos V5 authentication is being used, the
-.Fl f
-option allows the local credentials to be forwarded to the remote system.
-.It Fl k Ar realm
-If Kerberos authentication is being used, the
-.Fl k
-option requests that
-.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
-When connecting to the remote system, if the remote system
-understands the
-.Ev ENVIRON
-option, then
-.Ar user
-will be sent to the remote system as the value for the variable
-.Ev USER .
-This option implies the
-.Fl a
-option.
-This option may also be used with the
-.Ic open
-command.
-.It Fl n Ar tracefile
-Opens
-.Ar tracefile
-for recording trace information.
-See the
-.Ic set tracefile
-command below.
-.It Fl r
-Specifies a user interface similar to
-.Xr rlogin 1 .
-In this
-mode, the escape character is set to the tilde (~) character,
-unless modified by the
-.Fl e
-option.
-.It Fl s Ar src_addr
-Set the source IP address for the
-.Nm
-connection to
-.Ar src_addr ,
-which can be an IP address or a host name.
-.It Fl u
-Forces
-.Nm
-to use
-.Dv AF_UNIX
-addresses only (e.g.,
-.Ux
-domain sockets, accessed with a file path).
-.It Fl x
-Turns on encryption of the data stream if possible.
-This is now the default, so this option is ignored.
-.It Fl y
-Suppresses encryption of the data stream.
-.It Ar host
-Indicates the official name, an alias, or the Internet address
-of a remote host.
-If
-.Ar host
-starts with a
-.Ql / ,
-.Nm
-establishes a connection to the corresponding named socket.
-.It Ar port
-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
-remote host; ~ is the
-.Nm
-escape character.
-Similarly, the line ~^Z suspends the
-.Nm
-session.
-The line ~^] escapes to the normal
-.Nm
-escape prompt.
-.Pp
-Once a connection has been opened,
-.Nm
-will attempt to enable the
-.Dv TELNET LINEMODE
-option.
-If this fails, then
-.Nm
-will revert to one of two input modes:
-either \*(Lqcharacter at a time\*(Rq
-or \*(Lqold line by line\*(Rq
-depending on what the remote system supports.
-.Pp
-When
-.Dv LINEMODE
-is enabled, character processing is done on the
-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
-changes to any special characters that happen on the remote
-system, so that they can take effect on the local system.
-.Pp
-In \*(Lqcharacter at a time\*(Rq mode, most
-text typed is immediately sent to the remote host for processing.
-.Pp
-In \*(Lqold line by line\*(Rq mode, all text is echoed locally,
-and (normally) only completed lines are sent to the remote host.
-The \*(Lqlocal echo character\*(Rq (initially \*(Lq^E\*(Rq) may be used
-to turn off and on the local echo
-(this would mostly be used to enter passwords
-without the password being echoed).
-.Pp
-If the
-.Dv LINEMODE
-option is enabled, or if the
-.Ic localchars
-toggle is
-.Dv TRUE
-(the default for \*(Lqold line by line\*(Rq; see below),
-the user's
-.Ic quit  ,
-.Ic intr ,
-and
-.Ic flush
-characters are trapped locally, and sent as
-.Tn TELNET
-protocol sequences to the remote side.
-If
-.Dv LINEMODE
-has ever been enabled, then the user's
-.Ic susp
-and
-.Ic eof
-are also sent as
-.Tn TELNET
-protocol sequences,
-and
-.Ic quit
-is sent as a
-.Dv TELNET ABORT
-instead of
-.Dv BREAK .
-There are options (see
-.Ic toggle
-.Ic autoflush
-and
-.Ic toggle
-.Ic autosynch
-below)
-which cause this action to flush subsequent output to the terminal
-(until the remote host acknowledges the
-.Tn TELNET
-sequence) and flush previous terminal input
-(in the case of
-.Ic quit
-and
-.Ic intr  ) .
-.Pp
-While connected to a remote host,
-.Nm
-command mode may be entered by typing the
-.Nm
-\*(Lqescape character\*(Rq (initially \*(Lq^]\*(Rq).
-When in command mode, the normal terminal editing conventions are available.
-.Pp
-The following
-.Nm
-commands are available.
-Only enough of each command to uniquely identify it need be typed
-(this is also true for arguments to the
-.Ic mode  ,
-.Ic set ,
-.Ic toggle  ,
-.Ic unset ,
-.Ic slc  ,
-.Ic environ ,
-and
-.Ic display
-commands).
-.Pp
-.Bl -tag -width "mode type"
-.It Ic auth Ar argument ...
-The auth command manipulates the information sent through the
-.Dv TELNET AUTHENTICATE
-option.  Valid arguments for the
-.Ic auth
-command are:
-.Bl -tag -width "disable type"
-.It Ic disable Ar type
-Disables the specified type of authentication.  To
-obtain a list of available types, use the
-.Ic auth disable ?\&
-command.
-.It Ic enable Ar type
-Enables the specified type of authentication.  To
-obtain a list of available types, use the
-.Ic auth enable ?\&
-command.
-.It Ic status
-Lists the current status of the various types of
-authentication.
-.El
-.It Ic close
-Close a
-.Tn TELNET
-session and return to command mode.
-.It Ic display Ar argument ...
-Displays all, or some, of the
-.Ic set
-and
-.Ic toggle
-values (see below).
-.It Ic encrypt Ar argument ...
-The encrypt command manipulates the information sent through the
-.Dv TELNET ENCRYPT
-option.
-.Pp
-Valid arguments for the
-.Ic encrypt
-command are:
-.Bl -tag -width Ar
-.It Ic disable Ar type Xo
-.Op Cm input | output
-.Xc
-Disables the specified type of encryption.  If you
-omit the input and output, both input and output
-are disabled.  To obtain a list of available
-types, use the
-.Ic encrypt disable ?\&
-command.
-.It Ic enable Ar type Xo
-.Op Cm input | output
-.Xc
-Enables the specified type of encryption.  If you
-omit input and output, both input and output are
-enabled.  To obtain a list of available types, use the
-.Ic encrypt enable ?\&
-command.
-.It Ic input
-This is the same as the
-.Ic encrypt start input
-command.
-.It Ic -input
-This is the same as the
-.Ic encrypt stop input
-command.
-.It Ic output
-This is the same as the
-.Ic encrypt start output
-command.
-.It Ic -output
-This is the same as the
-.Ic encrypt stop output
-command.
-.It Ic start Op Cm input | output
-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 encrypt enable ?\&
-command.
-.It Ic status
-Lists the current status of encryption.
-.It Ic stop Op Cm input | output
-Stops encryption.  If you omit input and output,
-encryption is on both input and output.
-.It Ic type Ar type
-Sets the default type of encryption to be used
-with later
-.Ic encrypt start
-or
-.Ic encrypt stop
-commands.
-.El
-.It Ic environ Ar arguments ...
-The
-.Ic environ
-command is used to manipulate the
-variables that may be sent through the
-.Dv TELNET ENVIRON
-option.
-The initial set of variables is taken from the users
-environment, with only the
-.Ev DISPLAY
-and
-.Ev PRINTER
-variables being exported by default.
-The
-.Ev USER
-variable is also exported if the
-.Fl a
-or
-.Fl l
-options are used.
-.Pp
-Valid arguments for the
-.Ic environ
-command are:
-.Bl -tag -width Fl
-.It Ic define Ar variable value
-Define the variable
-.Ar variable
-to have a value of
-.Ar value .
-Any variables defined by this command are automatically exported.
-The
-.Ar value
-may be enclosed in single or double quotes so
-that tabs and spaces may be included.
-.It Ic undefine Ar variable
-Remove
-.Ar variable
-from the list of environment variables.
-.It Ic export Ar variable
-Mark the variable
-.Ar variable
-to be exported to the remote side.
-.It Ic unexport Ar variable
-Mark the variable
-.Ar variable
-to not be exported unless
-explicitly asked for by the remote side.
-.It Ic list
-List the current set of environment variables.
-Those marked with a
-.Cm *
-will be sent automatically,
-other variables will only be sent if explicitly requested.
-.It Ic ?\&
-Prints out help information for the
-.Ic environ
-command.
-.El
-.It Ic logout
-Sends the
-.Dv TELNET LOGOUT
-option to the remote side.
-This command is similar to a
-.Ic close
-command; however, if the remote side does not support the
-.Dv LOGOUT
-option, nothing happens.
-If, however, the remote side does support the
-.Dv LOGOUT
-option, this command should cause the remote side to close the
-.Tn TELNET
-connection.
-If the remote side also supports the concept of
-suspending a user's session for later reattachment,
-the logout argument indicates that you
-should terminate the session immediately.
-.It Ic mode Ar type
-.Ar Type
-is one of several options, depending on the state of the
-.Tn TELNET
-session.
-The remote host is asked for permission to go into the requested mode.
-If the remote host is capable of entering that mode, the requested
-mode will be entered.
-.Bl -tag -width Ar
-.It Ic character
-Disable the
-.Dv TELNET LINEMODE
-option, or, if the remote side does not understand the
-.Dv LINEMODE
-option, then enter \*(Lqcharacter at a time\*(Rq mode.
-.It Ic line
-Enable the
-.Dv TELNET LINEMODE
-option, or, if the remote side does not understand the
-.Dv LINEMODE
-option, then attempt to enter \*(Lqold-line-by-line\*(Rq mode.
-.It Ic isig Pq Ic \-isig
-Attempt to enable (disable) the
-.Dv TRAPSIG
-mode of the
-.Dv LINEMODE
-option.
-This requires that the
-.Dv LINEMODE
-option be enabled.
-.It Ic edit Pq Ic \-edit
-Attempt to enable (disable) the
-.Dv EDIT
-mode of the
-.Dv LINEMODE
-option.
-This requires that the
-.Dv LINEMODE
-option be enabled.
-.It Ic softtabs Pq Ic \-softtabs
-Attempt to enable (disable) the
-.Dv SOFT_TAB
-mode of the
-.Dv LINEMODE
-option.
-This requires that the
-.Dv LINEMODE
-option be enabled.
-.It Ic litecho Pq Ic \-litecho
-Attempt to enable (disable) the
-.Dv LIT_ECHO
-mode of the
-.Dv LINEMODE
-option.
-This requires that the
-.Dv LINEMODE
-option be enabled.
-.It Ic ?\&
-Prints out help information for the
-.Ic mode
-command.
-.El
-.It Xo
-.Ic open Ar host
-.Op Fl l Ar user
-.Op Oo Fl Oc Ns Ar port
-.Xc
-Open a connection to the named host.
-If no port number
-is specified,
-.Nm
-will attempt to contact a
-.Tn TELNET
-server at the default port.
-The host specification may be either a host name (see
-.Xr hosts  5  ) ,
-an Internet address specified in the \*(Lqdot notation\*(Rq (see
-.Xr inet 3 ) ,
-or IPv6 host name or IPv6 coloned-hexadecimal addreess.
-The
-.Fl l
-option may be used to specify the user name
-to be passed to the remote system via the
-.Ev ENVIRON
-option.
-When connecting to a non-standard port,
-.Nm
-omits any automatic initiation of
-.Tn TELNET
-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
-users 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
-commands and are processed as if they had been typed
-in manually to the
-.Nm
-command prompt.
-.It Ic quit
-Close any open
-.Tn TELNET
-session and exit
-.Nm .
-An end of file (in command mode) will also close a session and exit.
-.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):
-.Pp
-.Bl -tag -width escape
-.It Ic abort
-Sends the
-.Dv TELNET ABORT
-(Abort
-processes)
-sequence.
-.It Ic ao
-Sends the
-.Dv TELNET AO
-(Abort Output) sequence, which should cause the remote system to flush
-all output
-.Em from
-the remote system
-.Em to
-the user's terminal.
-.It Ic ayt
-Sends the
-.Dv TELNET AYT
-(Are You There)
-sequence, to which the remote system may or may not choose to respond.
-.It Ic brk
-Sends the
-.Dv TELNET BRK
-(Break) sequence, which may have significance to the remote
-system.
-.It Ic ec
-Sends the
-.Dv TELNET EC
-(Erase Character)
-sequence, which should cause the remote system to erase the last character
-entered.
-.It Ic el
-Sends the
-.Dv TELNET EL
-(Erase Line)
-sequence, which should cause the remote system to erase the line currently
-being entered.
-.It Ic eof
-Sends the
-.Dv TELNET EOF
-(End Of File)
-sequence.
-.It Ic eor
-Sends the
-.Dv TELNET EOR
-(End of Record)
-sequence.
-.It Ic escape
-Sends the current
-.Nm
-escape character (initially \*(Lq^\*(Rq).
-.It Ic ga
-Sends the
-.Dv TELNET GA
-(Go Ahead)
-sequence, which likely has no significance to the remote system.
-.It Ic getstatus
-If the remote side supports the
-.Dv TELNET STATUS
-command,
-.Ic getstatus
-will send the subnegotiation to request that the server send
-its current option status.
-.It Ic ip
-Sends the
-.Dv TELNET IP
-(Interrupt Process) sequence, which should cause the remote
-system to abort the currently running process.
-.It Ic nop
-Sends the
-.Dv TELNET NOP
-(No OPeration)
-sequence.
-.It Ic susp
-Sends the
-.Dv TELNET SUSP
-(SUSPend process)
-sequence.
-.It Ic synch
-Sends the
-.Dv TELNET SYNCH
-sequence.
-This sequence causes the remote system to discard all previously typed
-(but not yet read) input.
-This sequence is sent as
-.Tn TCP
-urgent
-data (and may not work if the remote system is a
-.Bx 4.2
-system -- if
-it doesn't work, a lower case \*(Lqr\*(Rq may be echoed on the terminal).
-.It Ic do Ar cmd
-.It Ic dont Ar cmd
-.It Ic will Ar cmd
-.It Ic wont Ar cmd
-Sends the
-.Dv TELNET DO
-.Ar cmd
-sequence.
-.Ar Cmd
-can be either a decimal number between 0 and 255,
-or a symbolic name for a specific
-.Dv TELNET
-command.
-.Ar Cmd
-can also be either
-.Ic help
-or
-.Ic ?\&
-to print out help information, including
-a list of known symbolic names.
-.It Ic ?\&
-Prints out help information for the
-.Ic send
-command.
-.El
-.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
-variables to a specific value or to
-.Dv TRUE .
-The special value
-.Ic off
-turns off the function associated with
-the variable, this is equivalent to using the
-.Ic unset
-command.
-The
-.Ic unset
-command will disable or set to
-.Dv FALSE
-any of the specified functions.
-The values of variables may be interrogated with the
-.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
-.Ic toggle
-command may be explicitly set or unset using
-the
-.Ic set
-and
-.Ic unset
-commands.
-.Bl -tag -width escape
-.It Ic ayt
-If
-.Tn TELNET
-is in localchars mode, or
-.Dv LINEMODE
-is enabled, and the status character is typed, a
-.Dv TELNET AYT
-sequence (see
-.Ic send ayt
-preceding) is sent to the
-remote host.  The initial value for the \*(LqAre You There\*(Rq
-character is the terminal's status character.
-.It Ic echo
-This is the value (initially \*(Lq^E\*(Rq) which, when in
-\*(Lqline by line\*(Rq mode, toggles between doing local echoing
-of entered characters (for normal processing), and suppressing
-echoing of entered characters (for entering, say, a password).
-.It Ic eof
-If
-.Nm
-is operating in
-.Dv LINEMODE
-or \*(Lqold line by line\*(Rq mode, entering this character
-as the first character on a line will cause this character to be
-sent to the remote system.
-The initial value of the eof character is taken to be the terminal's
-.Ic eof
-character.
-.It Ic erase
-If
-.Nm
-is in
-.Ic localchars
-mode (see
-.Ic toggle
-.Ic localchars
-below),
-.Sy and
-if
-.Nm
-is operating in \*(Lqcharacter at a time\*(Rq mode, then when this
-character is typed, a
-.Dv TELNET EC
-sequence (see
-.Ic send
-.Ic ec
-above)
-is sent to the remote system.
-The initial value for the erase character is taken to be
-the terminal's
-.Ic erase
-character.
-.It Ic escape
-This is the
-.Nm
-escape character (initially \*(Lq^[\*(Rq) which causes entry
-into
-.Nm
-command mode (when connected to a remote system).
-.It Ic flushoutput
-If
-.Nm
-is in
-.Ic localchars
-mode (see
-.Ic toggle
-.Ic localchars
-below)
-and the
-.Ic flushoutput
-character is typed, a
-.Dv TELNET AO
-sequence (see
-.Ic send
-.Ic ao
-above)
-is sent to the remote host.
-The initial value for the flush character is taken to be
-the terminal's
-.Ic flush
-character.
-.It Ic forw1
-.It Ic forw2
-If
-.Nm
-is operating in
-.Dv LINEMODE ,
-these are the
-characters that, when typed, cause partial lines to be
-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
-is in
-.Ic localchars
-mode (see
-.Ic toggle
-.Ic localchars
-below)
-and the
-.Ic interrupt
-character is typed, a
-.Dv TELNET IP
-sequence (see
-.Ic send
-.Ic ip
-above)
-is sent to the remote host.
-The initial value for the interrupt character is taken to be
-the terminal's
-.Ic intr
-character.
-.It Ic kill
-If
-.Nm
-is in
-.Ic localchars
-mode (see
-.Ic toggle
-.Ic localchars
-below),
-.Ic and
-if
-.Nm
-is operating in \*(Lqcharacter at a time\*(Rq mode, then when this
-character is typed, a
-.Dv TELNET EL
-sequence (see
-.Ic send
-.Ic el
-above)
-is sent to the remote system.
-The initial value for the kill character is taken to be
-the terminal's
-.Ic kill
-character.
-.It Ic lnext
-If
-.Nm
-is operating in
-.Dv LINEMODE
-or \*(Lqold line by line\*(Rq mode, then this character is taken to
-be the terminal's
-.Ic lnext
-character.
-The initial value for the lnext character is taken to be
-the terminal's
-.Ic lnext
-character.
-.It Ic quit
-If
-.Nm
-is in
-.Ic localchars
-mode (see
-.Ic toggle
-.Ic localchars
-below)
-and the
-.Ic quit
-character is typed, a
-.Dv TELNET BRK
-sequence (see
-.Ic send
-.Ic brk
-above)
-is sent to the remote host.
-The initial value for the quit character is taken to be
-the terminal's
-.Ic quit
-character.
-.It Ic reprint
-If
-.Nm
-is operating in
-.Dv LINEMODE
-or \*(Lqold line by line\*(Rq mode, then this character is taken to
-be the terminal's
-.Ic reprint
-character.
-The initial value for the reprint character is taken to be
-the terminal's
-.Ic reprint
-character.
-.It Ic rlogin
-This is the rlogin escape character.
-If set, the normal
-.Nm
-escape character is ignored unless it is
-preceded by this character at the beginning of a line.
-This character, at the beginning of a line followed by
-a "."  closes the connection; when followed by a ^Z it
-suspends the
-.Nm
-command.  The initial state is to
-disable the
-.Nm rlogin
-escape character.
-.It Ic start
-If the
-.Dv TELNET TOGGLE-FLOW-CONTROL
-option has been enabled,
-then this character is taken to
-be the terminal's
-.Ic start
-character.
-The initial value for the start character is taken to be
-the terminal's
-.Ic start
-character.
-.It Ic stop
-If the
-.Dv TELNET TOGGLE-FLOW-CONTROL
-option has been enabled,
-then this character is taken to
-be the terminal's
-.Ic stop
-character.
-The initial value for the stop character is taken to be
-the terminal's
-.Ic stop
-character.
-.It Ic susp
-If
-.Nm
-is in
-.Ic localchars
-mode, or
-.Dv LINEMODE
-is enabled, and the
-.Ic suspend
-character is typed, a
-.Dv TELNET SUSP
-sequence (see
-.Ic send
-.Ic susp
-above)
-is sent to the remote host.
-The initial value for the suspend character is taken to be
-the terminal's
-.Ic suspend
-character.
-.It Ic tracefile
-This is the file to which the output, caused by
-.Ic netdata
-or
-.Ic option
-tracing being
-.Dv TRUE ,
-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
-is operating in
-.Dv LINEMODE
-or \*(Lqold line by line\*(Rq mode, then this character is taken to
-be the terminal's
-.Ic worderase
-character.
-The initial value for the worderase character is taken to be
-the terminal's
-.Ic worderase
-character.
-.It Ic ?\&
-Displays the legal
-.Ic set
-.Pq Ic unset
-commands.
-.El
-.It Ic opie Ar sequence challenge
-The
-.Ic opie
-command computes a response to the OPIE challenge.
-.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
-.Dv TELNET LINEMODE
-option has
-been enabled.  Special characters are characters that get
-mapped to
-.Tn TELNET
-commands sequences (like
-.Ic ip
-or
-.Ic quit  )
-or line editing characters (like
-.Ic erase
-and
-.Ic kill  ) .
-By default, the local special characters are exported.
-.Bl -tag -width Fl
-.It Ic check
-Verify the current settings for the current special characters.
-The remote side is requested to send all the current special
-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
-the time when
-.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
-.Tn TELNET
-connection was established.
-.It Ic ?\&
-Prints out help information for the
-.Ic slc
-command.
-.El
-.It Ic status
-Show the current status of
-.Nm .
-This includes the peer one is connected to, as well
-as the current mode.
-.It Ic toggle Ar arguments ...
-Toggle (between
-.Dv TRUE
-and
-.Dv FALSE )
-various flags that control how
-.Nm
-responds to events.
-These flags may be set explicitly to
-.Dv TRUE
-or
-.Dv FALSE
-using the
-.Ic set
-and
-.Ic unset
-commands listed above.
-More than one argument may be specified.
-The state of these flags may be interrogated with the
-.Ic display
-command.
-Valid arguments are:
-.Bl -tag -width Ar
-.It Ic authdebug
-Turns on debugging information for the authentication code.
-.It Ic autoflush
-If
-.Ic autoflush
-and
-.Ic localchars
-are both
-.Dv TRUE ,
-then when the
-.Ic ao  ,
-or
-.Ic quit
-characters are recognized (and transformed into
-.Tn TELNET
-sequences; see
-.Ic set
-above for details),
-.Nm
-refuses to display any data on the user's terminal
-until the remote system acknowledges (via a
-.Dv TELNET TIMING MARK
-option)
-that it has processed those
-.Tn TELNET
-sequences.
-The initial value for this toggle is
-.Dv TRUE
-if the terminal user had not
-done an "stty noflsh", otherwise
-.Dv FALSE
-(see
-.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 autoencrypt
-(autodecrypt) command states that encryption of the
-output (input) stream should be enabled as soon as
-possible.
-.It Ic autologin
-If the remote side supports the
-.Dv TELNET AUTHENTICATION
-option
-.Nm
-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
-.Dv TELNET ENVIRON
-option.
-This command is the same as specifying
-.Fl a
-option on the
-.Ic open
-command.
-.It Ic autosynch
-If
-.Ic autosynch
-and
-.Ic localchars
-are both
-.Dv TRUE ,
-then when either the
-.Ic intr
-or
-.Ic quit
-characters is typed (see
-.Ic set
-above for descriptions of the
-.Ic intr
-and
-.Ic quit
-characters), the resulting
-.Tn TELNET
-sequence sent is followed by the
-.Dv TELNET SYNCH
-sequence.
-This procedure
-.Ic should
-cause the remote system to begin throwing away all previously
-typed input until both of the
-.Tn TELNET
-sequences have been read and acted upon.
-The initial value of this toggle is
-.Dv FALSE .
-.It Ic binary
-Enable or disable the
-.Dv TELNET BINARY
-option on both input and output.
-.It Ic inbinary
-Enable or disable the
-.Dv TELNET BINARY
-option on input.
-.It Ic outbinary
-Enable or disable the
-.Dv TELNET BINARY
-option on output.
-.It Ic crlf
-If this is
-.Dv TRUE ,
-then carriage returns will be sent as
-.Li <CR><LF> .
-If this is
-.Dv FALSE ,
-then carriage returns will be send as
-.Li <CR><NUL> .
-The initial value for this toggle is
-.Dv FALSE .
-.It Ic crmod
-Toggle carriage return mode.
-When this mode is enabled, most carriage return characters received from
-the remote host will be mapped into a carriage return followed by
-a line feed.
-This mode does not affect those characters typed by the user, only
-those received from the remote host.
-This mode is not very useful unless the remote host
-only sends carriage return, but never line feed.
-The initial value for this toggle is
-.Dv FALSE .
-.It Ic debug
-Toggles socket level debugging (useful only to the
-.Ic super user  ) .
-The initial value for this toggle is
-.Dv FALSE .
-.It Ic encdebug
-Turns on debugging information for the encryption code.
-.It Ic localchars
-If this is
-.Dv TRUE ,
-then the
-.Ic flush  ,
-.Ic interrupt ,
-.Ic quit  ,
-.Ic erase ,
-and
-.Ic kill
-characters (see
-.Ic set
-above) are recognized locally, and transformed into (hopefully) appropriate
-.Tn TELNET
-control sequences
-(respectively
-.Ic ao  ,
-.Ic ip ,
-.Ic brk  ,
-.Ic ec ,
-and
-.Ic el  ;
-see
-.Ic send
-above).
-The initial value for this toggle is
-.Dv TRUE
-in \*(Lqold line by line\*(Rq mode,
-and
-.Dv FALSE
-in \*(Lqcharacter at a time\*(Rq mode.
-When the
-.Dv LINEMODE
-option is enabled, the value of
-.Ic localchars
-is ignored, and assumed to always be
-.Dv TRUE .
-If
-.Dv LINEMODE
-has ever been enabled, then
-.Ic quit
-is sent as
-.Ic abort  ,
-and
-.Ic eof
-and
-.Ic suspend
-are sent as
-.Ic eof
-and
-.Ic susp
-(see
-.Ic send
-above).
-.It Ic netdata
-Toggles the display of all network data (in hexadecimal format).
-The initial value for this toggle is
-.Dv FALSE .
-.It Ic options
-Toggles the display of some internal
-.Nm
-protocol processing (having to do with
-.Tn TELNET
-options).
-The initial value for this toggle is
-.Dv FALSE .
-.It Ic prettydump
-When the
-.Ic netdata
-toggle is enabled, if
-.Ic prettydump
-is enabled the output from the
-.Ic netdata
-command will be formatted in a more user readable format.
-Spaces are put between each character in the output, and the
-beginning of any
-.Nm
-escape sequence is preceded by a '*' to aid in locating them.
-.It Ic skiprc
-When the skiprc toggle is
-.Dv TRUE ,
-.Nm
-skips the reading of the
-.Pa \&.telnetrc
-file in the users home
-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).
-The initial value for this toggle is
-.Dv FALSE .
-.It Ic verbose_encrypt
-When the
-.Ic verbose_encrypt
-toggle is
-.Dv TRUE ,
-.Nm
-prints out a message each time encryption is enabled or
-disabled.  The initial value for this toggle is
-.Dv FALSE .
-.It Ic ?\&
-Displays the legal
-.Ic toggle
-commands.
-.El
-.It Ic z
-Suspend
-.Nm .
-This command only works when the user is using the
-.Xr csh  1  .
-.It Ic \&! Op Ar command
-Execute a single command in a subshell on the local
-system.  If
-.Ar command
-is omitted, then an interactive
-subshell is invoked.
-.It Ic ?\& Op Ar command
-Get help.  With no arguments,
-.Nm
-prints a help summary.
-If
-.Ar command
-is specified,
-.Nm
-will print the help information for just that command.
-.El
-.Sh ENVIRONMENT
-.Nm
-uses at least the
-.Ev HOME ,
-.Ev SHELL ,
-.Ev DISPLAY ,
-and
-.Ev TERM
-environment variables.
-Other environment variables may be propagated
-to the other side via the
-.Dv TELNET ENVIRON
-option.
-.Sh SEE ALSO
-.Xr rlogin 1 ,
-.Xr rsh 1 ,
-.Xr hosts 5 ,
-.Xr nologin 5 ,
-.Xr telnetd 8
-.Sh FILES
-.Bl -tag -width ~/.telnetrc -compact
-.It Pa ~/.telnetrc
-user customized telnet startup values
-.El
-.Sh HISTORY
-The
-.Nm
-command appeared in
-.Bx 4.2 .
-.Pp
-IPv6 support was added by WIDE/KAME project.
-.Sh NOTES
-On some remote systems, echo has to be turned off manually when in
-\*(Lqold line by line\*(Rq mode.
-.Pp
-In \*(Lqold line by line\*(Rq 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.
diff --git a/crypto/telnet/telnet/telnet.c b/crypto/telnet/telnet/telnet.c
deleted file mode 100644 (file)
index 830f1d7..0000000
+++ /dev/null
@@ -1,2390 +0,0 @@
-/*
- * Copyright (c) 1988, 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. 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
- *    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.
- *
- * @(#)telnet.c        8.4 (Berkeley) 5/30/95
- * $FreeBSD: src/crypto/telnet/telnet/telnet.c,v 1.4.2.5 2002/04/13 10:59:08 markm Exp $
- * $DragonFly: src/crypto/telnet/telnet/telnet.c,v 1.3 2005/03/28 18:03:32 drhodus Exp $
- */
-
-#include <sys/types.h>
-
-/* By the way, we need to include curses.h before telnet.h since,
- * among other things, telnet.h #defines 'DO', which is a variable
- * declared in curses.h.
- */
-
-#include <ctype.h>
-#include <curses.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <term.h>
-#include <unistd.h>
-#include <arpa/telnet.h>
-
-#include "ring.h"
-
-#include "defines.h"
-#include "externs.h"
-#include "types.h"
-#include "general.h"
-
-#ifdef AUTHENTICATION
-#include <libtelnet/auth.h>
-#endif
-#ifdef ENCRYPTION
-#include <libtelnet/encrypt.h>
-#endif
-#include <libtelnet/misc.h>
-\f
-#define        strip(x) ((my_want_state_is_wont(TELOPT_BINARY)) ? ((x)&0x7f) : (x))
-
-static unsigned char   subbuffer[SUBBUFSIZE],
-                       *subpointer, *subend;    /* buffer for sub-options */
-#define        SB_CLEAR()      subpointer = subbuffer;
-#define        SB_TERM()       { subend = subpointer; SB_CLEAR(); }
-#define        SB_ACCUM(c)     if (subpointer < (subbuffer+sizeof subbuffer)) { \
-                               *subpointer++ = (c); \
-                       }
-
-#define        SB_GET()        ((*subpointer++)&0xff)
-#define        SB_PEEK()       ((*subpointer)&0xff)
-#define        SB_EOF()        (subpointer >= subend)
-#define        SB_LEN()        (subend - subpointer)
-
-char   options[256];           /* The combined options */
-char   do_dont_resp[256];
-char   will_wont_resp[256];
-
-int
-       eight = 0,
-       autologin = 0,  /* Autologin anyone? */
-       skiprc = 0,
-       connected,
-       showoptions,
-       ISend,          /* trying to send network data in */
-       debug = 0,
-       crmod,
-       netdata,        /* Print out network data flow */
-       crlf,           /* Should '\r' be mapped to <CR><LF> (or <CR><NUL>)? */
-       telnetport,
-       SYNCHing,       /* we are in TELNET SYNCH mode */
-       flushout,       /* flush output */
-       autoflush = 0,  /* flush output when interrupting? */
-       autosynch,      /* send interrupt characters with SYNCH? */
-       localflow,      /* we handle flow control locally */
-       restartany,     /* if flow control enabled, restart on any character */
-       localchars,     /* we recognize interrupt/quit */
-       donelclchars,   /* the user has set "localchars" */
-       donebinarytoggle,       /* the user has put us in binary */
-       dontlecho,      /* do we suppress local echoing right now? */
-       globalmode,
-       doaddrlookup = 1, /* do a reverse address lookup? */
-       clienteof = 0;
-
-char *prompt = 0;
-#ifdef ENCRYPTION
-char *line;            /* hack around breakage in sra.c :-( !! */
-#endif
-
-cc_t escape;
-cc_t rlogin;
-#ifdef KLUDGELINEMODE
-cc_t echoc;
-#endif
-
-/*
- * Telnet receiver states for fsm
- */
-#define        TS_DATA         0
-#define        TS_IAC          1
-#define        TS_WILL         2
-#define        TS_WONT         3
-#define        TS_DO           4
-#define        TS_DONT         5
-#define        TS_CR           6
-#define        TS_SB           7               /* sub-option collection */
-#define        TS_SE           8               /* looking for sub-option end */
-
-static int     telrcv_state;
-#ifdef OLD_ENVIRON
-unsigned char telopt_environ = TELOPT_NEW_ENVIRON;
-#else
-# define telopt_environ TELOPT_NEW_ENVIRON
-#endif
-
-jmp_buf        toplevel;
-jmp_buf        peerdied;
-
-int    flushline;
-int    linemode;
-
-#ifdef KLUDGELINEMODE
-int    kludgelinemode = 1;
-#endif
-
-static int is_unique(char *, char **, char **);
-
-/*
- * The following are some clocks used to decide how to interpret
- * the relationship between various variables.
- */
-
-Clocks clocks;
-\f
-/*
- * Initialize telnet environment.
- */
-
-void
-init_telnet(void)
-{
-    env_init();
-
-    SB_CLEAR();
-    ClearArray(options);
-
-    connected = ISend = localflow = donebinarytoggle = 0;
-#ifdef AUTHENTICATION
-#ifdef ENCRYPTION
-    auth_encrypt_connect(connected);
-#endif
-#endif
-    restartany = -1;
-
-    SYNCHing = 0;
-
-    /* Don't change NetTrace */
-
-    escape = CONTROL(']');
-    rlogin = _POSIX_VDISABLE;
-#ifdef KLUDGELINEMODE
-    echoc = CONTROL('E');
-#endif
-
-    flushline = 1;
-    telrcv_state = TS_DATA;
-}
-\f
-
-/*
- * These routines are in charge of sending option negotiations
- * to the other side.
- *
- * The basic idea is that we send the negotiation if either side
- * is in disagreement as to what the current state should be.
- */
-
-void
-send_do(int c, int init)
-{
-    if (init) {
-       if (((do_dont_resp[c] == 0) && my_state_is_do(c)) ||
-                               my_want_state_is_do(c))
-           return;
-       set_my_want_state_do(c);
-       do_dont_resp[c]++;
-    }
-    NET2ADD(IAC, DO);
-    NETADD(c);
-    printoption("SENT", DO, c);
-}
-
-void
-send_dont(int c, int init)
-{
-    if (init) {
-       if (((do_dont_resp[c] == 0) && my_state_is_dont(c)) ||
-                               my_want_state_is_dont(c))
-           return;
-       set_my_want_state_dont(c);
-       do_dont_resp[c]++;
-    }
-    NET2ADD(IAC, DONT);
-    NETADD(c);
-    printoption("SENT", DONT, c);
-}
-
-void
-send_will(int c, int init)
-{
-    if (init) {
-       if (((will_wont_resp[c] == 0) && my_state_is_will(c)) ||
-                               my_want_state_is_will(c))
-           return;
-       set_my_want_state_will(c);
-       will_wont_resp[c]++;
-    }
-    NET2ADD(IAC, WILL);
-    NETADD(c);
-    printoption("SENT", WILL, c);
-}
-
-void
-send_wont(int c, int init)
-{
-    if (init) {
-       if (((will_wont_resp[c] == 0) && my_state_is_wont(c)) ||
-                               my_want_state_is_wont(c))
-           return;
-       set_my_want_state_wont(c);
-       will_wont_resp[c]++;
-    }
-    NET2ADD(IAC, WONT);
-    NETADD(c);
-    printoption("SENT", WONT, c);
-}
-
-void
-willoption(int option)
-{
-       int new_state_ok = 0;
-
-       if (do_dont_resp[option]) {
-           --do_dont_resp[option];
-           if (do_dont_resp[option] && my_state_is_do(option))
-               --do_dont_resp[option];
-       }
-
-       if ((do_dont_resp[option] == 0) && my_want_state_is_dont(option)) {
-
-           switch (option) {
-
-           case TELOPT_ECHO:
-           case TELOPT_BINARY:
-           case TELOPT_SGA:
-               settimer(modenegotiated);
-               /* FALL THROUGH */
-           case TELOPT_STATUS:
-#ifdef AUTHENTICATION
-           case TELOPT_AUTHENTICATION:
-#endif
-#ifdef ENCRYPTION
-           case TELOPT_ENCRYPT:
-#endif /* ENCRYPTION */
-               new_state_ok = 1;
-               break;
-
-           case TELOPT_TM:
-               if (flushout)
-                   flushout = 0;
-               /*
-                * Special case for TM.  If we get back a WILL,
-                * pretend we got back a WONT.
-                */
-               set_my_want_state_dont(option);
-               set_my_state_dont(option);
-               return;                 /* Never reply to TM will's/wont's */
-
-           case TELOPT_LINEMODE:
-           default:
-               break;
-           }
-
-           if (new_state_ok) {
-               set_my_want_state_do(option);
-               send_do(option, 0);
-               setconnmode(0);         /* possibly set new tty mode */
-           } else {
-               do_dont_resp[option]++;
-               send_dont(option, 0);
-           }
-       }
-       set_my_state_do(option);
-#ifdef ENCRYPTION
-       if (option == TELOPT_ENCRYPT)
-               encrypt_send_support();
-#endif /* ENCRYPTION */
-}
-
-void
-wontoption(int option)
-{
-       if (do_dont_resp[option]) {
-           --do_dont_resp[option];
-           if (do_dont_resp[option] && my_state_is_dont(option))
-               --do_dont_resp[option];
-       }
-
-       if ((do_dont_resp[option] == 0) && my_want_state_is_do(option)) {
-
-           switch (option) {
-
-#ifdef KLUDGELINEMODE
-           case TELOPT_SGA:
-               if (!kludgelinemode)
-                   break;
-               /* FALL THROUGH */
-#endif
-           case TELOPT_ECHO:
-               settimer(modenegotiated);
-               break;
-
-           case TELOPT_TM:
-               if (flushout)
-                   flushout = 0;
-               set_my_want_state_dont(option);
-               set_my_state_dont(option);
-               return;         /* Never reply to TM will's/wont's */
-
-           default:
-               break;
-           }
-           set_my_want_state_dont(option);
-           if (my_state_is_do(option))
-               send_dont(option, 0);
-           setconnmode(0);                     /* Set new tty mode */
-       } else if (option == TELOPT_TM) {
-           /*
-            * Special case for TM.
-            */
-           if (flushout)
-               flushout = 0;
-           set_my_want_state_dont(option);
-       }
-       set_my_state_dont(option);
-}
-
-static void
-dooption(int option)
-{
-       int new_state_ok = 0;
-
-       if (will_wont_resp[option]) {
-           --will_wont_resp[option];
-           if (will_wont_resp[option] && my_state_is_will(option))
-               --will_wont_resp[option];
-       }
-
-       if (will_wont_resp[option] == 0) {
-         if (my_want_state_is_wont(option)) {
-
-           switch (option) {
-
-           case TELOPT_TM:
-               /*
-                * Special case for TM.  We send a WILL, but pretend
-                * we sent WONT.
-                */
-               send_will(option, 0);
-               set_my_want_state_wont(TELOPT_TM);
-               set_my_state_wont(TELOPT_TM);
-               return;
-
-           case TELOPT_BINARY:         /* binary mode */
-           case TELOPT_NAWS:           /* window size */
-           case TELOPT_TSPEED:         /* terminal speed */
-           case TELOPT_LFLOW:          /* local flow control */
-           case TELOPT_TTYPE:          /* terminal type option */
-           case TELOPT_SGA:            /* no big deal */
-#ifdef ENCRYPTION
-           case TELOPT_ENCRYPT:        /* encryption variable option */
-#endif /* ENCRYPTION */
-               new_state_ok = 1;
-               break;
-
-           case TELOPT_NEW_ENVIRON:    /* New environment variable option */
-#ifdef OLD_ENVIRON
-               if (my_state_is_will(TELOPT_OLD_ENVIRON))
-                       send_wont(TELOPT_OLD_ENVIRON, 1); /* turn off the old */
-               goto env_common;
-           case TELOPT_OLD_ENVIRON:    /* Old environment variable option */
-               if (my_state_is_will(TELOPT_NEW_ENVIRON))
-                       break;          /* Don't enable if new one is in use! */
-           env_common:
-               telopt_environ = option;
-#endif
-               new_state_ok = 1;
-               break;
-
-#ifdef AUTHENTICATION
-           case TELOPT_AUTHENTICATION:
-               if (autologin)
-                       new_state_ok = 1;
-               break;
-#endif
-
-           case TELOPT_XDISPLOC:       /* X Display location */
-               if (env_getvalue("DISPLAY"))
-                   new_state_ok = 1;
-               break;
-
-           case TELOPT_LINEMODE:
-#ifdef KLUDGELINEMODE
-               kludgelinemode = 0;
-               send_do(TELOPT_SGA, 1);
-#endif
-               set_my_want_state_will(TELOPT_LINEMODE);
-               send_will(option, 0);
-               set_my_state_will(TELOPT_LINEMODE);
-               slc_init();
-               return;
-
-           case TELOPT_ECHO:           /* We're never going to echo... */
-           default:
-               break;
-           }
-
-           if (new_state_ok) {
-               set_my_want_state_will(option);
-               send_will(option, 0);
-               setconnmode(0);                 /* Set new tty mode */
-           } else {
-               will_wont_resp[option]++;
-               send_wont(option, 0);
-           }
-         } else {
-           /*
-            * Handle options that need more things done after the
-            * other side has acknowledged the option.
-            */
-           switch (option) {
-           case TELOPT_LINEMODE:
-#ifdef KLUDGELINEMODE
-               kludgelinemode = 0;
-               send_do(TELOPT_SGA, 1);
-#endif
-               set_my_state_will(option);
-               slc_init();
-               send_do(TELOPT_SGA, 0);
-               return;
-           }
-         }
-       }
-       set_my_state_will(option);
-}
-
-static void
-dontoption(int option)
-{
-
-       if (will_wont_resp[option]) {
-           --will_wont_resp[option];
-           if (will_wont_resp[option] && my_state_is_wont(option))
-               --will_wont_resp[option];
-       }
-
-       if ((will_wont_resp[option] == 0) && my_want_state_is_will(option)) {
-           switch (option) {
-           case TELOPT_LINEMODE:
-               linemode = 0;   /* put us back to the default state */
-               break;
-#ifdef OLD_ENVIRON
-           case TELOPT_NEW_ENVIRON:
-               /*
-                * The new environ option wasn't recognized, try
-                * the old one.
-                */
-               send_will(TELOPT_OLD_ENVIRON, 1);
-               telopt_environ = TELOPT_OLD_ENVIRON;
-               break;
-#endif
-           }
-           /* we always accept a DONT */
-           set_my_want_state_wont(option);
-           if (my_state_is_will(option))
-               send_wont(option, 0);
-           setconnmode(0);                     /* Set new tty mode */
-       }
-       set_my_state_wont(option);
-}
-
-/*
- * Given a buffer returned by tgetent(), this routine will turn
- * the pipe separated 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).
- */
-
-static const char *name_unknown = "UNKNOWN";
-static const char *unknown[] = { NULL, NULL };
-
-static const char **
-mklist(char *buf, char *name)
-{
-       int n;
-       char c, *cp, **argvp, *cp2, **argv, **avt;
-
-       if (name) {
-               if (strlen(name) > 40) {
-                       name = 0;
-                       unknown[0] = name_unknown;
-               } else {
-                       unknown[0] = name;
-                       upcase(name);
-               }
-       } else
-               unknown[0] = name_unknown;
-       /*
-        * Count up the number of names.
-        */
-       for (n = 1, cp = buf; *cp && *cp != ':'; cp++) {
-               if (*cp == '|')
-                       n++;
-       }
-       /*
-        * Allocate an array to put the name pointers into
-        */
-       argv = (char **)malloc((n+3)*sizeof(char *));
-       if (argv == 0)
-               return(unknown);
-
-       /*
-        * Fill up the array of pointers to names.
-        */
-       *argv = 0;
-       argvp = argv+1;
-       n = 0;
-       for (cp = cp2 = buf; (c = *cp);  cp++) {
-               if (c == '|' || c == ':') {
-                       *cp++ = '\0';
-                       /*
-                        * Skip entries that have spaces or are over 40
-                        * characters long.  If this is our environment
-                        * name, then put it up front.  Otherwise, as
-                        * long as this is not a duplicate name (case
-                        * insensitive) add it to the list.
-                        */
-                       if (n || (cp - cp2 > 41))
-                               ;
-                       else if (name && (strncasecmp(name, cp2, cp-cp2) == 0))
-                               *argv = cp2;
-                       else if (is_unique(cp2, argv+1, argvp))
-                               *argvp++ = cp2;
-                       if (c == ':')
-                               break;
-                       /*
-                        * Skip multiple delimiters. Reset cp2 to
-                        * the beginning of the next name. Reset n,
-                        * the flag for names with spaces.
-                        */
-                       while ((c = *cp) == '|')
-                               cp++;
-                       cp2 = cp;
-                       n = 0;
-               }
-               /*
-                * Skip entries with spaces or non-ascii values.
-                * Convert lower case letters to upper case.
-                */
-               if ((c == ' ') || !isascii(c))
-                       n = 1;
-               else if (islower(c))
-                       *cp = toupper(c);
-       }
-
-       /*
-        * Check for an old V6 2 character name.  If the second
-        * name points to the beginning of the buffer, and is
-        * only 2 characters long, move it to the end of the array.
-        */
-       if ((argv[1] == buf) && (strlen(argv[1]) == 2)) {
-               --argvp;
-               for (avt = &argv[1]; avt < argvp; avt++)
-                       *avt = *(avt+1);
-               *argvp++ = buf;
-       }
-
-       /*
-        * Duplicate last name, for TTYPE option, and null
-        * terminate the array.  If we didn't find a match on
-        * our terminal name, put that name at the beginning.
-        */
-       cp = *(argvp-1);
-       *argvp++ = cp;
-       *argvp = 0;
-
-       if (*argv == 0) {
-               if (name)
-                       *argv = name;
-               else {
-                       --argvp;
-                       for (avt = argv; avt < argvp; avt++)
-                               *avt = *(avt+1);
-               }
-       }
-       if (*argv)
-               return((const char **)argv);
-       else
-               return(unknown);
-}
-
-static int
-is_unique(char *name, char **as, char **ae)
-{
-       char **ap;
-       int n;
-
-       n = strlen(name) + 1;
-       for (ap = as; ap < ae; ap++)
-               if (strncasecmp(*ap, name, n) == 0)
-                       return(0);
-       return (1);
-}
-
-#ifdef TERMCAP
-char termbuf[1024];
-
-/*ARGSUSED*/
-static int
-setupterm(char *tname, int fd, int *errp)
-{
-       if (tgetent(termbuf, tname) == 1) {
-               termbuf[1023] = '\0';
-               if (errp)
-                       *errp = 1;
-               return(0);
-       }
-       if (errp)
-               *errp = 0;
-       return(-1);
-}
-#else
-#define        termbuf ttytype
-extern char ttytype[];
-#endif
-
-int resettermname = 1;
-
-static const char *
-gettermname(void)
-{
-       char *tname;
-       static const char **tnamep = 0;
-       static const char **next;
-       int err;
-
-       if (resettermname) {
-               resettermname = 0;
-               if (tnamep && tnamep != unknown)
-                       free(tnamep);
-               if ((tname = env_getvalue("TERM")) &&
-                               (setupterm(tname, 1, &err) == 0)) {
-                       tnamep = mklist(termbuf, tname);
-               } else {
-                       if (tname && (strlen(tname) <= 40)) {
-                               unknown[0] = tname;
-                               upcase(tname);
-                       } else
-                               unknown[0] = name_unknown;
-                       tnamep = unknown;
-               }
-               next = tnamep;
-       }
-       if (*next == 0)
-               next = tnamep;
-       return(*next++);
-}
-/*
- * suboption()
- *
- *     Look at the sub-option buffer, and try to be helpful to the other
- * side.
- *
- *     Currently we recognize:
- *
- *             Terminal type, send request.
- *             Terminal speed (send request).
- *             Local flow control (is request).
- *             Linemode
- */
-
-static void
-suboption(void)
-{
-    unsigned char subchar;
-
-    printsub('<', subbuffer, SB_LEN()+2);
-    switch (subchar = SB_GET()) {
-    case TELOPT_TTYPE:
-       if (my_want_state_is_wont(TELOPT_TTYPE))
-           return;
-       if (SB_EOF() || SB_GET() != TELQUAL_SEND) {
-           return;
-       } else {
-           const char *name;
-           unsigned char temp[50];
-           int len;
-
-           name = gettermname();
-           len = strlen(name) + 4 + 2;
-           if (len < NETROOM()) {
-               sprintf(temp, "%c%c%c%c%s%c%c", IAC, SB, TELOPT_TTYPE,
-                               TELQUAL_IS, name, IAC, SE);
-               ring_supply_data(&netoring, temp, len);
-               printsub('>', &temp[2], len-2);
-           } else {
-               ExitString("No room in buffer for terminal type.\n", 1);
-               /*NOTREACHED*/
-           }
-       }
-       break;
-    case TELOPT_TSPEED:
-       if (my_want_state_is_wont(TELOPT_TSPEED))
-           return;
-       if (SB_EOF())
-           return;
-       if (SB_GET() == TELQUAL_SEND) {
-           long ospeed, ispeed;
-           unsigned char temp[50];
-           int len;
-
-           TerminalSpeeds(&ispeed, &ospeed);
-
-           sprintf((char *)temp, "%c%c%c%c%ld,%ld%c%c", IAC, SB, TELOPT_TSPEED,
-                   TELQUAL_IS, ospeed, ispeed, IAC, SE);
-           len = strlen((char *)temp+4) + 4;   /* temp[3] is 0 ... */
-
-           if (len < NETROOM()) {
-               ring_supply_data(&netoring, temp, len);
-               printsub('>', temp+2, len - 2);
-           }
-/*@*/      else printf("lm_will: not enough room in buffer\n");
-       }
-       break;
-    case TELOPT_LFLOW:
-       if (my_want_state_is_wont(TELOPT_LFLOW))
-           return;
-       if (SB_EOF())
-           return;
-       switch(SB_GET()) {
-       case LFLOW_RESTART_ANY:
-           restartany = 1;
-           break;
-       case LFLOW_RESTART_XON:
-           restartany = 0;
-           break;
-       case LFLOW_ON:
-           localflow = 1;
-           break;
-       case LFLOW_OFF:
-           localflow = 0;
-           break;
-       default:
-           return;
-       }
-       setcommandmode();
-       setconnmode(0);
-       break;
-
-    case TELOPT_LINEMODE:
-       if (my_want_state_is_wont(TELOPT_LINEMODE))
-           return;
-       if (SB_EOF())
-           return;
-       switch (SB_GET()) {
-       case WILL:
-           lm_will(subpointer, SB_LEN());
-           break;
-       case WONT:
-           lm_wont(subpointer, SB_LEN());
-           break;
-       case DO:
-           lm_do(subpointer, SB_LEN());
-           break;
-       case DONT:
-           lm_dont(subpointer, SB_LEN());
-           break;
-       case LM_SLC:
-           slc(subpointer, SB_LEN());
-           break;
-       case LM_MODE:
-           lm_mode(subpointer, SB_LEN(), 0);
-           break;
-       default:
-           break;
-       }
-       break;
-
-#ifdef OLD_ENVIRON
-    case TELOPT_OLD_ENVIRON:
-#endif
-    case TELOPT_NEW_ENVIRON:
-       if (SB_EOF())
-           return;
-       switch(SB_PEEK()) {
-       case TELQUAL_IS:
-       case TELQUAL_INFO:
-           if (my_want_state_is_dont(subchar))
-               return;
-           break;
-       case TELQUAL_SEND:
-           if (my_want_state_is_wont(subchar)) {
-               return;
-           }
-           break;
-       default:
-           return;
-       }
-       env_opt(subpointer, SB_LEN());
-       break;
-
-    case TELOPT_XDISPLOC:
-       if (my_want_state_is_wont(TELOPT_XDISPLOC))
-           return;
-       if (SB_EOF())
-           return;
-       if (SB_GET() == TELQUAL_SEND) {
-           unsigned char temp[50], *dp;
-           int len;
-
-           if ((dp = env_getvalue("DISPLAY")) == NULL ||
-               strlen(dp) > sizeof(temp) - 7) {
-               /*
-                * Something happened, we no longer have a DISPLAY
-                * variable.  Or it is too long.  So, turn off the option.
-                */
-               send_wont(TELOPT_XDISPLOC, 1);
-               break;
-           }
-           snprintf(temp, sizeof(temp), "%c%c%c%c%s%c%c", IAC, SB,
-                   TELOPT_XDISPLOC, TELQUAL_IS, dp, IAC, SE);
-           len = strlen((char *)temp+4) + 4;   /* temp[3] is 0 ... */
-
-           if (len < NETROOM()) {
-               ring_supply_data(&netoring, temp, len);
-               printsub('>', temp+2, len - 2);
-           }
-/*@*/      else printf("lm_will: not enough room in buffer\n");
-       }
-       break;
-
-#ifdef AUTHENTICATION
-       case TELOPT_AUTHENTICATION: {
-               if (!autologin)
-                       break;
-               if (SB_EOF())
-                       return;
-               switch(SB_GET()) {
-               case TELQUAL_IS:
-                       if (my_want_state_is_dont(TELOPT_AUTHENTICATION))
-                               return;
-                       auth_is(subpointer, SB_LEN());
-                       break;
-               case TELQUAL_SEND:
-                       if (my_want_state_is_wont(TELOPT_AUTHENTICATION))
-                               return;
-                       auth_send(subpointer, SB_LEN());
-                       break;
-               case TELQUAL_REPLY:
-                       if (my_want_state_is_wont(TELOPT_AUTHENTICATION))
-                               return;
-                       auth_reply(subpointer, SB_LEN());
-                       break;
-               case TELQUAL_NAME:
-                       if (my_want_state_is_dont(TELOPT_AUTHENTICATION))
-                               return;
-                       auth_name(subpointer, SB_LEN());
-                       break;
-               }
-       }
-       break;
-#endif
-#ifdef ENCRYPTION
-       case TELOPT_ENCRYPT:
-               if (SB_EOF())
-                       return;
-               switch(SB_GET()) {
-               case ENCRYPT_START:
-                       if (my_want_state_is_dont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_start(subpointer, SB_LEN());
-                       break;
-               case ENCRYPT_END:
-                       if (my_want_state_is_dont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_end();
-                       break;
-               case ENCRYPT_SUPPORT:
-                       if (my_want_state_is_wont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_support(subpointer, SB_LEN());
-                       break;
-               case ENCRYPT_REQSTART:
-                       if (my_want_state_is_wont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_request_start(subpointer, SB_LEN());
-                       break;
-               case ENCRYPT_REQEND:
-                       if (my_want_state_is_wont(TELOPT_ENCRYPT))
-                               return;
-                       /*
-                        * We can always send an REQEND so that we cannot
-                        * get stuck encrypting.  We should only get this
-                        * if we have been able to get in the correct mode
-                        * anyhow.
-                        */
-                       encrypt_request_end();
-                       break;
-               case ENCRYPT_IS:
-                       if (my_want_state_is_dont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_is(subpointer, SB_LEN());
-                       break;
-               case ENCRYPT_REPLY:
-                       if (my_want_state_is_wont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_reply(subpointer, SB_LEN());
-                       break;
-               case ENCRYPT_ENC_KEYID:
-                       if (my_want_state_is_dont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_enc_keyid(subpointer, SB_LEN());
-                       break;
-               case ENCRYPT_DEC_KEYID:
-                       if (my_want_state_is_wont(TELOPT_ENCRYPT))
-                               return;
-                       encrypt_dec_keyid(subpointer, SB_LEN());
-                       break;
-               default:
-                       break;
-               }
-               break;
-#endif /* ENCRYPTION */
-    default:
-       break;
-    }
-}
-
-static unsigned char str_lm[] = { IAC, SB, TELOPT_LINEMODE, 0, 0, IAC, SE };
-
-void
-lm_will(unsigned char *cmd, int len)
-{
-    if (len < 1) {
-/*@*/  printf("lm_will: no command!!!\n");     /* Should not happen... */
-       return;
-    }
-    switch(cmd[0]) {
-    case LM_FORWARDMASK:       /* We shouldn't ever get this... */
-    default:
-       str_lm[3] = DONT;
-       str_lm[4] = cmd[0];
-       if (NETROOM() > (int)sizeof(str_lm)) {
-           ring_supply_data(&netoring, str_lm, sizeof(str_lm));
-           printsub('>', &str_lm[2], sizeof(str_lm)-2);
-       }
-/*@*/  else printf("lm_will: not enough room in buffer\n");
-       break;
-    }
-}
-
-void
-lm_wont(unsigned char *cmd, int len)
-{
-    if (len < 1) {
-/*@*/  printf("lm_wont: no command!!!\n");     /* Should not happen... */
-       return;
-    }
-    switch(cmd[0]) {
-    case LM_FORWARDMASK:       /* We shouldn't ever get this... */
-    default:
-       /* We are always DONT, so don't respond */
-       return;
-    }
-}
-
-void
-lm_do(unsigned char *cmd, int len)
-{
-    if (len < 1) {
-/*@*/  printf("lm_do: no command!!!\n");       /* Should not happen... */
-       return;
-    }
-    switch(cmd[0]) {
-    case LM_FORWARDMASK:
-    default:
-       str_lm[3] = WONT;
-       str_lm[4] = cmd[0];
-       if (NETROOM() > (int)sizeof(str_lm)) {
-           ring_supply_data(&netoring, str_lm, sizeof(str_lm));
-           printsub('>', &str_lm[2], sizeof(str_lm)-2);
-       }
-/*@*/  else printf("lm_do: not enough room in buffer\n");
-       break;
-    }
-}
-
-void
-lm_dont(unsigned char *cmd, int len)
-{
-    if (len < 1) {
-/*@*/  printf("lm_dont: no command!!!\n");     /* Should not happen... */
-       return;
-    }
-    switch(cmd[0]) {
-    case LM_FORWARDMASK:
-    default:
-       /* we are always WONT, so don't respond */
-       break;
-    }
-}
-
-static unsigned char str_lm_mode[] = {
-       IAC, SB, TELOPT_LINEMODE, LM_MODE, 0, IAC, SE
-};
-
-void
-lm_mode(unsigned char *cmd, int len, int init)
-{
-       if (len != 1)
-               return;
-       if ((linemode&MODE_MASK&~MODE_ACK) == *cmd)
-               return;
-       if (*cmd&MODE_ACK)
-               return;
-       linemode = *cmd&(MODE_MASK&~MODE_ACK);
-       str_lm_mode[4] = linemode;
-       if (!init)
-           str_lm_mode[4] |= MODE_ACK;
-       if (NETROOM() > (int)sizeof(str_lm_mode)) {
-           ring_supply_data(&netoring, str_lm_mode, sizeof(str_lm_mode));
-           printsub('>', &str_lm_mode[2], sizeof(str_lm_mode)-2);
-       }
-/*@*/  else printf("lm_mode: not enough room in buffer\n");
-       setconnmode(0); /* set changed mode */
-}
-
-\f
-
-/*
- * slc()
- * Handle special character suboption of LINEMODE.
- */
-
-struct spc {
-       cc_t val;
-       cc_t *valp;
-       char flags;     /* Current flags & level */
-       char mylevel;   /* Maximum level & flags */
-} spc_data[NSLC+1];
-
-#define SLC_IMPORT     0
-#define        SLC_EXPORT      1
-#define SLC_RVALUE     2
-static int slc_mode = SLC_EXPORT;
-
-void
-slc_init(void)
-{
-       struct spc *spcp;
-
-       localchars = 1;
-       for (spcp = spc_data; spcp < &spc_data[NSLC+1]; spcp++) {
-               spcp->val = 0;
-               spcp->valp = 0;
-               spcp->flags = spcp->mylevel = SLC_NOSUPPORT;
-       }
-
-#define        initfunc(func, flags) { \
-                                       spcp = &spc_data[func]; \
-                                       if ((spcp->valp = tcval(func))) { \
-                                           spcp->val = *spcp->valp; \
-                                           spcp->mylevel = SLC_VARIABLE|flags; \
-                                       } else { \
-                                           spcp->val = 0; \
-                                           spcp->mylevel = SLC_DEFAULT; \
-                                       } \
-                                   }
-
-       initfunc(SLC_SYNCH, 0);
-       /* No BRK */
-       initfunc(SLC_AO, 0);
-       initfunc(SLC_AYT, 0);
-       /* No EOR */
-       initfunc(SLC_ABORT, SLC_FLUSHIN|SLC_FLUSHOUT);
-       initfunc(SLC_EOF, 0);
-#ifndef        SYSV_TERMIO
-       initfunc(SLC_SUSP, SLC_FLUSHIN);
-#endif
-       initfunc(SLC_EC, 0);
-       initfunc(SLC_EL, 0);
-#ifndef        SYSV_TERMIO
-       initfunc(SLC_EW, 0);
-       initfunc(SLC_RP, 0);
-       initfunc(SLC_LNEXT, 0);
-#endif
-       initfunc(SLC_XON, 0);
-       initfunc(SLC_XOFF, 0);
-#ifdef SYSV_TERMIO
-       spc_data[SLC_XON].mylevel = SLC_CANTCHANGE;
-       spc_data[SLC_XOFF].mylevel = SLC_CANTCHANGE;
-#endif
-       initfunc(SLC_FORW1, 0);
-#ifdef USE_TERMIO
-       initfunc(SLC_FORW2, 0);
-       /* No FORW2 */
-#endif
-
-       initfunc(SLC_IP, SLC_FLUSHIN|SLC_FLUSHOUT);
-#undef initfunc
-
-       if (slc_mode == SLC_EXPORT)
-               slc_export();
-       else
-               slc_import(1);
-
-}
-
-void
-slcstate(void)
-{
-    printf("Special characters are %s values\n",
-               slc_mode == SLC_IMPORT ? "remote default" :
-               slc_mode == SLC_EXPORT ? "local" :
-                                        "remote");
-}
-
-void
-slc_mode_export(void)
-{
-    slc_mode = SLC_EXPORT;
-    if (my_state_is_will(TELOPT_LINEMODE))
-       slc_export();
-}
-
-void
-slc_mode_import(int def)
-{
-    slc_mode = def ? SLC_IMPORT : SLC_RVALUE;
-    if (my_state_is_will(TELOPT_LINEMODE))
-       slc_import(def);
-}
-
-unsigned char slc_import_val[] = {
-       IAC, SB, TELOPT_LINEMODE, LM_SLC, 0, SLC_VARIABLE, 0, IAC, SE
-};
-unsigned char slc_import_def[] = {
-       IAC, SB, TELOPT_LINEMODE, LM_SLC, 0, SLC_DEFAULT, 0, IAC, SE
-};
-
-void
-slc_import(int def)
-{
-    if (NETROOM() > (int)sizeof(slc_import_val)) {
-       if (def) {
-           ring_supply_data(&netoring, slc_import_def, sizeof(slc_import_def));
-           printsub('>', &slc_import_def[2], sizeof(slc_import_def)-2);
-       } else {
-           ring_supply_data(&netoring, slc_import_val, sizeof(slc_import_val));
-           printsub('>', &slc_import_val[2], sizeof(slc_import_val)-2);
-       }
-    }
-/*@*/ else printf("slc_import: not enough room\n");
-}
-
-void
-slc_export(void)
-{
-    struct spc *spcp;
-
-    TerminalDefaultChars();
-
-    slc_start_reply();
-    for (spcp = &spc_data[1]; spcp < &spc_data[NSLC+1]; spcp++) {
-       if (spcp->mylevel != SLC_NOSUPPORT) {
-           if (spcp->val == (cc_t)(_POSIX_VDISABLE))
-               spcp->flags = SLC_NOSUPPORT;
-           else
-               spcp->flags = spcp->mylevel;
-           if (spcp->valp)
-               spcp->val = *spcp->valp;
-           slc_add_reply(spcp - spc_data, spcp->flags, spcp->val);
-       }
-    }
-    slc_end_reply();
-    (void)slc_update();
-    setconnmode(1);    /* Make sure the character values are set */
-}
-
-void
-slc(unsigned char *cp, int len)
-{
-       struct spc *spcp;
-       int func,level;
-
-       slc_start_reply();
-
-       for (; len >= 3; len -=3, cp +=3) {
-
-               func = cp[SLC_FUNC];
-
-               if (func == 0) {
-                       /*
-                        * Client side: always ignore 0 function.
-                        */
-                       continue;
-               }
-               if (func > NSLC) {
-                       if ((cp[SLC_FLAGS] & SLC_LEVELBITS) != SLC_NOSUPPORT)
-                               slc_add_reply(func, SLC_NOSUPPORT, 0);
-                       continue;
-               }
-
-               spcp = &spc_data[func];
-
-               level = cp[SLC_FLAGS]&(SLC_LEVELBITS|SLC_ACK);
-
-               if ((cp[SLC_VALUE] == (unsigned char)spcp->val) &&
-                   ((level&SLC_LEVELBITS) == (spcp->flags&SLC_LEVELBITS))) {
-                       continue;
-               }
-
-               if (level == (SLC_DEFAULT|SLC_ACK)) {
-                       /*
-                        * This is an error condition, the SLC_ACK
-                        * bit should never be set for the SLC_DEFAULT
-                        * level.  Our best guess to recover is to
-                        * ignore the SLC_ACK bit.
-                        */
-                       cp[SLC_FLAGS] &= ~SLC_ACK;
-               }
-
-               if (level == ((spcp->flags&SLC_LEVELBITS)|SLC_ACK)) {
-                       spcp->val = (cc_t)cp[SLC_VALUE];
-                       spcp->flags = cp[SLC_FLAGS];    /* include SLC_ACK */
-                       continue;
-               }
-
-               level &= ~SLC_ACK;
-
-               if (level <= (spcp->mylevel&SLC_LEVELBITS)) {
-                       spcp->flags = cp[SLC_FLAGS]|SLC_ACK;
-                       spcp->val = (cc_t)cp[SLC_VALUE];
-               }
-               if (level == SLC_DEFAULT) {
-                       if ((spcp->mylevel&SLC_LEVELBITS) != SLC_DEFAULT)
-                               spcp->flags = spcp->mylevel;
-                       else
-                               spcp->flags = SLC_NOSUPPORT;
-               }
-               slc_add_reply(func, spcp->flags, spcp->val);
-       }
-       slc_end_reply();
-       if (slc_update())
-               setconnmode(1); /* set the  new character values */
-}
-
-void
-slc_check(void)
-{
-    struct spc *spcp;
-
-    slc_start_reply();
-    for (spcp = &spc_data[1]; spcp < &spc_data[NSLC+1]; spcp++) {
-       if (spcp->valp && spcp->val != *spcp->valp) {
-           spcp->val = *spcp->valp;
-           if (spcp->val == (cc_t)(_POSIX_VDISABLE))
-               spcp->flags = SLC_NOSUPPORT;
-           else
-               spcp->flags = spcp->mylevel;
-           slc_add_reply(spcp - spc_data, spcp->flags, spcp->val);
-       }
-    }
-    slc_end_reply();
-    setconnmode(1);
-}
-
-unsigned char slc_reply[128];
-unsigned char const * const slc_reply_eom = &slc_reply[sizeof(slc_reply)];
-unsigned char *slc_replyp;
-
-void
-slc_start_reply(void)
-{
-       slc_replyp = slc_reply;
-       *slc_replyp++ = IAC;
-       *slc_replyp++ = SB;
-       *slc_replyp++ = TELOPT_LINEMODE;
-       *slc_replyp++ = LM_SLC;
-}
-
-void
-slc_add_reply(unsigned char func, unsigned char flags, cc_t value)
-{
-       /* A sequence of up to 6 bytes my be written for this member of the SLC
-        * suboption list by this function.  The end of negotiation command,
-        * which is written by slc_end_reply(), will require 2 additional
-        * bytes.  Do not proceed unless there is sufficient space for these
-        * items.
-        */
-       if (&slc_replyp[6+2] > slc_reply_eom)
-               return;
-       if ((*slc_replyp++ = func) == IAC)
-               *slc_replyp++ = IAC;
-       if ((*slc_replyp++ = flags) == IAC)
-               *slc_replyp++ = IAC;
-