summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-28 13:50:52 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-04-28 13:50:52 +0800
commit76c3cd196a66c1e8a1df39d6cca858cb722986ee (patch)
tree9d07af8b3a35fca78565e532b819bb1aeefe5a4f
parent54bb9f7ff65c209b79c409df45c4e03fb8b8c4ac (diff)
downloadpttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.tar
pttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.tar.gz
pttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.tar.bz2
pttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.tar.lz
pttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.tar.xz
pttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.tar.zst
pttbbs-76c3cd196a66c1e8a1df39d6cca858cb722986ee.zip
- 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
-rw-r--r--include/common.h4
-rw-r--r--include/perm.h2
-rw-r--r--mbbsd/mail.c32
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; "