diff options
Diffstat (limited to 'src/runscript.c')
-rw-r--r-- | src/runscript.c | 648 |
1 files changed, 324 insertions, 324 deletions
diff --git a/src/runscript.c b/src/runscript.c index 0b440e29..70db2cdf 100644 --- a/src/runscript.c +++ b/src/runscript.c @@ -71,20 +71,20 @@ void setup_selinux (int argc, char **argv) if (lib_handle) { /* FIXME: the below code generates the warning - ISO C forbids assignment between function pointer and 'void *' - which sucks ass - http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html */ + ISO C forbids assignment between function pointer and 'void *' + which sucks ass +http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html */ selinux_run_init_old = dlsym (lib_handle, "selinux_runscript"); selinux_run_init_new = dlsym (lib_handle, "selinux_runscript2"); /* Use new run_init if it rc_exists, else fall back to old */ if (selinux_run_init_new) - selinux_run_init_new (argc, argv); + selinux_run_init_new (argc, argv); else if (selinux_run_init_old) - selinux_run_init_old (); + selinux_run_init_old (); else - /* This shouldnt happen... probably corrupt lib */ - eerrorx ("run_init is missing from runscript_selinux.so!"); + /* This shouldnt happen... probably corrupt lib */ + eerrorx ("run_init is missing from runscript_selinux.so!"); } } #endif @@ -104,26 +104,26 @@ static void handle_signal (int sig) case SIGCHLD: do - { - pid = waitpid (-1, &status, WNOHANG); - if (pid < 0) - { - if (errno != ECHILD) - eerror ("waitpid: %s", strerror (errno)); - return; - } - } while (! WIFEXITED (status) && ! WIFSIGNALED (status)); + { + pid = waitpid (-1, &status, WNOHANG); + if (pid < 0) + { + if (errno != ECHILD) + eerror ("waitpid: %s", strerror (errno)); + return; + } + } while (! WIFEXITED (status) && ! WIFSIGNALED (status)); break; - + case SIGINT: if (! signame[0]) - snprintf (signame, sizeof (signame), "SIGINT"); + snprintf (signame, sizeof (signame), "SIGINT"); case SIGTERM: if (! signame[0]) - snprintf (signame, sizeof (signame), "SIGTERM"); + snprintf (signame, sizeof (signame), "SIGTERM"); case SIGQUIT: if (! signame[0]) - snprintf (signame, sizeof (signame), "SIGQUIT"); + snprintf (signame, sizeof (signame), "SIGQUIT"); eerrorx ("%s: caught %s, aborting", applet, signame); default: @@ -174,14 +174,14 @@ static bool in_control () { path = rc_strcatpaths (RC_SVCDIR, tests[i], applet, (char *) NULL); if (rc_exists (path)) - { - int m = get_mtime (path, false); - if (mtime < m && m != 0) - { - free (path); - return (false); - } - } + { + int m = get_mtime (path, false); + if (mtime < m && m != 0) + { + free (path); + return (false); + } + } free (path); i++; } @@ -192,7 +192,7 @@ static bool in_control () static void uncoldplug (char *service) { char *cold = rc_strcatpaths (RC_SVCDIR "coldplugged", basename (service), - (char *) NULL); + (char *) NULL); if (rc_exists (cold) && unlink (cold) != 0) eerror ("%s: unlink `%s': %s", applet, cold, strerror (errno)); free (cold); @@ -235,27 +235,27 @@ static void cleanup (void) if (in_control ()) { if (rc_service_state (applet, rc_service_stopping)) - { - /* If the we're shutting down, do it cleanly */ - if ((softlevel && - rc_runlevel_stopping () && - (strcmp (softlevel, RC_LEVEL_SHUTDOWN) == 0 || - strcmp (softlevel, RC_LEVEL_REBOOT) == 0))) - rc_mark_service (applet, rc_service_stopped); - else if (rc_service_state (applet, rc_service_wasinactive)) - rc_mark_service (applet, rc_service_inactive); - else - rc_mark_service (applet, rc_service_started); - } + { + /* If the we're shutting down, do it cleanly */ + if ((softlevel && + rc_runlevel_stopping () && + (strcmp (softlevel, RC_LEVEL_SHUTDOWN) == 0 || + strcmp (softlevel, RC_LEVEL_REBOOT) == 0))) + rc_mark_service (applet, rc_service_stopped); + else if (rc_service_state (applet, rc_service_wasinactive)) + rc_mark_service (applet, rc_service_inactive); + else + rc_mark_service (applet, rc_service_started); + } else if (rc_service_state (applet, rc_service_starting)) - { - if (rc_service_state (applet, rc_service_wasinactive)) - rc_mark_service (applet, rc_service_inactive); - else - rc_mark_service (applet, rc_service_stopped); - } + { + if (rc_service_state (applet, rc_service_wasinactive)) + rc_mark_service (applet, rc_service_inactive); + else + rc_mark_service (applet, rc_service_stopped); + } if (exclusive && rc_exists (exclusive)) - unlink (exclusive); + unlink (exclusive); } if (env) @@ -281,7 +281,7 @@ static bool svc_exec (const char *service, const char *arg1, const char *arg2) /* We need to disable our child signal handler now so we block until our script returns. */ signal (SIGCHLD, NULL); - + pid = fork(); if (pid == -1) @@ -291,32 +291,32 @@ static bool svc_exec (const char *service, const char *arg1, const char *arg2) mycmd = rc_xstrdup (service); myarg1 = rc_xstrdup (arg1); if (arg2) - myarg2 = rc_xstrdup (arg2); + myarg2 = rc_xstrdup (arg2); if (rc_exists (RC_SVCDIR "runscript.sh")) - { - execl (RC_SVCDIR "runscript.sh", mycmd, mycmd, myarg1, myarg2, - (char *) NULL); - eerrorx ("%s: exec `" RC_SVCDIR "runscript.sh': %s", - service, strerror (errno)); - } + { + execl (RC_SVCDIR "runscript.sh", mycmd, mycmd, myarg1, myarg2, + (char *) NULL); + eerrorx ("%s: exec `" RC_SVCDIR "runscript.sh': %s", + service, strerror (errno)); + } else - { - execl (RC_LIBDIR "sh/runscript.sh", mycmd, mycmd, myarg1, myarg2, - (char *) NULL); - eerrorx ("%s: exec `" RC_LIBDIR "sh/runscript.sh': %s", - service, strerror (errno)); - } + { + execl (RC_LIBDIR "sh/runscript.sh", mycmd, mycmd, myarg1, myarg2, + (char *) NULL); + eerrorx ("%s: exec `" RC_LIBDIR "sh/runscript.sh': %s", + service, strerror (errno)); + } } do { if (waitpid (pid, &status, 0) < 0) - { - if (errno != ECHILD) - eerror ("waitpid: %s", strerror (errno)); - break; - } + { + if (errno != ECHILD) + eerror ("waitpid: %s", strerror (errno)); + break; + } } while (! WIFEXITED (status) && ! WIFSIGNALED (status)); /* Done, so restore the signal handler */ @@ -383,7 +383,7 @@ static void make_exclusive (const char *service) if (mkfifo (exclusive, 0600) != 0 && errno != EEXIST && (errno != EACCES || geteuid () == 0)) eerrorx ("%s: unable to create fifo `%s': %s", - applet, exclusive, strerror (errno)); + applet, exclusive, strerror (errno)); path = rc_strcatpaths (RC_SVCDIR, "exclusive", applet, (char *) NULL); i = strlen (path) + 16; @@ -394,7 +394,7 @@ static void make_exclusive (const char *service) if (rc_exists (mtime_test) && unlink (mtime_test) != 0) { eerror ("%s: unlink `%s': %s", - applet, mtime_test, strerror (errno)); + applet, mtime_test, strerror (errno)); free (mtime_test); mtime_test = NULL; return; @@ -403,7 +403,7 @@ static void make_exclusive (const char *service) if (symlink (service, mtime_test) != 0) { eerror ("%s: symlink `%s' to `%s': %s", - applet, service, mtime_test, strerror (errno)); + applet, service, mtime_test, strerror (errno)); free (mtime_test); mtime_test = NULL; } @@ -451,7 +451,7 @@ static void svc_start (const char *service, bool deps) if (rc_is_env ("IN_HOTPLUG", "1") || in_background) { if (! rc_service_state (service, rc_service_inactive)) - exit (EXIT_FAILURE); + exit (EXIT_FAILURE); background = true; } @@ -472,7 +472,7 @@ static void svc_start (const char *service, bool deps) if (deps) { if (! deptree && ((deptree = rc_load_deptree ()) == NULL)) - eerrorx ("failed to load deptree"); + eerrorx ("failed to load deptree"); rc_strlist_free (types); types = rc_strlist_add (NULL, "broken"); @@ -481,16 +481,16 @@ static void svc_start (const char *service, bool deps) rc_strlist_free (services); services = rc_get_depends (deptree, types, svclist, softlevel, 0); if (services) - { - eerrorn ("ERROR: `%s' needs ", applet); - STRLIST_FOREACH (services, svc, i) - { - if (i > 0) - fprintf (stderr, ", "); - fprintf (stderr, "%s", svc); - } - exit (EXIT_FAILURE); - } + { + eerrorn ("ERROR: `%s' needs ", applet); + STRLIST_FOREACH (services, svc, i) + { + if (i > 0) + fprintf (stderr, ", "); + fprintf (stderr, "%s", svc); + } + exit (EXIT_FAILURE); + } rc_strlist_free (services); services = NULL; @@ -498,95 +498,95 @@ static void svc_start (const char *service, bool deps) types = rc_strlist_add (NULL, "ineed"); rc_strlist_free (need_services); need_services = rc_get_depends (deptree, types, svclist, - softlevel, depoptions); + softlevel, depoptions); types = rc_strlist_add (types, "iuse"); if (! rc_runlevel_starting ()) - { - services = rc_get_depends (deptree, types, svclist, - softlevel, depoptions); - STRLIST_FOREACH (services, svc, i) - if (rc_service_state (svc, rc_service_stopped)) - rc_start_service (svc); + { + services = rc_get_depends (deptree, types, svclist, + softlevel, depoptions); + STRLIST_FOREACH (services, svc, i) + if (rc_service_state (svc, rc_service_stopped)) + rc_start_service (svc); - rc_strlist_free (services); - } + rc_strlist_free (services); + } /* Now wait for them to start */ types = rc_strlist_add (types, "iafter"); services = rc_get_depends (deptree, types, svclist, - softlevel, depoptions); + softlevel, depoptions); /* We use tmplist to hold our scheduled by list */ rc_strlist_free (tmplist); tmplist = NULL; STRLIST_FOREACH (services, svc, i) - { - if (rc_service_state (svc, rc_service_started)) - continue; - if (! rc_wait_service (svc)) - eerror ("%s: timed out waiting for %s", applet, svc); - if (rc_service_state (svc, rc_service_started)) - continue; - - STRLIST_FOREACH (need_services, svc2, j) - if (strcmp (svc, svc2) == 0) - { - if (rc_service_state (svc, rc_service_inactive) || - rc_service_state (svc, rc_service_wasinactive)) - tmplist = rc_strlist_add (tmplist, svc); - else - eerrorx ("ERROR: cannot start %s as %s would not start", - applet, svc); - } - } + { + if (rc_service_state (svc, rc_service_started)) + continue; + if (! rc_wait_service (svc)) + eerror ("%s: timed out waiting for %s", applet, svc); + if (rc_service_state (svc, rc_service_started)) + continue; + + STRLIST_FOREACH (need_services, svc2, j) + if (strcmp (svc, svc2) == 0) + { + if (rc_service_state (svc, rc_service_inactive) || + rc_service_state (svc, rc_service_wasinactive)) + tmplist = rc_strlist_add (tmplist, svc); + else + eerrorx ("ERROR: cannot start %s as %s would not start", + applet, svc); + } + } if (tmplist) - { - int n = 0; - int len = 0; - char *p; - - /* Set the state now, then unlink our exclusive so that - our scheduled list is preserved */ - rc_mark_service (service, rc_service_stopped); - unlink_mtime_test (); - - rc_strlist_free (types); - types = rc_strlist_add (NULL, "iprovide"); - STRLIST_FOREACH (tmplist, svc, i) - { - rc_schedule_start_service (svc, service); - - rc_strlist_free (svclist); - svclist = rc_strlist_add (NULL, svc); - rc_strlist_free (providelist); - providelist = rc_get_depends (deptree, types, svclist, - softlevel, depoptions); - STRLIST_FOREACH (providelist, svc2, j) - rc_schedule_start_service (svc2, service); - - len += strlen (svc) + 2; - n++; - } - - len += 5; - tmp = rc_xmalloc (sizeof (char *) * len); - p = tmp; - STRLIST_FOREACH (tmplist, svc, i) - { - if (i > 1) - { - if (i == n - 1) - p += snprintf (p, len, " or "); - else - p += snprintf (p, len, ", "); - } - p += snprintf (p, len, "%s", svc); - } - ewarnx ("WARNING: %s is scheduled to start when %s has started", - applet, tmp); - } + { + int n = 0; + int len = 0; + char *p; + + /* Set the state now, then unlink our exclusive so that + our scheduled list is preserved */ + rc_mark_service (service, rc_service_stopped); + unlink_mtime_test (); + + rc_strlist_free (types); + types = rc_strlist_add (NULL, "iprovide"); + STRLIST_FOREACH (tmplist, svc, i) + { + rc_schedule_start_service (svc, service); + + rc_strlist_free (svclist); + svclist = rc_strlist_add (NULL, svc); + rc_strlist_free (providelist); + providelist = rc_get_depends (deptree, types, svclist, + softlevel, depoptions); + STRLIST_FOREACH (providelist, svc2, j) + rc_schedule_start_service (svc2, service); + + len += strlen (svc) + 2; + n++; + } + + len += 5; + tmp = rc_xmalloc (sizeof (char *) * len); + p = tmp; + STRLIST_FOREACH (tmplist, svc, i) + { + if (i > 1) + { + if (i == n - 1) + p += snprintf (p, len, " or "); + else + p += snprintf (p, len, ", "); + } + p += snprintf (p, len, "%s", svc); + } + ewarnx ("WARNING: %s is scheduled to start when %s has started", + applet, tmp); + } rc_strlist_free (services); services = NULL; @@ -607,17 +607,17 @@ static void svc_start (const char *service, bool deps) if (in_control ()) { if (! started) - { - if (rc_service_state (service, rc_service_wasinactive)) - rc_mark_service (service, rc_service_inactive); - else - { - rc_mark_service (service, rc_service_stopped); - if (rc_runlevel_starting ()) - rc_mark_service (service, rc_service_failed); - } - eerrorx ("ERROR: %s failed to start", applet); - } + { + if (rc_service_state (service, rc_service_wasinactive)) + rc_mark_service (service, rc_service_inactive); + else + { + rc_mark_service (service, rc_service_stopped); + if (rc_runlevel_starting ()) + rc_mark_service (service, rc_service_failed); + } + eerrorx ("ERROR: %s failed to start", applet); + } rc_mark_service (service, rc_service_started); unlink_mtime_test (); @@ -628,9 +628,9 @@ static void svc_start (const char *service, bool deps) else { if (rc_service_state (service, rc_service_inactive)) - ewarn ("WARNING: %s has started, but is inactive", applet); + ewarn ("WARNING: %s has started, but is inactive", applet); else - ewarn ("WARNING: %s not under our control, aborting", applet); + ewarn ("WARNING: %s not under our control, aborting", applet); } /* Now start any scheduled services */ @@ -656,7 +656,7 @@ static void svc_start (const char *service, bool deps) services = rc_services_scheduled (svc2); STRLIST_FOREACH (services, svc, i) if (rc_service_state (svc, rc_service_stopped)) - rc_start_service (svc); + rc_start_service (svc); } } @@ -683,20 +683,20 @@ static void svc_stop (const char *service, bool deps) make_exclusive (service); if (! rc_runlevel_stopping () && - rc_service_in_runlevel (service, RC_LEVEL_BOOT)) - ewarn ("WARNING: you are stopping a boot service"); + rc_service_in_runlevel (service, RC_LEVEL_BOOT)) + ewarn ("WARNING: you are stopping a boot service"); if (deps || ! rc_service_state (service, rc_service_wasinactive)) { int depoptions = RC_DEP_TRACE; char *svc; int i; - + if (rc_is_env ("RC_STRICT_DEPEND", "yes")) - depoptions |= RC_DEP_STRICT; + depoptions |= RC_DEP_STRICT; if (! deptree && ((deptree = rc_load_deptree ()) == NULL)) - eerrorx ("failed to load deptree"); + eerrorx ("failed to load deptree"); rc_strlist_free (types); types = rc_strlist_add (NULL, "needsme"); @@ -706,55 +706,55 @@ static void svc_stop (const char *service, bool deps) tmplist = NULL; rc_strlist_free (services); services = rc_get_depends (deptree, types, svclist, - softlevel, depoptions); + softlevel, depoptions); rc_strlist_reverse (services); STRLIST_FOREACH (services, svc, i) - { - if (rc_service_state (svc, rc_service_started) || - rc_service_state (svc, rc_service_inactive)) - { - rc_wait_service (svc); - if (rc_service_state (svc, rc_service_started) || - rc_service_state (svc, rc_service_inactive)) - { - rc_stop_service (svc); - tmplist = rc_strlist_add (tmplist, svc); - } - } - } + { + if (rc_service_state (svc, rc_service_started) || + rc_service_state (svc, rc_service_inactive)) + { + rc_wait_service (svc); + if (rc_service_state (svc, rc_service_started) || + rc_service_state (svc, rc_service_inactive)) + { + rc_stop_service (svc); + tmplist = rc_strlist_add (tmplist, svc); + } + } + } rc_strlist_free (services); services = NULL; STRLIST_FOREACH (tmplist, svc, i) - { - if (rc_service_state (svc, rc_service_stopped)) - continue; - - /* We used to loop 3 times here - maybe re-do this if needed */ - rc_wait_service (svc); - if (! rc_service_state (svc, rc_service_stopped)) - { - if (rc_runlevel_stopping ()) - rc_mark_service (svc, rc_service_failed); - eerrorx ("ERROR: cannot stop %s as %s is still up", - applet, svc); - } - } + { + if (rc_service_state (svc, rc_service_stopped)) + continue; + + /* We used to loop 3 times here - maybe re-do this if needed */ + rc_wait_service (svc); + if (! rc_service_state (svc, rc_service_stopped)) + { + if (rc_runlevel_stopping ()) + rc_mark_service (svc, rc_service_failed); + eerrorx ("ERROR: cannot stop %s as %s is still up", + applet, svc); + } + } rc_strlist_free (tmplist); tmplist = NULL; /* We now wait for other services that may use us and are stopping - This is important when a runlevel stops */ + This is important when a runlevel stops */ types = rc_strlist_add (types, "usesme"); types = rc_strlist_add (types, "ibefore"); services = rc_get_depends (deptree, types, svclist, - softlevel, depoptions); + softlevel, depoptions); STRLIST_FOREACH (services, svc, i) - { - if (rc_service_state (svc, rc_service_stopped)) - continue; - rc_wait_service (svc); - } + { + if (rc_service_state (svc, rc_service_stopped)) + continue; + rc_wait_service (svc); + } rc_strlist_free (services); services = NULL; @@ -776,9 +776,9 @@ static void svc_stop (const char *service, bool deps) if (! stopped) { if (rc_service_state (service, rc_service_wasinactive)) - rc_mark_service (service, rc_service_inactive); + rc_mark_service (service, rc_service_inactive); else - rc_mark_service (service, rc_service_started); + rc_mark_service (service, rc_service_started); eerrorx ("ERROR: %s failed to stop", applet); } @@ -797,7 +797,7 @@ static void svc_restart (const char *service, bool deps) char *svc; int i; bool inactive = false; - + /* This is hairly and a better way needs to be found I think! The issue is this - openvpn need net and dns. net can restart dns via resolvconf, so you could have openvpn trying to restart dnsmasq @@ -809,10 +809,10 @@ static void svc_restart (const char *service, bool deps) if (! deps) { if (rc_service_state (service, rc_service_started) || - rc_service_state (service, rc_service_inactive)) - svc_exec (service, "stop", "start"); + rc_service_state (service, rc_service_inactive)) + svc_exec (service, "stop", "start"); else - svc_exec (service, "start", NULL); + svc_exec (service, "start", NULL); return; } @@ -830,25 +830,25 @@ static void svc_restart (const char *service, bool deps) inactive = rc_service_state (service, rc_service_inactive); if (! inactive) inactive = rc_service_state (service, rc_service_wasinactive); - + if (inactive || rc_service_state (service, rc_service_starting) || rc_service_state (service, rc_service_started)) { STRLIST_FOREACH (restart_services, svc, i) - { - if (rc_service_state (svc, rc_service_stopped)) - { - if (inactive) - { - rc_schedule_start_service (service, svc); - ewarn ("WARNING: %s is scheduled to started when %s has started", - svc, basename (service)); - } - else - rc_start_service (svc); - } - } + { + if (rc_service_state (svc, rc_service_stopped)) + { + if (inactive) + { + rc_schedule_start_service (service, svc); + ewarn ("WARNING: %s is scheduled to started when %s has started", + svc, basename (service)); + } + else + rc_start_service (svc); + } + } } } @@ -870,7 +870,7 @@ int main (int argc, char **argv) { execl (RCSCRIPT_HELP, RCSCRIPT_HELP, service, (char *) NULL); eerrorx ("%s: failed to exec `" RCSCRIPT_HELP "': %s", - applet, strerror (errno)); + applet, strerror (errno)); } #ifdef __linux__ @@ -880,7 +880,7 @@ int main (int argc, char **argv) { eerror ("%s: cannot run until sysvinit completes", applet); if (mkdir ("/dev/.rcboot", 0755) != 0 && errno != EEXIST) - eerrorx ("%s: mkdir `/dev/.rcboot': %s", applet, strerror (errno)); + eerrorx ("%s: mkdir `/dev/.rcboot': %s", applet, strerror (errno)); tmp = rc_strcatpaths ("/dev/.rcboot", applet, (char *) NULL); symlink (service, tmp); exit (EXIT_FAILURE); @@ -890,40 +890,40 @@ int main (int argc, char **argv) if ((softlevel = getenv ("RC_SOFTLEVEL")) == NULL) { /* Ensure our environment is pure - Also, add our configuration to it */ + Also, add our configuration to it */ env = rc_filter_env (); env = rc_config_env (env); if (env) - { - char *p; + { + char *p; #ifdef __linux__ - /* clearenv isn't portable, but there's no harm in using it - if we have it */ - clearenv (); + /* clearenv isn't portable, but there's no harm in using it + if we have it */ + clearenv (); #else - char *var; - /* No clearenv present here then. - We could manipulate environ directly ourselves, but it seems that - some kernels bitch about this according to the environ man pages - so we walk though environ and call unsetenv for each value. */ - while (environ[0]) - { - tmp = rc_xstrdup (environ[0]); - p = tmp; - var = strsep (&p, "="); - unsetenv (var); - free (tmp); - } - tmp = NULL; + char *var; + /* No clearenv present here then. + We could manipulate environ directly ourselves, but it seems that + some kernels bitch about this according to the environ man pages + so we walk though environ and call unsetenv for each value. */ + while (environ[0]) + { + tmp = rc_xstrdup (environ[0]); + p = tmp; + var = strsep (&p, "="); + unsetenv (var); + free (tmp); + } + tmp = NULL; #endif - STRLIST_FOREACH (env, p, i) - putenv (p); + STRLIST_FOREACH (env, p, i) + putenv (p); - /* We don't free our list as that would be null in environ */ - } + /* We don't free our list as that would be null in environ */ + } softlevel = rc_get_runlevel (); @@ -969,44 +969,44 @@ int main (int argc, char **argv) for (i = 2; i < argc; i++) { if (strlen (argv[i]) < 2 || argv[i][0] != '-' || argv[i][1] != '-') - continue; + continue; if (strcmp (argv[i], "--debug") == 0) - setenv ("RC_DEBUG", "yes", 1); + setenv ("RC_DEBUG", "yes", 1); else if (strcmp (argv[i], "--help") == 0) - { - execl (RCSCRIPT_HELP, RCSCRIPT_HELP, service, (char *) NULL); - eerrorx ("%s: failed to exec `" RCSCRIPT_HELP "': %s", - applet, strerror (errno)); - } + { + execl (RCSCRIPT_HELP, RCSCRIPT_HELP, service, (char *) NULL); + eerrorx ("%s: failed to exec `" RCSCRIPT_HELP "': %s", + applet, strerror (errno)); + } else if (strcmp (argv[i],"--ifstarted") == 0) - ifstarted = true; + ifstarted = true; else if (strcmp (argv[i], "--nocolour") == 0 || - strcmp (argv[i], "--nocolor") == 0) - setenv ("RC_NOCOLOR", "yes", 1); + strcmp (argv[i], "--nocolor") == 0) + setenv ("RC_NOCOLOR", "yes", 1); else if (strcmp (argv[i], "--nodeps") == 0) - deps = false; + deps = false; else if (strcmp (argv[i], "--quiet") == 0) - setenv ("RC_QUIET", "yes", 1); + setenv ("RC_QUIET", "yes", 1); else if (strcmp (argv[i], "--verbose") == 0) - setenv ("RC_VERBOSE", "yes", 1); + setenv ("RC_VERBOSE", "yes", 1); else if (strcmp (argv[i], "--version") == 0) - printf ("version me\n"); + printf ("version me\n"); else - eerror ("%s: unknown option `%s'", applet, argv[i]); + eerror ("%s: unknown option `%s'", applet, argv[i]); } if (ifstarted && ! rc_service_state (applet, rc_service_started)) { if (! rc_is_env("RC_QUIET", "yes")) - eerror ("ERROR: %s is not started", applet); + eerror ("ERROR: %s is not started", applet); exit (EXIT_FAILURE); } if (rc_is_env ("IN_HOTPLUG", "1")) { if (! rc_is_env ("RC_HOTPLUG", "yes") || ! rc_allow_plug (applet)) - eerrorx ("%s: not allowed to be hotplugged", applet); + eerrorx ("%s: not allowed to be hotplugged", applet); } /* Setup a signal handler */ @@ -1025,71 +1025,71 @@ int main (int argc, char **argv) { /* Abort on a sighup here */ if (sighup) - exit (EXIT_FAILURE); + exit (EXIT_FAILURE); if (strlen (argv[i]) < 2 || - (argv[i][0] == '-' && argv[i][1] == '-')) - continue; + (argv[i][0] == '-' && argv[i][1] == '-')) + continue; /* Export the command we're running. - This is important as we stamp on the restart function now but - some start/stop routines still need to behave differently if - restarting. */ + This is important as we stamp on the restart function now but + some start/stop routines still need to behave differently if + restarting. */ unsetenv ("RC_CMD"); setenv ("RC_CMD", argv[i], 1); - + doneone = true; if (strcmp (argv[i], "conditionalrestart") == 0 || - strcmp (argv[i], "condrestart") == 0) - { - if (rc_service_state (service, rc_service_started)) - svc_restart (service, deps); - } + strcmp (argv[i], "condrestart") == 0) + { + if (rc_service_state (service, rc_service_started)) + svc_restart (service, deps); + } else if (strcmp (argv[i], "restart") == 0) - svc_restart (service, deps); + svc_restart (service, deps); else if (strcmp (argv[i], "start") == 0) - svc_start (service, deps); + svc_start (service, deps); else if (strcmp (argv[i], "status") == 0) - { - rc_service_state_t r = svc_status (service); - retval = (int) r; - } + { + rc_service_state_t r = svc_status (service); + retval = (int) r; + } else if (strcmp (argv[i], "stop") == 0) - { - if (in_background) - get_started_services (); - - svc_stop (service, deps); - - if (! in_background && - ! rc_runlevel_stopping () && - rc_service_state (service, rc_service_stopped)) - uncoldplug (applet); - - if (in_background && - rc_service_state (service, rc_service_inactive)) - { - char *svc; - int j; - STRLIST_FOREACH (restart_services, svc, j) - if (rc_service_state (svc, rc_service_stopped)) - rc_schedule_start_service (service, svc); - } - } + { + if (in_background) + get_started_services (); + + svc_stop (service, deps); + + if (! in_background && + ! rc_runlevel_stopping () && + rc_service_state (service, rc_service_stopped)) + uncoldplug (applet); + + if (in_background && + rc_service_state (service, rc_service_inactive)) + { + char *svc; + int j; + STRLIST_FOREACH (restart_services, svc, j) + if (rc_service_state (svc, rc_service_stopped)) + rc_schedule_start_service (service, svc); + } + } else if (strcmp (argv[i], "zap") == 0) - { - einfo ("Manually resetting %s to stopped state", applet); - rc_mark_service (applet, rc_service_stopped); - uncoldplug (applet); - } + { + einfo ("Manually resetting %s to stopped state", applet); + rc_mark_service (applet, rc_service_stopped); + uncoldplug (applet); + } else if (strcmp (argv[i], "help") == 0) - { - execl (RCSCRIPT_HELP, RCSCRIPT_HELP, service, "help", (char *) NULL); - eerrorx ("%s: failed to exec `" RCSCRIPT_HELP "': %s", - applet, strerror (errno)); - } + { + execl (RCSCRIPT_HELP, RCSCRIPT_HELP, service, "help", (char *) NULL); + eerrorx ("%s: failed to exec `" RCSCRIPT_HELP "': %s", + applet, strerror (errno)); + } else - svc_exec (service, argv[i], NULL); + svc_exec (service, argv[i], NULL); /* Flush our buffered output if any */ eflush (); @@ -1103,7 +1103,7 @@ int main (int argc, char **argv) { execl (RCSCRIPT_HELP, RCSCRIPT_HELP, service, (char *) NULL); eerrorx ("%s: failed to exec `" RCSCRIPT_HELP "': %s", - applet, strerror (errno)); + applet, strerror (errno)); } return (retval); |