From 6771bdc5dc8a42da2787aca1f83c1b93725f204e Mon Sep 17 00:00:00 2001 From: Wynn Wolf Arbor Date: Fri, 5 Jun 2020 21:14:44 +0200 Subject: [PATCH] Add flag to run in the foreground slowcgi already has the -d flag to disable forking, but that particular flag also enables debug output and stops slowcgi from logging to syslog. Ordinarily this would be fine, but sadly we know of no clean way to track the PID of a forked process with Gentoo's OpenRC and its start-stop-daemon(8). We could add support to write a pidfile instead, but since we want to support multiple invocations of slowcgi through OpenRC and ${RC_SVCNAME}, we need a way of specifying the pidfile location in the init script itself. To solve this reasonably cleanly, add a flag that *only* controls whether or not the program daemonizes or not. --- slowcgi.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/slowcgi.c b/slowcgi.c index 87ae5b2..0a34c80 100644 --- a/slowcgi.c +++ b/slowcgi.c @@ -274,7 +274,7 @@ usage(void) { extern char *__progname; fprintf(stderr, - "usage: %s [-d] [-p path] [-s socket] [-U user] [-u user]\n", + "usage: %s [-df] [-p path] [-s socket] [-U user] [-u user]\n", __progname); exit(1); } @@ -282,6 +282,7 @@ usage(void) struct timeval timeout = { TIMEOUT_DEFAULT, 0 }; struct slowcgi_proc slowcgi_proc; int debug = 0; +int foreground = 0; int on = 1; char *fcgi_socket = "/var/www/run/slowcgi.sock"; @@ -314,11 +315,14 @@ main(int argc, char *argv[]) } } - while ((c = getopt(argc, argv, "dp:s:U:u:")) != -1) { + while ((c = getopt(argc, argv, "dfp:s:U:u:")) != -1) { switch (c) { case 'd': debug = 1; break; + case 'f': + foreground = 1; + break; case 'p': chrootpath = optarg; break; @@ -340,7 +344,7 @@ main(int argc, char *argv[]) if (geteuid() != 0) errx(1, "need root privileges"); - if (!debug && daemon(0, 0) == -1) + if (!debug && !foreground && daemon(0, 0) == -1) err(1, "daemon"); if (!debug) { -- 2.27.0