aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-07-17 00:35:07 +0000
committerRob Landley <rob@landley.net>2006-07-17 00:35:07 +0000
commitf0623a2c98c02b07bc886171f147b522b0f66d94 (patch)
tree40b00a15b44a355de15bd069e3edf24e69d9cdfd
parent62103757efc2b22355a96bfd1298e1dbcb217f7f (diff)
downloadbusybox-w32-f0623a2c98c02b07bc886171f147b522b0f66d94.tar.gz
busybox-w32-f0623a2c98c02b07bc886171f147b522b0f66d94.tar.bz2
busybox-w32-f0623a2c98c02b07bc886171f147b522b0f66d94.zip
Patch from Thaddeus Ternes, adding chuid to start-stop-daemon.
-rw-r--r--debianutils/start_stop_daemon.c11
-rw-r--r--include/usage.h3
2 files changed, 11 insertions, 3 deletions
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
index 3700506bf..733fb4112 100644
--- a/debianutils/start_stop_daemon.c
+++ b/debianutils/start_stop_daemon.c
@@ -24,6 +24,7 @@ static int signal_nr = 15;
24static int user_id = -1; 24static int user_id = -1;
25static int quiet; 25static int quiet;
26static char *userspec = NULL; 26static char *userspec = NULL;
27static char *chuid = NULL;
27static char *cmdname = NULL; 28static char *cmdname = NULL;
28static char *execname = NULL; 29static char *execname = NULL;
29static char *pidfile = NULL; 30static char *pidfile = NULL;
@@ -211,6 +212,7 @@ static const struct option ssd_long_options[] = {
211 { "name", 1, NULL, 'n' }, 212 { "name", 1, NULL, 'n' },
212 { "signal", 1, NULL, 's' }, 213 { "signal", 1, NULL, 's' },
213 { "user", 1, NULL, 'u' }, 214 { "user", 1, NULL, 'u' },
215 { "chuid", 1, NULL, 'c' },
214 { "exec", 1, NULL, 'x' }, 216 { "exec", 1, NULL, 'x' },
215 { "pidfile", 1, NULL, 'p' }, 217 { "pidfile", 1, NULL, 'p' },
216#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY 218#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
@@ -249,9 +251,9 @@ int start_stop_daemon_main(int argc, char **argv)
249 opt = bb_getopt_ulflags(argc, argv, "KSbqm" 251 opt = bb_getopt_ulflags(argc, argv, "KSbqm"
250// USE_FEATURE_START_STOP_DAEMON_FANCY("ovR:") 252// USE_FEATURE_START_STOP_DAEMON_FANCY("ovR:")
251 USE_FEATURE_START_STOP_DAEMON_FANCY("ov") 253 USE_FEATURE_START_STOP_DAEMON_FANCY("ov")
252 "a:n:s:u:x:p:" 254 "a:n:s:u:c:x:p:"
253// USE_FEATURE_START_STOP_DAEMON_FANCY(,&retry_arg) 255// USE_FEATURE_START_STOP_DAEMON_FANCY(,&retry_arg)
254 ,&startas, &cmdname, &signame, &userspec, &execname, &pidfile); 256 ,&startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile);
255 257
256 quiet = (opt & SSD_OPT_QUIET) 258 quiet = (opt & SSD_OPT_QUIET)
257 USE_FEATURE_START_STOP_DAEMON_FANCY(&& !(opt & SSD_OPT_VERBOSE)); 259 USE_FEATURE_START_STOP_DAEMON_FANCY(&& !(opt & SSD_OPT_VERBOSE));
@@ -301,6 +303,11 @@ int start_stop_daemon_main(int argc, char **argv)
301 fprintf(pidf, "%d\n", pidt); 303 fprintf(pidf, "%d\n", pidt);
302 fclose(pidf); 304 fclose(pidf);
303 } 305 }
306 if(chuid) {
307 if(sscanf(chuid, "%d", &user_id) != 1)
308 user_id = bb_xgetpwnam(chuid);
309 setuid(user_id);
310 }
304 execv(startas, argv); 311 execv(startas, argv);
305 bb_perror_msg_and_die ("unable to start %s", startas); 312 bb_perror_msg_and_die ("unable to start %s", startas);
306} 313}
diff --git a/include/usage.h b/include/usage.h
index 7c63e2f85..e8d121c1e 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -2712,7 +2712,8 @@ USE_FEATURE_START_STOP_DAEMON_FANCY( \
2712 "\n\t-o|--oknodo\t\t\texit status 0 if nothing done" \ 2712 "\n\t-o|--oknodo\t\t\texit status 0 if nothing done" \
2713 "\n\t-v|--verbose\t\t\tbe verbose" \ 2713 "\n\t-v|--verbose\t\t\tbe verbose" \
2714) \ 2714) \
2715 "\n\t-s|--signal <signal>\t\tsignal to send (default TERM)" 2715 "\n\t-s|--signal <signal>\t\tsignal to send (default TERM)" \
2716 "\n\t-U|--chuid <username>|<uid>\tstart process with this name"
2716 2717
2717#ifdef CONFIG_FEATURE_STAT_FORMAT 2718#ifdef CONFIG_FEATURE_STAT_FORMAT
2718# define USAGE_STAT_FORMAT(a) a 2719# define USAGE_STAT_FORMAT(a) a