作者itoc.bbs@cpu.tfcis.org (核心動力) 看板: itoc
標題Re: 檢查所有看板的版主..帳號是否還在
時間動力核心 (2007/11/27 Tue 20:00:32)
※ 引述《jimchein.bbs@cd.twbbs.org (哇丟係小怪)》之銘言:
> 因為有一些版主太久沒有上站
> 已經被系統刪除帳號
如果是走正常程式開板的話,板主不會被 reaper 刪除
會有這問題,應該是以前轉換來的
> 但是他們的看板..版主依然還是掛著這些被刪除的帳號
> 是否有程式可以對所有看板進行檢查
> 將已經被刪除帳號的版主..自動移除在版主名單當中呢?
用以下這程式可以找出板主名單內有哪些是根本不存在的 ID
然後再從 BBS 上設定移除即可
: src/util/Makefile
EXE = ..... checkBMlist
: src/util/checkBMlist.c 新增此程式
/*-------------------------------------------------------*/
/* util/checkBMlist.c ( NTHU CS MapleBBS Ver 3.10 ) */
/*-------------------------------------------------------*/
/* target : 檢查板主名單內有沒有不存在的使用者 */
/* create : 07/11/27 */
/* update : / / */
/* author : itoc.bbs@bbs.tnfsh.tn.edu.tw */
/*-------------------------------------------------------*/
#include "bbs.h"
/*-------------------------------------------------------*/
/* BRD shm 部分須與 cache.c 相容 */
/*-------------------------------------------------------*/
static BCACHE *bshm;
static void
init_bshm()
{
/* itoc.030727: 在開啟 bbsd 之前,應該就要執行過 account,
所以 bshm 應該已設定好 */
bshm = shm_new(BRDSHM_KEY, sizeof(BCACHE));
if (bshm->uptime <= 0) /* bshm 未設定完成 */
exit(0);
}
/* ----------------------------------------------------- */
/* 統計全站板主 */
/* ----------------------------------------------------- */
typedef struct
{
char userid[IDLEN + 1];
char brdname[BNLEN + 1];
} BMLIST;
static int
make_bm_list(list)
BMLIST *list;
{
int num;
BRD *head, *tail;
char *ptr, *str, buf[BMLEN + 1];
/* 去 bshm 中抓出所有 brd->BM */
num = 0;
head = bshm->bcache;
tail = head + bshm->number;
do /* 至少有 note 一板,不必對看板做檢查 */
{
ptr = buf;
strcpy(ptr, head->BM);
while (*ptr) /* 把 brd->BM 中 bm1/bm2/bm3/... 各個 bm 抓出來 */
{
if (str = strchr(ptr, '/'))
*str = '\0';
str_ncpy(list[num].userid, ptr, IDLEN + 1);
str_ncpy(list[num].brdname, head->brdname, BNLEN + 1);
num++;
if (!str)
break;
ptr = str + 1;
}
} while (++head < tail);
return num;
}
static void
check_list(list, num)
BMLIST *list;
int num;
{
int i;
char folder[64];
for (i = 0; i < num; i++)
{
usr_fpath(folder, list[i].userid, FN_ACCT);
if (!dashf(folder))
{
printf("使用者 %s 在 [%s] 的板主名單上,但此使用者已不存在\n",
list[i].userid, list[i].brdname);
}
}
}
/*-------------------------------------------------------*/
/* 主程式 */
/*-------------------------------------------------------*/
int
main()
{
int num;
BMLIST list[MAXBOARD * 8]; /* 假設每板八個板主已足夠 */
chdir(BBSHOME);
init_bshm();
num = make_bm_list(list);
check_list(list, num);
return 0;
}
--
=[﹎:�摃�◣��:﹎Origin ]|[ ���O���� cpu.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊Author ]|[61-216-37-66.dynamic.hinet]|[���插�﹊:]=