我尝试从kdvelectronics网站修改ssh会话日志补丁到sshd。
代码从openssh 4.x到5.x没有太大变化,但是现在当script_open函数调用时(如gdb所说)sshd段错误
Core was generated by `sshd: root [priv] '. Program terminated with signal 11, Segmentation fault. #0 0x00007f687910ae69 in vfprintf () from /lib/libc.so.6 (gdb) bt #0 0x00007f687910ae69 in vfprintf () from /lib/libc.so.6 #1 0x00007f68791a98c2 in __fprintf_chk () from /lib/libc.so.6 #2 0x000000000044ed03 in script_open () #3 0x000000000040ad2c in main ()
崩溃的代码是:
strftime(logname, sizeof(logname), "%F.%T", gmtime(&tvec));
或
snprintf(fname, sizeof(fname), "%s/openssh.%s.%08x.typescript", SCRIPTDIR, username, rnd);
完整的script.c列表在这里http://pastebin.com/48B39K8s,我已经注释了第50行并从第53行删除了logname变量。
我只是想知道,自2.3以来glibc中的变化是这些函数导致了段错误或者在哪里阅读它。
答案 0 :(得分:0)
好的,结果很简单。我已将提到的字符串更改为
strftime(logname, FILENAME_MAX+1, "%F.%T", gmtime(&tvec));
snprintf(fname, FILENAME_MAX+1, "%s/openssh.%s.%08x.typescript", SCRIPTDIR, username, rnd);
它很脏,但很有效。
答案 1 :(得分:0)
我相信您的代码崩溃的原因是(在第50行已注释掉)您在第60行使用时已将logname
留下未定义的内容。您提到已删除logname
第53行的引用以及第50行的注释 - 也许你只是忘了在那种情况下从第60行删除它?