if (ctx.stdin_valid && freopen(_PATH_DEVNULL, "w", stdin) == NULL)
logwarn("freopen stdin");
+ if (!(ctx.options & DHCPCD_DAEMONISE))
+ goto start_master;
+
#if defined(USE_SIGNALS) && !defined(THERE_IS_NO_FORK)
if (xsocketpair(AF_UNIX, SOCK_DGRAM | SOCK_CXNB, 0, fork_fd) == -1 ||
(ctx.stderr_valid &&
/* We have now forked, setsid, forked once more.
* From this point on, we are the controlling daemon. */
- ctx.options |= DHCPCD_STARTED;
logdebugx("spawned master process on PID %d", getpid());
+start_master:
+ ctx.options |= DHCPCD_STARTED;
if ((pid = pidfile_lock(ctx.pidfile)) != 0) {
logerr("%s: pidfile_lock %d", __func__, pid);
#ifdef PRIVSEP
#endif
}
+#define DHC_NOCHKIO (DHCPCD_STARTED | DHCPCD_DAEMONISE)
/* Prohibit writing to files.
* Obviously this won't work if we are using a logfile
* or redirecting stderr to a file. */
- if (ctx->logfile == NULL &&
- (ctx->options & DHCPCD_STARTED ||
- !ctx->stderr_valid || isatty(STDERR_FILENO) == 1))
+ if ((ctx->options & DHC_NOCHKIO) == DHC_NOCHKIO ||
+ (ctx->logfile == NULL &&
+ (!ctx->stderr_valid || isatty(STDERR_FILENO) == 1)))
{
if (setrlimit(RLIMIT_FSIZE, &rzero) == -1)
logerr("setrlimit RLIMIT_FSIZE");