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

Diff of /lbbs/src/login.c

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

Revision 1.44 by sysadm, Mon Jun 16 09:42:28 2025 UTC Revision 1.49 by sysadm, Wed Jul 2 04:17:33 2025 UTC
# Line 14  Line 14 
14   *                                                                         *   *                                                                         *
15   ***************************************************************************/   ***************************************************************************/
16    
 #define _POSIX_C_SOURCE 200112L  
   
 #include "login.h"  
17  #include "bbs.h"  #include "bbs.h"
 #include "user_priv.h"  
18  #include "common.h"  #include "common.h"
19  #include "log.h"  #include "database.h"
20  #include "io.h"  #include "io.h"
21    #include "log.h"
22    #include "login.h"
23  #include "screen.h"  #include "screen.h"
24  #include "database.h"  #include "user_priv.h"
 #include <errno.h>  
25  #include <ctype.h>  #include <ctype.h>
26    #include <errno.h>
27    #include <stdlib.h>
28  #include <string.h>  #include <string.h>
29  #include <regex.h>  #include <regex.h>
 #include <stdlib.h>  
30  #include <unistd.h>  #include <unistd.h>
31  #include <mysql/mysql.h>  #include <mysql/mysql.h>
32    
# Line 41  int bbs_login(void) Line 39  int bbs_login(void)
39    
40          for (; !SYS_server_exit && !ok && i < BBS_login_retry_times; i++)          for (; !SYS_server_exit && !ok && i < BBS_login_retry_times; i++)
41          {          {
42                  prints("\033[1;33m请输入帐号\033[m(试用请输入`\033[1;36mguest\033[m', "                  prints("\033[1;33m璇疯緭鍏ュ笎鍙穃033[m(璇曠敤璇疯緭鍏\033[1;36mguest\033[m', "
43                             "注册请输入`\033[1;31mnew\033[m'): ");                             "娉ㄥ唽璇疯緭鍏\033[1;31mnew\033[m'): ");
44                  iflush();                  iflush();
45    
46                  if (str_input(username, sizeof(username), DOECHO) < 0)                  if (str_input(username, sizeof(username), DOECHO) < 0)
# Line 66  int bbs_login(void) Line 64  int bbs_login(void)
64    
65                  if (username[0] != '\0')                  if (username[0] != '\0')
66                  {                  {
67                          prints("\033[1;37m请输入密码\033[m: ");                          prints("\033[1;37m璇疯緭鍏ュ瘑鐮乗033[m: ");
68                          iflush();                          iflush();
69    
70                          if (str_input(password, sizeof(password), NOECHO) < 0)                          if (str_input(password, sizeof(password), NOECHO) < 0)
# Line 137  int check_user(const char *username, con Line 135  int check_user(const char *username, con
135    
136          if (!ok)          if (!ok)
137          {          {
138                  prints("\033[1;31m用户名或密码格式错误...\033[m\r\n");                  prints("\033[1;31m鐢ㄦ埛鍚嶆垨瀵嗙爜鏍煎紡閿欒...\033[m\r\n");
139                  ret = 1;                  ret = 1;
140                  goto cleanup;                  goto cleanup;
141          }          }
# Line 183  int check_user(const char *username, con Line 181  int check_user(const char *username, con
181          {          {
182                  if (atoi(row[0]) > BBS_allowed_login_failures_within_interval)                  if (atoi(row[0]) > BBS_allowed_login_failures_within_interval)
183                  {                  {
184                          prints("\033[1;31m来源存在多次失败登陆尝试,请稍后再试\033[m\r\n");                          prints("\033[1;31m鏉ユ簮瀛樺湪澶氭澶辫触鐧婚檰灏濊瘯锛岃绋嶅悗鍐嶈瘯\033[m\r\n");
185                          ret = 1;                          ret = 1;
186                          goto cleanup;                          goto cleanup;
187                  }                  }
# Line 212  int check_user(const char *username, con Line 210  int check_user(const char *username, con
210          {          {
211                  if (atoi(row[0]) >= 5)                  if (atoi(row[0]) >= 5)
212                  {                  {
213                          prints("\033[1;31m账户存在多次失败登陆尝试,请使用Web方式登录\033[m\r\n");                          prints("\033[1;31m璐︽埛瀛樺湪澶氭澶辫触鐧婚檰灏濊瘯锛岃浣跨敤Web鏂瑰紡鐧诲綍\033[m\r\n");
214                          ret = 1;                          ret = 1;
215                          goto cleanup;                          goto cleanup;
216                  }                  }
# Line 268  int check_user(const char *username, con Line 266  int check_user(const char *username, con
266    
267                  if (p_login == 0)                  if (p_login == 0)
268                  {                  {
269                          prints("\033[1;31m您目前无权登陆...\033[m\r\n");                          prints("\033[1;31m鎮ㄧ洰鍓嶆棤鏉冪櫥闄...\033[m\r\n");
270                          ret = 1;                          ret = 1;
271                          goto cleanup;                          goto cleanup;
272                  }                  }
# Line 297  int check_user(const char *username, con Line 295  int check_user(const char *username, con
295                          goto cleanup;                          goto cleanup;
296                  }                  }
297    
298                  prints("\033[1;31m错误的用户名或密码...\033[m\r\n");                  prints("\033[1;31m閿欒鐨勭敤鎴峰悕鎴栧瘑鐮...\033[m\r\n");
299                  ret = 1;                  ret = 1;
300                  goto cleanup;                  goto cleanup;
301          }          }
# Line 317  int check_user(const char *username, con Line 315  int check_user(const char *username, con
315          case 0: // Login successfully          case 0: // Login successfully
316                  break;                  break;
317          case -1: // Load data error          case -1: // Load data error
318                  prints("\033[1;31m读取用户数据错误...\033[m\r\n");                  prints("\033[1;31m璇诲彇鐢ㄦ埛鏁版嵁閿欒...\033[m\r\n");
319                  ret = -1;                  ret = -1;
320                  goto cleanup;                  goto cleanup;
321          case -2: // Unused          case -2: // Unused
322                  prints("\033[1;31m请通过Web登录更新用户许可协议...\033[m\r\n");                  prints("\033[1;31m璇烽氳繃Web鐧诲綍鏇存柊鐢ㄦ埛璁稿彲鍗忚...\033[m\r\n");
323                  ret = 1;                  ret = 1;
324                  goto cleanup;                  goto cleanup;
325          case -3: // Dead          case -3: // Dead
326                  prints("\033[1;31m很遗憾,您已经永远离开了我们的世界!\033[m\r\n");                  prints("\033[1;31m寰堥仐鎲撅紝鎮ㄥ凡缁忔案杩滅寮浜嗘垜浠殑涓栫晫锛乗033[m\r\n");
327                  ret = 1;                  ret = 1;
328                  goto cleanup;                  goto cleanup;
329          default:          default:
# Line 350  int check_user(const char *username, con Line 348  int check_user(const char *username, con
348                  goto cleanup;                  goto cleanup;
349          }          }
350    
351          BBS_last_access_tm = BBS_login_tm = time(0);          BBS_last_access_tm = BBS_login_tm = time(NULL);
352    
353          // Set user tz to process env          // Set user tz to process env
354          if (BBS_user_tz[0] != '\0')          if (BBS_user_tz[0] != '\0')
# Line 422  int load_user_info(MYSQL *db, int BBS_ui Line 420  int load_user_info(MYSQL *db, int BBS_ui
420          rs = NULL;          rs = NULL;
421    
422          if (life != 333 && life != 365 && life != 666 && life != 999 && // Not immortal          if (life != 333 && life != 365 && life != 666 && life != 999 && // Not immortal
423                  time(0) - last_login_dt > 60 * 60 * 24 * life)                  time(NULL) - last_login_dt > 60 * 60 * 24 * life)
424          {          {
425                  ret = -3; // Dead                  ret = -3; // Dead
426                  goto cleanup;                  goto cleanup;
# Line 472  int load_guest_info(void) Line 470  int load_guest_info(void)
470                  goto cleanup;                  goto cleanup;
471          }          }
472    
473          BBS_last_access_tm = BBS_login_tm = time(0);          BBS_last_access_tm = BBS_login_tm = time(NULL);
474    
475  cleanup:  cleanup:
476          mysql_close(db);          mysql_close(db);
# Line 517  int user_online_del(MYSQL *db) Line 515  int user_online_del(MYSQL *db)
515    
516          return 0;          return 0;
517  }  }
518    
519    int user_online_update(const char *action)
520    {
521            MYSQL *db = NULL;
522            char sql[SQL_BUFFER_LEN];
523    
524            if (strcmp(BBS_current_action, action) == 0) // No change
525            {
526                    return 0;
527            }
528    
529            strncpy(BBS_current_action, action, sizeof(BBS_current_action) - 1);
530            BBS_current_action[sizeof(BBS_current_action) - 1] = '\0';
531    
532            db = db_open();
533            if (db == NULL)
534            {
535                    log_error("db_open() error: %s\n", mysql_error(db));
536                    return -1;
537            }
538    
539            snprintf(sql, sizeof(sql),
540                             "UPDATE user_online SET current_action = '%s', last_tm=NOW() "
541                             "WHERE SID = 'Telnet_Process_%d'",
542                             BBS_current_action, getpid());
543            if (mysql_query(db, sql) != 0)
544            {
545                    log_error("Update user_online error: %s\n", mysql_error(db));
546                    return -2;
547            }
548    
549            mysql_close(db);
550    
551            return 1;
552    }


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

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