summaryrefslogtreecommitdiffstats
path: root/mbbsd/cache.c
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-02-26 00:35:38 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-02-26 00:35:38 +0800
commit31077a7c833e60121e843456d52fbbb5bda88ddb (patch)
tree31d04e86bc068409199810743c221a74636f8302 /mbbsd/cache.c
parent88b4d69ded90aac6895d9619d1a786b3f4c2a8ad (diff)
downloadpttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.tar
pttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.tar.gz
pttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.tar.bz2
pttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.tar.lz
pttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.tar.xz
pttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.tar.zst
pttbbs-31077a7c833e60121e843456d52fbbb5bda88ddb.zip
- b_config: more detail hints on user post permission checking
- bcache code refine git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3948 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/cache.c')
-rw-r--r--mbbsd/cache.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/mbbsd/cache.c b/mbbsd/cache.c
index 7df6a49a..5a30c24f 100644
--- a/mbbsd/cache.c
+++ b/mbbsd/cache.c
@@ -789,44 +789,55 @@ getbnum(const char *bname)
return 0;
}
-int
-haspostperm(const char *bname)
+const char *
+postperm_msg(const char *bname)
{
register int i;
- char buf[200];
+ char buf[PATHLEN];
+ boardheader_t *bp = NULL;
setbfile(buf, bname, fn_water);
if (belong(buf, cuser.userid))
- return 0;
+ return "使用者水桶中";
if (!strcasecmp(bname, DEFAULT_BOARD))
- return 1;
+ return NULL;
if (!(i = getbnum(bname)))
- return 0;
+ return "看板不存在";
+
assert(0<=i-1 && i-1<MAX_BOARD);
+ bp = getbcache(i);
- if (bcache[i - 1].brdattr & BRD_GUESTPOST)
- return 1;
+ if (bp->brdattr & BRD_GUESTPOST)
+ return NULL;
if (!HasUserPerm(PERM_POST))
- return 0;
+ return "無發文權限";
/* 秘密看板特別處理 */
- if (bcache[i - 1].brdattr & BRD_HIDE)
- return 1;
- else if (bcache[i - 1].brdattr & BRD_RESTRICTEDPOST &&
+ if (bp->brdattr & BRD_HIDE)
+ return NULL;
+ else if (bp->brdattr & BRD_RESTRICTEDPOST &&
!is_hidden_board_friend(i, usernum))
- return 0;
+ return "看板限制發文";
- i = bcache[i - 1].level;
-
- if (HasUserPerm(PERM_VIOLATELAW) && (i & PERM_VIOLATELAW))
- return 1;
+ if (HasUserPerm(PERM_VIOLATELAW) && (bp->level & PERM_VIOLATELAW))
+ return NULL;
else if (HasUserPerm(PERM_VIOLATELAW))
- return 0;
+ return "罰單未繳";
- return (i & ~PERM_POST) ? HasUserPerm(i & ~PERM_POST) : 1;
+ if (!(bp->level & ~PERM_POST))
+ return NULL;
+ if (!HasUserPerm(bp->level & ~PERM_POST))
+ return "未達看板要求權限";
+ return NULL;
+}
+
+int
+haspostperm(const char *bname)
+{
+ return postperm_msg(bname) == NULL ? 1 : 0;
}
void buildBMcache(int bid) /* bid starts from 1 */