--- busybox-1.11.0/debianutils/start_stop_daemon.c Wed Jun 25 14:51:26 2008 +++ busybox-1.11.0-ssd/debianutils/start_stop_daemon.c Tue Jul 1 14:05:05 2008 @@ -326,7 +326,9 @@ char *signame; char *startas; char *chuid; +#ifdef OLDER_VERSION_OF_X struct stat execstat; +#endif #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY // char *retry_arg = NULL; // int retries = -1; @@ -361,6 +363,8 @@ if (!(opt & OPT_a)) startas = execname; + if (!execname) /* in case -a is given and -x is not */ + execname = startas; // USE_FEATURE_START_STOP_DAEMON_FANCY( // if (retry_arg) @@ -374,7 +378,8 @@ if (errno) user_id = xuname2uid(userspec); } - do_procinit(); /* Both start and stop needs to know current processes */ + /* Both start and stop need to know current processes */ + do_procinit(); if (opt & CTX_STOP) { int i = do_stop(); @@ -383,17 +388,21 @@ if (found) { if (!QUIET) - printf("%s already running\n%d\n", execname, found->pid); + printf("%s is already running\n%u\n", execname, (unsigned)found->pid); return !(opt & OPT_OKNODO); } +#ifdef OLDER_VERSION_OF_X if (execname) xstat(execname, &execstat); +#endif *--argv = startas; if (opt & OPT_BACKGROUND) { #if BB_MMU - bb_daemonize(0); + bb_daemonize(DAEMON_DEVNULL_STDIO + DAEMON_CLOSE_EXTRA_FDS); + /* DAEMON_DEVNULL_STDIO is superfluous - + * it's always done by bb_daemonize() */ #else pid_t pid = vfork(); if (pid < 0) /* error */ @@ -404,19 +413,18 @@ * so "return 0" may do bad things */ _exit(EXIT_SUCCESS); } - /* child */ + /* 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( - DAEMON_DEVNULL_STDIO + bb_daemonize_or_rexec(DAEMON_DEVNULL_STDIO + DAEMON_CLOSE_EXTRA_FDS + DAEMON_ONLY_SANITIZE, NULL /* argv, unused */ ); #endif } if (opt & OPT_MAKEPID) { - /* user wants _us_ to make the pidfile */ + /* User wants _us_ to make the pidfile */ write_pidfile(pidfile); } if (opt & OPT_c) { @@ -434,6 +442,6 @@ } } #endif - execv(startas, argv); + execvp(startas, argv); bb_perror_msg_and_die("cannot start %s", startas); } --- busybox-1.11.0/include/usage.h Wed Jun 25 14:51:35 2008 +++ busybox-1.11.0-ssd/include/usage.h Tue Jul 1 14:03:48 2008 @@ -3637,9 +3637,7 @@ "$ cat TODO | split -a 2 -l 2 TODO_\n" #define start_stop_daemon_trivial_usage \ - "[OPTIONS] [" \ - USE_GETOPT_LONG("--start|--stop") SKIP_GETOPT_LONG("-S|-K") \ - "] ... [-- arguments...]" + "[OPTIONS] [-S|-K] ... [-- arguments...]" #define start_stop_daemon_full_usage "\n\n" \ "Search for matching processes, and then\n" \ "-S: stop all matching processes.\n" \