[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH] start-stop-daemon: add chdir option
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2023-11-07 6:15:06
Message-ID: CAK1hOcPKXto5kLJVz9k4ZT7vkwWjJoY+dx=m8gfoOf7y8s-3cA () mail ! gmail ! com
[Download RAW message or body]
Applied, thank you.
On Wed, Oct 25, 2023 at 4:44 PM Esa Jääskelä <esa.jaaskela@suomi24.fi> wrote:
>
> Add option to change the running directory before starting the process.
> This can be done using -d or --chdir options. Add also test cases to
> start-stop-daemon to test out the directory change option.
>
> Signed-off-by: ejaaskel <esa.jaaskela@suomi24.fi>
> ---
> TODO | 2 --
> debianutils/start_stop_daemon.c | 21 ++++++++++++++-------
> testsuite/start-stop-daemon.tests | 20 ++++++++++++++++++++
> 3 files changed, 34 insertions(+), 9 deletions(-)
>
> diff --git a/TODO b/TODO
> index 72ae0f88d..6c7415a81 100644
> --- a/TODO
> +++ b/TODO
> @@ -222,8 +222,6 @@ Minor stuff:
> ---
> unify progress_meter. wget, flash_eraseall, pipe_progress, fbsplash, setfiles.
> ---
> - support start-stop-daemon -d <chdir-path>
> ----
>
> (TODO list after discussion 11.05.2009)
>
> diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
> index 3e5dd9faa..88c2be11c 100644
> --- a/debianutils/start_stop_daemon.c
> +++ b/debianutils/start_stop_daemon.c
> @@ -105,6 +105,7 @@ Misc options:
> //usage: "\n -N N Change nice level"
> //usage: )
> //usage: "\n -c USER[:[GRP]] Change user/group"
> +//usage: "\n -d PATH Change path"
> //usage: "\n -m Write PID to pidfile specified by -p"
> //usage: "\n-K only:"
> //usage: "\n -s SIG Signal to send"
> @@ -138,11 +139,12 @@ enum {
> OPT_s = (1 << 8), // -s
> OPT_u = (1 << 9), // -u
> OPT_c = (1 << 10), // -c
> - OPT_x = (1 << 11), // -x
> - OPT_p = (1 << 12), // -p
> - OPT_OKNODO = (1 << 13) * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, // -o
> - OPT_VERBOSE = (1 << 14) * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, // -v
> - OPT_NICELEVEL = (1 << 15) * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, // -N
> + OPT_d = (1 << 11), // -d
> + OPT_x = (1 << 12), // -x
> + OPT_p = (1 << 13), // -p
> + OPT_OKNODO = (1 << 14) * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, // -o
> + OPT_VERBOSE = (1 << 15) * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, // -v
> + OPT_NICELEVEL = (1 << 16) * ENABLE_FEATURE_START_STOP_DAEMON_FANCY, // -N
> };
> #define QUIET (option_mask32 & OPT_QUIET)
> #define TEST (option_mask32 & OPT_TEST)
> @@ -391,6 +393,7 @@ static const char start_stop_daemon_longopts[] ALIGN1 =
> "signal\0" Required_argument "s"
> "user\0" Required_argument "u"
> "chuid\0" Required_argument "c"
> + "chdir\0" Required_argument "d"
> "exec\0" Required_argument "x"
> "pidfile\0" Required_argument "p"
> # if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
> @@ -411,6 +414,7 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
> char *signame;
> char *startas = NULL;
> char *chuid;
> + char *chdir;
> #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
> // char *retry_arg = NULL;
> // int retries = -1;
> @@ -420,7 +424,7 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
> INIT_G();
>
> opt = GETOPT32(argv, "^"
> - "KSbqtma:n:s:u:c:x:p:"
> + "KSbqtma:n:s:u:c:d:x:p:"
> IF_FEATURE_START_STOP_DAEMON_FANCY("ovN:R:")
> /* -K or -S is required; they are mutually exclusive */
> /* -p is required if -m is given */
> @@ -432,7 +436,7 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
> "K:S:K--S:S--K:m?p:K?xpun"
> IF_FEATURE_START_STOP_DAEMON_FANCY("q-v"),
> LONGOPTS
> - &startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile
> + &startas, &cmdname, &signame, &userspec, &chuid, &chdir, &execname, &pidfile
> IF_FEATURE_START_STOP_DAEMON_FANCY(,&opt_N)
> /* We accept and ignore -R <param> / --retry <param> */
> IF_FEATURE_START_STOP_DAEMON_FANCY(,NULL)
> @@ -560,6 +564,9 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
> setgroups(1, &ugid.gid);
> }
> }
> + if (opt & OPT_d) {
> + xchdir(chdir);
> + }
> /* Try:
> * strace -oLOG start-stop-daemon -S -x /bin/usleep -a qwerty 500000
> * should exec "/bin/usleep", but argv[0] should be "qwerty":
> diff --git a/testsuite/start-stop-daemon.tests b/testsuite/start-stop-daemon.tests
> index 0757b1288..e1e49ab5f 100755
> --- a/testsuite/start-stop-daemon.tests
> +++ b/testsuite/start-stop-daemon.tests
> @@ -11,6 +11,21 @@ testing "start-stop-daemon -x without -a" \
> "0\n" \
> "" ""
>
> +testing "start-stop-daemon -x with -d on existing directory" \
> + 'start-stop-daemon -S -d /tmp -x true 2>&1; echo $?' \
> + "0\n" \
> + "" ""
> +
> +testing "start-stop-daemon -x with -d on existing and check dir" \
> + 'output=$(start-stop-daemon -S -d /tmp -x pwd); echo $output' \
> + "/tmp\n" \
> + "" ""
> +
> +testing "start-stop-daemon -x with --chdir on existing and check dir" \
> + 'output=$(start-stop-daemon -S --chdir /tmp -x pwd); echo $output' \
> + "/tmp\n" \
> + "" ""
> +
> testing "start-stop-daemon -a without -x" \
> 'start-stop-daemon -S -a false 2>&1; echo $?' \
> "1\n" \
> @@ -21,6 +36,11 @@ testing "start-stop-daemon without -x and -a" \
> "1\n" \
> "" ""
>
> +testing "start-stop-daemon -x with -d on non-existing directory" \
> + 'start-stop-daemon -S -d /non-existent -x true > /dev/null 2>&1; echo $?' \
> + "1\n" \
> + "" ""
> +
> # This runs /bin/false with argv[0..2] of { "qwerty", "false", NULL }.
> #
> # Unfortunately, this does not actually check argv[0] correctness,
> --
> 2.34.1
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic