main.c
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:6k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1988, 1990, 1993
  3.  * The Regents of the University of California.  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. #ifdef SHOW_COPYRIGHTS
  34. static char copyright[] =
  35. "@(#) Copyright (c) 1988, 1990, 1993n
  36. The Regents of the University of California.  All rights reserved.n";
  37. #endif
  38. #ifdef SHOW_SCCSIDS
  39. static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 5/30/95";
  40. #endif
  41. #include <sys/types.h>
  42. #include "ring.h"
  43. #include "externs.h"
  44. #include "defines.h"
  45. /* These values need to be the same as defined in libtelnet/kerberos5.c */
  46. /* Either define them in both places, or put in some common header file. */
  47. #define OPTS_FORWARD_CREDS 0x00000002
  48. #define OPTS_FORWARDABLE_CREDS 0x00000001
  49. #if 0
  50. #define FORWARD
  51. #endif
  52. /*
  53.  * Initialize variables.
  54.  */
  55.     void
  56. tninit()
  57. {
  58.     init_terminal();
  59.     init_network();
  60.     init_telnet();
  61.     init_sys();
  62. #ifdef TN3270
  63.     init_3270();
  64. #endif
  65. }
  66. void
  67. usage()
  68. {
  69. fprintf(stderr, "Usage: %s %s%s%s%sn",
  70.     prompt,
  71.     "[-8] [-E] [-L] [-S tos] [-a] [-c] [-d] [-e char] [-l user]",
  72.     "nt[-n tracefile]",
  73. #ifdef TN3270
  74.     "[-noasynch] [-noasynctty] [-noasyncnet] [-r]nt[-t transcom]",
  75. #else
  76.     "[-r] ",
  77. #endif
  78.     "[host-name [port]]"
  79. );
  80. exit(1);
  81. }
  82. /*
  83.  * main.  Parse arguments, invoke the protocol or command parser.
  84.  */
  85. int main(argc, argv)
  86. int argc;
  87. char *argv[];
  88. {
  89. extern char *optarg;
  90. extern int optind;
  91. int ch;
  92. char *user;
  93. #ifdef FORWARD
  94. extern int forward_flags;
  95. #endif /* FORWARD */
  96. tninit(); /* Clear out things */
  97. #if defined(CRAY) && !defined(__STDC__)
  98. _setlist_init(); /* Work around compiler bug */
  99. #endif
  100. TerminalSaveState();
  101. if ((prompt = strrchr(argv[0], '/')))
  102. ++prompt;
  103. else
  104. prompt = argv[0];
  105. user = NULL;
  106. rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE;
  107. autologin = -1;
  108. while ((ch = getopt(argc, argv, "8EKLS:X:acde:fFk:l:n:rt:x")) != EOF) {
  109. switch(ch) {
  110. case '8':
  111. eight = 3; /* binary output and input */
  112. break;
  113. case 'E':
  114. rlogin = escape = _POSIX_VDISABLE;
  115. break;
  116. case 'K':
  117. break;
  118. case 'L':
  119. eight |= 2; /* binary output only */
  120. break;
  121. case 'S':
  122.     {
  123. #ifdef HAS_GETTOS
  124. extern int tos;
  125. if ((tos = parsetos(optarg, "tcp")) < 0)
  126. fprintf(stderr, "%s%s%s%sn",
  127. prompt, ": Bad TOS argument '",
  128. optarg,
  129. "; will try to use default TOS");
  130. #else
  131. fprintf(stderr,
  132.    "%s: Warning: -S ignored, no parsetos() support.n",
  133. prompt);
  134. #endif
  135.     }
  136. break;
  137. case 'X':
  138. break;
  139. case 'a':
  140. autologin = 1;
  141. break;
  142. case 'c':
  143. skiprc = 1;
  144. break;
  145. case 'd':
  146. debug = 1;
  147. break;
  148. case 'e':
  149. set_escape_char(optarg);
  150. break;
  151. case 'f':
  152. fprintf(stderr,
  153.  "%s: Warning: -f ignored, no Kerberos V5 support.n",
  154. prompt);
  155. break;
  156. case 'F':
  157. fprintf(stderr,
  158.  "%s: Warning: -F ignored, no Kerberos V5 support.n",
  159. prompt);
  160. break;
  161. case 'k':
  162. fprintf(stderr,
  163.    "%s: Warning: -k ignored, no Kerberos V4 support.n",
  164. prompt);
  165. break;
  166. case 'l':
  167. autologin = 1;
  168. user = optarg;
  169. break;
  170. case 'n':
  171. #ifdef TN3270
  172. /* distinguish between "-n oasynch" and "-noasynch" */
  173. if (argv[optind - 1][0] == '-' && argv[optind - 1][1]
  174.     == 'n' && argv[optind - 1][2] == 'o') {
  175. if (!strcmp(optarg, "oasynch")) {
  176. noasynchtty = 1;
  177. noasynchnet = 1;
  178. } else if (!strcmp(optarg, "oasynchtty"))
  179. noasynchtty = 1;
  180. else if (!strcmp(optarg, "oasynchnet"))
  181. noasynchnet = 1;
  182. } else
  183. #endif /* defined(TN3270) */
  184. SetNetTrace(optarg);
  185. break;
  186. case 'r':
  187. rlogin = '~';
  188. break;
  189. case 't':
  190. #ifdef TN3270 
  191. transcom = tline;
  192. (void)strcpy(transcom, optarg);
  193. #else
  194. fprintf(stderr,
  195.    "%s: Warning: -t ignored, no TN3270 support.n",
  196. prompt);
  197. #endif
  198. break;
  199. case 'x':
  200. fprintf(stderr,
  201.     "%s: Warning: -x ignored, no ENCRYPT support.n",
  202. prompt);
  203. break;
  204. case '?':
  205. default:
  206. usage();
  207. /* NOTREACHED */
  208. }
  209. }
  210. if (autologin == -1)
  211. autologin = (rlogin == _POSIX_VDISABLE) ? 0 : 1;
  212. argc -= optind;
  213. argv += optind;
  214. if (argc) {
  215. char *args[7], **argp = args;
  216. if (argc > 2)
  217. usage();
  218. *argp++ = prompt;
  219. if (user) {
  220. *argp++ = "-l";
  221. *argp++ = user;
  222. }
  223. *argp++ = argv[0]; /* host */
  224. if (argc > 1)
  225. *argp++ = argv[1]; /* port */
  226. *argp = 0;
  227. if (setjmp(toplevel) != 0)
  228. Exit(0);
  229. if (tn(argp - args, args) == 1)
  230. return (0);
  231. else
  232. return (1);
  233. }
  234. (void)setjmp(toplevel);
  235. for (;;) {
  236. #ifdef TN3270
  237. if (shell_active)
  238. shell_continue();
  239. else
  240. #endif
  241. command(1, 0, 0);
  242. }
  243. return 0;
  244. }