| 58 |
|
|
| 59 |
struct _bbsnet_conf |
struct _bbsnet_conf |
| 60 |
{ |
{ |
| 61 |
char host1[20]; |
char org_name[40]; |
| 62 |
char host2[40]; |
char site_name[40]; |
| 63 |
char ip[40]; |
char host_name[IP_ADDR_LEN]; |
| 64 |
in_port_t port; |
in_port_t port; |
| 65 |
int8_t use_ssh; |
int8_t use_ssh; |
| 66 |
char charset[CHARSET_MAX_LEN + 1]; |
char charset[CHARSET_MAX_LEN + 1]; |
| 74 |
MENU *p_menu; |
MENU *p_menu; |
| 75 |
MENU_ITEM *p_menu_item; |
MENU_ITEM *p_menu_item; |
| 76 |
MENU_ITEM_ID menu_item_id; |
MENU_ITEM_ID menu_item_id; |
| 77 |
char t[256], *t1, *t2, *t3, *t4, *t5, *t6, *saveptr; |
char line[LINE_BUFFER_LEN], *t1, *t2, *t3, *t4, *t5, *t6, *saveptr; |
| 78 |
|
|
| 79 |
fp = fopen(file_config, "r"); |
fp = fopen(file_config, "r"); |
| 80 |
if (fp == NULL) |
if (fp == NULL) |
| 106 |
p_menu->screen_show = 0; |
p_menu->screen_show = 0; |
| 107 |
|
|
| 108 |
menu_item_id = 0; |
menu_item_id = 0; |
| 109 |
while (fgets(t, 255, fp) && menu_item_id < MAXSTATION) |
while (fgets(line, sizeof(line), fp) && menu_item_id < MAXSTATION) |
| 110 |
{ |
{ |
| 111 |
t1 = strtok_r(t, MENU_CONF_DELIM, &saveptr); |
t1 = strtok_r(line, MENU_CONF_DELIM, &saveptr); |
| 112 |
t2 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
t2 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
| 113 |
t3 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
t3 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
| 114 |
t4 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
t4 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
| 116 |
t6 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
t6 = strtok_r(NULL, MENU_CONF_DELIM, &saveptr); |
| 117 |
|
|
| 118 |
if (t1 == NULL || t2 == NULL || t3 == NULL || t4 == NULL || |
if (t1 == NULL || t2 == NULL || t3 == NULL || t4 == NULL || |
| 119 |
t5 == NULL || t6 == NULL || t[0] == '#' || t[0] == '*') |
t5 == NULL || t6 == NULL || line[0] == '#' || line[0] == '*') |
| 120 |
{ |
{ |
| 121 |
continue; |
continue; |
| 122 |
} |
} |
| 123 |
|
|
| 124 |
strncpy(bbsnet_conf[menu_item_id].host1, t2, sizeof(bbsnet_conf[menu_item_id].host1) - 1); |
strncpy(bbsnet_conf[menu_item_id].site_name, t2, sizeof(bbsnet_conf[menu_item_id].site_name) - 1); |
| 125 |
bbsnet_conf[menu_item_id].host1[sizeof(bbsnet_conf[menu_item_id].host1) - 1] = '\0'; |
bbsnet_conf[menu_item_id].site_name[sizeof(bbsnet_conf[menu_item_id].site_name) - 1] = '\0'; |
| 126 |
strncpy(bbsnet_conf[menu_item_id].host2, t1, sizeof(bbsnet_conf[menu_item_id].host2) - 1); |
strncpy(bbsnet_conf[menu_item_id].org_name, t1, sizeof(bbsnet_conf[menu_item_id].org_name) - 1); |
| 127 |
bbsnet_conf[menu_item_id].host2[sizeof(bbsnet_conf[menu_item_id].host2) - 1] = '\0'; |
bbsnet_conf[menu_item_id].org_name[sizeof(bbsnet_conf[menu_item_id].org_name) - 1] = '\0'; |
| 128 |
strncpy(bbsnet_conf[menu_item_id].ip, t3, sizeof(bbsnet_conf[menu_item_id].ip) - 1); |
strncpy(bbsnet_conf[menu_item_id].host_name, t3, sizeof(bbsnet_conf[menu_item_id].host_name) - 1); |
| 129 |
bbsnet_conf[menu_item_id].ip[sizeof(bbsnet_conf[menu_item_id].ip) - 1] = '\0'; |
bbsnet_conf[menu_item_id].host_name[sizeof(bbsnet_conf[menu_item_id].host_name) - 1] = '\0'; |
| 130 |
bbsnet_conf[menu_item_id].port = (in_port_t)(t4 ? atoi(t4) : 23); |
bbsnet_conf[menu_item_id].port = (in_port_t)(t4 ? atoi(t4) : 23); |
| 131 |
bbsnet_conf[menu_item_id].use_ssh = (toupper(t5[0]) == 'Y'); |
bbsnet_conf[menu_item_id].use_ssh = (toupper(t5[0]) == 'Y'); |
| 132 |
strncpy(bbsnet_conf[menu_item_id].charset, t6, sizeof(bbsnet_conf[menu_item_id].charset) - 1); |
strncpy(bbsnet_conf[menu_item_id].charset, t6, sizeof(bbsnet_conf[menu_item_id].charset) - 1); |
| 149 |
(char)(menu_item_id < MAXSTATION / 2 ? 'A' + menu_item_id : 'a' + menu_item_id); |
(char)(menu_item_id < MAXSTATION / 2 ? 'A' + menu_item_id : 'a' + menu_item_id); |
| 150 |
p_menu_item->name[1] = '\0'; |
p_menu_item->name[1] = '\0'; |
| 151 |
snprintf(p_menu_item->text, sizeof(p_menu_item->text), "[1;36m%c.[m %s", |
snprintf(p_menu_item->text, sizeof(p_menu_item->text), "[1;36m%c.[m %s", |
| 152 |
p_menu_item->name[0], bbsnet_conf[menu_item_id].host1); |
p_menu_item->name[0], bbsnet_conf[menu_item_id].site_name); |
| 153 |
|
|
| 154 |
p_menu->items[p_menu->item_count] = menu_item_id; |
p_menu->items[p_menu->item_count] = menu_item_id; |
| 155 |
p_menu->item_count++; |
p_menu->item_count++; |
| 277 |
} |
} |
| 278 |
|
|
| 279 |
moveto(1, 1); |
moveto(1, 1); |
| 280 |
prints("通过SSH方式连接[%s]...", bbsnet_conf[n].host1); |
prints("通过SSH方式连接[%s]...", bbsnet_conf[n].site_name); |
| 281 |
moveto(2, 1); |
moveto(2, 1); |
| 282 |
prints("请输入用户名: "); |
prints("请输入用户名: "); |
| 283 |
iflush(); |
iflush(); |
| 307 |
|
|
| 308 |
moveto(1, 1); |
moveto(1, 1); |
| 309 |
prints("\033[1;32m正在测试往 %s (%s) 的连接,请稍候... \033[m\r\n", |
prints("\033[1;32m正在测试往 %s (%s) 的连接,请稍候... \033[m\r\n", |
| 310 |
bbsnet_conf[n].host1, bbsnet_conf[n].ip); |
bbsnet_conf[n].site_name, bbsnet_conf[n].host_name); |
| 311 |
iflush(); |
iflush(); |
| 312 |
|
|
| 313 |
p_host = gethostbyname(bbsnet_conf[n].ip); |
p_host = gethostbyname(bbsnet_conf[n].host_name); |
| 314 |
|
|
| 315 |
if (p_host == NULL) |
if (p_host == NULL) |
| 316 |
{ |
{ |
| 523 |
if (ssh_options_set(session, SSH_OPTIONS_FD, &sock) < 0 || |
if (ssh_options_set(session, SSH_OPTIONS_FD, &sock) < 0 || |
| 524 |
ssh_options_set(session, SSH_OPTIONS_PROCESS_CONFIG, &ssh_process_config) < 0 || |
ssh_options_set(session, SSH_OPTIONS_PROCESS_CONFIG, &ssh_process_config) < 0 || |
| 525 |
ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, SSH_KNOWN_HOSTS_FILE) < 0 || |
ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, SSH_KNOWN_HOSTS_FILE) < 0 || |
| 526 |
ssh_options_set(session, SSH_OPTIONS_HOST, bbsnet_conf[n].ip) < 0 || |
ssh_options_set(session, SSH_OPTIONS_HOST, bbsnet_conf[n].host_name) < 0 || |
| 527 |
ssh_options_set(session, SSH_OPTIONS_USER, remote_user) < 0 || |
ssh_options_set(session, SSH_OPTIONS_USER, remote_user) < 0 || |
| 528 |
ssh_options_set(session, SSH_OPTIONS_HOSTKEYS, "+ssh-rsa") < 0 || |
ssh_options_set(session, SSH_OPTIONS_HOSTKEYS, "+ssh-rsa") < 0 || |
| 529 |
ssh_options_set(session, SSH_OPTIONS_LOG_VERBOSITY, &ssh_log_level) < 0) |
ssh_options_set(session, SSH_OPTIONS_LOG_VERBOSITY, &ssh_log_level) < 0) |
| 555 |
case SSH_KNOWN_HOSTS_UNKNOWN: |
case SSH_KNOWN_HOSTS_UNKNOWN: |
| 556 |
if (ssh_session_update_known_hosts(session) != SSH_OK) |
if (ssh_session_update_known_hosts(session) != SSH_OK) |
| 557 |
{ |
{ |
| 558 |
log_error("ssh_session_update_known_hosts(%s) error\n", bbsnet_conf[n].ip); |
log_error("ssh_session_update_known_hosts(%s) error\n", bbsnet_conf[n].host_name); |
| 559 |
prints("\033[1;31m无法添加服务器证书\033[m"); |
prints("\033[1;31m无法添加服务器证书\033[m"); |
| 560 |
press_any_key(); |
press_any_key(); |
| 561 |
goto cleanup; |
goto cleanup; |
| 562 |
} |
} |
| 563 |
log_common("SSH key of (%s) is added into %s\n", bbsnet_conf[n].ip, SSH_KNOWN_HOSTS_FILE); |
log_common("SSH key of (%s) is added into %s\n", bbsnet_conf[n].host_name, SSH_KNOWN_HOSTS_FILE); |
| 564 |
case SSH_KNOWN_HOSTS_OK: |
case SSH_KNOWN_HOSTS_OK: |
| 565 |
break; |
break; |
| 566 |
case SSH_KNOWN_HOSTS_CHANGED: |
case SSH_KNOWN_HOSTS_CHANGED: |
| 567 |
case SSH_KNOWN_HOSTS_OTHER: |
case SSH_KNOWN_HOSTS_OTHER: |
| 568 |
log_error("ssh_session_is_known_server(%s) error: %d\n", bbsnet_conf[n].ip, ret); |
log_error("ssh_session_is_known_server(%s) error: %d\n", bbsnet_conf[n].host_name, ret); |
| 569 |
prints("\033[1;31m服务器证书已变更\033[m"); |
prints("\033[1;31m服务器证书已变更\033[m"); |
| 570 |
press_any_key(); |
press_any_key(); |
| 571 |
goto cleanup; |
goto cleanup; |
| 1172 |
|
|
| 1173 |
moveto(20, 1); |
moveto(20, 1); |
| 1174 |
clrtoeol(); |
clrtoeol(); |
| 1175 |
prints("|\033[1m单位: \033[1;33m%s\033[m%*s 站名: \033[1;33m%s\033[m", |
prints("|\033[1m单位: \033[1;33m%s\033[m%*s 站名: \033[1;33m%s\033[m%*s 类型: \033[1;33m%s\033[m", |
| 1176 |
bbsnet_conf[i].host2, 20 - str_length(bbsnet_conf[i].host2, 1), "", bbsnet_conf[i].host1); |
bbsnet_conf[i].org_name, 20 - str_length(bbsnet_conf[i].org_name, 1), "", |
| 1177 |
|
bbsnet_conf[i].site_name, 20 - str_length(bbsnet_conf[i].site_name, 1), "", |
| 1178 |
|
(bbsnet_conf[i].use_ssh ? "SSH" : "Telnet")); |
| 1179 |
moveto(20, 80); |
moveto(20, 80); |
| 1180 |
prints("|"); |
prints("|"); |
| 1181 |
moveto(21, 1); |
moveto(21, 1); |
| 1182 |
clrtoeol(); |
clrtoeol(); |
| 1183 |
prints("|\033[1m连往: \033[1;33m%-20s\033[m 端口: \033[1;33m%-5d\033[m 类型: \033[1;33m%s\033[m", |
prints("|\033[1m连往: \033[1;33m%-20s\033[m 端口: \033[1;33m%-5d\033[m 编码: \033[1;33m%s\033[m", |
| 1184 |
bbsnet_conf[i].ip, bbsnet_conf[i].port, (bbsnet_conf[i].use_ssh ? "SSH" : "Telnet")); |
bbsnet_conf[i].host_name, bbsnet_conf[i].port, bbsnet_conf[i].charset); |
| 1185 |
moveto(21, 80); |
moveto(21, 80); |
| 1186 |
prints("|"); |
prints("|"); |
| 1187 |
iflush(); |
iflush(); |