作者itoc, 信區: itoc
標題[功能] rec_article.c 轉信板主自定擋信
時間03/08/17
作者: itoc (:MM:) 看板: itoc
標題: Re: [問題]WindTop的Firewall功能
時間: Sat Jan 4 14:18:29 2003 Updated: 2006/02/16
※ 引述《dundung.bbs@no.bbs.ee.nchu.edu.tw.spam (星海中的發呆羊)》之銘言:
> 想要自訂條件濾信的話這功能真的不錯用
在 rec_article.c 的 bbspost_add()
board 是 要轉進的看板
userid 是 作者的 email
usernick 是 作者的暱稱
SUBJECT 是 文章標題
SITE 是 Organization:
MSGID 是 MessageID:
BODY 是 內容
所以你只要在這裡動手腳即可
: rec_article.c:bbspost_add()
+ brd_fpath(fpath, board, "spam"); /* 每個板自己的 spam */
+ if (belong_spam(fpath, addr, nick))
+ {
+ board = "apple"; // 把有濾掉的信送去 apple 板,板名自定
+ }
/* 寫入文章內容 */
brd_fpath(folder, board, FN_DIR);
: 而 belong_spam() 可以這樣寫
: rec_article.c 在 bbspost_add() 前面新增以下函式
static int
belong_spam(filelist, addr, nick)
char *filelist, *addr, *nick;
{
FILE *fp;
char buf[80];
char user[80], *host;
char *type, *spam;
int rc, checknum;
rc = 0;
if (fp = fopen(filelist, "r"))
{
str_ncpy(user, addr, sizeof(user)); /* 防止字串太長蓋過頭 */
if (host = (char *) strchr(user, '@'))
{
*host = '\0';
host++;
}
checknum = 0;
while (fgets(buf, 80, fp))
{
if (buf[0] == '#') /* 加 # 是註解 */
continue;
if (++checknum >= 100) /* 限 100 條 rule */
break;
type = (char *) strtok(buf, " \t\r\n");
if (type && *type)
{
spam = (char *) strtok(NULL, " \t\r\n");
if (spam && *spam)
{
/* nick、host 可以是 NULL,故要檢查 */
str_lowest(spam, spam);
if ((!strcmp(type, "user") && str_sub(user, spam)) ||
(!strcmp(type, "host") && host && str_sub(host, spam)) ||
(!strcmp(type, "nick") && nick && str_sub(nick, spam)) ||
(!strcmp(type, "subj") && str_sub(SUBJECT, spam)) ||
(!strcmp(type, "site") && str_sub(SITE, spam)) ||
(!strcmp(type, "from") && str_sub(FROM, spam)) ||
(!strcmp(type, "msgi") && str_str(MSGID, spam)))
{
rc = 1;
break;
}
}
}
}
fclose(fp);
}
return rc;
}
: 接下來你要在看板讓板主可以編 spam 這個檔案
: src/so/manage.c:post_spam_edit() 新增於 post_memo_edit() 後面
static int
post_spam_edit(xo)
XO *xo;
{
int mode;
char fpath[64];
mode = vans("擋信列表 (D)刪除 (E)修改 (Q)取消?[E] ");
if (mode != 'q')
{
brd_fpath(fpath, currboard, "spam");
if (!(bbstate & STAT_BOARD))
{
vedit(fpath, -1); /* itoc.020722: 讓一般使用者也能看到 spam 內容 */
}
else if (mode == 'd')
{
unlink(fpath);
return XO_FOOT;
}
else
{
if (vedit(fpath, 0)) /* Thor.981020: 注意被talk的問題 */
vmsg(msg_cancel);
}
return XO_HEAD;
}
return XO_FOOT;
}
: manage.c:post_manage()
"WMemo 編輯進板畫面",
+ "Spam 看板擋信列表",
"Manager 增減副板主",
...
...
- char *menu = "◎ 板主選單 (B)主題 (W)進板 (M)副板"
+ char *menu = "◎ 板主選單 (B)主題 (W)進板 (S)擋信 (M)副板"
...
...
case 'w':
ret = post_memo_edit(xo);
break;
+ case 's':
+ ret = post_spam_edit(xo);
+ break;
> ───────────────────────────────────── <
spam 這檔案的格式為
# 這是註解,要擋二個就寫二次
# 要注意英文要全為小寫
user fuck
user shit
host hinet.net
nick 幹
subj 不要的標題
site hinet
from someone@some.domain
msgi netnews.seed.net.tw
msgi netnews.hinet.net
#
# 如果後面 spam 的內容有空格,只會抓到第一個字串
# 也就是說下面這二行的效果是一樣的
site giga news service
site giga
> ───────────────────────────────────── <
spam 比較的內容是
發信人: itoc.bbs@processor.tfcis.org (今天下雨), 看板: itoc
標 題: Re: 看板的閱讀權限
發信站: XEON (Sun Jan 5 01:04:28 2003)
轉信站: kulu!TomatoNEWS!news.tfcis.org!PROCESSOR
Origin: zhouer.mcl.math.ncu.edu.tw
user 比對 itoc.bbs
host 比對 processor.tfcis.org
nick 比對 今天下雨
subj 比對 Re: 看板的閱讀權限
site 比對 XEON
from 比對 itoc.bbs@processor.tfcis.org
--
╭── Origin ╮ 動力核心 processor.tfcis.org ~ δεζ ──┼
┼ Author ╯ itoc.Dorm-GD2.NCTU.edu.tw精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻