summaryrefslogblamecommitdiffstats
path: root/util/initbbs.c
blob: 8d25b113a1ea36805cb122fd6b0eda599d978e03 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
          
                








                              
                       
                            












                             


                                                    




                         
      


     










                             




                         














                                




                          


     
















                                                  
                                                            
                     
                                                                



                          
                                  









                                                          
                         
 



























                                                                  
                                      








































                                                     






                                                          
        

                                     

                                                               
                             


                         
 

                                            






                                                                     










                                  

                                                             
                      

                   
                                                     


                                              
                                                  



                                              
                                               



                                              
                                             



                                              
                                            



                                              
                                              






                           


                                                                            










                                              





                                                                     
                                                 



                                                      






                        

                    







                  
/* $Id$ */
#include "bbs.h"

static void initDir() {
    mkdir("adm", 0755);
    mkdir("boards", 0755);
    mkdir("etc", 0755);
    mkdir("man", 0755);
    mkdir("man/boards", 0755);
    mkdir("out", 0755);
    mkdir("tmp", 0755);
    mkdir("run", 0755);
    mkdir("jobspool", 0755);
}

static void initHome() {
    int i;
    char buf[256];
    
    mkdir("home", 0755);
    strcpy(buf, "home/?");
    for(i = 0; i < 26; i++) {
    buf[5] = 'A' + i;
    mkdir(buf, 0755);
    buf[5] = 'a' + i;
    mkdir(buf, 0755);
#if 0
    /* in current implementation we don't allow 
     * id as digits so we don't create now. */
    if(i >= 10)
        continue;
    /* 0~9 */
    buf[5] = '0' + i;
    mkdir(buf, 0755);
#endif
    }
}

static void initBoardsDIR() {
    int i;
    char buf[256];
    
    mkdir("boards", 0755);
    strcpy(buf, "boards/?");
    for(i = 0; i < 26; i++) {
    buf[7] = 'A' + i;
    mkdir(buf, 0755);
    buf[7] = 'a' + i;
    mkdir(buf, 0755);
    if(i >= 10)
        continue;
    /* 0~9 */
    buf[7] = '0' + i;
    mkdir(buf, 0755);
    }
}

static void initManDIR() {
    int i;
    char buf[256];
    
    mkdir("man", 0755);
    mkdir("man/boards", 0755);
    strcpy(buf, "man/boards/?");
    for(i = 0; i < 26; i++) {
    buf[11] = 'A' + i;
    mkdir(buf, 0755);
    buf[11] = 'a' + i;
    mkdir(buf, 0755);
    if(i >= 10)
        continue;
    /* 0~9 */
    buf[11] = '0' + i;
    mkdir(buf, 0755);
    }
}

static void initPasswds() {
    int i;
    userec_t u;
    FILE *fp = fopen(".PASSWDS", "w");
    
    memset(&u, 0, sizeof(u));
    if(fp) {
    for(i = 0; i < MAX_USERS; i++)
        fwrite(&u, sizeof(u), 1, fp);
    fclose(fp);
    }
}

static void newboard(FILE *fp, boardheader_t *b) {
    char buf[256];
    
    fwrite(b, sizeof(boardheader_t), 1, fp);
    sprintf(buf, "boards/%c/%s", b->brdname[0], b->brdname);
    mkdir(buf, 0755);
    sprintf(buf, "man/boards/%c/%s", b->brdname[0], b->brdname);
    mkdir(buf, 0755);
}

static void initBoards() {
    FILE *fp = fopen(".BRD", "w");
    boardheader_t b;
    
    if(fp) {
    memset(&b, 0, sizeof(b));
    
    strcpy(b.brdname, "SYSOP");
    strcpy(b.title, "嘰哩 ◎站長好!");
    b.brdattr = BRD_POSTMASK | BRD_NOTRAN | BRD_NOZAP;
    b.level = 0;
    b.gid = 2;
    newboard(fp, &b);

    strcpy(b.brdname, "1...........");
    strcpy(b.title, ".... Σ中央政府  《高壓危險,非人可敵》");
    b.brdattr = BRD_GROUPBOARD;
    b.level = PERM_SYSOP;
    b.gid = 1;
    newboard(fp, &b);
    
    strcpy(b.brdname, "junk");
    strcpy(b.title, "發電 ◎雜七雜八的垃圾");
    b.brdattr = BRD_NOTRAN;
    b.level = PERM_SYSOP;
    b.gid = 2;
    newboard(fp, &b);
    
    strcpy(b.brdname, "Security");
    strcpy(b.title, "發電 ◎站內系統安全");
    b.brdattr = BRD_NOTRAN;
    b.level = PERM_SYSOP;
    b.gid = 2;
    newboard(fp, &b);
    
    strcpy(b.brdname, "2...........");
    strcpy(b.title, ".... Σ市民廣場     報告  站長  ㄜ!");
    b.brdattr = BRD_GROUPBOARD;
    b.level = 0;
    b.gid = 1;
    newboard(fp, &b);
    
    strcpy(b.brdname, BN_ALLPOST);
    strcpy(b.title, "嘰哩 ◎跨板式LOCAL新文章");
    b.brdattr = BRD_POSTMASK | BRD_NOTRAN;
    b.level = PERM_SYSOP;
    b.gid = 5;
    newboard(fp, &b);
    
    strcpy(b.brdname, "deleted");
    strcpy(b.title, "嘰哩 ◎資源回收筒");
    b.brdattr = BRD_NOTRAN;
    b.level = PERM_BM;
    b.gid = 5;
    newboard(fp, &b);
    
    strcpy(b.brdname, "Note");
    strcpy(b.title, "嘰哩 ◎動態看板及歌曲投稿");
    b.brdattr = BRD_NOTRAN;
    b.level = 0;
    b.gid = 5;
    newboard(fp, &b);
    
    strcpy(b.brdname, "Record");
    strcpy(b.title, "嘰哩 ◎我們的成果");
    b.brdattr = BRD_NOTRAN | BRD_POSTMASK;
    b.level = 0;
    b.gid = 5;
    newboard(fp, &b);
    
    
    strcpy(b.brdname, "WhoAmI");
    strcpy(b.title, "嘰哩 ◎呵呵,猜猜我是誰!");
    b.brdattr = BRD_NOTRAN;
    b.level = 0;
    b.gid = 5;
    newboard(fp, &b);
    
    strcpy(b.brdname, "EditExp");
    strcpy(b.title, "嘰哩 ◎範本精靈投稿區");
    b.brdattr = BRD_NOTRAN;
    b.level = 0;
    b.gid = 5;
    newboard(fp, &b);

    strcpy(b.brdname, "ALLHIDPOST");
    strcpy(b.title, "嘰哩 ◎跨板式LOCAL新文章(隱板)");
    b.brdattr = BRD_POSTMASK | BRD_HIDE;
    b.level = PERM_SYSOP;
    b.gid = 5;
    newboard(fp, &b);
    
#ifdef BN_DIGEST
    strcpy(b.brdname, BN_DIGEST);
    strcpy(b.title, "文摘 ◎" BBSNAME "文摘 好文的收集地");
    b.brdattr = BRD_NOTRAN | BRD_POSTMASK;
    b.level = PERM_SYSOP;
    b.gid = 5;
    newboard(fp, &b);
#endif

#ifdef BN_FIVECHESS_LOG
    strcpy(b.brdname, BN_FIVECHESS_LOG);
    strcpy(b.title, "棋藝 ◎" BBSNAME "五子棋譜 站上對局全紀錄");
    b.brdattr = BRD_NOTRAN | BRD_POSTMASK;
    b.level = PERM_SYSOP;
    b.gid = 5;
    newboard(fp, &b);
#endif

    fclose(fp);
    }
}

static void initMan() {
    FILE *fp;
    fileheader_t f;
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    
    memset(&f, 0, sizeof(f));
    strcpy(f.owner, "SYSOP");
    sprintf(f.date, "%2d/%02d", tm->tm_mon + 1, tm->tm_mday);
    f.multi.money = 0;
    f.filemode = 0;
    
    if((fp = fopen("man/boards/N/Note/.DIR", "w"))) {
    strcpy(f.filename, "SONGBOOK");
    strcpy(f.title, "◆ 【點 歌 歌 本】");
    fwrite(&f, sizeof(f), 1, fp);
    mkdir("man/boards/N/Note/SONGBOOK", 0755);
    
    strcpy(f.filename, "SONGO");
    strcpy(f.title, "◆ <點歌> 動態看板");
    fwrite(&f, sizeof(f), 1, fp);
    mkdir("man/boards/N/Note/SONGO", 0755);
    
    strcpy(f.filename, "SYS");
    strcpy(f.title, "◆ <系統> 動態看板");
    fwrite(&f, sizeof(f), 1, fp);
    mkdir("man/boards/N/Note/SYS", 0755);
    
    strcpy(f.filename, "AD");
    strcpy(f.title, "◆ <廣告> 動態看板");
    fwrite(&f, sizeof(f), 1, fp);
    mkdir("man/boards/N/Note/AD", 0755);
    
    strcpy(f.filename, "NEWS");
    strcpy(f.title, "◆ <新聞> 動態看板");
    fwrite(&f, sizeof(f), 1, fp);
    mkdir("man/boards/N/Note/NEWS", 0755);
    
    fclose(fp);
    }
    
}

static void initSymLink() {
    symlink(BBSHOME "/man/boards/N/Note/SONGBOOK", BBSHOME "/etc/SONGBOOK");
    symlink(BBSHOME "/man/boards/N/Note/SONGO", BBSHOME "/etc/SONGO");
    symlink(BBSHOME "/man/boards/E/EditExp", BBSHOME "/etc/editexp");
}

static void initHistory() {
    FILE *fp = fopen("etc/history.data", "w");
    
    if(fp) {
    fprintf(fp, "0 0 0 0");
    fclose(fp);
    }
}

int main(int argc, char **argv)
{
    if( argc != 2 || strcmp(argv[1], "-DoIt") != 0 ){
    fprintf(stderr,
        "警告!  initbbs只用在「第一次安裝」的時候.\n"
        "若您的站台已經上線,  initbbs將會破壞掉原有資料!\n\n"
        "將把 BBS 安裝在 " BBSHOME "\n\n"
        "確定要執行, 請使用 initbbs -DoIt\n");
    return 1;
    }

    if(chdir(BBSHOME)) {
    perror(BBSHOME);
    exit(1);
    }
    
    initDir();
    initHome();
    initBoardsDIR();
    initManDIR();
    initPasswds();
    initBoards();
    initMan();
    initSymLink();
    initHistory();
    
    return 0;
}