From 77524a311a510c9cc1bf6449d77b40d0f41a4a40 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Mon, 14 Jan 2019 15:00:49 +0100 Subject: [PATCH] start-stop-daemon: fix "both -x and -a" case: -a does override argv[0] Signed-off-by: Denys Vlasenko --- debianutils/start_stop_daemon.c | 7 +++++-- testsuite/start-stop-daemon.tests | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index fa08f48cf..3a4c1044a 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -555,7 +555,10 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv) } } #endif -//bb_error_msg("HERE %d '%s'%s'", __LINE__, argv[0], argv[1]); - execvp(argv[0], argv); + /* Try: + * strace -oLOG start-stop-daemon -S -x /bin/usleep -a qwerty 500000 + * should exec "/bin/usleep", but argv[0] should be "qwerty": + */ + execvp(execname, argv); bb_perror_msg_and_die("can't execute '%s'", startas); } diff --git a/testsuite/start-stop-daemon.tests b/testsuite/start-stop-daemon.tests index be1c1a856..2ddb7fefb 100755 --- a/testsuite/start-stop-daemon.tests +++ b/testsuite/start-stop-daemon.tests @@ -21,4 +21,11 @@ testing "start-stop-daemon without -x and -a" \ "1\n" \ "" "" +# Unfortunately, this does not actually check argv[0] correctness, +# but at least it checks that pathname to exec() is correct +testing "start-stop-daemon with both -x and -a" \ + 'start-stop-daemon -S -x /bin/false -a qwerty false 2>&1; echo $?' \ + "1\n" \ + "" "" + exit $FAILCOUNT