echoping 6.0.2 が -m (module) オプションをつけるとエラーになる件

2010/01/20Linux, ツール

echopingという各種pingが打てるツールを smokeping 経由で愛用してるんだけど、これが、dns pingを打つとエラーになることを発見した。

# ./echoping -m dns
Cannot load ".so" (I tried the short name, then the complete name in "/usr/lib64/echoping"): /usr/lib64/echoping/.so: cannot open shared object file: No such file or directory

“dns.so" を読むはずのところで、 “.so" を読みに行ってエラー。なんじゃこれ。
しばらくソースを追っかけて、原因らしきものが分かったのでパッチを書きました。

diff -uNr echoping-6.0.2.orig/echoping.c echoping-6.0.2/echoping.c
--- echoping-6.0.2.orig/echoping.c      2007-04-05 21:40:49.000000000 +0900
+++ echoping-6.0.2/echoping.c   2010-01-19 23:25:09.000000000 +0900
@@ -473,7 +473,7 @@
        if (plugin_name) {
                ext = strstr(plugin_name, ".so");
                if ((ext == NULL) || (strcmp(ext, ".so") != 0))
-                       sprintf(plugin_name, "%s.so", plugin_name);
+                       strcat(plugin_name, ".so");
                plugin = dlopen(plugin_name, RTLD_NOW);
                if (!plugin) {
                        /* Retries with the absolute name */

どうやら、 sprintf(plugin_name, “%s.so", plugin_name); と、 宛先と元に同じ変数を使ってるのが悪いみたい。ありそうな話だ。trcatにさくっと書き換えて、今はちゃんと動いています。
chopingについては、WiLiKiのechoping に まとめてあります。

追記: 開発元にパッチ投稿しました。

Linux, ツール

Posted by ず@沖縄