簡單整理BBS減少廣告信的常見方法(四)
程式碼修改二:innbbsd 的 receive_article.c
發信人: cdsheen.bbs@bbs.iljhs.il.edu.tw (咖啡豆), 看板: InstallBBS
標 題: [innbbsd] 擋 spam host...
發信站: 宜蘭資教 山水蘭陽 (Fri Jul 18 23:07:41 1997)
轉信站: fpg!netnews.ntu!iljhs
...................................................
此段程式會檢查 NNTP-Posting-Host 與 E-Mail Address
任何一個 match 都會 reject
為了效率考量,程式每隔 10 分鐘 reload 一次 spam-list,
目前 spam-list 長度最大為 60 個
spam-list 放在 ~bbs/etc/spam-list,每個壞蛋一行
receive_article.c
函數 receive_article()
在函數的第一個敘述 if (FROM == NULL) { 前加入下列程式碼
FILE *fp;
long now;
static long stamp = 0;
static int badnum = 0;
static char *baduser[60];
int toklen, i;
char tmpbuf[60];
now = time(0);
if( now > stamp + 600 ) {
stamp = now;
for( i = 0 ; i < badnum ; i++ )
free(baduser[i]);
badnum = 0;
if( ( fp = fopen("/home/bbs/etc/spam-list", "r")) != NULL ) {
while( fgets( tmpbuf, 60, fp) != NULL ) {
toklen = strlen(tmpbuf);
tmpbuf[toklen-1] = '\0';
baduser[badnum] = (char*)malloc( toklen );
strcpy( baduser[badnum], tmpbuf );
badnum++;
if(badnum == 60)
break;
}
fclose(fp);
}
}
找到 receive_article() 函數內呼叫 post_article() 的地方,
在該行之前插入下列程式
/* reject bad users/hosts */
for( i = 0 ; i < badnum ; i++ ) {
if( strstr( lesssym, baduser[i] ) != NULL ||
(POSTHOST && strstr( POSTHOST, baduser[i] ) ) ) {
bbslog( "[reject] %s [match] /%s/\n", FROM, baduser[i]);
bbslog( "[groups] %s\n[subject] %s\n",GROUPS, SUBJECT);
return 0;
}
}
fname = (char*)post_article(boardhome,....
接下來可設法讓 SYSOP 可在 BBS 內直接編輯 etc/spam-list,比較方便一點
例如.. ts.hinet.net 就檔掉了所有 hinet 的 dialup 直接 post 的信件..
--
映千江月 還天地心
-- benyx 蕭還
benyx@star.ee.ttit.edu.tw
--
●無限星雲● ※,緣起※, (star.ee.ttit.edu.tw)
★ Post From ~\ ~\ star.ee.ttit.edu.tw ★