荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (pq), 信区: InstallBBS
标  题: Re: FB2000系统从Solaris X86移到Solaris Sparc求救
发信站: 荔园晨风BBS站 (Thu Nov 29 06:44:11 2001), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: linton (难得糊涂), 信区: BBSMan_Dev
标  题: Re: FB2000系统从Solaris X86移到Solaris Sparc求救
发信站: BBS 水木清华站 (Wed Nov 28 17:18:19 2001)

/*
   本程序用于解决将BBS站从Solaris 2.7 for X86转到Solaris 2.7 for
   SPARC系统中出现的.PASSWD文件不兼容问题本程序在SUN Ultra 1工作
   站上用gcc 2.95.2 for Solaris 2.7编译通过

    0. cd bbssrc/util/local_utl/
    1. gcc -O -Wunused -I../include -I../../include -o convert convert.c \
    ../../src/record.c -lucb
    2. cp /export/home/bbs/.PASSWDS PASSWDS
    3. ./convert
    4. cp PASSWDS.new /export/home/bbs/.PASSWDS
    5. 清除共享内存或者重新启动工作站后新.PASSWDS生效

    本程序由西南交通大学BBS系统站长Jesse,电子科技大学flanker,CuteGuy的
convert.c
    (用于解决将BBS站从Linux 2.0.X转到Solaris 2.5/2.6 for SPARC系统中出现的
.PASSWD
    文件不兼容问题)稍做修改,并参考FB2000V1219的repass.c

    谢谢各位大虾们的帮助和启发

*/

#include "bbs.h"

report()
{
}
void conv(unsigned int * new,unsigned int * old,int len)
{
        char *old_p,*new_p;
        int i=0;
        old_p=(char *)old;
        new_p=(char *)new;
        len--;
        for(i=0;i<=len;i++)
        {
                (*(new_p+i))=(*(old_p+(len-i)));
        }
};

main()
{
    struct userec fh,nfh;
    char fname[80];
    char dname[80];
    char genbuf[120];
    FILE *fp, *fp2;

    memset(&fh,0,sizeof(struct userec));
    memset(&nfh,0,sizeof(struct userec));

    sprintf( fname, "PASSWDS");
    sprintf( dname, "PASSWDS.new");

    if ((fp = fopen(fname, "rb")) == NULL) {
        printf("Error: Cannot open PASSWDS.\n");
        return 0;
    }
    if ((fp2 = fopen(dname, "wb")) == NULL) {
        printf("Error: Cannot write to PASSWDS.new.\n");
        return 0;
    }
    while(1)
    {
      if(fread(&fh,sizeof(fh),1,fp)<=0) break;
      strcpy(nfh.userid,fh.userid);
      conv((int *)&nfh.firstlogin,(int *)&fh.firstlogin,sizeof(time_t));
      strcpy(nfh.lasthost,fh.lasthost);
      conv(&nfh.numlogins,&fh.numlogins,sizeof(int));
      conv(&nfh.numposts,&fh.numposts,sizeof(int));
      strcpy(nfh.flags,fh.flags);
      strcpy(nfh.passwd,fh.passwd);
      strcpy(nfh.username,fh.username);
      strcpy(nfh.ident,fh.ident);
      strcpy(nfh.termtype,fh.termtype);
      strcpy(nfh.reginfo,fh.reginfo);
      conv(&nfh.userlevel,&fh.userlevel,sizeof(int));
      conv((int *)&nfh.lastlogin,(int *)&fh.lastlogin,sizeof(time_t));
      conv((int *)&nfh.stay,(int *)&fh.stay,sizeof(time_t));
      strcpy(nfh.realname,fh.realname);
      strcpy(nfh.address,fh.address);
      strcpy(nfh.email,fh.email);
      conv(&nfh.signature,&fh.signature,sizeof(int));
      conv(&nfh.userdefine,&fh.userdefine,sizeof(int));
      conv((int *)&nfh.notedate,(int *)&fh.notedate,sizeof(time_t));
      conv(&nfh.noteline,&fh.noteline,sizeof(int));
      /* ---下面转换用户的出生日期和性别------------------------------------ */
      memcpy(&nfh.gender,&fh.gender, sizeof(fh.gender));
      memcpy(&nfh.birthday,&fh.birthday,sizeof(char));
      memcpy(&nfh.birthmonth,&fh.birthmonth,sizeof(char));
      memcpy(&nfh.birthyear,&fh.birthyear,sizeof(char));
      conv((int *)&nfh.lastjustify,(int *)&fh.lastjustify,sizeof(time_t));
      /* ------------------------------------------------------------------ */
      append_record(dname,&nfh,sizeof(nfh));
    }
    fclose(fp);
    fclose(fp2);
    return 1;
}


【 在 kxn (pig) 的大作中提到: 】
: 本版精华区就有答案


--

※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.193.160.35]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店