Revise ftp_abort to be useful in a forked child process
authorJacob Bachmeyer <jcb@gnu.org>
Wed, 26 Oct 2022 01:25:55 +0000 (20:25 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Wed, 26 Oct 2022 01:25:55 +0000 (20:25 -0500)
This commit introduces global variables to control the destination of an
abort message and the default exit code.  These variables are accessed
using lexical aliases and are only accessible in the code that uses them.

gatekeeper.pl

index 852334659e6aa542ed6b422ae9e1d664a92d5a63..6c03888d410fb5710413252f52cc2683b1b700a3 100755 (executable)
@@ -424,11 +424,27 @@ sub ftp_warn($) {
     warn $_[0];
 }
 
+{
+  # If this is set to a defined value, ftp_abort will write the message
+  # here instead of using syslog.
+  our $AbortPipe = undef;
+  # This selects the default exit code, if no code is specified.
+  our $AbortExitCode = 1;
+}
+
 sub ftp_abort($;$) {
     my $msg = shift;
     my $exitcode = shift;
-    $exitcode ||= 1;
-    ftp_syslog('err', $msg);
+
+    our $AbortExitCode;
+    $exitcode = (defined $exitcode ? $exitcode : $AbortExitCode);
+
+    our $AbortPipe;
+    if (defined $AbortPipe && defined fileno $AbortPipe)
+      { print $AbortPipe $msg, "\n" }
+    else
+      { ftp_syslog('err', $msg) }
+
     exit $exitcode;
 }