Patch from Thaddeus Ternes, adding chuid to start-stop-daemon.
authorRob Landley <rob@landley.net>
Mon, 17 Jul 2006 00:35:07 +0000 (00:35 -0000)
committerRob Landley <rob@landley.net>
Mon, 17 Jul 2006 00:35:07 +0000 (00:35 -0000)
debianutils/start_stop_daemon.c
include/usage.h

index 3700506bfeee40d42fe0a15ac810d821d7637d1f..733fb4112588bc9cf4db8bc0c383395aa4a54482 100644 (file)
@@ -24,6 +24,7 @@ static int signal_nr = 15;
 static int user_id = -1;
 static int quiet;
 static char *userspec = NULL;
+static char *chuid = NULL;
 static char *cmdname = NULL;
 static char *execname = NULL;
 static char *pidfile = NULL;
@@ -211,6 +212,7 @@ static const struct option ssd_long_options[] = {
        { "name",                       1,              NULL,           'n' },
        { "signal",                     1,              NULL,           's' },
        { "user",                       1,              NULL,           'u' },
+       { "chuid",                      1,              NULL,           'c' },
        { "exec",                       1,              NULL,           'x' },
        { "pidfile",            1,              NULL,           'p' },
 #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
@@ -249,9 +251,9 @@ int start_stop_daemon_main(int argc, char **argv)
        opt = bb_getopt_ulflags(argc, argv, "KSbqm"
 //             USE_FEATURE_START_STOP_DAEMON_FANCY("ovR:")
                USE_FEATURE_START_STOP_DAEMON_FANCY("ov")
-               "a:n:s:u:x:p:"
+               "a:n:s:u:c:x:p:"
 //             USE_FEATURE_START_STOP_DAEMON_FANCY(,&retry_arg)
-               ,&startas, &cmdname, &signame, &userspec, &execname, &pidfile);
+               ,&startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile);
 
        quiet = (opt & SSD_OPT_QUIET)
                        USE_FEATURE_START_STOP_DAEMON_FANCY(&& !(opt & SSD_OPT_VERBOSE));
@@ -301,6 +303,11 @@ int start_stop_daemon_main(int argc, char **argv)
                fprintf(pidf, "%d\n", pidt);
                fclose(pidf);
        }
+       if(chuid) {
+               if(sscanf(chuid, "%d", &user_id) != 1)
+                       user_id = bb_xgetpwnam(chuid);
+               setuid(user_id);
+       }
        execv(startas, argv);
        bb_perror_msg_and_die ("unable to start %s", startas);
 }
index 7c63e2f85036d60cd25aa6eaa1c9a84d62bc2497..e8d121c1ec5da3e868960c3884b3cd8f08b2bac5 100644 (file)
@@ -2712,7 +2712,8 @@ USE_FEATURE_START_STOP_DAEMON_FANCY( \
        "\n\t-o|--oknodo\t\t\texit status 0 if nothing done" \
        "\n\t-v|--verbose\t\t\tbe verbose" \
 ) \
-       "\n\t-s|--signal <signal>\t\tsignal to send (default TERM)"
+       "\n\t-s|--signal <signal>\t\tsignal to send (default TERM)" \
+       "\n\t-U|--chuid <username>|<uid>\tstart process with this name"
 
 #ifdef CONFIG_FEATURE_STAT_FORMAT
 #  define USAGE_STAT_FORMAT(a) a