From 1caca34aa67b2f267d0049d17e5430ca9c58ac3f Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 2 Aug 2007 10:14:29 +0000 Subject: start_stop_daemon: NOMMU fixes, round 2 by Alex Landau dhcpc: fixed "ifupdown + udhcpc_without_pidpile_creation" bug --- debianutils/start_stop_daemon.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'debianutils') diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index d8a0d7d..cf79270 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -14,6 +14,8 @@ #include #include +/* Override ENABLE_FEATURE_PIDFILE */ +#define WANT_PIDFILE 1 #include "libbb.h" static int signal_nr = 15; @@ -46,7 +48,7 @@ static int pid_is_exec(pid_t pid, const char *name) n = strcmp(execbuf, name); if (ENABLE_FEATURE_CLEAN_UP) free(execbuf); - return ~n; /* nonzero (true) if execbuf == name */ + return !n; /* nonzero (true) if execbuf == name */ } static int pid_is_user(int pid, int uid) @@ -301,10 +303,14 @@ int start_stop_daemon_main(int argc, char **argv) pid_t pid = vfork(); if (pid < 0) /* error */ bb_perror_msg_and_die("vfork"); - if (pid == 0) /* parent */ - return 0; + if (pid != 0) { + /* parent */ + /* why _exit? the child may have changed the stack, + * so "return 0" may do bad things */ + _exit(0); } /* child */ + setsid(); /* detach from controlling tty */ /* Redirect stdio to /dev/null, close extra FDs. * We do not actually daemonize because of DAEMON_ONLY_SANITIZE */ bb_daemonize_or_rexec( @@ -316,11 +322,7 @@ int start_stop_daemon_main(int argc, char **argv) } if (opt & OPT_MAKEPID) { /* user wants _us_ to make the pidfile */ - FILE *pidf = xfopen(pidfile, "w"); - - pid_t pidt = getpid(); - fprintf(pidf, "%d\n", pidt); - fclose(pidf); + write_pidfile(pidfile); } if (opt & OPT_c) { struct bb_uidgid_t ugid; -- cgit v1.1