From d839e1ec58637953063cc89b73cc0ceab8b3880d Mon Sep 17 00:00:00 2001 From: in2 Date: Wed, 26 Oct 2005 16:42:14 +0000 Subject: BRD_OVER18 patch. see http://www.ticrf.org.tw for details git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3231 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- include/pttstruct.h | 49 +++++++++++++++++++++++++------------------------ mbbsd/bbs.c | 10 ++++++++++ mbbsd/board.c | 7 ++++++- mbbsd/mbbsd.c | 7 +++++++ mbbsd/name.c | 3 ++- mbbsd/var.c | 3 ++- 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 */ -- cgit v1.2.3