FTPクライアントでファイル一覧が表示されない

管理しているサーバに「FFFTPからアクセスすると中身が見えない」と報告があった。 ログをもらうとログイン、ファイル一覧の取得は「226 Transfer complete.」となっていて正常に完了した様子。 ブラウザからFTPプロトコルで接続してみるとファイル名が時刻や年と一緒になった「2007 hoge」のような名前になっている。 取得してきたファイル一覧をうまく解釈できていないよう。 そこで、正常にアクセスできる同環境のftpdとファイル一覧の形式を比べてみた。 問題になっているftpdは -rw-r–r– 1 root wheel 93 3 22 20:27 filename という形式で、正常なftpdは -rw-r–r– 1 root wheel 93 Oct 23 2006 filename という形式になっている。 もっと大胆に崩れているかと思ったけど、月の表示形式が名称の短縮名になっているか否かぐらいしか違いがない。 FTPのLISTコマンドはサーバ側の/bin/ls -lの出力に依存する。 サーバ側でls -lとすると月が数字で表示された。 これを短縮名で表示させるにはどうしたらいいだろうか。 ちょうどIRCで話していた経験者に聞くとローケルによって変わると教えてくれた。 そのときは一般ユーザからsuしたのでLC_ALL=ja_JP.eucJPになっていた。 # unsetenv LC_ALL Continue reading FTPクライアントでファイル一覧が表示されない

LD_PRELOAD

MovableTypeのデータベースをBerkeley DBからSQLiteに変更しようとして、変換スクリプトを実行すると、 ELFのローダが、 /libexec/ld-elf.so.1: /usr/local/lib/libsqlite3.so.8: Undefined symbol “pthread_create” というエラーを吐いて先に進めない。 実行プログラムの形式にELFを採用しているOSではLD_PRELOADという環境変数を設定しておくと、 指定したライブラリを他のライブラリより先にロードしておくことができるらしい。 これを使って任意の関数を上書きしたりできるそう。 >setenv LD_PRELOAD /usr/lib/libpthread.so.2 >./mt-db2sql.cgi とすると問題なく実行できた。 MovableTypeで使うデータベースをSQLiteに設定してブラウザからアクセスしてみると、 Internal Server Errorが。 エラーログをみると例のエラー、当然か。 CGI実行時にApacheから環境変数を設定できればいいんだろうなと思って調べてみると、 mod_envというのがあるらしい。Apacheを入れたときにデフォルトでロードするようになっていた。 httpd.confに SetEnv LD_PRELOAD /usr/lib/libpthread.so.2 のようにSetEnvディレクトリを書く。 ブラウザからアクセスすると問題なく動いた。 ■LD_PRELOADを使って任意の関数呼び出しにフックしてみる ■CGIの裏側見せます