[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 メーリングリストの案内