From 0c8bea21524c22856fdb8528298b43d6fb20451d Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Wed, 27 Jul 2011 11:02:23 -0500 Subject: 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 --- src/rc/runscript.c | 38 ++------------------------------------ 1 file changed, 2 insertions(+), 36 deletions(-) (limited to 'src') 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) -- cgit v1.2.3