--- lbbs/src/common.c 2025/04/28 03:30:59 1.9 +++ lbbs/src/common.c 2026/01/09 11:14:54 1.54 @@ -1,128 +1,115 @@ -/*************************************************************************** - common.c - description - ------------------- - begin : Mon Oct 18 2004 - copyright : (C) 2004 by Leaflet - email : leaflet@leafok.com - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "menu.h" -#include -#include -#include - -// Version information -char app_version[256] = "LBBS-devel version 1.0"; - -// Global declaration for enviroment -char app_home_dir[256]; -char app_temp_dir[256]; +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * common + * - common definitions + * + * Copyright (C) 2004-2026 Leaflet + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "common.h" + +// Version +#ifdef __x86_64__ +const char APP_INFO[] = PACKAGE_STRING " build (x86_64) on " __DATE__ " " __TIME__; +#else +#ifdef __aarch64__ +const char APP_INFO[] = PACKAGE_STRING " build (aarch64) on " __DATE__ " " __TIME__; +#else +const char APP_INFO[] = PACKAGE_STRING " build (i386) on " __DATE__ " " __TIME__; +#endif +#endif + +const char COPYRIGHT_INFO[] = "Copyright (C) 2004-2026 Leaflet \n" + "This program comes with ABSOLUTELY NO WARRANTY.\n" + "This is free software, and you are welcome to redistribute it \n" + "under certain conditions; see the GNU General Public License \n" + "version 3 for details.\n"; + +// Enviroment +const char CONF_BBSD[] = "conf/bbsd.conf"; +const char CONF_MENU[] = "var/menu_merged.conf"; +const char CONF_BBSNET[] = "conf/bbsnet.conf"; +const char CONF_BWF[] = "conf/badwords.conf"; +const char CONF_TOP10_MENU[] = "var/bbs_top_menu.conf"; +const char SSH_HOST_RSA_KEY_FILE[] = "conf/ssh_host_rsa_key"; +const char SSH_HOST_ED25519_KEY_FILE[] = "conf/ssh_host_ed25519_key"; +const char SSH_HOST_ECDSA_KEY_FILE[] = "conf/ssh_host_ecdsa_key"; +const char SSH_KNOWN_HOSTS_FILE[] = "var/known_hosts"; + +const char LOG_FILE_INFO[] = "log/bbsd.log"; +const char LOG_FILE_ERROR[] = "log/error.log"; + +const char DATA_WELCOME[] = "data/welcome.txt"; +const char DATA_REGISTER[] = "data/register.txt"; +const char DATA_GOODBYE[] = "data/goodbye.txt"; +const char DATA_EULA[] = "data/eula.txt"; +const char DATA_LICENSE[] = "data/license.txt"; +const char DATA_COPYRIGHT[] = "data/copyright.txt"; +const char DATA_VERSION[] = "data/version.txt"; +const char DATA_LOGIN_ERROR[] = "data/login_error.txt"; +const char DATA_ACTIVE_BOARD[] = "data/active_board.txt"; +const char DATA_READ_HELP[] = "data/read_help.txt"; +const char DATA_EDITOR_HELP[] = "data/editor_help.txt"; + +const char VAR_BBS_TOP[] = "var/bbs_top.txt"; + +const char VAR_ARTICLE_BLOCK_SHM[] = "var/article_block_shm.~"; +const char VAR_SECTION_LIST_SHM[] = "var/section_list_shm.~"; +const char VAR_TRIE_DICT_SHM[] = "var/trie_dict_shm.~"; +const char VAR_USER_LIST_SHM[] = "var/user_list_shm.~"; + +const char VAR_ARTICLE_CACHE_DIR[] = "var/articles/"; +const char VAR_GEN_EX_MENU_DIR[] = "var/gen_ex/"; +const char VAR_SECTION_AID_LOC_DIR[] = "var/section_aid_loc/"; + +// File loader +const char *data_files_load_startup[] = { + DATA_WELCOME, + DATA_REGISTER, + DATA_GOODBYE, + DATA_EULA, + DATA_LICENSE, + DATA_COPYRIGHT, + DATA_VERSION, + DATA_LOGIN_ERROR, + DATA_ACTIVE_BOARD, + DATA_READ_HELP, + DATA_EDITOR_HELP, + VAR_BBS_TOP}; + +const int data_files_load_startup_count = sizeof(data_files_load_startup) / sizeof(const char *); // Global declaration for sockets -int socket_server; -int socket_client; -char hostaddr_server[50]; -char hostaddr_client[50]; -int port_server; +char hostaddr_client[IP_ADDR_LEN]; int port_client; -// Global declaration for database -char DB_host[256]; -char DB_username[50]; -char DB_password[50]; -char DB_database[50]; +// SSHv2 +int SSH_v2 = 0; +ssh_session SSH_session; +ssh_channel SSH_channel; // Global declaration for system -int SYS_exit; -int SYS_child_process_count; +volatile int SYS_server_exit = 0; +volatile int SYS_child_process_count = 0; +volatile int SYS_child_exit = 0; +volatile int SYS_conf_reload = 0; // Common function -const char * -str_space(char *string, int length) -{ - int i; - for (i = 0; i < length; i++) - { - string[i] = ' '; - } - string[length] = '\0'; - return string; -} - -const char * -get_time_str(char *string, size_t length) +void sig_hup_handler(int i) { - char week[10], buffer[256]; - time_t curtime; - struct tm *loctime; - - curtime = time(NULL); - loctime = localtime(&curtime); - - strftime(buffer, 256, "%Y年%m月%d日%H:%M:%S ", loctime); - - switch (loctime->tm_wday) - { - case 0: - strcpy(week, "星期天"); - break; - case 1: - strcpy(week, "星期一"); - break; - case 2: - strcpy(week, "星期二"); - break; - case 3: - strcpy(week, "星期三"); - break; - case 4: - strcpy(week, "星期四"); - break; - case 5: - strcpy(week, "星期五"); - break; - case 6: - strcpy(week, "星期六"); - break; - } - strcat(buffer, week); - - strncpy(string, buffer, length); - - return string; + SYS_conf_reload = 1; } -void reload_bbs_menu(int i) +void sig_term_handler(int i) { - if (reload_menu(&bbs_menu) < 0) - log_error("Reload menu failed\n"); - else - log_std("Reload menu successfully\n"); + SYS_server_exit = 1; } -void system_exit(int i) +void sig_chld_handler(int i) { - SYS_exit = 1; -} - -void child_exit(int i) -{ - int pid; - - pid = wait(0); - - if (pid > 0) - { - SYS_child_process_count--; - log_std("Child process (%d) exited\n", pid); - } + SYS_child_exit = 1; }