以下のファイルをダウンロードして,オリジナルの ProFTPD ソースに対してパッチを当ててください。
パッチ後に,文字コード変換モジュールを有効にする設定で configure します。
(若干マニアックな)例:
./configure --prefix=/usr/local/v6 --enable-ipv6 --enable-sendfile --with-modules=mod_codeconv:mod_df
make して make install すれば,--prefix で指定したディレクトリ(デフォルトは /usr/local)の下の sbin/ に proftpd がインストールされます。設定ファイルやバイナリをそれぞれ別のディレクトリにインストールするには,configure オプションで個別にディレクトリを設定します。
proftpd.conf に文字コードの設定を書き足します。
CharsetLocal ディレクティブにサーバ内部の文字コード,CharsetRemote ディレクティブにクライアント側の文字コードを指定します。例えば,サーバ側のファイルシステムが EUC-JP を使用していて,クライアント側に Shift JIS で見せる場合には以下のように指定します。
CharsetLocal EUC-JP-MS CharsetRemote CP932
<VirtualHost> タグなどを使っている場合は,それぞれの有効範囲で個別に指定する必要があります(指定しなかった場合は文字コード変換が行われません)。
EUC-JP-MS は glibc 2.3.3 以降でサポートされている charset です。古い glibc を使用している場合などでは以下のように指定してください。
CharsetLocal EUC-JP CharsetRemote SJIS
EUC-JP/SJIS を使用すると,いわゆる機種依存文字が扱えなくなります。iconv() が機種依存文字の使える charset をサポートしていない環境では EUC-JP/SJIS 専用版 の使用をお勧めします。
iconv() がサポートしていれば UTF-8 も使用可能です。
サーバ側ファイルシステムが UTF-8 を使用していて,クライアント側に Shift JIS で見せる場合には
CharsetLocal UTF-8 CharsetRemote CP932
と指定すれば OK のはずです。
上記の設定は手元の環境では未確認ですが,CharsetLocal に EUC-JP,CharsetRemote に UTF-8 を指定して正常動作することは確認しています。