表題の通り。
vftpd.conf では以下のようになっている。
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode. The vsftpd.conf(5) man page explains
# the behaviour when these options are disabled.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command “SIZE /big/file” in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
デフォルトのコメントアウト状態では拒否。
デフォルトで受け付けない理由はコメントにある通りでDoS攻撃対策。
ソースは初めからUTF8(LF)で書けということらしい、確かにその考えは正しいと思う。
ところが日本では同じページをガラケーや㍶でも見るわけで、Shift_JIS の perl でも実行できる環境が求められる。
そういうわけで perl 5.8以降はshift_JISで書かれたcgiでも実行可能になっている。
結果、おかしい状態が出来上がる。
perl で書かれた CGI がアスキーモードで転送しても(実際には上記の設定でアスキーモードは無効)インターナルサーバーエラーで実行不能になる。
確認作業
nkf –guess /ver/www/cgi-bin/test.cgi
Shift_JIS (CRLF)
????あれ?
アスキーモードなら文字コードはそのままでも改行コードは (LF) になるはずなんだけど…。
ブラウザからアクセスすると 500エラー
httpdのエラーログには
AH01215: (8)Exec format error: exec of ‘/ver/www/cgi-bin/test.cgi’ failed
End of script output before headers: test.cgi
と表示される。
上記コメントアウトを外してvsftpdをリスタートさせると
nkf –guess /ver/www/cgi-bin/test.cgi
Shift_JIS (LF)
ブラウザからアクセスするとちゃんと表示されました。