summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/pttstruct.h49
-rw-r--r--mbbsd/bbs.c10
-rw-r--r--mbbsd/board.c7
-rw-r--r--mbbsd/mbbsd.c7
-rw-r--r--mbbsd/name.c3
-rw-r--r--mbbsd/var.c3
6 files changed, 52 insertions, 27 deletions
diff --git a/include/pttstruct.h b/include/pttstruct.h
index a8e9c568..4cd92934 100644
--- a/include/pttstruct.h
+++ b/include/pttstruct.h
@@ -199,30 +199,31 @@ typedef struct boardheader_t {
} boardheader_t;
/* 下面是八進位喔 */
-#define BRD_NOZAP 000000001 /* 不可zap */
-#define BRD_NOCOUNT 000000002 /* 不列入統計 */
-#define BRD_NOTRAN 000000004 /* 不轉信 */
-#define BRD_GROUPBOARD 000000010 /* 群組板 */
-#define BRD_HIDE 000000020 /* 隱藏板 (看板好友才可看) */
-#define BRD_POSTMASK 000000040 /* 限制發表或閱讀 */
-#define BRD_ANONYMOUS 000000100 /* 匿名板 */
-#define BRD_DEFAULTANONYMOUS 000000200 /* 預設匿名板 */
-#define BRD_BAD 000000400 /* 違法改進中看板 */
-#define BRD_VOTEBOARD 000001000 /* 連署機看板 */
-#define BRD_WARNEL 000002000 /* 連署機看板 */
-#define BRD_TOP 000004000 /* 熱門看板群組 */
-#define BRD_NORECOMMEND 000010000 /* 不可推薦 */
-#define BRD_BLOG 000020000 /* BLOG */
-#define BRD_BMCOUNT 000040000 /* 板主設定列入記錄 */
-#define BRD_SYMBOLIC 000100000 /* symbolic link to board */
-#define BRD_NOBOO 000200000 /* 不可噓 */
-#define BRD_LOCALSAVE 000400000 /* 預設 Local Save */
-#define BRD_RESTRICTEDPOST 001000000 /* 板友才能發文 */
-#define BRD_GUESTPOST 002000000 /* guest能 post */
-#define BRD_COOLDOWN 004000000 /* 冷靜 */
-#define BRD_CPLOG 010000000 /* 自動留轉錄記錄 */
-#define BRD_NOFASTRECMD 020000000 /* 禁止快速推文 */
-#define BRD_IPLOGRECMD 040000000 /* 推文記錄 IP */
+#define BRD_NOZAP 0000000001 /* 不可zap */
+#define BRD_NOCOUNT 0000000002 /* 不列入統計 */
+#define BRD_NOTRAN 0000000004 /* 不轉信 */
+#define BRD_GROUPBOARD 0000000010 /* 群組板 */
+#define BRD_HIDE 0000000020 /* 隱藏板 (看板好友才可看) */
+#define BRD_POSTMASK 0000000040 /* 限制發表或閱讀 */
+#define BRD_ANONYMOUS 0000000100 /* 匿名板 */
+#define BRD_DEFAULTANONYMOUS 0000000200 /* 預設匿名板 */
+#define BRD_BAD 0000000400 /* 違法改進中看板 */
+#define BRD_VOTEBOARD 0000001000 /* 連署機看板 */
+#define BRD_WARNEL 0000002000 /* 連署機看板 */
+#define BRD_TOP 0000004000 /* 熱門看板群組 */
+#define BRD_NORECOMMEND 0000010000 /* 不可推薦 */
+#define BRD_BLOG 0000020000 /* BLOG */
+#define BRD_BMCOUNT 0000040000 /* 板主設定列入記錄 */
+#define BRD_SYMBOLIC 0000100000 /* symbolic link to board */
+#define BRD_NOBOO 0000200000 /* 不可噓 */
+#define BRD_LOCALSAVE 0000400000 /* 預設 Local Save */
+#define BRD_RESTRICTEDPOST 0001000000 /* 板友才能發文 */
+#define BRD_GUESTPOST 0002000000 /* guest能 post */
+#define BRD_COOLDOWN 0004000000 /* 冷靜 */
+#define BRD_CPLOG 0010000000 /* 自動留轉錄記錄 */
+#define BRD_NOFASTRECMD 0020000000 /* 禁止快速推文 */
+#define BRD_IPLOGRECMD 0040000000 /* 推文記錄 IP */
+#define BRD_OVER18 0100000000 /* 十八禁 */
#define BRD_LINK_TARGET(x) ((x)->postexpire)
#define GROUPOP() (currmode & MODE_GROUPOP)
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c
index 1039e1e4..89fd9684 100644
--- a/mbbsd/bbs.c
+++ b/mbbsd/bbs.c
@@ -2975,6 +2975,11 @@ b_config(void)
(bp->brdattr & BRD_RESTRICTEDPOST) ?
ANSI_COLOR(1)"只有板友才可發文" : "無特別設定" );
+ prints( " " ANSI_COLOR(1;36) "1" ANSI_RESET
+ " - 未滿十八歲 " ANSI_COLOR(1) "%s" ANSI_RESET
+ " 進入",
+ (bp->brdattr & BRD_OVER18) ? "不可以" : "可以" );
+
if (!((currmode & MODE_BOARD) || HasUserPerm(PERM_SYSOP)))
{
vmsg("您對此板無管理權限");
@@ -3072,6 +3077,11 @@ b_config(void)
bp->brdattr &= ~BRD_NORECOMMEND;
break;
#endif
+ case '1':
+ bp->brdattr ^= BRD_OVER18;
+ touched = 1;
+ break;
+
default:
finished = 1;
break;
diff --git a/mbbsd/board.c b/mbbsd/board.c
index 13cdd930..64c27f65 100644
--- a/mbbsd/board.c
+++ b/mbbsd/board.c
@@ -103,11 +103,15 @@ HasBoardPerm(boardheader_t *bptr)
if (HasUserPerm(PERM_SYSOP))
return 1;
+ /* 十八禁看板 */
+ if( (brdattr & BRD_OVER18) && !over18 )
+ return 0;
+
+ /* 板主 */
if( is_BM_cache(bptr - bcache + 1) ) /* XXXbid */
return 1;
/* 祕密看板:核對首席板主的好友名單 */
-
if (brdattr & BRD_HIDE) { /* 隱藏 */
if (hbflcheck((int)(bptr - bcache) + 1, currutmp->uid)) {
if (brdattr & BRD_POSTMASK)
@@ -117,6 +121,7 @@ HasBoardPerm(boardheader_t *bptr)
} else
return 1;
}
+
/* 限制閱讀權限 */
if (level && !(brdattr & BRD_POSTMASK) && !HasUserPerm(level))
return 0;
diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c
index 38716ad0..9cd20572 100644
--- a/mbbsd/mbbsd.c
+++ b/mbbsd/mbbsd.c
@@ -1005,6 +1005,13 @@ user_login(void)
/* 初始化: random number 增加user跟時間的差異 */
mysrand();
+ /* check if over18 */
+ if( (ptime.tm_year - cuser.year) >= 18 ||
+ (ptime.tm_year - cuser.year == 17 &&
+ ((ptime.tm_mon+1) > cuser.month ||
+ ((ptime.tm_mon+1) == cuser.month && ptime.tm_mday > cuser.day))) )
+ over18 = 1;
+
/* show welcome_login */
if( (ifbirth = (ptime.tm_mday == cuser.day &&
ptime.tm_mon + 1 == cuser.month)) ){
diff --git a/mbbsd/name.c b/mbbsd/name.c
index 8fd78fb7..aafc4cc6 100644
--- a/mbbsd/name.c
+++ b/mbbsd/name.c
@@ -762,7 +762,8 @@ completeboard_permission(int where)
boardheader_t *bptr = &bcache[SHM->bsorted[0][where]];
return (!(bptr->brdattr & BRD_SYMBOLIC) &&
(GROUPOP() || HasBoardPerm(bptr)) &&
- !(bptr->brdattr & BRD_GROUPBOARD));
+ !(bptr->brdattr & BRD_GROUPBOARD) &&
+ !(bptr->brdattr & BRD_OVER18 && !over18));
}
int
diff --git a/mbbsd/var.c b/mbbsd/var.c
index 3afa2d6f..e44abd9d 100644
--- a/mbbsd/var.c
+++ b/mbbsd/var.c
@@ -74,7 +74,7 @@ const char * const str_permboard[] = {
#endif
"禁止快速推文", /* BRD_NOFASTRECMD */
"推文記錄 IP", /* BRD_IPLOGRECMD */
- "沒想到",
+ "十八禁", /* BRD_OVER18 */
"沒想到",
"沒想到",
"沒想到",
@@ -387,6 +387,7 @@ char fromhost[STRLEN] = "\0";
char water_usies = 0;
FILE *fp_writelog = NULL;
water_t water[6], *swater[6], *water_which = &water[0];
+char over18 = 0;
/* chc_play.c */