[Mew-dist 77] Re: Anonymous FTP with proxy

kurati at example.com kurati at example.com
1996年 11月 21日 (木) 11:50:20 JST


こんにちは、倉地@川崎重工です。

On Tue, 19 Nov 1996 23:12:51 +0900, SAKAI Kiyotaka <ksakai at example.com> wrote:

> >> In article <9611190825.AA23949 at example.com>, TAKAHASHI Masafumi <takahasi at example.com> writes:
> 
> >> Fire-wall の中なので、 FTP できませんでした。
> 
> >> そこで、FTP Proxy を使っている場合でも anonymous FTP できるような
> >> 一時しのぎをしてみました。
>
> 元メールから判断するに、倉地さんの環境は http proxy しか使えないと理解
> したのですが、違いますでしょうか?

そのとおりです。

> 
> 個人的には、このような環境では contrib/httpget を利用するアプローチの
> 方がいいと思うのですが。

そうですね、これだと余分なパッケージもいらないし。

というわけで mew-1.52 もでたので書いて見ました。

crontrib/httpget/mew.url.el-patch を参考にしました。

また、httpget.pl は、私の環境
	SparcStation 10, SunOS 4.1.4, perl-5.002
では、

1.proxy port が 80 の場合に
	httpget: chat'print("GET http://hogehoge.com/ HTTP/1.0"): Permission denied
  のようなエラーがでる。( 特権ポート)

2.
	($nfound, $rmask) = select($rmask, undef, undef, $timeout_sec);
  の所で止まってしまう。

ので、httpget.pl も変更しました。

この httpget.pl を httpget にリネームして使用しています。

今回は .emacs などに
	(setq mew-mime-external-ftp-program "httpget")
と書くだけにしました。(もちろん httpget のサーバの設定はする。)

また、 emacs-w3 を使用する時は、
	(setq mew-mime-external-ftp-program "emacs-w3")
とします。

mew-mime-external-ftp-program の値がそれ以外の時はデフォルトの動作をします。

では、さようなら。

----------- beginning of patch ----------------
--- mew-ext.el-dist	Thu Nov 21 00:07:37 1996
+++ mew-ext.el	Thu Nov 21 11:37:21 1996
@@ -256,6 +256,18 @@
   (message "access-type TFTP is not supported yet")
   )
 
+(defun mew-copy-remote-file (remotefile remoteurl localfile)
+  (cond ((string= "httpget" mew-mime-external-ftp-program)
+	 (call-process mew-mime-external-ftp-program nil nil nil
+		       remoteurl localfile))
+	((string= "emacs-w3" mew-mime-external-ftp-program)
+         (progn
+           (if (not (featurep 'w3))
+               (require 'w3))
+           (w3-fetch remoteurl)))
+	(t
+	 (copy-file remotefile localfile))))
+
 (defun mew-ext-anon-ftp (begin end params &optional input-user)
   (require 'ange-ftp)
   (let* ((access-type (mew-syntax-get-member params "access-type"))
@@ -270,6 +282,7 @@
 	 (ange-ftp-skip-msgs (concat mew-ext-prog-ftp-skip-msgs
 				     ange-ftp-skip-msgs))
 	 (username "") (filepath nil) (localfile nil) (remotefile nil)
+	 (remoteurl nil)
 	 (buffer-read-only nil))
     (if directory
 	(if (string-match ".*/$" directory) ;; xxx Win95???
@@ -299,6 +312,7 @@
 	  (setq username (read-string (format "User name at %s: " site)
 				      (user-login-name))))
       (setq remotefile (format "/%s@%s:%s" username site filepath))
+      (setq remoteurl (format "ftp://%s%s" site filepath))
       (setq localfile
 	    (expand-file-name 
 	     (read-file-name "Save to: " 
@@ -308,8 +322,8 @@
 		    (format "The local file exists. Overwrite? ")))
 	      (message "The file wasn't retrieved")
 	    (delete-file localfile)
-	    (copy-file remotefile localfile))
-	(copy-file remotefile localfile))
+	    (mew-copy-remote-file remotefile remoteurl localfile))
+	(mew-copy-remote-file remotefile remoteurl localfile))
       )))
     
 (defun mew-ext-mail-server (begin end params)
--- contrib/httpget/httpget.pl-dist	Thu Nov 21 00:08:36 1996
+++ contrib/httpget/httpget.pl	Wed Nov 20 13:53:08 1996
@@ -1,13 +1,13 @@
-#!/usr/local/bin/perl4.017
+#!/usr/local/bin/perl --
 
 # httpget --- get a file specified by URL via HTTP
 #	1995/1/23 hideki at example.com
 
 $http_version = '1.0';
-$proxy_server = 'proxy.foo.bar.com';
-#$proxy_port = 80;
-$proxy_port = 8080;
-$no_proxy = '^http:.*\.bar\.com';
+$proxy_server = 'hogehoge.co.jp';
+$proxy_port = 80;
+#$proxy_port = 8080;
+$no_proxy = '^hogehoge$';
 $timeout_sec = 180;
 
 ($prog = $0) =~ s/.*\///;
@@ -50,15 +50,15 @@
   ($http = &chat'open_port($server, $port))
     || die "$prog: chat'open_port($server, $port): $!\n";
   $request = "GET $url HTTP/$http_version";
-  &chat'print($http, "$request\r\n")
-    || die "$prog: chat'print(\"$request\"): $!\n";
+  &chat'print($http, "$request\r\n");
+#    || die "$prog: chat'print(\"$request\"): $!\n";
   if ($opt_r) {
     $request = "Pragma: no-cache";
-    &chat'print($http, "$request\r\n")
-      || die "$prog: chat'print(\"$request\"): $!\n";
+    &chat'print($http, "$request\r\n");
+#      || die "$prog: chat'print(\"$request\"): $!\n";
   }
-  &chat'print($http, "\r\n")
-    || die "$prog: chat'print(\"\\n\"): $!\n";
+  &chat'print($http, "\r\n");
+#    || die "$prog: chat'print(\"\\n\"): $!\n";
   *S = *chat'S;
   $remotesize = -1;
   while (($_ = <S>) && $_ ne "\r\n" && $_ ne "\n") {
@@ -76,7 +76,7 @@
     vec($rmask, fileno(S), 1) = 1;
     $localsize = 0;
     do {
-      ($nfound, $rmask) = select($rmask, undef, undef, $timeout_sec);
+      ($nfound, $timeleft) = select($rmask, undef, undef, $timeout_sec);
       die "$prog: timed out at $url\n" unless ($nfound);
       $_ = <S>;
       print DEST $_ if ($_);
----------- end of patch -----------------
--
倉地 修 @ 川崎重工業株式会社 航空宇宙事業部 技術部 制御技術課
kurati_o at example.com , kurati at example.com , QWG02120 at example.com



Mew-dist メーリングリストの案内