/[LeafOK_CVS]/lbbs/src/bbs_net.c
ViewVC logotype

Diff of /lbbs/src/bbs_net.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.84 by sysadm, Sun Nov 30 10:05:16 2025 UTC Revision 1.87 by sysadm, Mon Dec 1 02:10:34 2025 UTC
# Line 58  enum _bbs_net_constant_t Line 58  enum _bbs_net_constant_t
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];
# Line 74  static int load_bbsnet_conf(const char * Line 74  static int load_bbsnet_conf(const char *
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)
# Line 106  static int load_bbsnet_conf(const char * Line 106  static int load_bbsnet_conf(const char *
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);
# Line 116  static int load_bbsnet_conf(const char * Line 116  static int load_bbsnet_conf(const char *
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);
# Line 149  static int load_bbsnet_conf(const char * Line 149  static int load_bbsnet_conf(const char *
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), "%c. %s",                  snprintf(p_menu_item->text, sizeof(p_menu_item->text), "%c. %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++;
# Line 277  static int bbsnet_connect(int n) Line 277  static int bbsnet_connect(int n)
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();
# Line 307  static int bbsnet_connect(int n) Line 307  static int bbsnet_connect(int n)
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          {          {
# Line 522  static int bbsnet_connect(int n) Line 522  static int bbsnet_connect(int n)
522    
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_HOST, bbsnet_conf[n].ip) < 0 ||                          ssh_options_set(session, SSH_OPTIONS_KNOWNHOSTS, SSH_KNOWN_HOSTS_FILE) < 0 ||
526                            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)
# Line 531  static int bbsnet_connect(int n) Line 532  static int bbsnet_connect(int n)
532                          goto cleanup;                          goto cleanup;
533                  }                  }
534    
535                    ssh_set_blocking(session, 0);
536    
537                  while (!SYS_server_exit)                  while (!SYS_server_exit)
538                  {                  {
539                          ret = ssh_connect(session);                          ret = ssh_connect(session);
# Line 545  static int bbsnet_connect(int n) Line 548  static int bbsnet_connect(int n)
548                          }                          }
549                  }                  }
550    
551                  ssh_set_blocking(session, 0);                  ret = ssh_session_is_known_server(session);
552                    switch (ret)
553                    {
554                    case SSH_KNOWN_HOSTS_NOT_FOUND:
555                    case SSH_KNOWN_HOSTS_UNKNOWN:
556                            if (ssh_session_update_known_hosts(session) != SSH_OK)
557                            {
558                                    log_error("ssh_session_update_known_hosts(%s) error\n", bbsnet_conf[n].host_name);
559                                    prints("\033[1;31m无法添加服务器证书\033[m");
560                                    press_any_key();
561                                    goto cleanup;
562                            }
563                            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:
565                            break;
566                    case SSH_KNOWN_HOSTS_CHANGED:
567                    case SSH_KNOWN_HOSTS_OTHER:
568                            log_error("ssh_session_is_known_server(%s) error: %d\n", bbsnet_conf[n].host_name, ret);
569                            prints("\033[1;31m服务器证书已变更\033[m");
570                            press_any_key();
571                            goto cleanup;
572                    }
573    
574                  for (int i = 0; !SYS_server_exit;)                  for (int i = 0; !SYS_server_exit;)
575                  {                  {
# Line 1148  static int bbsnet_selchange() Line 1172  static int bbsnet_selchange()
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();


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1