#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;
}