精華區beta SetupBBS 關於我們 聯絡資訊
簡單整理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