写这个东西,主要是因为最近看到大家使用njuwebbbs出了一些问题,
希望可以给大家一些帮助。另外我建议大家到百合的bbsdev版先看一
下haishion写的"我安装NJUWebBBS v0.9所做的修改"(一和二),
相信你的大部分问题都可以得到解决,我在这里只说一下haishion
所写的文章中没有的一些东西.
1是显示shm_utmp error!
这个主要是因为共享内存装入时候错误,一般需要重启fb2000,当
然最彻底的办法是重启机器,也可以将所有的bbsd进程kill掉以后
清除共享内存,再重启bbsd。一般问题就解决了。
2是编译时候出错,提示没有PERM_SPERCIAL8,那么你可以看一下
你fb2000的permissions.h中是如何定义相应的功能的(归隐田园)
,一般是PERM_RECLUSION,在nju的所有文件中查找然后替换掉
就好了。如果没有找到相对应的定义,那么凡是出现PERM_SPERCIAL8
的地方都注释掉好了。
3是 用户频繁掉线的问题,出现这个问题的原因是cgi目录下的
几个文件权限不对,我们这里假设你将nju的程序CGIPATH是在
/var/www/cgi-bin/bbs,那么只要以root身份执行一下:
chown -R bbs.bbs /var/www/cgi-bin/bbs就可以了。
4是几个文件缺少的问题:nju的html目录下面少了几个文件,你
可以从下面的url下载以后放到html目录下:
http://bbs.nju.edu.cn/bbschat.css
http://bbs.nju.edu.cn/bbschat2.css
http://bbs.nju.edu.cn/msg.wav
http://bbs.nju.edu.cn/chathelp.html
另外注意在所有的文件里面查找:bbs.nju.edu.cn,改成你的bbs的
地址
5是显示讨论区分区不对,那么你需要改一下BBSLIB.inc中
#define SECNUM 后面的数字,具体就是大区的数目
另外注意它下面一行:
char seccode[SECNUM][5]={
......(就是abcdefg之类的)
};
这个也千万不要搞错了,否则搞得一塌糊涂。
6是nju下面用户发文以后再用telnet上站时候发现未读标记都丢了,
这个是因为nju的boardrc.inc中一个常数定义和fb2000不一样,具
体是
#define BRC_STRLEN xxxx
这个xxxx是个数字,在fb2000的boards.c中你可以找到相同的一个
常数,将两个文件中的数字改一样了就好了。
7是web用户注册了以后,站长审批资料时候提示说没有这个用户,这个
需要将bbsdoreg.c中adduser函数用下面的内容替换:
int adduser(struct userec *x) {
int i;
struct userec temp;
FILE *fp;
fp=fopen(".PASSWDS", "r+b");
flock(fileno(fp), LOCK_EX);
for(i=0; i<MAXUSERS; i++) {
if(shm_ucache->userid[i][0]==0) {
strncpy(shm_ucache->userid[i], x->userid, 13);
save_user_data(x);
i=0;
while(!feof(fp)){
fread(&temp,sizeof(temp),1,fp);
i++;}
shm_ucache->number=i;
break;
}
}
flock(fileno(fp), LOCK_UN);
fclose(fp);
system("touch .PASSFLUSH");
}
8是改写一下bbslogin.c使得web用户注册后不需要telnet上站就获
得权限,具体是wwwlogin函数里面你可以看到一堆if判断用户权限的
语句,在里面加上下面的代码就可以了:
if(!(currentuser.userlevel & PERM_LOGINOK)) {
char file[256];
sprintf(file, "home/%c/%s/register",
toupper(currentuser.userid[0]), currentuser.userid);
if(file_exist(file)) {
currentuser.userlevel |=PERM_DEFAULT;
save_user_data(¤tuser);
}
}
10是bbscon.c里面一处笔误:
找到if(num>0 && num<=total) {
改成if(num>=0 && num<total) {
11还是关于bbslogin.c的,改写一下使得www下面如果密码输入错误了
那么telnet上站时候也可以看到:具体是找下面一行:
if(!checkpasswd(x->passwd, pw)) {
从这个语句开始改
if(!checkpasswd(x->passwd, pw)) {
if(pw[0]!=0) sleep(2);
sprintf(buf, "%s %s %s Web方式\n", Ctime(time(0))+4, id, fromhost);
f_append("badlogin.www", buf);
sprintf(genbuf, "%s/home/%c/%s/logins.bad", BBSHOME, toupper(x->userid[0]),
x->userid);
f_append(genbuf,buf);
http_fatal("密码错误");
}
check_multi(x->userid);
12是聊天室的一个问题,聊天室进去时候提示说xxx行脚本错误,
说话时候也提示说脚本错误的话可以这样改:
在bbschat.c中找下面两个地方:
function add_cc() {
xxx=form1.in1.value;
if(xxx=='/h') {
do_help();
form1.in1.value='';
return;
}
和
function add_cc0(x1, x) {
cc2=x1;
cc=x;
}
位置对调一下就好了。
能想起来的就是这些了,其他有什么问题的话以后慢慢说吧,
希望对大家能有一些帮助。
--
FROM 202.200.235.53