386BSD 0.1 development
[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.
  *
- * 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.
  */
 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]
-#endif
 
 /* 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_AUTHENTICATION 45 /* XXX Auto Authenticate */
+#define        TELOPT_AUTHENTICATION 37/* Authenticate */
+#define        TELOPT_ENCRYPT  38      /* Encryption option */
 #define        TELOPT_EXOPL    255     /* extended-options-list */
 
-#define        NTELOPTS        (1+TELOPT_AUTHENTICATION)
+
+#define        NTELOPTS        (1+TELOPT_ENCRYPT)
 #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",
@@ -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",
-       "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_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
@@ -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_REPLY   2       /* AUTHENTICATION: client version of IS */
+#define        TELQUAL_NAME    3       /* AUTHENTICATION: client version of IS */
 
 /*
  * LINEMODE suboptions
@@ -168,9 +192,24 @@ char *telopts[NTELOPTS] = {
 
 #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", \
-                       "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
@@ -194,12 +233,78 @@ char *telopts[NTELOPTS] = {
  * 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_ */