作者amaki.bbs@luna.twbbs.org (招喚颱風的羊) 看板: plan
標題[修改]自訂副板主後變動線上使用者權限
時間月下夜想 (Thu, 11 Sep 2003 02:23:01 +0800 (CST)) Updated: 2003/09/13
變更副板主後,讓被卸任的板主拿下權限,新上任板主掛上權限,這個修改請勿盲目抄
下面的程式碼,您必須有做「線上變更使用者權限」且新增相關函式,可參考itoc精華
區。
: manage.c : post_changeBM()
static int
post_changeBM(xo)
XO *xo;
{
char buf[80], uid[IDLEN + 1], *blist;
BRD *oldbrd, newbrd;
ACCT acct;
int dirty, len;
+ int has_set = 0;
......
......
while (1)
{
if (!vget(10, 0, "請輸入板主,結束請按 .....", uid, IDLEN + 1, DOECHO))
{
- if (dirty != strlen(cuser.userid)) /* 有做修改 */
- strcpy(newbrd.BM, buf);
+ if ((*uid == '\0' || !strcmp(cuser.userid, uid)) && !has_set)
+ return XO_BODY;
+ else
break;
}
......
......
strcat(buf, "/");
strcat(buf, acct.userid);
buf[BMLEN] = '\0'; /* 避免過長 */
+ strcpy(newbrd.BM, buf);
move(8, 0);
prints("目前板主為 %s", buf);
clrtoeol();
+ has_set = 1;
......
......
if (memcmp(&newbrd, oldbrd, sizeof(BRD)) && vans(msg_sure_ny) == 'y')
{
memcpy(oldbrd, &newbrd, sizeof(BRD));
rec_put(FN_BRD, &newbrd, sizeof(BRD), currbno, NULL);
}
+ utmp_BMset(newbrd.BM, currbno);
: cache.c : utmp_BMset()
新增這支函式,但請勿盲目抄錄下面程式碼,下面程式碼名單檔的路徑請用自己站上的
名單檔路徑或是檔名,且須做變更。
void
utmp_BMset(blist, bno) /* amaki.030909: 動態設定線上板主的看板閱讀權限 */
char *blist;
int bno;
{
extern BCACHE *bshm;
int fd, key;
UTMP *uentp, *uceil;
BRD *brd;
char fpath[64];
brd = bshm->bcache + bno;
uentp = ushm->uslot;
uceil = (void *) uentp + ushm->offset;
if ((brd->readlevel & PERM_SYSOP) || (brd->readlevel & PERM_BOARD))
{
brd_fpath(fpath, brd->brdname, fn_pal);
key = (brd->readlevel & PERM_SYSOP) ? '1' : '2';
}
else
{
brd_fpath(fpath, brd->brdname, fn_badpal);
key = '3';
}
fd = open(fpath, O_RDONLY);
do
{
/* 重新判斷該板的 brd_bits */
if (is_bm(blist, uentp->userid))
{
uentp->brd_bits[bno] =(uentp->brd_bits[bno] &
(BRD_V_BIT | BRD_H_BIT | BR_Z_BIT)) |
(BRD_L_BIT | BRD_R_BIT | BRD_W_BIT | BRD_X_BIT);
uentp->status |= STATUS_BRD_BIT;
}
else if (uentp->brd_bits[bno] & BRD_X_BIT)
{
uentp->brd_bits[bno] =(uentp->brd_bits[bno] &
(BRD_V_BIT | BRD_H_BIT | BR_Z_BIT)) |
pal_brdutmp(fd, brd->BM, uentp, key);
uentp->status |= STATUS_BRD_BIT;
}
} while (++uentp <= uceil);
}
--
Origin: luna.twbbs.org