From: Eric Wong <e@80x24.org>
Date: Thu, 17 Mar 2016 01:50:07 +0000 (+0000)
Subject: daemon: expand @ARGV paths for running in '/'
X-Git-Tag: v1.0.0~629
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=8c56a2317a3daca70d0e35c0e38b4b15be4823a8;p=public-inbox.git

daemon: expand @ARGV paths for running in '/'

We also require --stdout/--stderr/--pid-file to be absolute
paths for USR2 usage.  However, allow PSGI files for -httpd
to be relative paths for ease-of-use.
---

diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index c6fb62bf..c9594a37 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -8,6 +8,7 @@ use warnings;
 use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
 use IO::Handle;
 use IO::Socket;
+use Cwd qw/abs_path/;
 STDOUT->autoflush(1);
 STDERR->autoflush(1);
 require Danga::Socket;
@@ -91,7 +92,24 @@ sub daemon_prepare ($) {
 	die "No listeners bound\n" unless @listeners;
 }
 
+sub check_absolute ($$) {
+	my ($var, $val) = @_;
+	if (defined $val && index($val, '/') != 0) {
+		die
+"--$var must be an absolute path when using --daemonize: $val\n";
+	}
+}
+
 sub daemonize () {
+	foreach my $i (0..$#ARGV) {
+		my $arg = $ARGV[$i];
+		next unless -e $arg;
+		$ARGV[$i] = abs_path($arg);
+	}
+	check_absolute('stdout', $stdout);
+	check_absolute('stderr', $stderr);
+	check_absolute('pid-file', $pid_file);
+
 	chdir '/' or die "chdir failed: $!";
 	open(STDIN, '+<', '/dev/null') or die "redirect stdin failed: $!";