荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: jjk (pq), 信区: InstallBBS
标 题: [范文4][BBSDev]FB2000中checkpasswd的bug
发信站: 荔园晨风BBS站 (Thu Nov 29 11:21:14 2001), 转信
【 以下文字转载自 jjk 的信箱 】
【 原文由 jjk.bbs@bbs.pku.edu.cn 所发表 】
发信人: vida (下一个自杀的id...), 信区: BBSDev
标 题: [范文4][BBSDev]FB2000中checkpasswd的bug
发信站: 北大未名站 (2001年05月23日22:07:06 星期三), 站内信件
发信人: ecnegrevid (车人七月刀), 信区: BBSDev
标 题: [范文4][BBSDev]FB2000中checkpasswd的bug
发信站: 一塌糊涂 BBS (Mon Jul 10 09:56:04 2000)
有人报告说在FB2000里有时不正确的passwd也可以登录. 检查了一下代码,
认为可能是checkpasswd函数造成的. 该函数为:
#ifdef LINUX
int checkpasswd(char *c1, char *c2) {
int pid, s;
pid= fork();
if(pid==0)
exit (checkpasswd0(c1, c2));
else if(pid==-1)
return checkpasswd0(c1, c2);
else {
wait (&s);
return s;
}
}
#else
int checkpasswd(char *c1, char *c2) {
return checkpasswd0(c1,c2);
}
#endif
其中wait(&s)可能被其它信号所中断, 这时虽然子进程并未结束, wait就
会返回, 虽然s可能并未被正确赋值, 并可能是非零值. 这个s将作为
checkpasswd的返回值.
在main.c中对checkpasswd的调用为:
if (!checkpasswd(currentuser.passwd, passbuf)) {
logattempt(currentuser.userid, fromhost);
prints(";31m密码输入错误...m\n");
} else {
显然, s!=0被作为密码输入正确的情形了, 信号于是导致了密码检测错误.
修正方法或许可以是
if(wait (&s)==-1) return 0;
if(!WIFEXITED(s)) return 0;
return WEXITSTATUS(s);
--
欢迎大家来Software版!
这里提供各种最新软件信息,软件的使用以及评测。
同时非常希望大家写出自己的心得体会!
欢迎访问北大FTP联盟主页:http://www.pkuftp.dhs.org
※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.170.50]
--
※ 转载:·北大未名站 bbs.pku.edu.cn·[FROM: 166.111.215.160]
--
※ 转寄:·北大未名站 bbs.pku.edu.cn·[FROM: 210.39.3.50]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店