summaryrefslogtreecommitdiffstats
path: root/upgrade/r3968_chicken.c
blob: 70d90def801af27caf15a7eadfd6c5e2d89fe42c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "bbs.h"

// warning: if you changed userec_t, you must use the old version.

typedef struct {
    unsigned int    version;    /* version number of this sturcture, we
                     * use revision number of project to denote.*/

    char    userid[IDLEN + 1];  /* ID */
    char    realname[20];   /* 真實姓名 */
    char    nickname[24];   /* 暱稱 */
    char    passwd[PASSLEN];    /* 密碼 */
    char    padx;
    unsigned int    uflag;  /* 習慣1 , see uflags.h */
    unsigned int    uflag2; /* 習慣2 , see uflags.h */
    unsigned int    userlevel;  /* 權限 */
    unsigned int    numlogins;  /* 上站次數 */
    unsigned int    numposts;   /* 文章篇數 */
    time4_t firstlogin;     /* 註冊時間 */
    time4_t lastlogin;      /* 最近上站時間 */
    char    lasthost[16];   /* 上次上站來源 */
    int     money;      /* Ptt幣 */
    char    remoteuser[3];  /* 保留 目前沒用到的 */
    char    proverb;        /* 座右銘 (unused) */
    char    email[50];      /* Email */
    char    address[50];    /* 住址 */
    char    justify[REGLEN + 1];    /* 審核資料 */
    unsigned char   month;  /* 生日 月 */
    unsigned char   day;    /* 生日 日 */
    unsigned char   year;   /* 生日 年 */
    unsigned char   sex;    /* 性別 */
    unsigned char   state;  /* TODO unknown (unused ?) */
    unsigned char   pager;  /* 呼叫器狀態 */
    unsigned char   invisible;  /* 隱形狀態 */
    char    padxx[2];
    unsigned int    exmailbox;  /* 購買信箱數 TODO short 就夠了 */
    chicken_t       mychicken;  /* 寵物 */
    time4_t lastsong;       /* 上次點歌時間 */
    unsigned int    loginview;  /* 進站畫面 */
    unsigned char   channel;    /* TODO unused */
    char    padxxx;
    unsigned short  vl_count;   /* 違法記錄 ViolateLaw counter */
    unsigned short  five_win;   /* 五子棋戰績 勝 */
    unsigned short  five_lose;  /* 五子棋戰績 敗 */
    unsigned short  five_tie;   /* 五子棋戰績 和 */
    unsigned short  chc_win;    /* 象棋戰績 勝 */
    unsigned short  chc_lose;   /* 象棋戰績 敗 */
    unsigned short  chc_tie;    /* 象棋戰績 和 */
    int     mobile;     /* 手機號碼 */
    char    mind[4];        /* 心情 not a null-terminate string */
    unsigned short  go_win; /* 圍棋戰績 勝 */
    unsigned short  go_lose;    /* 圍棋戰績 敗 */
    unsigned short  go_tie; /* 圍棋戰績 和 */
    char    pad0[5];        /* 從前放 ident 身份證字號,現在可以拿來做別的事了,
                   不過最好記得要先清成 0 */
    unsigned char   signature;  /* 慣用簽名檔 */

    unsigned char   goodpost;   /* 評價為好文章數 */
    unsigned char   badpost;    /* 評價為壞文章數 */
    unsigned char   goodsale;   /* 競標 好的評價  */
    unsigned char   badsale;    /* 競標 壞的評價  */
    char    myangel[IDLEN+1];   /* 我的小天使 */
    char    pad2;
    unsigned short  chess_elo_rating;   /* 象棋等級分 */
    unsigned int    withme; /* 我想找人下棋,聊天.... */
    time4_t timeremovebadpost;  /* 上次刪除劣文時間 */
    time4_t timeviolatelaw; /* 被開罰單時間 */
    char    pad[28];
} old_userec_t;

int main()
{
    FILE *fp = fopen(FN_PASSWD, "rb"), *fp2 = NULL;
    char fn[PATHLEN];
    old_userec_t u;
    int i;

    if (!fp) {
    printf("cannot load password file. abort.\n");
    return -1;
    }

    i = 0;
    while (fread(&u, sizeof(u), 1, fp) > 0)
    {
    i++;
    if (!u.userid[0])
        continue;
    if (!u.mychicken.name[0])
        continue;

    // now, write this data to user home.
    // sethomefile(fn, u.userid, FN_CHICKEN);
    sprintf(fn, BBSHOME "/home/%c/%s/" FN_CHICKEN,
        u.userid[0], u.userid);
    fp2 = fopen(fn, "wb");
    if (!fp2)
    {
        printf("ERROR: cannot create chicken data: %s.\n", u.userid);
        continue;
    }
    if (fwrite(&u.mychicken, sizeof(u.mychicken), 1, fp2) < 1)
    {
        printf("ERROR: cannot write chicken data: %s.\n", u.userid);
        unlink(fn);
    }
    else
        // printf("Transferred chicken data OK: %s.\n", u.userid);
        ;
    fclose(fp2); fp2 = NULL;
    }
    fclose(fp);
    return 0;
}