diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-03-06 20:09:40 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-03-06 20:09:40 +0800 |
commit | 131a77308798e2c314c7b1a00594e44d7cb3fa3d (patch) | |
tree | 53f57bf7cc3f9bf4561e44c6fbf0518d8f3db0b3 /upgrade/r2275_passwd.c | |
parent | 1ff37fcf607bfc356c60d423ad05fca9d9eab190 (diff) | |
download | pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.tar pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.tar.gz pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.tar.bz2 pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.tar.lz pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.tar.xz pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.tar.zst pttbbs-131a77308798e2c314c7b1a00594e44d7cb3fa3d.zip |
- upgrade: directory for all upgrading scripts/tools/programs
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3967 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'upgrade/r2275_passwd.c')
-rw-r--r-- | upgrade/r2275_passwd.c | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/upgrade/r2275_passwd.c b/upgrade/r2275_passwd.c new file mode 100644 index 00000000..2361b787 --- /dev/null +++ b/upgrade/r2275_passwd.c @@ -0,0 +1,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; +} |