From 76c3cd196a66c1e8a1df39d6cca858cb722986ee Mon Sep 17 00:00:00 2001 From: piaip Date: Mon, 28 Apr 2008 05:50:52 +0000 Subject: - allow F forward only for authenticated users - check reject list for local users in F forward git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4252 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/common.h | 4 ++-- include/perm.h | 2 +- mbbsd/mail.c | 32 +++++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/include/common.h b/include/common.h index fe6c428e..7ef044ea 100644 --- a/include/common.h +++ b/include/common.h @@ -68,8 +68,8 @@ #define MSG_DEL_NY "請確定刪除(Y/N)?[N] " #define MSG_FWD_OK "文章轉寄完成!" -#define MSG_FWD_ERR1 "轉寄失誤: 系統錯誤 system error" -#define MSG_FWD_ERR2 "轉寄失誤: 位址錯誤 address error" +#define MSG_FWD_ERR1 "轉寄錯誤: 系統錯誤 system error" +#define MSG_FWD_ERR2 "轉寄錯誤: 位址錯誤 address error" #define MSG_SURE_NY "請您確定(Y/N)?[N] " #define MSG_SURE_YN "請您確定(Y/N)?[Y] " diff --git a/include/perm.h b/include/perm.h index 04864e2d..3923c796 100644 --- a/include/perm.h +++ b/include/perm.h @@ -52,7 +52,7 @@ #define PERM_SEEBLEVELS (PERM_SYSOP | PERM_BM) #define PERM_NOTIMEOUT (PERM_SYSOP) #define PERM_READMAIL (PERM_BASIC) -#define PERM_FORWARD (PERM_BASIC) /* to do the forwarding */ +#define PERM_FORWARD (PERM_LOGINOK) /* to do the forwarding */ #define PERM_INTERNET (PERM_LOGINOK) /* 身份認證過關的才能寄信到 Internet */ #define HasUserPerm(x) (cuser.userlevel & (x)) diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 4030c6db..cc19fee3 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -2029,12 +2029,42 @@ doforward(const char *direct, const fileheader_t * fh, int mode) if (invalidaddr(address)) return -2; - outmsg("正轉寄請稍候..."); + outmsg("轉寄中請稍候..."); refresh(); /* 追蹤使用者 */ if (HasUserPerm(PERM_LOGUSER)) log_user("mailforward to %s ",address); + + // 處理站內黑名單 + do { + char xid[IDLEN+1], *dot; + char fpath[PATHLEN]; + int i = 0; + + strlcpy(xid, address, sizeof(xid)); + dot = strchr(xid, '.'); + if (dot) *dot = 0; + dot = strcasestr(address, ".bbs@"); + + if (dot) { + if (strcasecmp(strchr(dot, '@')+1, MYHOSTNAME) != 0) + break; + } else { + // accept only local name + if (strchr(address, '@')) + break; + } + + // now the xid holds local name + sethomefile(fpath, xid, FN_OVERRIDES); + i = belong(fpath, cuser.userid); + sethomefile(fpath, xid, FN_REJECT); + // TODO 該 return 哪種值? + if (!i && belong(fpath, cuser.userid)) + return -1; + } while (0); + if (mode == 'Z') { snprintf(fname, sizeof(fname), TAR_PATH " cfz /tmp/home.%s.tgz home/%c/%s; " -- cgit v1.2.3