Article delegate-ja/540 of [1-661] on the server localhost:119
  upper oldest olders older1 this newer1 newers latest
search
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
[Reference:<_A527@delegate-ja.ML_>]
Newsgroups: mail-lists.delegate-ja

[DeleGate-Ja] Re: FTPプロキシ利用時のPWDコマンドについて
21 May 2011 09:57:20 GMT ysato@delegate.org (Yutaka Sato)
The DeleGate Project


超絶亀応答で申し訳ありません。

In message <_A527@delegate-ja.ML_> on 01/25/11(14:45:45)
you "K.SASAKI(HIS)" <pfypqbth4-m6tfebl7ix6r.ml@ml.delegate.org> wrote:
 |お世話になっております、広島情報シンフォニーの佐々木と申します。
...
 |Delegateは私がLinuxを触り始めた1997年頃から色々な場面で利用を
 |させて貰っています。

1997、DeleGate ver.4 の頃ですね :-)

 |2002/04/18にメーリングリストでFTPプロキシ利用時のPWDコマンドに
 |ついてご回答がありますが、最近、あるFTPサーバに接続したらPWDを
 |受け付けないソフトウェアに出会いました。
 |( http://www.delegate.org/mail-lists/delegate/11053 )

なるほど。ところで、受け付けない結果、FTPサーバどのように
なるでしょうか?
ただエラーを返すだけでしょうか?即切断でしょうか。
また、その際DeleGateには何が起こるでしょうか?
ただエラーを記録するだけでしょうか?破綻でしょうか。
DeleGate側で、サーバがPWDにエラーを返したように模擬してみま
したが、破綻するということな内容です。
とすると、サーバが即切断という事かなと思います。
FTPクライアントプログラムなどでも、ユーザがPWDを入力しなく
てもPWDを発行する例は少なくないと思いますので、特殊用途の
FTPサーバなのかなぁ。。。とか。

 |9.2.5, 9.9.1でPWD部分の対応をされた履歴も確認させていただきま
 |したが、根本的にPWDコマンドを実行しないようにするオプションな
 |どは考えられていないのでしょうか?
 |
 |例えば、FTPCONFのnopasvのようにnopwdなどが出来れば助かります。
 |現在はDelegateのWindows版バイナリを利用しています。

参照して頂いた記事にありますように、サーバにおけるログインディレ
クトリを知るために発行する PWD は、サーバが拒否して終了するような
場合を除きますと、というかその場合でも、適切な設定されているべき
と思います(デフォルトは"/"が良いとは思いますが)
FTPCONFでも良いと思いますが、特殊サーバにだけ設定、かつログイン
ディレクトリも(必要に応じてサーバ毎に)設定できたほうが良いかな
と思いますので、"FTPWD" なる CMAP を導入してみました。
一番基本的な使い方は以下のような感じです。

  CMAP="/:FTPWD:ftp:*:*"
  ## 全てのサーバについて、ログインディレクトリの確認のための
  ## PWD は行なわず、"/" を仮定する。

DeleGate/9.9.8-pre20 としてアップロードしておきました。
なお、震災の影響で、こちらの配布用の各種バイナリ作成環境がほぼ
使用不可能になっておりまして、(自宅に生き残っている)ごく一部
だけで作成できる分だけアップロードします(主にWindows用とMacOSX用)。
このpre20のバイナリにつきましては、ftp://ftp.delegate.org/pub/DeleGate/tmp
の下の FTPWD というディレクトリの下に置きました。

                   9 9  
┌─┐┬┌──┬┐ //\^^ ( e ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_<   >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@ITRI.産総研 (IEEE-CSDP,OCUP-A/UMTP-L2,ISTQB-F,ITIL-F,Security+)

diff -cr dist/src/delegate9.9.8-pre19/src/ftp.c ./src/ftp.c
*** dist/src/delegate9.9.8-pre19/src/ftp.c	Thu Nov 11 23:57:23 2010
--- ./src/ftp.c	Sat May 21 18:32:14 2011
***************
*** 2726,2734 ****
--- 2726,2742 ----
  	fflush(tc);
  	return 1;
  }
+ static int getFTPWD(PCStr(wh),FtpStat *FS,PVStr(resp));
  static void getPWD(FtpStat *FS,PVStr(pwd),int siz)
  {	CStr(resp,1024);
  
+ 	if( getFTPWD("getPWD",FS,AVStr(resp)) ){
+ 		/* new-110521d to suppress PWD to save dir. before tmp. CWD */
+ 		scanPWD(resp,BVStr(pwd),VStrNULL);
+ 		chdir_cwd(BVStr(pwd),FS->fs_CWD,0);
+ 		sv1log("##FTPWD/getPWD[%s][%s][%s]\n",resp,FS->fs_CWD,pwd);
+ 		return;
+ 	}
  	setVStrEnd(pwd,0);
  	if( put_get(FS->fs_ts,FS->fs_fs,AVStr(resp),sizeof(resp),"PWD\r\n") != EOF )
  		scanPWD(resp,AVStr(pwd),VStrNULL);
***************
*** 2751,2756 ****
--- 2759,2769 ----
  static int setLoginPWD(FtpStat *FS,FILE *ts,FILE *fs)
  {	CStr(resp,1024);
  
+ 	if( getFTPWD("setLoginPWD",FS,AVStr(resp)) ){
+ 		/* new-110521d to suppress PWD to see the login dir. */
+ 		setLoginPWD0(FS,resp);
+ 		return 0;
+ 	}
  	fputs("PWD\r\n",ts);
  	fflush(ts);
  	if( get_resp(fs,NULL,AVStr(resp),sizeof(resp)) == EOF )
***************
*** 2759,2764 ****
--- 2772,2788 ----
  	setLoginPWD0(FS,resp);
  	return 0;
  }
+ /* new-110521d to suppress generating PWD to a FTP server */
+ /* Usage Example: CMAP="/:FTPWD:ftp:*:*" */
+ static int getFTPWD(PCStr(wh),FtpStat *FS,PVStr(resp)){
+ 	IStr(ftpwd,128);
+ 
+ 	if( 0 <= find_CMAP(FS->fs_Conn,"FTPWD",TVStr(ftpwd)) ){
+ 		sprintf(resp,"257 \"%s\"",ftpwd);
+ 		return 1;
+ 	}
+ 	return 0;
+ }
  int CTX_checkAnonftpAuth(Connection *Conn,PVStr(user),PCStr(pass)) 
  {	refQStr(host,user); /*QA(NL)*/
  	int smtp_vrfy,checkuser;

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
@_@V