回精華區
作者amaki.bbs@luna.twbbs.org (羊愛吃松茸) 看板: plan
標題Re: [功能]擋信白名單
時間月下夜想 (Sat, 05 Jul 2003 00:24:35 +0800 (CST)) Updated: 2004/07/23
  某些人的信件流量很大,很喜歡把站外的文章、小說、日記通通寄回自己信任的

  站台,針對這類流量大,且站長認可(通常是私交甚好的)的id,可以採用類似

  mail.acl方式設計擋信白名單的功能。

  另外有人被擋信後,常常會詢問是不是POP3或是SMTP掛點,也索性讓mail.acl在

  Announce裡同步。

  在收信無限名單上的,來信一律不檢查是否超過篇數

: global.h

#define MAIL_ACLFILE    "etc/mail.acl"          /* 收信白名單 */
#define UNMAIL_ACLFILE  "etc/unmail.acl"        /* 收信黑名單 */
+ #define UNLIMIT_ACLFILE "etc/unlimit.acl"     /* 收信無限名單 */

: bmtad.c:struct Agent

typedef struct Agent
{
  struct Agent *anext;
  int sock;
  int sno;
  int state;
  int mode;
  int letter;
+ int unlimit;
  unsigned int ip_addr;

: bmtad.c

static ACL_t *mail_root = NULL;         /* MAIL_ACLFILE 的 acl_root */
static ACL_t *unmail_root = NULL;       /* UNMAIL_ACLFILE 的 acl_root */
+ static ACL_t *unlimit_root = NULL;    /* UNLIMIT_ACLFILE 的 acl_root */

: bmtad.c:main()

  mail_root = acl_load(MAIL_ACLFILE, mail_root);
  unmail_root = acl_load(UNMAIL_ACLFILE, unmail_root);
+ unlimit_root = acl_load(UNLIMIT_ACLFILE, unlimit_root);

  ...
  ...

      if (state & SS_CONFIG)
      {
        state ^= SS_CONFIG;

        mail_root = acl_load(MAIL_ACLFILE, mail_root);
        unmail_root = acl_load(UNMAIL_ACLFILE, unmail_root);
+       unlimit_root = acl_load(UNLIMIT_ACLFILE, unlimit_root);
      }

: bmtad.c:mta_from()

      if (!(ap->mode & (AM_VALID | AM_BBSADM)) && acl_spam(head, tail))
      {
        tail[-1] = '@';
        agent_log(ap, "SPAM-M", head);
        return NULL;
      }
+     ap->unlimit = acl_match(unlimit_root, head, tail);

      tail[-1] = '@';

: bmtad.c:cmd_mail()

  if (acl_spam(user, domain))
  {
    ap->xspam++;
    ap->mode |= AM_SPAM;
    agent_log(ap, "SPAM-M", ptr);
    agent_reply(ap, "550 spam mail");
    return;
  }
+ ap->unlimit = acl_match(unlimit_root, user, domain);

: bmtad.c:mta_mailer()

  /* --------------------------------------------------- */
  /* check E-mail address for anti-spam first            */
  /* --------------------------------------------------- */

  addr = ap->addr;
- if ((str = strchr(addr, '@')) && str_ncmp(addr, "mailer-daemon@", 14))
+ if (!ap->unlimit && (str = strchr(addr, '@')) &&
+   str_ncmp(addr, "mailer-daemon@", 14))
  {

: admutil.c:a_xfile()

    "收信白名單",
    "收信黑名單",
+   "收信無限名單",

  ...
  ...

    MAIL_ACLFILE,
    UNMAIL_ACLFILE,
+   UNLIMIT_ACLFILE,

: etc/unlimit.acl

  新增一個 unlimit.acl 檔案 (或從 BBS 上的 (0)Admin→(X)file 改也可以)
  格式和 (un)mail.acl 完全相同
  在名單上的地址可無限來信

  註: 在無限名單上的地址還是要先通過黑白名單的檢查,
      所以還是得在白名單上,但不在黑名單上

--
  Origin: luna.twbbs.org
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻