回精華區
作者itoc, 信區: itoc
標題[功能] user.c reaper.c 擋掉同一個 E-mail 註冊的第四個 ID
時間02/10/17
作者: itoc (活力再現) 看板: plan
標題: [功能] 擋掉同一個E-mail註冊的第4個ID
時間: Sun Sep 29 18:31:16 2002                          Updated: 2005/01/09

※ 引述《Yangwenli.bbs@bbs.sa.ncyu.edu.tw (楊威利)》之銘言:
>     account.c會把同一 email 認證多次的 ID 紀錄下來,
>     能不能直接在註冊第4個 ID 的時候就檔下來呢?

: global.h

  #define FN_ETC_EXPIRE   "etc/expire.conf"     /* 看板文章篇數上限設定 */
+ #define FN_ETC_EMAILADDR "etc/emailaddr"      /* 同一 email 認證多次列表 */

: user.c:ban_addr()

  /* 不在白名單上或在黑名單上 */
- return (!acl_has(TRUST_ACLFILE, foo, host + 1) ||
-   acl_has(UNTRUST_ACLFILE, foo, host + 1) > 0);
+ if (!acl_has(TRUST_ACLFILE, foo, host + 1) ||
+   acl_has(UNTRUST_ACLFILE, foo, host + 1) > 0)
+ {
+   return 1;
+ }
+ else       /* 在白名單上且不在黑名單上,再檢查是否超過認證四次以上 */
+ {
+   /* xeon.050109: 若用原來的 email 重新認證,
+                   即使在 emailaddr 上也可以認證 */
+   if (str_cmp(cuser.email, addr) &&
+     acl_has(FN_ETC_EMAILADDR, foo, host + 1) > 0)
+     return 1;
+ }
+ return 0;

: reaper.c

#ifdef EADDR_GROUPING
static FILE *faddr;
+ static FILE *faddr2;
#endif

: reaper.c:report_eaddr_group()

static void
report_eaddr_group()
{
  int i, j, cnt;
+ int logit;
  off_t off;
  int fd;

  SCHEMA s;
  /* funo */

  fprintf(faddr, "Email registration over %d times list\n\n", EMAIL_REG_LIMIT);

  for (i = 0; i < numC; i++)
  {
    for (cnt = 0, j = chain[i].link; j; cnt++, j = plist[j]);
    if (cnt > EMAIL_REG_LIMIT)
    {
+     logit = 0;

  ...
  ...

          fprintf(faddr, "%5d) %-13s%s[%d]\t%s\n", acct.userno, acct.userid,
            buf, acct.numlogins, acct.email);

+         if (!logit)       /* 一個 email 只 log 一次 */
+         {
+           logit = 1;
+           fprintf(faddr2, "%s\n", acct.email);
+         }
        }
      }
    }

  }
}
#endif

: reaper.c:main()

#ifdef EADDR_GROUPING
  faddr = fopen(FN_RUN_EMAILADDR, "w");
  if (faddr == NULL)
    exit(1);
+ faddr2 = fopen(FN_ETC_EMAILADDR, "w");
+ if (faddr2 == NULL)
+   exit(1);
#endif

  ...
  ...

#ifdef EADDR_GROUPING
  free(chain);
  free(plist);
  fclose(faddr);
+ fclose(faddr2);
#endif


  每週跑了 reaper 以後會產生出 etc/emailaddr
  記錄著使用超過三次的 email
  在這名單中的將比照 untrust.acl 黑名單辦理

--
□ 本文章由 itocitoc.Dorm-GD2.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻