diff options
-rw-r--r-- | Makefile | 2 | ||||
-rwxr-xr-x | sh/rc-functions.sh | 6 | ||||
-rw-r--r-- | src/Makefile | 39 | ||||
-rw-r--r-- | src/start-stop-daemon.c | 50 |
4 files changed, 61 insertions, 36 deletions
@@ -56,6 +56,8 @@ install:: if test $(LIB) != "lib" ; then \ sed -i'.bak' -e 's,/lib/,/$(LIB)/,g' $(DESTDIR)/$(RC_LIB)/sh/functions.sh || exit $$? ; \ rm -f $(DESTDIR)/$(RC_LIB)/sh/functions.sh.bak ; \ + sed -i'.bak' -e 's,/lib/,/$(LIB)/,g' $(DESTDIR)/$(RC_LIB)/sh/rc-functions.sh || exit $$? ; \ + rm -f $(DESTDIR)/$(RC_LIB)/sh/rc-functions.sh.bak ; \ fi layout: diff --git a/sh/rc-functions.sh b/sh/rc-functions.sh index 79f479fc..0e149432 100755 --- a/sh/rc-functions.sh +++ b/sh/rc-functions.sh @@ -59,4 +59,10 @@ get_bootparam() { return 1 } +# Add our sbin to $PATH +case "${PATH}" in + /lib/rc/sbin|/lib/rc/sbin:*) ;; + *) export PATH="/lib/rc/sbin:${PATH}" ;; +esac + # vim: set ts=4 : diff --git a/src/Makefile b/src/Makefile index fd79b187..288e43d8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -65,22 +65,23 @@ LIB_TARGETS = $(LIBEINFOSO) $(LIBRCSO) SBIN_TARGETS = rc SYS_WHITELIST = env_whitelist -TARGET = $(LIB_TARGETS) $(BIN_TARGETS) $(SBIN_TARGETS) $(PRIV_BIN_TARGETS) - -RCLINKS = einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \ - eindent eoutdent esyslog eval_ecolors \ - veinfo vewarn vebegin veend vewend veindent veoutdent \ - service_starting service_inactive service_started \ - service_stopping service_stopped \ - service_inactive service_wasinactive \ - service_coldplugged \ - mark_service_starting mark_service_inactive mark_service_started \ - mark_service_stopping mark_service_stopped \ - mark_service_inactive mark_service_wasinactive \ - mark_service_coldplugged \ - get_options save_options rc-abort rc-depend \ - is_runlevel_start is_runlevel_stop service_started_daemon \ - checkown fstabinfo mountinfo +TARGET = $(LIB_TARGETS) $(BIN_TARGETS) $(SBIN_TARGETS) + +RC_BINLINKS = einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \ + eindent eoutdent esyslog eval_ecolors \ + veinfo vewarn vebegin veend vewend veindent veoutdent \ + service_starting service_inactive service_started \ + service_stopping service_stopped \ + service_inactive service_wasinactive \ + service_coldplugged \ + is_runlevel_start is_runlevel_stop service_started_daemon \ + checkown fstabinfo mountinfo rc-depend +RC_SBINLINKS = mark_service_starting mark_service_inactive \ + mark_service_started \ + mark_service_stopping mark_service_stopped \ + mark_service_inactive mark_service_wasinactive \ + mark_service_coldplugged \ + get_options save_options rc-abort BINLINKS = rc-status SBINLINKS = env-update rc-update runscript start-stop-daemon @@ -122,7 +123,7 @@ rc: $(LIBEINFOSO) $(LIBRCSO) $(RCOBJS) $(CC) $(LDFLAGS) -o rc $(RCOBJS) $(LDLIBS) $(LDLIBS_RC) links: rc - for x in $(BINLINKS) $(SBINLINKS) $(RCLINKS) $(RCPRIVLINKS); do ln -sf rc $$x; done + for x in $(BINLINKS) $(SBINLINKS) $(RC_BINLINKS) $(RC_SBINLINKS); do ln -sf rc $$x; done install: $(TARGET) install -m 0755 -d $(DESTDIR)/$(LIB) @@ -138,9 +139,11 @@ install: $(TARGET) install -m 0755 -d $(DESTDIR)/$(RC_LIB)/conf.d install -m 0644 $(SYS_WHITELIST) $(DESTDIR)/$(RC_LIB)/conf.d install -m 0755 -d $(DESTDIR)/$(RC_LIB)/bin + install -m 0755 -d $(DESTDIR)/$(RC_LIB)/sbin for x in $(BINLINKS); do ln -sf ../sbin/rc $(DESTDIR)/bin/$$x; done for x in $(SBINLINKS); do ln -sf rc $(DESTDIR)/sbin/$$x; done - for x in $(RCLINKS); do ln -sf ../../../sbin/rc $(DESTDIR)/$(RC_LIB)/bin/$$x; done + for x in $(RC_BINLINKS); do ln -sf ../../../sbin/rc $(DESTDIR)/$(RC_LIB)/bin/$$x; done + for x in $(RC_SBINLINKS); do ln -sf ../../../sbin/rc $(DESTDIR)/$(RC_LIB)/sbin/$$x; done if test "$(PAM)" = "pam" ; then \ install -m 0755 -d $(DESTDIR)/etc/pam.d ; \ install -m 0644 start-stop-daemon.pam $(DESTDIR)/etc/pam.d/start-stop-daemon ; \ diff --git a/src/start-stop-daemon.c b/src/start-stop-daemon.c index 8b419959..a234653e 100644 --- a/src/start-stop-daemon.c +++ b/src/start-stop-daemon.c @@ -860,24 +860,38 @@ int start_stop_daemon (int argc, char **argv) #endif /* Clean the environment of any RC_ variables */ - STRLIST_FOREACH (environ, env, i) - if (env && strncmp (env, "RC_", 3) != 0) { - /* For the path r, remove the rcscript bin dir from it */ - if (strncmp (env, "PATH=" RC_LIBDIR "/bin:", - strlen ("PATH=" RC_LIBDIR "/bin:")) == 0) - { - char *path = env; - char *newpath; - int len; - path += strlen ("PATH=" RC_LIBDIR "/bin:"); - len = sizeof (char *) * strlen (path) + 6; - newpath = rc_xmalloc (len); - snprintf (newpath, len, "PATH=%s", path); - rc_strlist_add (&newenv, newpath); - free (newpath); - } else - rc_strlist_add (&newenv, env); - } + STRLIST_FOREACH (environ, env, i) { + if (strncmp (env, "RC_", 3) == 0 || + strncmp (env, "SSD_NICELEVEL=", strlen ("SSD_NICELEVEL=")) == 0) + continue; + + /* For the path, remove the rcscript bin dir from it */ + if (strncmp (env, "PATH=", 5) == 0) { + char *path = rc_xstrdup (env); + char *newpath = NULL; + char *p = path; + char *token; + + p += 5; + while ((token = strsep (&p, ":"))) { + if (strcmp (token, RC_LIBDIR "/bin") == 0 || + strcmp (token, RC_LIBDIR "/sbin") == 0) + continue; + + if (newpath) + asprintf (&newpath, "%s:%s", newpath, token); + else + asprintf (&newpath, "PATH=%s", token); + } + rc_strlist_add (&newenv, newpath); + free (path); + free (newpath); + } else + rc_strlist_add (&newenv, env); + } + + STRLIST_FOREACH (newenv, env, i) + einfo ("env %s", env); umask (022); |