mirror of
https://github.com/sheumann/hush.git
synced 2025-01-03 00:31:16 +00:00
cleanup and add long options
This commit is contained in:
parent
480f1533f3
commit
aa820dbc00
@ -16,6 +16,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include "pwd_.h"
|
#include "pwd_.h"
|
||||||
@ -25,8 +26,8 @@ static int stop = 0;
|
|||||||
static int fork_before_exec = 0;
|
static int fork_before_exec = 0;
|
||||||
static int signal_nr = 15;
|
static int signal_nr = 15;
|
||||||
static int user_id = -1;
|
static int user_id = -1;
|
||||||
static const char *userspec = NULL;
|
static char *userspec = NULL;
|
||||||
static const char *cmdname = NULL;
|
static char *cmdname = NULL;
|
||||||
static char *execname = NULL;
|
static char *execname = NULL;
|
||||||
static char *startas = NULL;
|
static char *startas = NULL;
|
||||||
|
|
||||||
@ -48,62 +49,6 @@ push(int pid)
|
|||||||
found = p;
|
found = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
parse_options(int argc, char * const *argv)
|
|
||||||
{
|
|
||||||
|
|
||||||
int c;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
c = getopt (argc, argv, "a:n:s:u:x:KSb");
|
|
||||||
if (c == EOF)
|
|
||||||
break;
|
|
||||||
switch (c) {
|
|
||||||
case 'K':
|
|
||||||
stop = 1;
|
|
||||||
break;
|
|
||||||
case 'S':
|
|
||||||
start = 1;
|
|
||||||
break;
|
|
||||||
case 'a':
|
|
||||||
startas = optarg;
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
cmdname = optarg;
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
if (sscanf(optarg, "%d", &signal_nr) != 1)
|
|
||||||
bb_error_msg_and_die ("-s takes a numeric argument");
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
userspec = optarg;
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
execname = optarg;
|
|
||||||
break;
|
|
||||||
case 'b':
|
|
||||||
fork_before_exec = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
bb_show_usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start == stop)
|
|
||||||
bb_error_msg_and_die ("need one of -S or -K");
|
|
||||||
|
|
||||||
if (!execname && !userspec)
|
|
||||||
bb_error_msg_and_die ("need at least one of -x or -u");
|
|
||||||
|
|
||||||
if (!startas)
|
|
||||||
startas = execname;
|
|
||||||
|
|
||||||
if (start && !startas)
|
|
||||||
bb_error_msg_and_die ("-S needs -x or -a");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pid_is_exec(int pid, const char *exec)
|
pid_is_exec(int pid, const char *exec)
|
||||||
{
|
{
|
||||||
@ -238,10 +183,47 @@ do_stop(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const struct option ssd_long_options[] = {
|
||||||
|
{ "stop", 0, NULL, 'K' },
|
||||||
|
{ "start", 0, NULL, 'S' },
|
||||||
|
{ "background", 0, NULL, 'b' },
|
||||||
|
{ "startas", 1, NULL, 'a' },
|
||||||
|
{ "name", 1, NULL, 'n' },
|
||||||
|
{ "signal", 1, NULL, 's' },
|
||||||
|
{ "user", 1, NULL, 'u' },
|
||||||
|
{ "exec", 1, NULL, 'x' },
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
start_stop_daemon_main(int argc, char **argv)
|
start_stop_daemon_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
parse_options(argc, argv);
|
int flags;
|
||||||
|
char *signame;
|
||||||
|
bb_applet_long_options = ssd_long_options;
|
||||||
|
|
||||||
|
flags = bb_getopt_ulflags(argc, argv, "KSba:n:s:u:x:",
|
||||||
|
&startas, &cmdname, &signame, &userspec, &execname);
|
||||||
|
|
||||||
|
/* Be sneaky and avoid branching */
|
||||||
|
stop = (flags & 1);
|
||||||
|
start = (flags & 2);
|
||||||
|
fork_before_exec = (flags & 4);
|
||||||
|
|
||||||
|
signal_nr = bb_xgetlarg(signame, 10, 0, NSIG);
|
||||||
|
|
||||||
|
if (start == stop)
|
||||||
|
bb_error_msg_and_die ("need exactly one of -S or -K");
|
||||||
|
|
||||||
|
if (!execname && !userspec)
|
||||||
|
bb_error_msg_and_die ("need at least one of -x or -u");
|
||||||
|
|
||||||
|
if (!startas)
|
||||||
|
startas = execname;
|
||||||
|
|
||||||
|
if (start && !startas)
|
||||||
|
bb_error_msg_and_die ("-S needs -x or -a");
|
||||||
|
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include "pwd_.h"
|
#include "pwd_.h"
|
||||||
@ -25,8 +26,8 @@ static int stop = 0;
|
|||||||
static int fork_before_exec = 0;
|
static int fork_before_exec = 0;
|
||||||
static int signal_nr = 15;
|
static int signal_nr = 15;
|
||||||
static int user_id = -1;
|
static int user_id = -1;
|
||||||
static const char *userspec = NULL;
|
static char *userspec = NULL;
|
||||||
static const char *cmdname = NULL;
|
static char *cmdname = NULL;
|
||||||
static char *execname = NULL;
|
static char *execname = NULL;
|
||||||
static char *startas = NULL;
|
static char *startas = NULL;
|
||||||
|
|
||||||
@ -48,62 +49,6 @@ push(int pid)
|
|||||||
found = p;
|
found = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
parse_options(int argc, char * const *argv)
|
|
||||||
{
|
|
||||||
|
|
||||||
int c;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
c = getopt (argc, argv, "a:n:s:u:x:KSb");
|
|
||||||
if (c == EOF)
|
|
||||||
break;
|
|
||||||
switch (c) {
|
|
||||||
case 'K':
|
|
||||||
stop = 1;
|
|
||||||
break;
|
|
||||||
case 'S':
|
|
||||||
start = 1;
|
|
||||||
break;
|
|
||||||
case 'a':
|
|
||||||
startas = optarg;
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
cmdname = optarg;
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
if (sscanf(optarg, "%d", &signal_nr) != 1)
|
|
||||||
bb_error_msg_and_die ("-s takes a numeric argument");
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
userspec = optarg;
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
execname = optarg;
|
|
||||||
break;
|
|
||||||
case 'b':
|
|
||||||
fork_before_exec = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
bb_show_usage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start == stop)
|
|
||||||
bb_error_msg_and_die ("need one of -S or -K");
|
|
||||||
|
|
||||||
if (!execname && !userspec)
|
|
||||||
bb_error_msg_and_die ("need at least one of -x or -u");
|
|
||||||
|
|
||||||
if (!startas)
|
|
||||||
startas = execname;
|
|
||||||
|
|
||||||
if (start && !startas)
|
|
||||||
bb_error_msg_and_die ("-S needs -x or -a");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pid_is_exec(int pid, const char *exec)
|
pid_is_exec(int pid, const char *exec)
|
||||||
{
|
{
|
||||||
@ -238,10 +183,47 @@ do_stop(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const struct option ssd_long_options[] = {
|
||||||
|
{ "stop", 0, NULL, 'K' },
|
||||||
|
{ "start", 0, NULL, 'S' },
|
||||||
|
{ "background", 0, NULL, 'b' },
|
||||||
|
{ "startas", 1, NULL, 'a' },
|
||||||
|
{ "name", 1, NULL, 'n' },
|
||||||
|
{ "signal", 1, NULL, 's' },
|
||||||
|
{ "user", 1, NULL, 'u' },
|
||||||
|
{ "exec", 1, NULL, 'x' },
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
start_stop_daemon_main(int argc, char **argv)
|
start_stop_daemon_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
parse_options(argc, argv);
|
int flags;
|
||||||
|
char *signame;
|
||||||
|
bb_applet_long_options = ssd_long_options;
|
||||||
|
|
||||||
|
flags = bb_getopt_ulflags(argc, argv, "KSba:n:s:u:x:",
|
||||||
|
&startas, &cmdname, &signame, &userspec, &execname);
|
||||||
|
|
||||||
|
/* Be sneaky and avoid branching */
|
||||||
|
stop = (flags & 1);
|
||||||
|
start = (flags & 2);
|
||||||
|
fork_before_exec = (flags & 4);
|
||||||
|
|
||||||
|
signal_nr = bb_xgetlarg(signame, 10, 0, NSIG);
|
||||||
|
|
||||||
|
if (start == stop)
|
||||||
|
bb_error_msg_and_die ("need exactly one of -S or -K");
|
||||||
|
|
||||||
|
if (!execname && !userspec)
|
||||||
|
bb_error_msg_and_die ("need at least one of -x or -u");
|
||||||
|
|
||||||
|
if (!startas)
|
||||||
|
startas = execname;
|
||||||
|
|
||||||
|
if (start && !startas)
|
||||||
|
bb_error_msg_and_die ("-S needs -x or -a");
|
||||||
|
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user