回文章列表
作者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 ]|[  Ocpu.tfcis.org  ]|[�搟說:]=
=[:摃�╱�:Author ]|[61-216-37-66.dynamic.hinet]|[�:]=
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻