2

我尝试从 kdvelectronics 站点将 ssh 会话记录补丁修改为 sshd。

从 openssh 4.x 到 5.x 的代码没有太大变化,但是现在 sshd segfaults 当 script_open 函数调用时(如 gdb 所说)

核心是由 `sshd: root [priv] '生成的。
程序以信号 11 终止,分段错误。
#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 发生了什么变化,这些函数会导致段错误或在哪里阅读它。

4

2 回答 2

0

我相信您的代码崩溃的原因是(注释掉了第 50 行)logname当您在第 60 行使用它时留下了未定义的内容。您提到您logname从第 53 行删除了引用以及注释掉第 50 行——也许在这种情况下,您只是忘记将其从第 60 行中删除?

于 2010-11-11T17:03:33.643 回答
0

好的,结果很简单。我已将提到的字符串更改为

strftime(logname, FILENAME_MAX+1, "%F.%T", gmtime(&tvec));
snprintf(fname, FILENAME_MAX+1, "%s/openssh.%s.%08x.typescript", SCRIPTDIR, 用户名, rnd);

Ofc 它很脏,但有效。

于 2010-11-11T13:38:14.727 回答