| 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 |
|
|
| 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) |
| 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) |
| 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 |
} |
} |
| 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 |
} |
} |
| 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 |
} |
} |
| 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 |
} |
} |
| 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 |
} |
} |
| 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: |
| 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 |
|
} |