summaryrefslogtreecommitdiff
path: root/Echolot
diff options
context:
space:
mode:
Diffstat (limited to 'Echolot')
-rw-r--r--Echolot/Pinger/Mix.pm18
-rw-r--r--Echolot/Tools.pm8
2 files changed, 16 insertions, 10 deletions
diff --git a/Echolot/Pinger/Mix.pm b/Echolot/Pinger/Mix.pm
index 1b774a2..1bb3a0d 100644
--- a/Echolot/Pinger/Mix.pm
+++ b/Echolot/Pinger/Mix.pm
@@ -66,7 +66,8 @@ sub ping($$$$$) {
Echolot::Log::warn("Cannot close $mixcfg: $!."),
return 0;
- my $pid = open(KID, "|-");
+ my($wtr, $rdr, $err);
+ my $pid = open3($wtr, $rdr, $err, "|-");
defined $pid or
Echolot::Log::warn("Cannot fork for calling mixmaster: $!."),
return 0;
@@ -76,13 +77,18 @@ sub ping($$$$$) {
Echolot::Log::warn("Cannot exec mixpinger: $!.");
exit(1);
};
- print KID "From: Echolot Pinger <$address>\n"
- if $with_from;
- print KID "To: $to\n\n$body\n";
- close (KID);
+ my $msg;
+ $msg .= "From: Echolot Pinger <$address>\n" if $with_from;
+ $msg .= "To: $to\n\n$body\n";
+ my ($stdout, $stderr, undef) = Echolot::Tools::readwrite_gpg($msg, $wtr, $rdr, $err, undef);
waitpid $pid, 0;
-
+
+ $stderr =~ s/^Chain: .*//mg;
+ $stderr =~ s/^Warning: The message has a From: line.*//mg;
+ Echolot::Log::info("Mixmaster said on stdout: $stdout");
+ Echolot::Log::warn("Mixmaster said on stderr: $stderr");
+
return 1;
};
diff --git a/Echolot/Tools.pm b/Echolot/Tools.pm
index 46b7f3e..0264cfd 100644
--- a/Echolot/Tools.pm
+++ b/Echolot/Tools.pm
@@ -288,14 +288,14 @@ sub readwrite_gpg($$$$$) {
$inputfd->blocking(0);
$stdoutfd->blocking(0);
- $statusfd->blocking(0);
+ $statusfd->blocking(0) if defined $statusfd;
$stderrfd->blocking(0);
$sout->add($stdoutfd);
$sout->add($stderrfd);
- $sout->add($statusfd);
+ $sout->add($statusfd) if defined $statusfd;
$sin->add($inputfd);
- Echolot::Log::debug("input is $inputfd; output is $stdoutfd; err is $stderrfd; status is $statusfd.");
+ Echolot::Log::debug("input is $inputfd; output is $stdoutfd; err is $stderrfd; status is ".(defined $statusfd ? $statusfd : 'undef').".");
my ($stdout, $stderr, $status) = ("", "", "");
@@ -330,7 +330,7 @@ sub readwrite_gpg($$$$$) {
$stdout .= <$rfd>;
next;
}
- if ($rfd == $statusfd) {
+ if (defined $statusfd && $rfd == $statusfd) {
$status .= <$rfd>;
next;
}