大起大落

今天,似乎一切都随着chroot()的引入而一片光明。几乎所有的命令都能直接通过了。仔细一算,竟然只剩下两条命令了,简直是胜利在望了。所以,我到实验室,想把我的命令再改改,应该没有什么问题吧。

可是,由于改变了进程的根目录,使我的STAT命令的列目录功能失效了。所以我感觉,只要不合并目录,直接使用chroot后的根目录,似乎很容易就能解决。但是,出现了意想不到的错误。修改了之后,服务器总是出现失败。百思不得其解,google一番,突然想到:今天下午的时候出现就是因为chroot后失败。而我的函数中为了获取用户名和组名,调用了getpwuid()和getgrgid(),而这两个函数man后发现是需要/etc/passwd和/etc/group的。现在由于改变了进程看到的根目录,他找不到/etc/passwd和/etc/group了,所以就失败。

加入调试信息,发现果然进程在此终止,在想google一个替代方案,竟然一无所获。而且,查到的都是不好的消息。比如,这两个函数返回的字符指针是指向静态区域的,似乎是不可重入的。而且,chroot到ftp的根目录/var/pub后,似乎是无法返回的。也就是说,我的程序永远看不到/etc/passwd了,这个问题无解?

我又测试了需要/etc/xylftp/xylfpt.pass文件的USER和PASS命令 ,果然,chroot后,它们也失效了。和这两条命令的作者windflush联系了一下,讨论了半天,似乎他还有点蒙,依然无解。把这个问题发到了新闻组,还没有人回复。等吧,看来,这个问题挺严重的。

心情一下从很好到了很不好,很郁闷啊~

《大起大落》有4条评论

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据