BSD 4_3_Net_2 release
[unix-history] / usr / src / include / arpa / telnet.h
index a201fa5..019bfeb 100644 (file)
@@ -2,23 +2,40 @@
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
  * Copyright (c) 1983 Regents of the University of California.
  * All rights reserved.
  *
- * Redistribution and use in source and binary forms are permitted provided
- * that: (1) source distributions retain this entire copyright notice and
- * comment, and (2) distributions including binaries display the following
- * acknowledgement:  ``This product includes software developed by the
- * University of California, Berkeley and its contributors'' in the
- * documentation or other materials provided with the distribution and in
- * all advertising materials mentioning features or use of this software.
- * 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * 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.
  *
  *
- *     @(#)telnet.h    5.10 (Berkeley) 6/28/90
+ * 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    5.14 (Berkeley) 4/3/91
  */
 
  */
 
+#ifndef _TELNET_H_
+#define        _TELNET_H_
+
 /*
  * Definitions for the TELNET protocol.
  */
 /*
  * Definitions for the TELNET protocol.
  */
 char *telcmds[] = {
        "EOF", "SUSP", "ABORT", "EOR",
        "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
 char *telcmds[] = {
        "EOF", "SUSP", "ABORT", "EOR",
        "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
-       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC",
+       "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)    ((x) <= TELCMD_LAST && (x) >= TELCMD_FIRST)
 #define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
 #define        TELCMD_FIRST    xEOF
 #define        TELCMD_LAST     IAC
 #define        TELCMD_OK(x)    ((x) <= TELCMD_LAST && (x) >= TELCMD_FIRST)
 #define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
-#endif
 
 /* telnet options */
 #define TELOPT_BINARY  0       /* 8-bit data path */
 
 /* telnet options */
 #define TELOPT_BINARY  0       /* 8-bit data path */
@@ -95,12 +115,14 @@ char *telcmds[] = {
 #define TELOPT_LINEMODE        34      /* Linemode option */
 #define TELOPT_XDISPLOC        35      /* X Display Location */
 #define TELOPT_ENVIRON 36      /* Environment variables */
 #define TELOPT_LINEMODE        34      /* Linemode option */
 #define TELOPT_XDISPLOC        35      /* X Display Location */
 #define TELOPT_ENVIRON 36      /* Environment variables */
-#define        TELOPT_AUTHENTICATION 45 /* XXX Auto Authenticate */
+#define        TELOPT_AUTHENTICATION 37/* Authenticate */
+#define        TELOPT_ENCRYPT  38      /* Encryption option */
 #define        TELOPT_EXOPL    255     /* extended-options-list */
 
 #define        TELOPT_EXOPL    255     /* extended-options-list */
 
-#define        NTELOPTS        (1+TELOPT_AUTHENTICATION)
+
+#define        NTELOPTS        (1+TELOPT_ENCRYPT)
 #ifdef TELOPTS
 #ifdef TELOPTS
-char *telopts[NTELOPTS] = {
+char *telopts[NTELOPTS+1] = {
        "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
        "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
        "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
        "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
        "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
        "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
@@ -109,12 +131,12 @@ char *telopts[NTELOPTS] = {
        "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
        "TACACS UID", "OUTPUT MARKING", "TTYLOC",
        "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
        "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
        "TACACS UID", "OUTPUT MARKING", "TTYLOC",
        "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
-       "LINEMODE", "XDISPLOC", "ENVIRON",
-       "UNKNOWN 37", "UNKNOWN 38", "UNKNOWN 39", "UNKNOWN 40", "UNKNOWN 41",
-       "UNKNOWN 42", "UNKNOWN 43", "UNKNOWN 44", "AUTHENTICATION",
+       "LINEMODE", "XDISPLOC", "ENVIRON", "AUTHENTICATION",
+       "ENCRYPT",
+       0,
 };
 #define        TELOPT_FIRST    TELOPT_BINARY
 };
 #define        TELOPT_FIRST    TELOPT_BINARY
-#define        TELOPT_LAST     TELOPT_AUTHENTICATION
+#define        TELOPT_LAST     TELOPT_ENCRYPT
 #define        TELOPT_OK(x)    ((x) <= TELOPT_LAST && (x) >= TELOPT_FIRST)
 #define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
 #endif
 #define        TELOPT_OK(x)    ((x) <= TELOPT_LAST && (x) >= TELOPT_FIRST)
 #define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
 #endif
@@ -123,6 +145,8 @@ char *telopts[NTELOPTS] = {
 #define        TELQUAL_IS      0       /* option is... */
 #define        TELQUAL_SEND    1       /* send option */
 #define        TELQUAL_INFO    2       /* ENVIRON: informational version of IS */
 #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 */
 
 /*
  * LINEMODE suboptions
 
 /*
  * LINEMODE suboptions
@@ -168,9 +192,24 @@ char *telopts[NTELOPTS] = {
 
 #define        NSLC            18
 
 
 #define        NSLC            18
 
-#define        SLC_NAMES       "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
+/*
+ * For backwards compatability, 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", \
                        "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
-                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2"
+                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
+#ifdef SLC_NAMES
+char *slc_names[] = {
+       SLC_NAMELIST
+};
+#else
+extern char *slc_names[];
+#define        SLC_NAMES SLC_NAMELIST
+#endif
+
+#define        SLC_NAME_OK(x)  ((x) >= 0 && (x) < NSLC)
+#define SLC_NAME(x)    slc_names[x]
 
 #define        SLC_NOSUPPORT   0
 #define        SLC_CANTCHANGE  1
 
 #define        SLC_NOSUPPORT   0
 #define        SLC_CANTCHANGE  1
@@ -194,12 +233,78 @@ char *telopts[NTELOPTS] = {
  * AUTHENTICATION suboptions
  */
 
  * AUTHENTICATION suboptions
  */
 
-#define        TELQUAL_AUTHTYPE_NONE           0
-#define        TELQUAL_AUTHTYPE_PRIVATE        1
-#define        TELQUAL_AUTHTYPE_KERBEROS       2
+/*
+ * 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_CNT            5
+
+#define        AUTHTYPE_TEST           99
+
+#ifdef AUTH_NAMES
+char *authtype_names[] = {
+       "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
+};
+#else
+extern char *authtype_names[];
+#endif
+
+#define        AUTHTYPE_NAME_OK(x)     ((x) >= 0 && (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 send 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
+char *encrypt_names[] = {
+       "IS", "SUPPORT", "REPLY", "START", "END",
+       "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+       0,
+};
+char *enctype_names[] = {
+       "ANY", "DES_CFB64",  "DES_OFB64",  0,
+};
+#else
+extern char *encrypt_names[];
+extern char *enctype_names[];
+#endif
+
+
+#define        ENCRYPT_NAME_OK(x)      ((x) >= 0 && (x) < ENCRYPT_CNT)
+#define        ENCRYPT_NAME(x)         encrypt_names[x]
 
 
-/* Kerberos-specific */
+#define        ENCTYPE_NAME_OK(x)      ((x) >= 0 && (x) < ENCTYPE_CNT)
+#define        ENCTYPE_NAME(x)         enctype_names[x]
 
 
-#define        TELQUAL_AUTHTYPE_KERBEROS_V4            4
-#define        TELQUAL_AUTHTYPE_KERBEROS_V5            5
-#define        TELQUAL_AUTHTYPE_KERBEROS_USERNAME      1
+#endif /* !_TELNET_H_ */