[Mew-dist 12282] Re: Ssh remote_port

Hajimu UMEMOTO ( 梅本 肇 ) ume at example.com
2000年 2月 7日 (月) 17:02:28 JST


  梅本@IMASYです。

>>>>> On Mon, 7 Feb 2000 13:31:47 +0900
>>>>> KOIE Hidetaka <hide at example.com> said:

hide> -Lオプションのポート番号はsscanf("%d")と("%hu")で解析しているので
hide> 名前では書けないようです。ssh-2.0.13もみてみましたが、パッと見では
hide> getservbyname()を呼ばないようなので-Lには数字を期待していると思います。

  なるほど、SSH は面倒見ないのか。
  昔の IM のコードを見てみました。確かに、getservbyname() で展開した後
の値を与えていますね。失礼しました。
  ということで、パッチを添付します。試してみてください。

hide> 梅本さんはIM135を使っておられるようなので
hide> IM137との間になにかあるのかなぁと思ったりします。

  私は fetchmail で SSH の連携をさせている (実際にはうちの環境ではもう
ちょっと複雑なことをやらせる必要がある) ので、実は、Mew の SSH 連携機
能は使ったことないです。今回テストで初めて使いました。^^;
  [Mew-dist 12012] に POP over SSH で使えるようになったという報告があっ
たので、てっきり使えているものとばかり思ってました。

-------------- next part --------------
Index: IM/TcpTransaction.pm
===================================================================
RCS file: /usr/home/ume/ncvs/src/im/IM/TcpTransaction.pm,v
retrieving revision 1.10
diff -u -r1.10 TcpTransaction.pm
--- IM/TcpTransaction.pm	2000/02/07 06:44:34	1.10
+++ IM/TcpTransaction.pm	2000/02/07 07:06:21
@@ -89,7 +89,7 @@
 	    if ($s =~ s/\/(\d+)$//) {
 		$remoteport = $1;
 	    } else {
-		$remoteport = $serv;
+		next unless ($remoteport = getserv($serv, 'tcp'));
 	    }
 	    if ($main::SSH_server eq 'localhost') {
 		im_warn( "Don't use port-forwarding to `localhost'.\n" );
@@ -437,35 +437,13 @@
 
     my ($node, $serv, $family, $socktype, $proto, $flags) = @_;
 
-    my ($pe_name, $pe_aliases, $pe_proto);
-    my ($se_name, $se_aliases, $se_port);
+    my ($pe_name, $pe_aliases, $pe_proto, $se_port);
     if (unixp()) {
 	$proto = 'tcp' unless ($proto);
 	($pe_name, $pe_aliases, $pe_proto) = getprotobyname($proto);
     }
     $pe_proto = 6 unless ($pe_name);
-    if ($serv =~ /^\d+$/o) {
-	$se_port = $serv;
-    } else {
-	($se_name, $se_aliases, $se_port) = getservbyname($serv, $proto)
-	    if (unixp());
-	unless ($se_name) {
-	    if ($serv eq 'smtp') {
-		$se_port = 25;
-	    } elsif ($serv eq 'http') {
-		$se_port = 80;
-	    } elsif ($serv eq 'nntp') {
-		$se_port = 119;
-	    } elsif ($serv eq 'pop3') {
-		$se_port = 110;
-	    } elsif ($serv eq 'imap') {
-		$se_port = 143;
-	    } else {
-		im_err("unknown service: $serv\n");
-		return undef;
-	    }
-	}
-    }
+    return undef unless ($se_port = getserv($serv, $proto));
 
     my ($he_name, $he_alias, $he_type, $he_len, @he_addrs);
     if ($node =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/) {
@@ -514,6 +492,36 @@
 	push(@infos, $family, $socktype, $pe_proto, $sin, $he_name);
     }
     @infos;
+}
+
+sub getserv($$) {
+    my ($serv, $proto) = @_;
+
+    my ($se_port);
+    if ($serv =~ /^\d+$/o) {
+	$se_port = $serv;
+    } else {
+	my ($se_name, $se_aliases);
+	($se_name, $se_aliases, $se_port) = getservbyname($serv, $proto)
+	    if (unixp());
+	unless ($se_name) {
+	    if ($serv eq 'smtp') {
+		$se_port = 25;
+	    } elsif ($serv eq 'http') {
+		$se_port = 80;
+	    } elsif ($serv eq 'nntp') {
+		$se_port = 119;
+	    } elsif ($serv eq 'pop3') {
+		$se_port = 110;
+	    } elsif ($serv eq 'imap') {
+		$se_port = 143;
+	    } else {
+		im_err("unknown service: $serv\n");
+		return undef;
+	    }
+	}
+    }
+    $se_port;
 }
 
 sub inet6_pack_sockaddr_in6 ($;$) {
-------------- next part --------------
梅本 肇 @ インターネット互助会横浜  http://www.imasy.org/~ume/
ume at example.com  ume at example.com  ume at example.com
プログラムは書いた人の意図ではなく書かれた通り動く


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