summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenedikt Boehm <hollow@gentoo.org>2009-04-18 10:40:18 +0000
committerBenedikt Boehm <hollow@gentoo.org>2009-04-18 10:40:18 +0000
commit89b1ce022531b8053cfcb7f78fe1f51549d638ff (patch)
treefc4f5aae48107fc6ea47ad3533cfbfa9f06ba30b /sys-apps/openrc/files
parentNew virtual for Compress-Raw-Bzip2 (diff)
downloadgentoo-2-89b1ce022531b8053cfcb7f78fe1f51549d638ff.tar.gz
gentoo-2-89b1ce022531b8053cfcb7f78fe1f51549d638ff.tar.bz2
gentoo-2-89b1ce022531b8053cfcb7f78fe1f51549d638ff.zip
backport r1520 to support custom status function and return 32 if service has crashed. fixes #215355
(Portage version: 2.2_rc28/cvs/Linux i686)
Diffstat (limited to 'sys-apps/openrc/files')
-rw-r--r--sys-apps/openrc/files/0.4.3/0001-fix-is_older_than.patch (renamed from sys-apps/openrc/files/openrc-0.4.3-fix-is_older_than.patch)0
-rw-r--r--sys-apps/openrc/files/0.4.3/0002-support-custom-status.patch142
2 files changed, 142 insertions, 0 deletions
diff --git a/sys-apps/openrc/files/openrc-0.4.3-fix-is_older_than.patch b/sys-apps/openrc/files/0.4.3/0001-fix-is_older_than.patch
index 263e06a000c4..263e06a000c4 100644
--- a/sys-apps/openrc/files/openrc-0.4.3-fix-is_older_than.patch
+++ b/sys-apps/openrc/files/0.4.3/0001-fix-is_older_than.patch
diff --git a/sys-apps/openrc/files/0.4.3/0002-support-custom-status.patch b/sys-apps/openrc/files/0.4.3/0002-support-custom-status.patch
new file mode 100644
index 000000000000..97b27bf5f2b9
--- /dev/null
+++ b/sys-apps/openrc/files/0.4.3/0002-support-custom-status.patch
@@ -0,0 +1,142 @@
+Index: openrc-0.4.3/sh/runscript.sh.in
+===================================================================
+--- openrc-0.4.3.orig/sh/runscript.sh.in
++++ openrc-0.4.3/sh/runscript.sh.in
+@@ -45,6 +45,31 @@ describe()
+ done
+ }
+
++# Report status
++status()
++{
++ if service_stopping; then
++ ewarn "status: stopping"
++ return 4
++ elif service_starting; then
++ ewarn "status: starting"
++ return 8
++ elif service_inactive; then
++ ewarn "status: inactive"
++ return 16
++ elif service_started; then
++ if service_crashed; then
++ eerror "status: crashed"
++ return 32
++ fi
++ einfo "status: started"
++ return 0
++ else
++ einfo "status: stopped"
++ return 1
++ fi
++}
++
+ # Template start / stop functions
+ start()
+ {
+@@ -134,7 +159,7 @@ unset _f
+
+ while [ -n "$1" ]; do
+ # See if we have the required function and run it
+- for _cmd in describe start stop ${extra_commands:-${opts}} \
++ for _cmd in describe start stop status ${extra_commands:-${opts}} \
+ ${extra_started_commands}; do
+ if [ "${_cmd}" = "$1" ]; then
+ if [ "$(command -v "$1")" = "$1" ]; then
+Index: openrc-0.4.3/src/rc/Makefile
+===================================================================
+--- openrc-0.4.3.orig/src/rc/Makefile
++++ openrc-0.4.3/src/rc/Makefile
+@@ -18,7 +18,7 @@ RC_BINLINKS= einfon einfo ewarnn ewarn e
+ service_starting service_started \
+ service_stopping service_stopped \
+ service_inactive service_wasinactive \
+- service_hotplugged service_started_daemon \
++ service_hotplugged service_started_daemon service_crashed \
+ checkpath fstabinfo mountinfo rc-depend \
+ service_get_value service_set_value get_options save_options \
+ shell_var is_newer_than is_older_than
+Index: openrc-0.4.3/src/rc/rc-applets.c
+===================================================================
+--- openrc-0.4.3.orig/src/rc/rc-applets.c
++++ openrc-0.4.3/src/rc/rc-applets.c
+@@ -295,6 +295,10 @@ static int do_service(int argc, char **a
+ }
+ ok = rc_service_started_daemon(service, exec, NULL, idx);
+
++ } else if (strcmp(applet, "service_crashed") == 0) {
++ ok = (_rc_can_find_pids() &&
++ rc_service_daemons_crashed(service) &&
++ errno != EACCES);
+ } else
+ eerrorx("%s: unknown applet", applet);
+
+Index: openrc-0.4.3/src/rc/runscript.c
+===================================================================
+--- openrc-0.4.3.orig/src/rc/runscript.c
++++ openrc-0.4.3/src/rc/runscript.c
+@@ -412,11 +412,10 @@ write_prefix(const char *buffer, size_t
+ return ret;
+ }
+
+-static bool
++static int
+ svc_exec(const char *arg1, const char *arg2)
+ {
+- bool execok;
+- int fdout = fileno(stdout);
++ int ret, fdout = fileno(stdout);
+ struct termios tt;
+ struct winsize ws;
+ int i;
+@@ -527,13 +526,13 @@ svc_exec(const char *arg1, const char *a
+ master_tty = -1;
+ }
+
+- execok = rc_waitpid(service_pid) == 0 ? true : false;
+- if (!execok && errno == ECHILD)
++ ret = WEXITSTATUS(rc_waitpid(service_pid));
++ if (ret != 0 && errno == ECHILD)
+ /* killall5 -9 could cause this */
+- execok = true;
++ ret = 0;
+ service_pid = 0;
+
+- return execok;
++ return ret;
+ }
+
+ static bool
+@@ -881,7 +880,7 @@ svc_start(bool deps)
+ setenv("IN_BACKGROUND", ibsave, 1);
+ hook_out = RC_HOOK_SERVICE_START_DONE;
+ rc_plugin_run(RC_HOOK_SERVICE_START_NOW, applet);
+- started = svc_exec("start", NULL);
++ started = (svc_exec("start", NULL) == 0);
+ if (ibsave)
+ unsetenv("IN_BACKGROUND");
+
+@@ -1058,7 +1057,7 @@ svc_stop(bool deps)
+ setenv("IN_BACKGROUND", ibsave, 1);
+ hook_out = RC_HOOK_SERVICE_STOP_DONE;
+ rc_plugin_run(RC_HOOK_SERVICE_STOP_NOW, applet);
+- stopped = svc_exec("stop", NULL);
++ stopped = (svc_exec("stop", NULL) == 0);
+ if (ibsave)
+ unsetenv("IN_BACKGROUND");
+
+@@ -1383,10 +1382,10 @@ runscript(int argc, char **argv)
+ rc_stringlist_free(services);
+ services = NULL;
+ } else if (strcmp (optarg, "status") == 0) {
+- RC_SERVICE r = svc_status();
+- retval = (int) r;
+- if (retval & RC_SERVICE_STARTED)
+- retval = 0;
++ save = prefix;
++ eprefix(NULL);
++ prefix = NULL;
++ retval = svc_exec("status", NULL);
+ } else {
+ if (strcmp(optarg, "conditionalrestart") == 0 ||
+ strcmp(optarg, "condrestart") == 0)