[BACK]Return to main.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / telnet

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: }