summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rwxr-xr-xsh/rc-functions.sh6
-rw-r--r--src/Makefile39
-rw-r--r--src/start-stop-daemon.c50
4 files changed, 61 insertions, 36 deletions
diff --git a/Makefile b/Makefile
index fce9a7c..772501e 100644
--- a/Makefile
+++ b/Makefile
@@ -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 79f479f..0e14943 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 fd79b18..288e43d 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 8b41995..a234653 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);