作者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 黑名單辦理
--
□ 本文章由 itoc 從 itoc.Dorm-GD2.NCTU.edu.tw 發表