summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/Makefile3
-rw-r--r--util/passwdconverter.c146
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;
+}