start-stop-daemon: fix "both -x and -a" case: -a does override argv[0]
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 14 Jan 2019 14:00:49 +0000 (15:00 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 14 Jan 2019 14:00:49 +0000 (15:00 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
debianutils/start_stop_daemon.c
testsuite/start-stop-daemon.tests

index fa08f48cf5c967448376fa3ab423e98562b041e0..3a4c1044ab2ccc3a053b23a8d6929bfc1d474cbd 100644 (file)
@@ -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);
 }
index be1c1a856cfd9349f986958b325a4ae4de747dcf..2ddb7fefb9c4e98b46c02082fcccfb2e9bacfdb7 100755 (executable)
@@ -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