diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-02-19 11:18:16 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-02-19 11:18:16 +0800 |
commit | b01d64ad9977db6acc9ce8aa5c58ea566a21342f (patch) | |
tree | 2003569d751dd1209d7fdb956795bfc2223e0360 /mbbsd | |
parent | c4dbb6fbedec8ff557466e0bc31e13dfbdec96a2 (diff) | |
download | pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.tar pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.tar.gz pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.tar.bz2 pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.tar.lz pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.tar.xz pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.tar.zst pttbbs-b01d64ad9977db6acc9ce8aa5c58ea566a21342f.zip |
user: improve regcode prompt/check
cache: support for dynamic aggressive topic handler
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3928 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r-- | mbbsd/cache.c | 129 | ||||
-rw-r--r-- | mbbsd/user.c | 16 |
2 files changed, 118 insertions, 27 deletions
diff --git a/mbbsd/cache.c b/mbbsd/cache.c index ca43a089..b9104d3a 100644 --- a/mbbsd/cache.c +++ b/mbbsd/cache.c @@ -868,6 +868,54 @@ int is_BM_cache(int bid) /* bid starts from 1 */ /*-------------------------------------------------------*/ /* PTT cache */ /*-------------------------------------------------------*/ +int +filter_aggressive(const char*s) +{ + if ( + /* + strstr(s, "此處放較不適當的爭議性字句") != NULL || + */ + 0 + ) + return 1; + return 0; +} + +int +filter_dirtywords(const char*s) +{ + if ( + strstr(s, "幹你娘") != NULL || + 0) + return 1; + return 0; +} + +#define AGGRESSIVE_FN ".aggressive" +static char drop_aggressive = 0; + +void +load_aggressive_state() +{ + if (dashf(AGGRESSIVE_FN)) + drop_aggressive = 1; + else + drop_aggressive = 0; +} + +void +set_aggressive_state(int s) +{ + FILE *fp = NULL; + if (s) + { + fp = fopen(AGGRESSIVE_FN, "wb"); + fclose(fp); + } else { + remove(AGGRESSIVE_FN); + } +} + /* cache for 動態看板 */ void reload_pttcache(void) @@ -878,39 +926,80 @@ reload_pttcache(void) fileheader_t item, subitem; char pbuf[256], buf[256], *chr; FILE *fp, *fp1, *fp2; - int id; + int id, aggid, rawid; SHM->Pbusystate = 1; SHM->last_film = 0; bzero(SHM->notes, sizeof(SHM->notes)); setapath(pbuf, GLOBAL_NOTE); setadir(buf, pbuf); - id = 0; + + load_aggressive_state(); + id = aggid = rawid = 0; // effective count, aggressive count, total (raw) count + if ((fp = fopen(buf, "r"))) { + // .DIR loop while (fread(&item, sizeof(item), 1, fp)) { - if (item.title[3] == '<' && item.title[8] == '>') { - snprintf(buf, sizeof(buf), "%s/%s/" FN_DIR, - pbuf, item.filename); - if (!(fp1 = fopen(buf, "r"))) + + if (item.title[3] != '<' || item.title[8] != '>') + continue; + + snprintf(buf, sizeof(buf), "%s/%s/" FN_DIR, + pbuf, item.filename); + + if (!(fp1 = fopen(buf, "r"))) + continue; + + // file loop + while (fread(&subitem, sizeof(subitem), 1, fp1)) { + + snprintf(buf, sizeof(buf), + "%s/%s/%s", pbuf, item.filename, + subitem.filename); + + if (!(fp2 = fopen(buf, "r"))) continue; - while (fread(&subitem, sizeof(subitem), 1, fp1)) { - snprintf(buf, sizeof(buf), - "%s/%s/%s", pbuf, item.filename, - subitem.filename); - if (!(fp2 = fopen(buf, "r"))) - continue; - fread(SHM->notes[id], sizeof(char), sizeof(SHM->notes[0]), fp2); - SHM->notes[id][sizeof(SHM->notes[0]) - 1] = 0; + + fread(SHM->notes[id], sizeof(char), sizeof(SHM->notes[0]), fp2); + SHM->notes[id][sizeof(SHM->notes[0]) - 1] = 0; + rawid ++; + + // filtering + if (filter_dirtywords(SHM->notes[id])) + { + memset(SHM->notes[id], 0, sizeof(SHM->notes[0])); + rawid --; + } + else if (filter_aggressive(SHM->notes[id])) + { + aggid++; + // handle aggressive notes by last detemined state + if (drop_aggressive) + memset(SHM->notes[id], 0, sizeof(SHM->notes[0])); + else + id++; + } + else + { id++; - fclose(fp2); - if (id >= MAX_MOVIE) - break; } - fclose(fp1); + + fclose(fp2); if (id >= MAX_MOVIE) break; - } - } + + } // end of file loop + fclose(fp1); + + // decide next aggressive state + if (rawid && aggid*3 >= rawid) // if aggressive exceed 1/3 + set_aggressive_state(1); + else + set_aggressive_state(0); + + if (id >= MAX_MOVIE) + break; + } // end of .DIR loop fclose(fp); } SHM->last_film = id - 1; diff --git a/mbbsd/user.c b/mbbsd/user.c index df0c948e..45b162d7 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -15,6 +15,8 @@ static const char * const chess_type[3] = { }; #endif +#define REGCODE_INITIAL "v6" // always 2 characters + int kill_user(int num, const char *userid) { @@ -538,8 +540,8 @@ makeregcode(char *buf) /* generate a new regcode */ buf[13] = 0; - buf[0] = 'v'; - buf[1] = '6'; + buf[0] = REGCODE_INITIAL[0]; + buf[1] = REGCODE_INITIAL[1]; for( i = 2 ; i < 13 ; ++i ) buf[i] = alphabet[random() % 52]; @@ -1776,9 +1778,9 @@ u_register(void) clear(); stand_title("EMail認證"); move(2, 0); - prints("%s(%s) 您好,請輸入您的認證碼。\n" - "或您可以輸入 x 來重新填寫 E-Mail 或改由站長手動認證\n", - cuser.userid, cuser.nickname); + + prints("請輸入您的認證碼。(由 %s 開頭無空白的十三碼)\n" + "或輸入 x 來重新填寫 E-Mail 或改由站長手動認證\n", REGCODE_INITIAL); inregcode[0] = 0; do{ @@ -1788,9 +1790,9 @@ u_register(void) break; if( strlen(inregcode) != 13 || inregcode[0] == ' ') vmsg("認證碼輸入不完整,總共應有十三碼,沒有空白字元。"); - else if( inregcode[0] != 'v' || inregcode[1] != '6' ) { + else if( inregcode[0] != REGCODE_INITIAL[0] || inregcode[1] != REGCODE_INITIAL[1] ) { /* old regcode */ - vmsg("輸入的認證碼錯誤或因系統昇級已失效," + vmsg("輸入的認證碼錯誤," // "或因系統昇級已失效," "請輸入 x 重填一次 E-Mail"); } else |