summaryrefslogtreecommitdiffstats
path: root/upgrade/r2275_passwd.c
blob: 2361b78788c3c14532b6dc8e0dbb094db874f67c (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "bbs.h"

/* userec_t before revision 2275 */
typedef struct old_userec_t {
    char    userid[IDLEN + 1];
    char    realname[20];
    char    nickname[24];
    char    passwd[PASSLEN];
    unsigned char   uflag;
    unsigned int    userlevel;
    unsigned short  numlogins;
    unsigned short  numposts;
    time4_t firstlogin;
    time4_t lastlogin;
    char    lasthost[16];
    int     money;
    char    remoteuser[3];           /* 靽 桀瘝典啁 */
    char    proverb;
    char    email[50];
    char    address[50];
    char    justify[REGLEN + 1];
    unsigned char   month;
    unsigned char   day;
    unsigned char   year;
    unsigned char   sex;
    unsigned char   state;
    unsigned char   pager;
    unsigned char   invisible;
    unsigned int    exmailbox;
    chicken_t       mychicken;
    time4_t lastsong;
    unsigned int    loginview;
    unsigned char   channel;      /*  (unused?) */
    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];
    char    ident[11];
    unsigned int    uflag2;
    unsigned char   signature;

    unsigned char   goodpost;       /* 閰寧箏末蝡 */
    unsigned char   badpost;        /* 閰寧箏蝡 */
    unsigned char   goodsale;       /* 蝡嗆 憟賜閰  */
    unsigned char   badsale;        /* 蝡嗆 憯閰  */
    char    myangel[IDLEN+1];           /* 撠憭拐蝙 */
    unsigned short  chess_elo_rating;   /* 鞊⊥蝑蝝 */
    unsigned int    withme;
    char    pad[48];
} old_userec_t;

void transform(userec_t *new, old_userec_t *old)
{
    new->version = PASSWD_VERSION;

    strlcpy(new->userid, old->userid, IDLEN + 1);
    strlcpy(new->realname, old->realname, 20);
    strlcpy(new->nickname, old->nickname, 24);
    strlcpy(new->passwd, old->passwd, PASSLEN);
    new->uflag = old->uflag;
    new->userlevel = old->userlevel;
    new->numlogins = old->numlogins;
    new->numposts = old->numposts;
    new->firstlogin = old->firstlogin;
    new->lastlogin = old->lastlogin;
    strlcpy(new->lasthost, old->lasthost, 16);
    new->money = old->money;
    strlcpy(new->remoteuser, old->remoteuser, 3);
    new->proverb = old->proverb;
    strlcpy(new->email, old->email, 50);
    strlcpy(new->address, old->address, 50);
    strlcpy(new->justify, old->justify, REGLEN + 1);
    new->month = old->month;
    new->day = old->day;
    new->year = old->year;
    new->sex = old->sex;
    new->state = old->state;
    new->pager = old->pager;
    new->invisible = old->invisible;
    new->exmailbox = old->exmailbox;
    new->mychicken = old->mychicken;
    new->lastsong = old->lastsong;
    new->loginview = old->loginview;
    new->channel = old->channel;
    new->vl_count = old->vl_count;
    new->five_win = old->five_win;
    new->five_lose = old->five_lose;
    new->five_tie = old->five_tie;
    new->chc_win = old->chc_win;
    new->chc_lose = old->chc_lose;
    new->chc_tie = old->chc_tie;
    new->mobile = old->mobile;
    memcpy(new->mind, old->mind, 4);
    memset(new->pad0, 0, sizeof(new->pad0));    // ident is not used anymore
    new->uflag2 = old->uflag2;
    new->signature = old->signature;

    new->goodpost = old->goodpost;
    new->badpost = old->badpost;
    new->goodsale = old->goodsale;
    new->badsale = old->badsale;
    strlcpy(new->myangel, old->myangel, IDLEN+1);
    new->chess_elo_rating = old->chess_elo_rating;
    new->withme = old->withme;
    memset(new->pad, 0, sizeof(new->pad));
}

int main(void)
{
    int fd, fdw;
    userec_t new;
    old_userec_t old;

    printf("You're going to convert your .PASSWDS\n");
    printf("The new file will be named .PASSWDS.trans.tmp\n");
    printf("old size of userec_t is %d, and the new one is %d\n", sizeof(old_userec_t), sizeof(userec_t));
/*
    printf("Press any key to continue\n");
    getchar();
*/

    if (chdir(BBSHOME) < 0) {
    perror("chdir");
    exit(-1);
    }

    if ((fd = open(FN_PASSWD, O_RDONLY)) < 0 ||
     (fdw = open(FN_PASSWD".trans.tmp", O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0 ) {
    perror("open");
    exit(-1);
    }

    while (read(fd, &old, sizeof(old)) > 0) {
    transform(&new, &old);
    write(fdw, &new, sizeof(new));
    }

    close(fd);
    close(fdw);
    return 0;
}