aboutsummaryrefslogtreecommitdiff
path: root/src/rc/runscript.c
diff options
context:
space:
mode:
authorWilliam Hubbs <williamh@gentoo.org>2011-07-27 11:02:23 -0500
committerWilliam Hubbs <williamh@gentoo.org>2011-07-31 10:00:48 -0500
commit0c8bea21524c22856fdb8528298b43d6fb20451d (patch)
tree244f29d5dc4e034dae2f7f4860182ae3df2f4574 /src/rc/runscript.c
parent3688c851636c9458eb88c7469bb374e5f6d0f9de (diff)
Improve processing of service directories and conf.d files
symbolic links should not be followed in an attempt to work out the name of the service we are running. Also, @sysconfdir@/conf.d should be tried as a backup directory for configuration files. I would like to thank Robin Johnson for his input on this change. X-Gentoo-Bug: 350910 X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=350910
Diffstat (limited to 'src/rc/runscript.c')
-rw-r--r--src/rc/runscript.c38
1 files changed, 2 insertions, 36 deletions
diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index 02d9e7ea..8278f5b3 100644
--- a/src/rc/runscript.c
+++ b/src/rc/runscript.c
@@ -1100,8 +1100,7 @@ runscript(int argc, char **argv)
bool doneone = false;
int retval, opt, depoptions = RC_DEP_TRACE;
RC_STRING *svc;
- char path[PATH_MAX], lnk[PATH_MAX];
- char *dir, *save = NULL, *saveLnk = NULL;
+ char *save = NULL;
char pidstr[10];
size_t l = 0, ll;
const char *file;
@@ -1121,40 +1120,7 @@ runscript(int argc, char **argv)
atexit(cleanup);
- /* We need to work out the real full path to our service.
- * This works fine, provided that we ONLY allow multiplexed services
- * to exist in the same directory as the master link.
- * Also, the master link as to be a real file in the init dir. */
- if (!realpath(argv[1], path)) {
- fprintf(stderr, "realpath: %s\n", strerror(errno));
- exit(EXIT_FAILURE);
- }
- memset(lnk, 0, sizeof(lnk));
- if (readlink(argv[1], lnk, sizeof(lnk)-1)) {
- dir = dirname(path);
- if (strchr(lnk, '/')) {
- save = xstrdup(dir);
- saveLnk = xstrdup(lnk);
- dir = dirname(saveLnk);
- if (strcmp(dir, save) == 0)
- file = basename_c(argv[1]);
- else
- file = basename_c(lnk);
- dir = save;
- } else
- file = basename_c(argv[1]);
- ll = strlen(dir) + strlen(file) + 2;
- service = xmalloc(ll);
- snprintf(service, ll, "%s/%s", dir, file);
- if (stat(service, &stbuf) != 0) {
- free(service);
- service = xstrdup(lnk);
- }
- free(save);
- free(saveLnk);
- }
- if (!service)
- service = xstrdup(path);
+ service = xstrdup(argv[1]);
applet = basename_c(service);
if (argc < 3)