📄 ckctel.c
字号:
default: return(0); } /* switch (sb[0]) */#else return(0);#endif /* NOXFER */}#endif /* IKS_OPTION *//* Initialize telnet settings - set default values for ME and U modes */inttn_set_modes() { int opt,cmd; /* initialize all options to refuse in both directions */ for (opt = 0; opt < NTELOPTS; opt++) { TELOPT_ME(opt) = 0; TELOPT_U(opt) = 0; TELOPT_UNANSWERED_WILL(opt) = 0; TELOPT_UNANSWERED_DO(opt) = 0; TELOPT_UNANSWERED_WONT(opt) = 0; TELOPT_UNANSWERED_DONT(opt) = 0; TELOPT_UNANSWERED_SB(opt) = 0; TELOPT_ME_MODE(opt) = TN_NG_RF; TELOPT_U_MODE(opt) = TN_NG_RF; TELOPT_DEF_S_ME_MODE(opt) = TN_NG_RF; TELOPT_DEF_S_U_MODE(opt) = TN_NG_RF; TELOPT_DEF_C_ME_MODE(opt) = TN_NG_RF; TELOPT_DEF_C_U_MODE(opt) = TN_NG_RF; for (cmd = 0; cmd < 4; cmd ++) tncnts[TELOPT_INDEX(opt)][cmd] = 0; }#ifdef IKS_OPTION TELOPT_SB(TELOPT_KERMIT).kermit.me_start = 0; TELOPT_SB(TELOPT_KERMIT).kermit.u_start = 0; TELOPT_SB(TELOPT_KERMIT).kermit.me_req_start = 0; TELOPT_SB(TELOPT_KERMIT).kermit.me_req_stop = 0; TELOPT_SB(TELOPT_KERMIT).kermit.sop = 0;#endif /* IKS_OPTION */#ifdef CK_ENCRYPTION TELOPT_SB(TELOPT_ENCRYPTION).encrypt.stop = 0;#endif /* CK_ENCRYPTION */#ifdef CK_NAWS TELOPT_SB(TELOPT_NAWS).naws.x = 0; TELOPT_SB(TELOPT_NAWS).naws.y = 0;#endif /* CK_NAWS */#ifdef CK_SSL TELOPT_SB(TELOPT_START_TLS).start_tls.u_follows = 0; TELOPT_SB(TELOPT_START_TLS).start_tls.me_follows = 0;#endif /* CK_SSL */ /* Now set the ones we want to accept to the proper values */ TELOPT_DEF_S_ME_MODE(TELOPT_SGA) = TN_NG_RQ; TELOPT_DEF_S_U_MODE(TELOPT_SGA) = TN_NG_RQ; TELOPT_DEF_C_ME_MODE(TELOPT_SGA) = TN_NG_AC; TELOPT_DEF_C_U_MODE(TELOPT_SGA) = TN_NG_AC; TELOPT_DEF_S_ME_MODE(TELOPT_BINARY) = TN_NG_AC; TELOPT_DEF_S_U_MODE(TELOPT_BINARY) = TN_NG_AC; TELOPT_DEF_C_ME_MODE(TELOPT_BINARY) = TN_NG_AC; TELOPT_DEF_C_U_MODE(TELOPT_BINARY) = TN_NG_AC; TELOPT_DEF_S_ME_MODE(TELOPT_LOGOUT) = TN_NG_AC; TELOPT_DEF_S_U_MODE(TELOPT_LOGOUT) = TN_NG_AC; TELOPT_DEF_C_ME_MODE(TELOPT_LOGOUT) = TN_NG_AC; TELOPT_DEF_C_U_MODE(TELOPT_LOGOUT) = TN_NG_AC;#ifdef IKS_OPTION TELOPT_DEF_S_ME_MODE(TELOPT_KERMIT) = TN_NG_RQ; TELOPT_DEF_S_U_MODE(TELOPT_KERMIT) = TN_NG_RQ; TELOPT_DEF_C_ME_MODE(TELOPT_KERMIT) = TN_NG_RQ; TELOPT_DEF_C_U_MODE(TELOPT_KERMIT) = TN_NG_RQ;#endif /* IKS_OPTION */#ifdef CK_ENCRYPTION TELOPT_DEF_S_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ; TELOPT_DEF_S_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ; TELOPT_DEF_C_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ; TELOPT_DEF_C_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ;#endif /* CK_ENCRYPTION */ TELOPT_DEF_S_ME_MODE(TELOPT_ECHO) = TN_NG_RQ; TELOPT_DEF_S_U_MODE(TELOPT_TTYPE) = TN_NG_RQ;#ifdef CK_ENVIRONMENT TELOPT_DEF_S_U_MODE(TELOPT_NEWENVIRON) = TN_NG_RQ;#endif /* CK_ENVIRONMENT */#ifdef CK_AUTHENTICATION TELOPT_DEF_S_U_MODE(TELOPT_AUTHENTICATION) = TN_NG_RQ;#endif /* CK_AUTHENTICATION */#ifdef CK_SSL if (ck_ssleay_is_installed()) { TELOPT_DEF_S_U_MODE(TELOPT_START_TLS) = TN_NG_RQ; TELOPT_DEF_C_ME_MODE(TELOPT_START_TLS) = TN_NG_AC; }#endif /* CK_SSL */#ifdef CK_NAWS TELOPT_DEF_S_U_MODE(TELOPT_NAWS) = TN_NG_RQ;#endif /* CK_NAWS */ TELOPT_DEF_C_U_MODE(TELOPT_ECHO) = TN_NG_AC; TELOPT_DEF_C_ME_MODE(TELOPT_TTYPE) = TN_NG_RQ;#ifdef CK_ENVIRONMENT TELOPT_DEF_C_ME_MODE(TELOPT_NEWENVIRON) = TN_NG_RQ;#endif /* CK_ENVIRONMENT */#ifdef CK_AUTHENTICATION TELOPT_DEF_C_ME_MODE(TELOPT_AUTHENTICATION) = TN_NG_RQ;#endif /* CK_AUTHENTICATION */#ifdef CK_NAWS TELOPT_DEF_C_ME_MODE(TELOPT_NAWS) = TN_NG_RQ;#endif /* CK_NAWS */#ifdef CK_SNDLOC TELOPT_DEF_C_ME_MODE(TELOPT_SNDLOC) = TN_NG_RQ;#endif /* CK_SNDLOC */#ifdef CK_FORWARD_X TELOPT_DEF_C_U_MODE(TELOPT_FORWARD_X) = TN_NG_RQ;#endif /* CK_FORWARD_X */ /* Set the initial values for currently known mode */ for (opt = TELOPT_FIRST; opt <= TELOPT_LAST; opt++) { if (TELOPT_OK(opt)) { TELOPT_ME_MODE(opt) = sstelnet ? TELOPT_DEF_S_ME_MODE(opt) : TELOPT_DEF_C_ME_MODE(opt); TELOPT_U_MODE(opt) = sstelnet ? TELOPT_DEF_S_U_MODE(opt) : TELOPT_DEF_C_U_MODE(opt); } } return(1);}/* Send Delayed Subnegotiations */VOIDtn_sdsb() { if (TELOPT_SB(TELOPT_TTYPE).term.need_to_send) { tn_sttyp(); TELOPT_SB(TELOPT_TTYPE).term.need_to_send = 0; }#ifdef CK_ENVIRONMENT if (TELOPT_SB(TELOPT_NEWENVIRON).env.need_to_send && TELOPT_SB(TELOPT_NEWENVIRON).env.str) { tn_snenv((CHAR *)TELOPT_SB(TELOPT_NEWENVIRON).env.str, TELOPT_SB(TELOPT_NEWENVIRON).env.len); free(TELOPT_SB(TELOPT_NEWENVIRON).env.str); TELOPT_SB(TELOPT_NEWENVIRON).env.str=NULL; TELOPT_SB(TELOPT_NEWENVIRON).env.len=0; TELOPT_SB(TELOPT_NEWENVIRON).env.need_to_send = 0; }#ifdef CK_XDISPLOC if (TELOPT_SB(TELOPT_XDISPLOC).xdisp.need_to_send) { tn_sxdisploc(); TELOPT_SB(TELOPT_XDISPLOC).xdisp.need_to_send = 0; }#endif /* CK_XDISPLOC */#endif /* CK_ENVIRONMENT */#ifdef CK_NAWS if (TELOPT_SB(TELOPT_NAWS).naws.need_to_send) { tn_snaws(); TELOPT_SB(TELOPT_NAWS).naws.need_to_send = 0; }#endif /* CK_NAWS */#ifdef CK_SNDLOC if (TELOPT_SB(TELOPT_SNDLOC).sndloc.need_to_send) { tn_sndloc(); TELOPT_SB(TELOPT_SNDLOC).sndloc.need_to_send = 0; }#endif /* CK_SNDLOC */#ifdef CK_FORWARD_X if (TELOPT_SB(TELOPT_FORWARD_X).forward_x.need_to_send) { tn_sndfwdx(); TELOPT_SB(TELOPT_FORWARD_X).forward_x.need_to_send = 0; }#endif /* CK_FORWARD_X */}inttn_reset() { int x,opt,cmd; tn_wait_idx = 0; /* Clear the tn_push() buffer */ tn_wait_tmo = TN_TIMEOUT; /* Reset wait timer stats */ nflag = 0; /* Reset the TELNET OPTIONS counts */ for (opt = TELOPT_FIRST; opt <= TELOPT_LAST; opt++) { if (TELOPT_OK(opt)) { TELOPT_ME(opt) = 0; TELOPT_U(opt) = 0; TELOPT_UNANSWERED_WILL(opt) = 0; TELOPT_UNANSWERED_DO(opt) = 0; TELOPT_UNANSWERED_WONT(opt) = 0; TELOPT_UNANSWERED_DONT(opt) = 0; TELOPT_UNANSWERED_SB(opt) = 0; TELOPT_ME_MODE(opt) = sstelnet ? TELOPT_DEF_S_ME_MODE(opt) : TELOPT_DEF_C_ME_MODE(opt); TELOPT_U_MODE(opt) = sstelnet ? TELOPT_DEF_S_U_MODE(opt) : TELOPT_DEF_C_U_MODE(opt);#ifdef DEBUG if (deblog) { switch (TELOPT_ME_MODE(opt)) { case TN_NG_RF: debug(F110,"tn_ini ME REFUSE ",TELOPT(opt),0); break; case TN_NG_AC: debug(F110,"tn_ini ME ACCEPT ",TELOPT(opt),0); break; case TN_NG_RQ: debug(F110,"tn_ini ME REQUEST",TELOPT(opt),0); break; case TN_NG_MU: debug(F110,"tn_ini ME REQUIRE",TELOPT(opt),0); break; } switch (TELOPT_U_MODE(opt)) { case TN_NG_RF: debug(F110,"tn_ini U REFUSE ",TELOPT(opt),0); break; case TN_NG_AC: debug(F110,"tn_ini U ACCEPT ",TELOPT(opt),0); break; case TN_NG_RQ: debug(F110,"tn_ini U REQUEST",TELOPT(opt),0); break; case TN_NG_MU: debug(F110,"tn_ini U REQUIRE",TELOPT(opt),0); break; } }#endif /* DEBUG */ for (cmd = 0; cmd < 4; cmd ++) tncnts[TELOPT_INDEX(opt)][cmd] = 0; } }#ifdef CK_ENVIRONMENT if (!tn_env_flg) { TELOPT_ME_MODE(TELOPT_NEWENVIRON) = TN_NG_RF; TELOPT_U_MODE(TELOPT_NEWENVIRON) = TN_NG_RF; }#endif /* CK_ENVIRONMENT */#ifdef CK_SNDLOC if (!tn_loc) TELOPT_DEF_C_ME_MODE(TELOPT_SNDLOC) = TN_NG_RF;#endif /* CK_SNDLOC */#ifdef IKS_OPTION TELOPT_SB(TELOPT_KERMIT).kermit.me_start = 0; TELOPT_SB(TELOPT_KERMIT).kermit.u_start = 0; TELOPT_SB(TELOPT_KERMIT).kermit.me_req_start = 0; TELOPT_SB(TELOPT_KERMIT).kermit.me_req_stop = 0; TELOPT_SB(TELOPT_KERMIT).kermit.sop = 0;#endif /* IKS_OPTION */#ifdef CK_ENCRYPTION TELOPT_SB(TELOPT_ENCRYPTION).encrypt.stop = 0; TELOPT_SB(TELOPT_ENCRYPTION).encrypt.need_to_send = 0;#endif /* CK_ENCRYPTION */#ifdef CK_NAWS TELOPT_SB(TELOPT_NAWS).naws.need_to_send = 0; TELOPT_SB(TELOPT_NAWS).naws.x = 0; TELOPT_SB(TELOPT_NAWS).naws.y = 0;#endif /* CK_NAWS */ TELOPT_SB(TELOPT_TTYPE).term.need_to_send = 0; TELOPT_SB(TELOPT_TTYPE).term.type[0] = '\0';#ifdef CK_ENVIRONMENT TELOPT_SB(TELOPT_NEWENVIRON).env.need_to_send = 0; if (tn_first) TELOPT_SB(TELOPT_NEWENVIRON).env.str=NULL; else if (TELOPT_SB(TELOPT_NEWENVIRON).env.str) { free(TELOPT_SB(TELOPT_NEWENVIRON).env.str); TELOPT_SB(TELOPT_NEWENVIRON).env.str=NULL; } TELOPT_SB(TELOPT_NEWENVIRON).env.len=0;#ifdef CK_XDISPLOC TELOPT_SB(TELOPT_XDISPLOC).xdisp.need_to_send = 0;#endif /* CK_XDISPLOC */#endif /* CK_ENVIRONMENT */#ifdef CK_SNDLOC TELOPT_SB(TELOPT_SNDLOC).sndloc.need_to_send = 0;#endif /* CK_SNDLOC */#ifdef CK_FORWARD_X TELOPT_SB(TELOPT_FORWARD_X).forward_x.need_to_send = 0; if ( TELOPT_SB(TELOPT_FORWARD_X).forward_x.listen_socket != -1 ) { } TELOPT_SB(TELOPT_FORWARD_X).forward_x.listen_socket = -1; for ( x=0 ; x<MAXFWDX ; x++ ) { TELOPT_SB(TELOPT_FORWARD_X).forward_x.channel[x].fd = -1; TELOPT_SB(TELOPT_FORWARD_X).forward_x.channel[x].id = -1; }#ifdef NT TELOPT_SB(TELOPT_FORWARD_X).forward_x.thread_started = 0;#endif /* NT */#endif /* CK_FORWARD_X */#ifdef CK_SSL if (tls_only_flag || ssl_only_flag) { TELOPT_ME_MODE(TELOPT_START_TLS) = TN_NG_RF; TELOPT_U_MODE(TELOPT_START_TLS) = TN_NG_RF; } TELOPT_SB(TELOPT_START_TLS).start_tls.u_follows = 0; TELOPT_SB(TELOPT_START_TLS).start_tls.me_follows = 0;#endif /* CK_SSL */#ifdef CK_ENCRYPTION if (!ck_crypt_is_installed()#ifdef CK_SSL || tls_only_flag || ssl_only_flag#endif /* CK_SSL */ ) { TELOPT_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RF; TELOPT_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RF; }#endif /* CK_ENCRYPTION */ tn_first = 0; /* No longer the first time init */#ifdef OS2 ttnum = -1; /* Reset TermType negotiation */ ttnumend = 0;#endif /* OS2 */ return(0);}/* Start a telnet connection. *//* Returns -1 on error, 0 if nothing happens, 1 if init msgs sent ok */inttn_ini() { int wait, x, opt; debug(F101,"tn_ini ttnproto","",ttnproto); debug(F101,"tn_ini tn_init","",tn_init); if (ttnet != NET_TCPB) /* Make sure connection is TCP/IP */ return(0); if (tn_init) /* Have we done this already? */ return(0); /* Don't do it again. */ tn_reset(); /* Reset telnet parameters */ if (ttnproto == NP_RLOGIN) { /* Reset flags even when RLOGIN */ tn_init = 1; return(0); } else if (ttnproto == NP_NONE) { /* If not talking to a telnet port, */ ttnproto = NP_TELNET; /* pretend it's telnet anyway, */ tn_init = 1; /* but don't send initial options. */ debug(F100,"tn_ini skipping telnet negotiations","",0); return(0); } else if (ttnproto == NP_TCPRAW) { /* Raw socket requested. */ return(0); } else if (ttnproto == NP_KERMIT) { /* switching to Telnet protocol */ debug(F100,"tn_start switching from Kermit to Telnet","",0); ttnproto = NP_TELNET; } debug(F111,"tn_start","sstelnet",sstelnet); wait = 0;#ifdef CK_SSL if (!TELOPT_ME(TELOPT_START_TLS) && TELOPT_ME_MODE(TELOPT_START_TLS) >= TN_NG_RQ) { if (tn_sopt(WILL, TELOPT_START_TLS) < 0) return(-1); TELOPT_UNANSWERED_WILL(TELOPT_START_TLS) = 1; wait = 1; } if (!TELOPT_U(TELOPT_START_TLS) && TELOPT_U_MODE(TELOPT_START_TLS) >= TN_NG_RQ) { if (tn_sopt(DO, TELOPT_START_TLS) < 0) return(-1); TELOPT_UNANSWERED_DO(TELOPT_START_TLS) = 1; wait = 1; }#ifdef COMMENT/* We can put off waiting for this until after we have requested AUTH. The next draft will specify how the WILL side is to decide between these conflicting options.*/ if (wait) { if (tn_wait("start_tls") < 0) { tn_push(); return(-1); } wait = 0; }#endif /* COMMENT */#endif /* CK_SSL */#ifdef CK_AUTHENTICATION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -