[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: ange-ftpで fしたときの挙動。



平松です。

At 11 Jan 2002 19:26:15 +0900,
Keisuke Mori wrote:
> どうも NetBSD 付属の ftpd だけ、振舞いが違うようですね。
> 
> ange-ftp は通常、
> 
> ftp>ls "-laF /home/ksk/." 
> 
> のような形式でディレクトリのリスティングを取っているのですが、
> NetBSD のものはこれを解釈しないようです。

NetBSD付属のftpdの場合、lsの出力はftpdで作っているのではなく、「/bin/ls -lgA」を実行
した結果をパイプで取り込んでいます。なので、

ftp> ls

で実際に実行されるのは「ls -lgA」です。また

ftp> ls /usr

の場合は「ls -lgA /usr」です。そしてNetBSDのftpdは「lsの1つ目の引数は必ずファイル名」
と解釈するので「-F」を渡してもファイルかディレクトリ名だと思ってpopenの引数を組み
立て、

ftp> ls -F

で実行されるのは「ls -lgA -F」になります。つまり、増田さんがNetBSDのftpdに接続したら
「ls -F」を解釈してくれたように見えたのは、実は「ls -lgA -F」がたまたまlsの引数として
有効だったからで、NetBSDのftpdが「-Fオプション」を分かってくれたからでは無かったと
考えられます。そしてange-ftpの

ftp> ls -laF /home/ksk/.

は「-laF」がサーバ上のファイルかディレクトリの名前、「/home/ksk/.」がその出力を保存する
クライアント側のファイル名と解釈するようです。

というわけなので、NetBSDのftpdにはバグがあって本来は「ls -F」は「-F: No such file
or directory」と返すべきな気がします。ftpで入ったときにls -Fとかできなくなりますが、
この方が仕様としては正しいし、中途半端に-Fを付けたら出力が変わったりするより分かり
やすいと思います。

ange-ftpの方でNetBSDのftpdに対応したい場合、根本的には

> とすると、いつも cd してから ls するように ange-ftp を修正するの
> が筋なのかしら。

ではなく、フラグを全く使わないとするのがよいと思います。cdしてからls -alFだと、いつの
間にか上記のバグがfixされてしまった時にまた困ることになると思います。


可能ならばNetBSDのftpdがlsの引数を理解するpatchを作って投げてみようかとは考えてます。
「RFCにない仕様だ」と言われてしまうとちょっと苦しいのですが、NetBSDの場合「そういう
動作を期待するftpクライアントがある」と主張すれば何とかしてくれそうな気もします。

---
// 平松 祥史(yosifumi@xxxxxxxxxxxxxxxxxx)