static int goodbye() { /* itoc.010803: 秀張離站的圖 */ clear(); film_out(FILM_GOODBYE, 0); switch (vans("G)隨風而逝 M)報告站長 N)留言板 Q)取消?[Q] ")) { /* lkchu.990428: 內定改為不離站 */ case 'g': case 'y': break; case 'm': m_sysop(); break; case 'n': /* if (cuser.userlevel) */ if (HAS_PERM(PERM_POST)) /* Thor.990118: 要能post才能留言, 提高門檻 */ pad_draw(); break; case 'q': default: /* return XEASY; */ return 0; /* itoc.010803: 秀了 FILM_GOODBYE 要重繪 */ } #ifdef LOG_BMW bmw_log(); /* lkchu.981201: 水球記錄處理 */ #endif if (!(cuser.ufo & UFO_MOTD)) /* itoc.000407: 離站畫面一併簡化 */ { clear(); prints("親愛的 \033[32m%s(%s)\033[m,別忘了再度光臨【 %s 】\n" "以下是您在站內的註冊資料:\n", cuser.userid, cuser.username, str_site); acct_show(&cuser, 0); vmsg(NULL); } u_exit("EXIT "); exit(0); }
static int goodbye() { /* itoc.010803: 秀張離站的圖 */ clear(); film_out(FILM_GOODBYE, 0); switch (vans("G)隨光而逝 M)報告站長 N)留言板 Q)取消?[Q] ")) { /* lkchu.990428: 內定改為不離站 */ case 'g': case 'y': break; case 'm': m_sysop(); break; case 'n': /* if (cuser.userlevel) */ if (HAS_PERM(PERM_POST)) /* Thor.990118: 要能post才能留言, 提高門檻 */ pad_draw(); break; case 'b': /* floatJ.090607: konami_code 彩蛋 */ if (konami_counter >= 6) more("etc/CharlieSP", MFST_NONE); case 'q': default: if(konami_counter >= 6) /* dust.091010: 在b這步按錯的話不必考慮嗎... */ konami_counter = 0; /* return XEASY; */ return 0; /* itoc.010803: 秀了 FILM_GOODBYE 要重繪 */ } #ifdef LOG_BMW bmw_log(); /* lkchu.981201: 水球記錄處理 */ #endif u_exit("EXIT "); exit(0); }
static void user_login() { char genbuf [200]; struct tm *ptime, *tmp; time_t now = time(0); int a; extern struct FROMCACHE *fcache; extern int fcache_semid; log_usies("ENTER", fromhost); setproctitle("%s: %s", cuser.userid, fromhost); /* ------------------------ */ /* 初始化 uinfo、flag、mode */ /* ------------------------ */ setup_utmp(LOGIN); currmode = MODE_STARTED; enter_uflag = cuser.uflag; /* get local time */ tmp = localtime(&cuser.lastlogin); update_data(); /* wildcat: update user data */ /* Ptt check 同時上線人數 */ resolve_fcache(); resolve_utmp(); if ((a = utmpshm->number) > fcache->max_user) { sem_init(FROMSEM_KEY, &fcache_semid); sem_lock(SEM_ENTER, fcache_semid); fcache->max_user = a; fcache->max_time = now; sem_lock(SEM_LEAVE, fcache_semid); } #ifdef INITIAL_SETUP if (getbnum(DEFAULT_BOARD) == 0) { strcpy(currboard, "尚未選定"); } else #endif { brc_initial(DEFAULT_BOARD); set_board(); } /* ------------ */ /* 畫面處理開始 */ /* ------------ */ if (!(HAS_PERM(PERM_SYSOP) && HAS_PERM(PERM_DENYPOST))) { char buf [256]; time_t now; time(&now); sprintf(buf, "<<上站通知>> -- 我來囉! - %s", Etime(&now)); do_aloha(buf); } time(&now); ptime = localtime(&now); #ifdef CAMERA film_out(FILM_LOGIN, 0); #else more("etc/Welcome_login", NA); #endif #if 0 /* wildcat : 搬家通知用 */ if (belong(BBSHOME "/etc/oldip", fromhost)) { more(BBSHOME "/etc/removal"); abort_bbs(); } #endif if ((cuser.day == ptime->tm_mday) && (cuser.month == (ptime->tm_mon + 1))) currutmp->birth = 1; else currutmp->birth = 0; if (cuser.userlevel) { /* not guest */ move(t_lines - 3, 0); prints(" 歡迎您第 [1;33m%d[0;37m 度拜訪本站,\ 上次您是從 [1;33m%s[0;37m 連往本站,\n\ 我記得那天是 [1;33m%s[0;37m。\n", ++cuser.numlogins, cuser.lasthost, Etime(&cuser.lastlogin)); pressanykey(NULL); /* Ptt */ if (currutmp->birth == 1) { #ifdef CAMERA film_out(FILM_WEL_BIRTH, 0); #else more("etc/Welcome_birth", YEA); #endif brc_initial("Greeting"); set_board(); do_post(); } sethomefile(genbuf, cuser.userid, str_badlogin); if (more(genbuf, NA) != -1) { if (getans2(b_lines, 0, "您要刪除以上錯誤嘗試的記錄嗎?", 0, 2, 'y') != 'n') unlink(genbuf); } check_register(); strncpy(cuser.lasthost, fromhost, 24); substitute_record(fn_passwd, &cuser, sizeof(cuser), usernum); cuser.lasthost[23] = '\0'; restore_backup(); }
static void login_query() { char uid [IDLEN + 1], passbuf[PASSLEN]; int attempts; char genbuf [200]; resolve_utmp(); attempts = utmpshm->number; clear(); #ifdef CAMERA film_out(time(0) % 5, 0); #else show_file("etc/Welcome0", 0, 20, ONLY_COLOR); #endif if (attempts >= MAXACTIVE) { pressanykey("目前站上人數已達上限,請您稍後再來。"); oflush(); sleep(1); exit(1); } attempts = 0; while (1) { if (attempts++ >= LOGINATTEMPTS) { more("etc/goodbye", NA); pressanykey_old("錯誤太多次,掰掰~~~~~"); exit(1); } uid[0] = '\0'; getdata(22, 2, "您的代號:", uid, IDLEN + 1, DOECHO, 0); if (strcasecmp(uid, str_new) == 0) { #ifdef LOGINASNEW DL_func("SO/register.so:va_new_register", 0); break; #else pressanykey("本系統目前無法以 new 註冊, 請用 guest 進入"); continue; #endif } else if (uid[0] == '\0' /* || !dosearchuser(uid) */ ) pressanykey(err_uid); else if (belong(FN_DISABLED, uid)) { pressanykey("該 ID 為本站禁止上站之 ID"); logattempt(uid, '*'); } else if (strcmp(uid, STR_GUEST)) { getdata(22, 30, "您的密碼:", passbuf, PASSLEN, PASS, 0); passbuf[8] = '\0'; if (!dosearchuser(uid)) { logattempt(uid, '!'); pressanykey(ERR_PASSWD); } else if (!chkpasswd(cuser.passwd, passbuf)) { logattempt(cuser.userid, '-'); pressanykey(ERR_PASSWD); } else { /* SYSOP gets all permission bits */ if (!strcasecmp(cuser.userid, str_sysop)) cuser.userlevel = ~0; logattempt(cuser.userid, ' '); break; } } else { /* guest 的話 */ #ifdef LOGINASGUEST cuser.userlevel = 0; cuser.uflag = COLOR_FLAG | PAGER_FLAG | BRDSORT_FLAG | MOVIE_FLAG; break; #else pressanykey("本站不提供 guest 上站"); continue; #endif } } multi_user_check(); sethomepath(genbuf, cuser.userid); mkdir(genbuf, 0755); srand(time(0) ^ getpid() ^ (getpid() << 10)); srandom(time(0) ^ getpid() ^ (getpid() << 10)); }