diff options
author | Alexander Vershilov <alexander.vershilov@gmail.com> | 2014-10-19 19:41:36 -0500 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2014-10-20 15:44:19 -0500 |
commit | f9acd65497c6e561fbf5420386a99d681fede859 (patch) | |
tree | d96a41bb114aee51db9f40c5bdf43a8f81347c87 | |
parent | 8c7ea4e9e8da500877a514402bbe90aababda2d6 (diff) |
librc:look for the pid file in a chroot if defined
X-Gentoo-Bug: 524388
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=524388
-rw-r--r-- | src/librc/librc-daemon.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/librc/librc-daemon.c b/src/librc/librc-daemon.c index 8793075d..04f25b1c 100644 --- a/src/librc/librc-daemon.c +++ b/src/librc/librc-daemon.c @@ -553,16 +553,28 @@ rc_service_daemons_crashed(const char *service) } fclose(fp); + char *ch_root = rc_service_value_get(basename_c(service), "chroot"); + char *spidfile = pidfile; + if (ch_root) { + spidfile = malloc(strlen(ch_root) + strlen(pidfile)); + strcpy(spidfile, ch_root); + strcat(spidfile, pidfile); + } + pid = 0; - if (pidfile) { + if (spidfile) { retval = true; - if ((fp = fopen(pidfile, "r"))) { + if ((fp = fopen(spidfile, "r"))) { if (fscanf(fp, "%d", &pid) == 1) retval = false; fclose(fp); } - free(pidfile); - pidfile = NULL; + free(spidfile); + spidfile = NULL; + if (ch_root) { + free(pidfile); + pidfile = NULL; + } /* We have the pid, so no need to match on exec or name */ |