]> git.g-eek.se Git - interimap.git/commitdiff
Add a configuration option 'null-stderr=YES'.
authorGuilhem Moulin <guilhem@fripost.org>
Tue, 8 Sep 2015 23:18:14 +0000 (01:18 +0200)
committerGuilhem Moulin <guilhem@fripost.org>
Wed, 9 Sep 2015 20:05:41 +0000 (22:05 +0200)
To send STDERR to /dev/null for type=tunnel.

Changelog
interimap.1
interimap.sample
lib/Net/IMAP/InterIMAP.pm

index 0d56bac0e85e9b621699933e819f9de03918496b..23d2a17955fccd2e9d943e32f4a3229fe654ad02 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -4,6 +4,8 @@ interimap (0.2) upstream
     enabled for the remote server, and disabled for the local server.
   * Add traffic statistics after closing the connection to the IMAP
     server.
+  * Add a configuration option 'null-stderr=YES' to send STDERR to
+    /dev/null for type=tunnel.
 
  -- Guilhem Moulin <guilhem@guilhem.org>  Wed, 09 Sep 2015 00:44:35 +0200
 
index bb97cf4be6256c7851a5095caf76ba44674a267a..dc3b49ba890995d5571d090dae25505f8752d4f7 100644 (file)
@@ -318,6 +318,12 @@ advertizing it.
 (Default: \(lqNO\(rq for the \(lq[local]\(rq section, \(lqYES\(rq for
 the \(lq[remote]\(rq section.)
 
+.TP
+.I null-stderr
+Whether to redirect \fIcommand\fR's standard error to \(lq/dev/null\(rq
+for type \fItype\fR=tunnel.
+(Default: \(lqNO\(rq.)
+
 .SH KNOWN BUGS AND LIMITATIONS
 
 .IP \[bu]
index e469c98c047a1b5359be69f05f055249ade88700..86d41dd214082a666a33f682203c67ff8e252853 100644 (file)
@@ -6,6 +6,7 @@ ignore-mailbox = ^virtual/
 [local]
 type = tunnel
 command = /usr/lib/dovecot/imap
+null-stderr = YES
 
 [remote]
 # type = imaps
index 966b965660bb5c3963fcfa9407d72227953c1b00..db6f4846d4abb3923acc8249ef7c9c88ca4c1a30 100644 (file)
@@ -49,6 +49,7 @@ my %OPTIONS = (
     password => qr/\A([\x01-\x7F]+)\z/,
     auth => qr/\A($RE_ATOM_CHAR+(?: $RE_ATOM_CHAR+)*)\z/,
     command => qr/\A(\/\P{Control}+)\z/,
+    'null-stderr' => qr/\A(YES|NO)\z/i,
     compress => qr/\A($RE_ATOM_CHAR+(?: $RE_ATOM_CHAR+)*)\z/,
     SSL_fingerprint => qr/\A([A-Za-z0-9]+\$\p{AHex}+)\z/,
     SSL_cipher_list => qr/\A(\P{Control}+)\z/,
@@ -248,11 +249,24 @@ sub new($%) {
             open STDIN,  '<&', $rd or $self->panic("Can't dup: $!");
             open STDOUT, '>&', $wd or $self->panic("Can't dup: $!");
 
+            my $stderr2;
+            if (uc ($self->{'null-stderr'} // 'NO') eq 'YES') {
+                open $stderr2, '>&', *STDERR;
+                open STDERR, '>', '/dev/null' or $self->panic("Can't open /dev/null: $!");
+            }
+
             my $sigset = POSIX::SigSet::->new(SIGINT);
             my $oldsigset = POSIX::SigSet::->new();
             sigprocmask(SIG_BLOCK, $sigset, $oldsigset) // $self->panic("Can't block SIGINT: $!");
 
-            exec $command or $self->panic("Can't exec: $!");
+            unless (exec $command) {
+                my $err = $!;
+                if (defined $stderr2) {
+                    close STDERR;
+                    open STDERR, '>&', $stderr2;
+                }
+                $self->panic("Can't exec: $err");
+            }
         }
 
         # parent