diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/Makefile | 3 | ||||
-rw-r--r-- | util/passwdconverter.c | 146 |
2 files changed, 149 insertions, 0 deletions
diff --git a/util/Makefile b/util/Makefile index a4ee5cc9..eb148ca9 100644 --- a/util/Makefile +++ b/util/Makefile @@ -106,3 +106,6 @@ r2014transfer: r2014convert $(CCACHE) ${CC} ${CFLAGS} ${LDFLAGS} -o r2014convert r2014convert.c ./r2014convert rm r2014convert + +passwdconverter: passwdconverter.c + $(CCACHE) $(CC) $(CFLAGS) $(LDFLAGS) $(UTIL_OBJS) -o passwdconverter passwdconverter.c diff --git a/util/passwdconverter.c b/util/passwdconverter.c new file mode 100644 index 00000000..74cf8700 --- /dev/null +++ b/util/passwdconverter.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 username[24]; + char passwd[PASSLEN]; + unsigned char uflag; + unsigned int userlevel; + unsigned short numlogins; + unsigned short numposts; + time_t firstlogin; + time_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; + time_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 = 2275; + + strlcpy(new->userid, old->userid, IDLEN + 1); + strlcpy(new->realname, old->realname, 20); + strlcpy(new->username, old->username, 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; + strlcpy(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; +} |