[Mew-dist 11410] Re: imput -q trouble

Masatoshi Tsuchiya tsuchiya at example.com
1999年 11月 24日 (水) 03:44:58 JST


土屋です。


>> On Wed, 24 Nov 1999 02:47:59 +0900
>> tatsuyak at example.com (Tatsuya Kinoshita) said as follows:
> 
> いただいたパッチをあてて試してみたところ、ちゃんとSMTPサーバを
> 切り替えできるようになりました。

済みません。折角喜んで頂いたところなのですが、このパッチは、SSH 拡張と
相性が悪いです。

と言いますのは、SSH 経由の通信を行う場合には、TcpTransaction::Cur_server
に、実際に使用されるローカルポート番号などが含まれた正規化されたサーバー
指定文字列が代入されます。キューに保存されているサーバー指定文字列は、
ローカルポート番号の第1候補が含まれているだけなので、この2つは多くの場
合には一致せず、再接続を試みるという現象が発生します。

また、SSH 経由の通信を利用して送信する SMTP Server を2つ使い分けている
ような場合にも不具合が発生することが予想されます。つまり、

    imput -odq -t --smtpservers=foo:8025 --sshserver=foo-ssh < message.1
    imput -odq -t --smtpservers=bar:8026 --sshserver=bar-ssh < message.2

というキューを処理しようとしても、現状では SSH のサーバーはキューに保
存されませんので、キューを処理する時点での SSHServer の指定が有効になっ
てしまいます。

というわけで、もう少し広範囲に手を入れました。しかし、かなり汚い修正な
ので、注意して扱ってください。


-------------- next part --------------
diff -urN im-133.orig/IM/Nntp.pm im-133/IM/Nntp.pm
--- im-133.orig/IM/Nntp.pm	Mon Oct 25 20:13:02 1999
+++ im-133/IM/Nntp.pm	Wed Nov 24 03:29:48 1999
@@ -68,7 +68,7 @@
     my $rc;
 
     if ($Nntp_opened) {
-	return 0 if (grep(&get_cur_server() eq $_, @$servers));
+	return 0 if (grep(&get_cur_server_original_form() eq $_, @$servers));
 	&nntp_close;
     }
     &tcp_logging($logging);
diff -urN im-133.orig/IM/Smtp.pm im-133/IM/Smtp.pm
--- im-133.orig/IM/Smtp.pm	Mon Oct 25 20:13:02 1999
+++ im-133/IM/Smtp.pm	Wed Nov 24 03:25:51 1999
@@ -61,8 +61,10 @@
     my $rc;
     @Status =();
     if ($Smtp_opened) {
-	im_notice("resetting SMTP session.\n");
-	return 0 unless (&tcp_command(\*SMTPd, 'RSET', ''));
+	if (grep(&get_cur_server_original_form() eq $_, @$servers)) {
+	    im_notice("resetting SMTP session.\n");
+	    return 0 unless (&tcp_command(\*SMTPd, 'RSET', ''));
+	}
 	&smtp_close;
 #	return 1;
     }
diff -urN im-133.orig/IM/TcpTransaction.pm im-133/IM/TcpTransaction.pm
--- im-133.orig/IM/TcpTransaction.pm	Mon Oct 25 20:13:02 1999
+++ im-133/IM/TcpTransaction.pm	Wed Nov 24 03:25:32 1999
@@ -25,7 +25,7 @@
 @EXPORT = qw(log_transaction
 	connect_server tcp_command send_command next_response send_data
 	command_response set_command_response tcp_logging
-	get_session_log set_cur_server get_cur_server
+	get_session_log set_cur_server get_cur_server get_cur_server_original_form
 	pool_priv_sock);
 
 =head1 NAME
@@ -43,7 +43,7 @@
 
 =cut
 
-use vars qw($Cur_server $Session_log $TcpSockName
+use vars qw($Cur_server $Cur_server_original_form $Session_log $TcpSockName
 	    $SOCK @Response $Logging @SockPool @Sock6Pool);
 BEGIN {
     $Cur_server = '';
@@ -104,6 +104,7 @@
     my ($he_name, $he_alias, $he_type, $he_len, $he_addr, @he_addrs);
     my ($family, $s, $localport, $remoteport, $sin);
     while ($s = shift(@$servers)) {
+	$Cur_server_original_form = $s;
 	my ($r) = ($#$servers >= 0) ? 'skipped' : 'failed';
 	# manage server[/remoteport]%localport
 	if ($s =~ s/\%(\d+)$//) {
@@ -407,6 +408,10 @@
 
 sub get_cur_server () {
     return $Cur_server;
+}
+
+sub get_cur_server_original_form () {
+    return $Cur_server_original_form;
 }
 
 sub pool_priv_sock ($) {
diff -urN im-133.orig/imput.in im-133/imput.in
--- im-133.orig/imput.in	Mon Oct 25 20:13:00 1999
+++ im-133/imput.in	Wed Nov 24 03:29:03 1999
@@ -1782,6 +1782,7 @@
 	    if (/^S:(.*)/)   { $Sender = $1; next; }
 	    if (/^SSV:(.*)/) { @Smtp_servers = split(',', $1); next; }
 	    if (/^NSV:(.*)/) { @Nntp_servers = split(',', $1); next; }
+	    if (/^SSH:(.*)/) { $SSH_server = $1; next; }
 	    if (/^R:(.*)/)   { @Recipients = split(',', $1); next; }
 	    if (/^RQ:(.*)/)  { $User_require = $1; next; }
 	    im_warn("unknown environment: $_\n");
@@ -1907,6 +1908,7 @@
     print QUEUE "RQ:$User_require\n";
     print QUEUE "SSV:$Smtp_servers\n";
     print QUEUE "NSV:$Nntp_servers\n";
+    print QUEUE "SSH:$SSH_server\n";
     print QUEUE "R:".join(',', @Recipients)."\n";
     print QUEUE "\n";
 
-------------- next part --------------

-- 
土屋 雅稔  ( TSUCHIYA Masatoshi )
    http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/


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