Annotation of src/usr.bin/telnet/main.c, Revision 1.1
1.1 ! deraadt 1: /*
! 2: * Copyright (c) 1988, 1990 Regents of the University of California.
! 3: * All rights reserved.
! 4: *
! 5: * Redistribution and use in source and binary forms, with or without
! 6: * modification, are permitted provided that the following conditions
! 7: * are met:
! 8: * 1. Redistributions of source code must retain the above copyright
! 9: * notice, this list of conditions and the following disclaimer.
! 10: * 2. Redistributions in binary form must reproduce the above copyright
! 11: * notice, this list of conditions and the following disclaimer in the
! 12: * documentation and/or other materials provided with the distribution.
! 13: * 3. All advertising materials mentioning features or use of this software
! 14: * must display the following acknowledgement:
! 15: * This product includes software developed by the University of
! 16: * California, Berkeley and its contributors.
! 17: * 4. Neither the name of the University nor the names of its contributors
! 18: * may be used to endorse or promote products derived from this software
! 19: * without specific prior written permission.
! 20: *
! 21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 31: * SUCH DAMAGE.
! 32: */
! 33:
! 34: #ifndef lint
! 35: char copyright[] =
! 36: "@(#) Copyright (c) 1988, 1990 Regents of the University of California.\n\
! 37: All rights reserved.\n";
! 38: #endif /* not lint */
! 39:
! 40: #ifndef lint
! 41: /* from: static char sccsid[] = "@(#)main.c 5.5 (Berkeley) 12/18/92"; */
! 42: static char *rcsid = "$Id: main.c,v 1.3 1994/02/25 03:00:29 cgd Exp $";
! 43: #endif /* not lint */
! 44:
! 45: #include <sys/types.h>
! 46:
! 47: #include "ring.h"
! 48: #include "externs.h"
! 49: #include "defines.h"
! 50:
! 51: /* These values need to be the same as defined in libtelnet/kerberos5.c */
! 52: /* Either define them in both places, or put in some common header file. */
! 53: #define OPTS_FORWARD_CREDS 0x00000002
! 54: #define OPTS_FORWARDABLE_CREDS 0x00000001
! 55:
! 56: #if 0
! 57: #define FORWARD
! 58: #endif
! 59:
! 60: /*
! 61: * Initialize variables.
! 62: */
! 63: void
! 64: tninit()
! 65: {
! 66: init_terminal();
! 67:
! 68: init_network();
! 69:
! 70: init_telnet();
! 71:
! 72: init_sys();
! 73:
! 74: #if defined(TN3270)
! 75: init_3270();
! 76: #endif
! 77: }
! 78:
! 79: void
! 80: usage()
! 81: {
! 82: fprintf(stderr, "Usage: %s %s%s%s%s\n",
! 83: prompt,
! 84: #ifdef AUTHENTICATION
! 85: " [-8] [-E] [-K] [-L] [-X atype] [-a] [-d] [-e char] [-k realm]",
! 86: "\n\t[-l user] [-f/-F] [-n tracefile] ",
! 87: #else
! 88: " [-8] [-E] [-L] [-a] [-d] [-e char] [-l user] [-n tracefile]",
! 89: "\n\t",
! 90: #endif
! 91: #if defined(TN3270) && defined(unix)
! 92: # ifdef AUTHENTICATION
! 93: "[-noasynch] [-noasynctty] [-noasyncnet]\n\t[-r] [-t transcom] ",
! 94: # else
! 95: "[-noasynch] [-noasynctty] [-noasyncnet] [-r] [-t transcom]\n\t",
! 96: # endif
! 97: #else
! 98: "[-r] ",
! 99: #endif
! 100: "[host-name [port]]"
! 101: );
! 102: exit(1);
! 103: }
! 104:
! 105: /*
! 106: * main. Parse arguments, invoke the protocol or command parser.
! 107: */
! 108:
! 109:
! 110: main(argc, argv)
! 111: int argc;
! 112: char *argv[];
! 113: {
! 114: extern char *optarg;
! 115: extern int optind;
! 116: int ch;
! 117: char *user, *strrchr();
! 118: #ifdef FORWARD
! 119: extern int forward_flags;
! 120: #endif /* FORWARD */
! 121:
! 122: tninit(); /* Clear out things */
! 123: #if defined(CRAY) && !defined(__STDC__)
! 124: _setlist_init(); /* Work around compiler bug */
! 125: #endif
! 126:
! 127: TerminalSaveState();
! 128:
! 129: if (prompt = strrchr(argv[0], '/'))
! 130: ++prompt;
! 131: else
! 132: prompt = argv[0];
! 133:
! 134: user = NULL;
! 135:
! 136: rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE;
! 137: autologin = -1;
! 138:
! 139: while ((ch = getopt(argc, argv, "8EKLS:X:acde:fFk:l:n:rt:x")) != EOF) {
! 140: switch(ch) {
! 141: case '8':
! 142: eight = 3; /* binary output and input */
! 143: break;
! 144: case 'E':
! 145: rlogin = escape = _POSIX_VDISABLE;
! 146: break;
! 147: case 'K':
! 148: #ifdef AUTHENTICATION
! 149: autologin = 0;
! 150: #endif
! 151: break;
! 152: case 'L':
! 153: eight |= 2; /* binary output only */
! 154: break;
! 155: case 'S':
! 156: {
! 157: #ifdef HAS_GETTOS
! 158: extern int tos;
! 159:
! 160: if ((tos = parsetos(optarg, "tcp")) < 0)
! 161: fprintf(stderr, "%s%s%s%s\n",
! 162: prompt, ": Bad TOS argument '",
! 163: optarg,
! 164: "; will try to use default TOS");
! 165: #else
! 166: fprintf(stderr,
! 167: "%s: Warning: -S ignored, no parsetos() support.\n",
! 168: prompt);
! 169: #endif
! 170: }
! 171: break;
! 172: case 'X':
! 173: #ifdef AUTHENTICATION
! 174: auth_disable_name(optarg);
! 175: #endif
! 176: break;
! 177: case 'a':
! 178: autologin = 1;
! 179: break;
! 180: case 'c':
! 181: skiprc = 1;
! 182: break;
! 183: case 'd':
! 184: debug = 1;
! 185: break;
! 186: case 'e':
! 187: set_escape_char(optarg);
! 188: break;
! 189: case 'f':
! 190: #if defined(AUTHENTICATION) && defined(KRB5) && defined(FORWARD)
! 191: if (forward_flags & OPTS_FORWARD_CREDS) {
! 192: fprintf(stderr,
! 193: "%s: Only one of -f and -F allowed.\n",
! 194: prompt);
! 195: usage();
! 196: }
! 197: forward_flags |= OPTS_FORWARD_CREDS;
! 198: #else
! 199: fprintf(stderr,
! 200: "%s: Warning: -f ignored, no Kerberos V5 support.\n",
! 201: prompt);
! 202: #endif
! 203: break;
! 204: case 'F':
! 205: #if defined(AUTHENTICATION) && defined(KRB5) && defined(FORWARD)
! 206: if (forward_flags & OPTS_FORWARD_CREDS) {
! 207: fprintf(stderr,
! 208: "%s: Only one of -f and -F allowed.\n",
! 209: prompt);
! 210: usage();
! 211: }
! 212: forward_flags |= OPTS_FORWARD_CREDS;
! 213: forward_flags |= OPTS_FORWARDABLE_CREDS;
! 214: #else
! 215: fprintf(stderr,
! 216: "%s: Warning: -F ignored, no Kerberos V5 support.\n",
! 217: prompt);
! 218: #endif
! 219: break;
! 220: case 'k':
! 221: #if defined(AUTHENTICATION) && defined(KRB4)
! 222: {
! 223: extern char *dest_realm, dst_realm_buf[], dst_realm_sz;
! 224: dest_realm = dst_realm_buf;
! 225: (void)strncpy(dest_realm, optarg, dst_realm_sz);
! 226: }
! 227: #else
! 228: fprintf(stderr,
! 229: "%s: Warning: -k ignored, no Kerberos V4 support.\n",
! 230: prompt);
! 231: #endif
! 232: break;
! 233: case 'l':
! 234: autologin = 1;
! 235: user = optarg;
! 236: break;
! 237: case 'n':
! 238: #if defined(TN3270) && defined(unix)
! 239: /* distinguish between "-n oasynch" and "-noasynch" */
! 240: if (argv[optind - 1][0] == '-' && argv[optind - 1][1]
! 241: == 'n' && argv[optind - 1][2] == 'o') {
! 242: if (!strcmp(optarg, "oasynch")) {
! 243: noasynchtty = 1;
! 244: noasynchnet = 1;
! 245: } else if (!strcmp(optarg, "oasynchtty"))
! 246: noasynchtty = 1;
! 247: else if (!strcmp(optarg, "oasynchnet"))
! 248: noasynchnet = 1;
! 249: } else
! 250: #endif /* defined(TN3270) && defined(unix) */
! 251: SetNetTrace(optarg);
! 252: break;
! 253: case 'r':
! 254: rlogin = '~';
! 255: break;
! 256: case 't':
! 257: #if defined(TN3270) && defined(unix)
! 258: transcom = tline;
! 259: (void)strcpy(transcom, optarg);
! 260: #else
! 261: fprintf(stderr,
! 262: "%s: Warning: -t ignored, no TN3270 support.\n",
! 263: prompt);
! 264: #endif
! 265: break;
! 266: case 'x':
! 267: fprintf(stderr,
! 268: "%s: Warning: -x ignored, no ENCRYPT support.\n",
! 269: prompt);
! 270: break;
! 271: case '?':
! 272: default:
! 273: usage();
! 274: /* NOTREACHED */
! 275: }
! 276: }
! 277: if (autologin == -1)
! 278: autologin = (rlogin == _POSIX_VDISABLE) ? 0 : 1;
! 279:
! 280: argc -= optind;
! 281: argv += optind;
! 282:
! 283: if (argc) {
! 284: char *args[7], **argp = args;
! 285:
! 286: if (argc > 2)
! 287: usage();
! 288: *argp++ = prompt;
! 289: if (user) {
! 290: *argp++ = "-l";
! 291: *argp++ = user;
! 292: }
! 293: *argp++ = argv[0]; /* host */
! 294: if (argc > 1)
! 295: *argp++ = argv[1]; /* port */
! 296: *argp = 0;
! 297:
! 298: if (setjmp(toplevel) != 0)
! 299: Exit(0);
! 300: if (tn(argp - args, args) == 1)
! 301: return (0);
! 302: else
! 303: return (1);
! 304: }
! 305: (void)setjmp(toplevel);
! 306: for (;;) {
! 307: #ifdef TN3270
! 308: if (shell_active)
! 309: shell_continue();
! 310: else
! 311: #endif
! 312: command(1, 0, 0);
! 313: }
! 314: }