diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2019-01-14 15:00:49 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2019-01-14 15:00:49 +0100 |
commit | 77524a311a510c9cc1bf6449d77b40d0f41a4a40 (patch) | |
tree | 4aa0d38c9cd52126175dc117c5cd25662348a91b | |
parent | 088fec36fedff2cd50437c95b7fb430abf8d303c (diff) | |
download | busybox-77524a311a510c9cc1bf6449d77b40d0f41a4a40.tar.gz |
start-stop-daemon: fix "both -x and -a" case: -a does override argv[0]
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | debianutils/start_stop_daemon.c | 7 | ||||
-rwxr-xr-x | 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 |