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);
strlcpy(new->ident, old->ident, 11);
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;
}
|