荔园在线

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

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


发信人: jjk (kernel), 信区: InstallBBS
标  题: nju-0.9 uid error(转寄)
发信站: 荔园晨风BBS站 (Tue Mar  5 20:54:36 2002), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: FIA (菲亚), 信区: BBSMan_Dev
标  题: nju-0.9 uid error(转寄)
发信站: BBS 水木清华站 (Mon Mar  4 08:28:46 2002)

我按照下面的文章做的修改(除了收藏夹的修改以外)
结果用IE浏览可以看到开始的界面
各个栏目都是好的,都可以看到
只是不能登录,输入账号密码后提示uid error
该怎么办?
我用的是fb2000 v1126

发信人: Haishion (Dog), 信区: BBSDev
标  题: nju-0.9 uid error(转寄)
发信站: 南京大学小百合站 (Mon Sep 10 17:16:28 2001), 站内信件
其实很早就安装了NJUWebBBS,安装在http://cs3.xmu.edu.cn,一直想把安装过程给整

成文档出来,让后人不至于重蹈覆辙:)苦于没有时间,近日上nju,惊闻zhch将中止
NJUWebBBS的后续开发,全面转向新bbs体系的开发,于是决心把这篇文章写出来了。
申明:这篇文章是在查看了njubbs的BBSDev版的大部分文章整理出来了,是njubbs
BBSDev版所有人的劳动成功,我只是整理,顺便记录下自己所做的改动,为了大家的方

便,有错误或者建议欢迎指出。
地址:cs3.xmu.edu.cn
系统:Red Hat Linux release 7.1 (Seawolf)  Kernel 2.4.2-2 on an i686
先前安装的是FB2000v1219.tar.gz

首先去下载http://lily.nju.edu.cn/cgi-bin/bbs/showfile?name=NJUWEBBS-0.9.tgz,

下载回来是showfile.zip,把他改名字为NJUWEBBS-0.9.tgz,然后用bbs用户上传到bbs

主机上,我是放在/home/bbssrc下面,(如果你看过我前面的Haishion教你当站长文章,

应该知道:)

[bbs@cs3 bbssrc]$tar zxvf NJUWEBBS-0.9.tgz
代码解开了,在/home/bbssrc/NJU-0.9下面
===============以下使用root用户修改=========

[root@bbs /root] cd /home/bbssrc/NJU-0.9
[root@bbs /NJU-0.9] mkdir /var/www/cig-bin/bbs
[root@bbs /NJU-0.9] chmod bbs.bbs /var/www/cgi-bin/bbs

[root@bbs /NJU-0.9] vi MakeFile
把最前面三行
BBSHOME = /home/bbs
CGIPATH = /home/httpd/cgi-bin/bbs
HTMPATH = /home/httpd/html
根据我的系统设置改为
BBSHOME = /home/bbs
CGIPATH = /var/www/cgi-bin/bbs
HTMPATH = /var/www/html

install: all
        rm -rf $(CGIPATH)/bbslogin
        cp $(CGI) $(CGIPATH)
        chmod +s $(CGIPATH)/*
        cp html/* $(HTMPATH)
改为
install: all
        rm -rf $(CGIPATH)/bbslogin
        cp $(CGI) $(CGIPATH)
        chmod +s $(CGIPATH)/*
        chown bbs.bbs $(CGIPATH) -R
        cp html/* $(HTMPATH)
这样就自动修改了cgi的owner。

[root@bbs /root] vi BBSLIC.inc

#include "/home/bbs/bbs/bbssrc/include/bbs.h"
改为
#include "/home/bbssrc/include/bbs.h"

        case WFRIEND:   return "寻人名册";
去掉,我的系统上没有:)

  while(1) {
                        if(fgets(buf3, 10000, fp2)<=0) break;
改为
  while(1) {
                        if(fgets(buf3, 1000, fp2)<=0) break;
纯属笔误

char seccode[SECNUM][5]={
        "a", "bcd", "mn", "efg", "hij", "kl", "op", "qr", "s"
};
根据menu.ini修改,本站分类比较奇怪:)
查找bbs.nju.edu.cn,在文章来源处,修改为cs3.xmu.edu.cn
(相应的修改在bbsgetmsg.c里面也有:))
这里可以使用grep bbs.nju.edu.cn *.c查找全部,然后一个个替换:)zhch不要砍我。。

SECNUM从9改为8,本站分类只有8个
然后再viBBSLIB.inc  bbsleft.c两个文件修改一下分类。

[root@bbs /root] vi bbsgetmsg.c
init_all()函数后面加入
        printf("<meta http-equiv=\"pragma\" content=\"no-cache\">");
让刷新不会有cache

[root@bbs /root] vi bbsall.c
查找,里面有一处bbsqry?userid==应该为bbsqry?userid=,
笔误

[root@bbs /root] vi bbsdoc.c
查找文件上载,把文件上载去掉,本站没有文件上载功能暂时
[root@bbs /root] vi bbsleft.c
查找精华区下载,把下载精华区去掉
[root@bbs /root] vi bbsdoc.c
[root@bbs /root] vi bbstdoc.c
查找下载精华区,去掉。

[root@bbs /root] vi bbschat.c
把bbschat.c 把%I改为/i,笔误

[root@bbs /root] vi bbsdoreg.c
adduser()函数最后加入
system("touch .PASSFLUSH");
解决www注册id无法telnet
查找
sprintf(salt, "%c%c", 65+rand()*26, 65+rand()*26);
改成
sprintf(salt, "%c%c", 65+rand()%26, 65+rand()%26);
解决www用户telnet登录时显示密码错误.

[root@bbs /root] vi bbslogin.c
把abort_program()替换为
void abort_program() {
        int stay=0;
        struct userec *x;
        if(!strcmp(u_info->userid, currentuser.userid)) {
                stay=abs(time(0) - *(int*)(u_info->from+32));
                bzero(u_info, sizeof(struct user_info));
        }
        if(stay>7200) stay=7200;
        x=getuser(currentuser.userid);
        if(x) {
                x->stay+=stay;
                x->lastlogout=time(0);
                save_user_data(x);
        }
        exit(0);
}

[root@bbs /root] vi bbsdelmail.c
全部内容替换为
#include "BBSLIB.inc"
int main() {
        FILE *fp;
        struct fileheader f;
        char path[80], file[80], *id;
        int num=0;
        init_all();
        if(loginok == 0) http_fatal("您尚未登录");
        id=currentuser.userid;
        strsncpy(file, getparm("file"), 20);
        if(strncmp(file, "M.", 2) || strstr(file, "..")) http_fatal("错误的参

数");
        sprintf(path, "mail/%c/%s/.DIR", toupper(id[0]), id);
        fp=fopen(path, "r");
        if(fp==0) http_fatal("错误的参数2");
        while(1) {
                if(fread(&f, sizeof(f), 1, fp)<=0) break;
                num++;
                if(!strcmp(f.filename, file)) {
                        fclose(fp);
                        del_record(path, sizeof(struct fileheader), num-1);
                        sprintf(path, "mail/%c/%s/%s", toupper(id[0]), id, f
.
filename);
                        unlink(path);
                        printf("信件已删除.<br><a href=bbsmail>返回所有信件列

表</a>\n");
                        http_quit();
                }
        }
        fclose(fp);
        http_fatal("信件不存在, 无法删除");
}
解决njuwebbbs-0.9删除信件的bug,只动了.DIR,忘了删文件。

在开始->运行里面直接打入下面3个url下载
http://bbs.nju.edu.cn/bbschat.css
http://bbs.nju.edu.cn/bbschat2.css
http://bbs.nju.edu.cn/msg.wav
使用ftp工具上载放到/home/bbssrc/NJU-0.9/html目录下面

最后一个大的修改,原因是先前我安装的是FB2000v1219.tar.gz,里面的收藏夹是存放

.goodbrd里面,而NJUWEBBBS是放在.mybrd里面,所有导致telnet里面收藏夹和Web的收

藏夹不一致,于是修改了bbsbrdadd.c、bbsleft.c、bbsmybrd.c3个文件,把mybrds改为

.goodbrd,为了使改动尽量最少,代码可能写的有点冗余。如果你觉得麻烦,或者觉得

必要,可以不改。首先在BBSLIB.c最后增加两个函数
//2001.09.04 Haishion add for convert GoodBrd 2 MyBrds begin
#define GOOD_BRC_NUM    50
int LoadMyBrdsFromGoodBrd(char userid[IDLEN + 2], char mybrd[GOOD_BRC_NUM][8
0])
{
        FILE    *fp;
        char    fname[STRLEN];
        int     i;
        sprintf(fname, "home/%c/%s/.goodbrd", toupper(userid[0]), userid);
        if (fp = fopen(fname, "r")) {
                for (i = 0; i< GOOD_BRC_NUM; i++) {
                        if (EOF == fscanf(fp, "%s\n", mybrd[i]))
                                break;
                }
                fclose(fp);
        }
        return i;
}
void SaveMyBrdsToGoodBrd(char userid[IDLEN + 2], char mybrd[GOOD_BRC_NUM][80
], i
nt mybrdnum)
{
        FILE    *fp;
        char    fname[STRLEN];
        int     i;
        sprintf(fname, "home/%c/%s/.goodbrd", toupper(userid[0]), userid);
        if (fp = fopen(fname, "w")) {
                for (i = 0; i< mybrdnum; i++)
                        fprintf(fp, "%s\n", mybrd[i]);
                fclose(fp);
        }
}
//2001.09.04 Haishion add for convert GoodBrd 2 MyBrds end
然后修改下面bbsbrdadd.c、bbsleft.c、bbsmybrd.c3个文件
我只把大致改动列在这里,希望大家看得懂
bbsbrdadd.c全部文件内容:
#include "BBSLIB.inc"
//char mybrd[32][80];
char mybrd[GOOD_BRC_NUM][80];
int mybrdnum=0;
struct boardheader x;
int ismybrd(char *board) {
        int n;
        for(n=0; n<mybrdnum; n++)
                if(!strcasecmp(mybrd[n], board)) return n;
        return -1;
}
int main() {
//      FILE *fp;
        char file[200], board[200];
        init_all();
        strsncpy(board, getparm("board"), 32);
        if(!loginok) http_fatal("超时或未登录,请重新login");
//      sprintf(file, "home/%c/%s/mybrds", toupper(currentuser.userid[0]), c
urre
ntuser.userid);
//      fp=fopen(file, "r");
//      if(fp) {
//              mybrdnum=fread(mybrd, sizeof(mybrd[0]), 30, fp);
//              fclose(fp);
//      }
mybrdnum = LoadMyBrdsFromGoodBrd(currentuser.userid, mybrd);
        if(mybrdnum>=GOOD_BRC_NUM) http_fatal("您预定讨论区数目已达上限,不能

");
        if(ismybrd(board)>=0) http_fatal("你已经预定了这个讨论区");
        if(!has_read_perm(&currentuser, board)) http_fatal("此讨论区不存在")
;
        strcpy(mybrd[mybrdnum], board);
//      fp=fopen(file, "w");
//      fwrite(mybrd, 80, mybrdnum+1, fp);
//      fclose(fp);
SaveMyBrdsToGoodBrd(currentuser.userid, mybrd, mybrdnum + 1);
        printf("<script>top.f2.location='bbsleft'</script>\n");
        printf("预定讨论区成功<br><a href='javascript:history.go(-1)'>快速返
回</
a>");
        http_quit();
}
bbsleft.c
        if(loginok) {
                FILE *fp;
                int i, mybrdnum=0;
//              char mybrd[32][80];
char mybrd[GOOD_BRC_NUM][80];
                printf("<img src=/folder.gif name=img0><a href='javascript:
t(do
cument.all.div0, document.img0)'>我的收藏夹</a><br>\n");
                printf("<div id=div0 style='display:none'>\n");
//              sprintf(buf, "home/%c/%s/mybrds", toupper(currentuser.userid
[0])
, currentuser.userid);
//              fp=fopen(buf, "r");
//              if(fp) mybrdnum=fread(mybrd, sizeof(mybrd[0]), 30, fp);
//              if(fp) fclose(fp);
mybrdnum = LoadMyBrdsFromGoodBrd(currentuser.userid, mybrd);
                for(i=0; i<mybrdnum; i++)
                        printf("<img src=/link.gif><a target=f3 href=bbsdoc?
boar
d=%s>%s</a><br>\n", mybrd[i], mybrd[i]);
                printf("<img src=/link.gif><a target=f3 href=bbsmybrd>预定管
理</
a><br>\n");
                printf("</div>\n");
        }
bbsmybrd.c,一下列举的代码为注释掉上面,并增加下面的代码
//char mybrd[32][80];
char mybrd[GOOD_BRC_NUM][80];
//      FILE *fp;
//      sprintf(path, "home/%c/%s/mybrds", toupper(currentuser.userid[0]), c
urre
ntuser.userid);
//      fp=fopen(path, "r");
//      if(fp) {
//              mybrdnum=fread(mybrd, sizeof(mybrd[0]), 30, fp);
//              fclose(fp);
//      }
mybrdnum = LoadMyBrdsFromGoodBrd(currentuser.userid, mybrd);
//        sprintf(buf1, "home/%c/%s/mybrds", toupper(currentuser.userid[0]),
 cur
rentuser.userid);
//        fp=fopen(buf1, "w");
//        fwrite(mybrd, 80, mybrdnum, fp);
//        fclose(fp);
SaveMyBrdsToGoodBrd(currentuser.userid, mybrd, mybrdnum);
修改完毕。
===============以上使用root用户修改=========
===============以下使用bbs用户修改原先的设置=========
使用bbs用户,不是root咯。

[bbs@cs3 bbssrc]$ vi /home/bbssrc/include/struch.h
在struct user_info加入一项
int utmpkey;

[bbs@cs3 bbssrc]$ vi /home/bbssrc/src/modetype.c
加入
        case 10001:
                return "Web浏览";

然后重新编译并重新启动bbsd,一下为shell命令
make clean update   由于修改了.h文件,必须重新make clean
killall -9 bbsd     杀掉所有bbsd进程,要先广播一下咯:)
ipcs -m | awk '$0~/bbs/ {system(sprintf("ipcrm shm %s",$2));}'
                    清除共享内存
/home/bbs/bin/bbsd 23
                    用root重新启动bbsd
===============以上使用bbs用户修改原先的设置=========

最后使用root用户在
[root@cs3 NJU-0.9]# make install

使用IE访问
WELL DONE。
--
※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 210.34.218.160]

--

※ 修改:·FIA 於 Mar  4 08:35:47 修改本文·[FROM:    202.194.3.29]
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.194.3.29]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


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

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