/*
fb2k到ytht的.PASSWD转换程序
ytht版本为ytht-0.0.9,2004-09-09
FB2000userec结构和define常数值取自当前fb2000代码,根据需要修改
happybird @岱北聆泉站
*/
#include "bbs.h"
#define FB_STRLEN 80 /* Length of most string data */
#define FB_NAMELEN 40 /* Length of username/realname */
#define FB_IDLEN 12 /* Length of userids */
#define FB_ENCPASSLEN 14 //ifdef MD5 should be 35
#define FB_PASSLEN 14 /* User's password length (13 chars) */
struct FB2000userec { /* Structure used to hold information in */
char userid[FB_IDLEN+2]; /* PASSFILE */
time_t firstlogin;
char lasthost[16];
unsigned int numlogins;
unsigned int numposts;
unsigned int medals; /* 奖章数 */
unsigned int money; /* 金钱 */
unsigned int inbank; /* 存款 */
time_t banktime; /* 存入时间 */
char flags[2];
#ifdef ENCPASSLEN
char passwd[FB_ENCPASSLEN];
#else
char passwd[FB_PASSLEN];
#endif
char username[FB_NAMELEN];
char ident[FB_NAMELEN];
char termtype[16];
char reginfo[FB_STRLEN-16];
unsigned int userlevel;
time_t lastlogin;
time_t lastlogout;/* 最近离线时间 */
time_t stay;
char realname[FB_NAMELEN];
char address[FB_STRLEN];
char email[FB_STRLEN-12];
unsigned int nummails;
time_t lastjustify;
char gender;
unsigned char birthyear;
unsigned char birthmonth;
unsigned char birthday;
int signature;
unsigned int userdefine;
time_t notedate;
int noteline;
};
//copied from FB2000
void
upgradepasswd(char *fb2000_file,char *ytht_file)
{
FILE *fr, *fw;
struct FB2000userec fb2000;
struct old_userec oldrec;
struct userec rec;
struct userdata data;
struct in_addr in;
int num = 0;
memset(&oldrec,0,sizeof(struct userec));
fr = fopen(fb2000_file, "r");
if (NULL == fr) {
printf("Can't open passwd file for read!\n");
exit(1);
}
fw = fopen(ytht_file, "w");
if (NULL == fw) {
printf("Can't open passwd file for write!\n");
fclose(fr);
exit(2);
}
oldrec.dietime = 0;
oldrec.notemode_nouse = 0;
bzero(oldrec.ip, 16);
bzero(oldrec.unuse, 32);
while (fread(&fb2000, sizeof (fb2000), 1, fr) == 1) {
if (!fb2000.userid[0])
continue;
num++;
//先转换为老的ytht数据结构
snprintf(oldrec.userid, IDLEN + 2, "%s", fb2000.userid);
oldrec.firstlogin = fb2000.firstlogin;
snprintf(oldrec.lasthost, 16, "%s", fb2000.lasthost);
oldrec.numlogins = fb2000.numlogins;
oldrec.numposts = fb2000.numposts;
memcpy(oldrec.flags, fb2000.flags, 2);
memcpy(oldrec.passwd, fb2000.passwd, 16);
memcpy(oldrec.username, fb2000.username, NAMELEN);
oldrec.lastlogout = fb2000.lastlogout;
oldrec.lastlogin = fb2000.lastlogin;
oldrec.stay = fb2000.stay;
memcpy(oldrec.realname, fb2000.realname, NAMELEN);
oldrec.userlevel = fb2000.userlevel;
memcpy(oldrec.address, fb2000.address, STRLEN);
memcpy(oldrec.email, fb2000.email, STRLEN - 12);
oldrec.signature = fb2000.signature;
oldrec.userdefine = fb2000.userdefine;
oldrec.userlevel = fb2000.userlevel;
oldrec.notedate_nouse = fb2000.notedate;
oldrec.noteline_nouse = fb2000.noteline;
memcpy(oldrec.realmail, fb2000.reginfo, STRLEN - 16);
//再转换为新ytht数据结构
bzero(&rec, sizeof(rec));
bzero(&data, sizeof(data));
strcpy(rec.userid, oldrec.userid);
memcpy(rec.flags, oldrec.flags, 2);
rec.firstlogin = oldrec.firstlogin;
rec.lastlogin = oldrec.lastlogin;
rec.lastlogout = oldrec.lastlogout;
//rec.dietime = oldrec.dietime;
if (inet_aton(oldrec.lasthost, &in))
rec.lasthost = in.s_addr;
strcpy(rec.username, oldrec.username);
rec.numdays = oldrec.numdays;
//if (oldrec.signature >= -1 && oldrec.signature <=100)
// rec.signature = oldrec.signature;
//else
// rec.signature = 0;
rec.numlogins = oldrec.numlogins;
rec.numposts = oldrec.numposts;
rec.stay = oldrec.stay;
rec.userlevel = oldrec.userlevel;
if (inet_aton(oldrec.ip, &in))
rec.ip = in.s_addr;
rec.userdefine = oldrec.userdefine;
memcpy(rec.passwd, oldrec.passwd, OLDPASSLEN);
strncpy(data.realmail, oldrec.realmail, 60);
data.realmail[59] = 0;
strncpy(data.email, oldrec.email, 60);
data.email[59] = 0;
strncpy(data.realname, oldrec.realname, 40);
data.realname[39] = 0;
strncpy(data.address, oldrec.address, 40);
data.address[39] = 0;
fwrite(&rec, sizeof (rec), 1, fw);
saveuserdata(rec.userid, &data);
}
fclose(fr);
fclose(fw);
}
int
main(int argc, char *argv[])
{
if(argc <3){
printf("Usage:%s fb2000_PASSWD ytht_PASSWD\n",argv[0]);
exit(1);
}
upgradepasswd(argv[1],argv[2]);
return 1;
}
--
修改:freeworm FROM 202.194.15.*
FROM 202.194.15.*