summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-06-30 14:09:06 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2009-06-30 14:09:06 +0800
commit3a9767c5d41375747393d16612236c2ec6e4740e (patch)
tree640af20a0f9111ea232f40da20cbca93300f1a62
parent06da6c91162ed86a3d086cf4200688a23215f02e (diff)
downloadpttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.tar
pttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.tar.gz
pttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.tar.bz2
pttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.tar.lz
pttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.tar.xz
pttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.tar.zst
pttbbs-3a9767c5d41375747393d16612236c2ec6e4740e.zip
* add Security and ALLPOST to system internal readonly boards
* previously, ALLPOST was set to reject del_post by attr BRD_VOTEBOARD; however this is confusing to admins. * in order to prevent such potential issue, we'd force it to be readonly in source level. (since it has special meaning in the code) git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@4716 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--include/proto.h1
-rw-r--r--mbbsd/board.c8
-rw-r--r--mbbsd/cache.c4
3 files changed, 13 insertions, 0 deletions
diff --git a/include/proto.h b/include/proto.h
index 54c4d547..96aa0290 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -86,6 +86,7 @@ int check_cooldown(boardheader_t *bp);
/* board */
#define setutmpbid(bid) currutmp->brc_id=bid;
+int is_readonly_board(const char *bname);
int enter_board(const char *boardname);
int HasBoardPerm(boardheader_t *bptr);
void save_brdbuf(void);
diff --git a/mbbsd/board.c b/mbbsd/board.c
index 17710bf5..10e743a3 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -67,6 +67,14 @@ inline boardheader_t *getparent(const boardheader_t *fh)
return NULL;
}
+// 程式中有特別用途所以不得自行 post / 修改的看板
+int
+is_readonly_board(const char *bname)
+{
+ return (strcasecmp(bname, BN_SECURITY) == 0 ||
+ strcasecmp(bname, BN_ALLPOST ) == 0 );
+}
+
/**
* @param[in] boardname board name, case insensitive
* @return 0 if success
diff --git a/mbbsd/cache.c b/mbbsd/cache.c
index 3860dd1f..e56c162a 100644
--- a/mbbsd/cache.c
+++ b/mbbsd/cache.c
@@ -177,6 +177,10 @@ postperm_msg(const char *bname)
if (!(i = getbnum(bname)))
return "看板不存在";
+ // system internal read only boards (no matter what attribute/flag set)
+ if (is_readonly_board(bname))
+ return "看板唯讀";
+
if (HasUserPerm(PERM_SYSOP))
return NULL;