SummaryRefsLogTreeCommitDiffStats
diff options
context:
space:
mode:
-rwxr-xr-xMakefile.am19
-rw-r--r--configure.ac8
-rw-r--r--src/crontab-access-real.in (renamed from src/crontab-access.in)0
-rw-r--r--src/crontab-access.c.in10
4 files changed, 34 insertions, 3 deletions
diff --git a/Makefile.am b/Makefile.am
index 4aff2ae..2a87d72 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -26,11 +26,18 @@ noinst_SCRIPTS =
if MULTI_USER
bin_SCRIPTS += bin/crontab
-sbin_SCRIPTS = bin/cron bin/crontab-access
+sbin_SCRIPTS = bin/cron
+libexec_SCRIPTS = bin/crontab-access-real
+sbin_PROGRAMS = bin/crontab-access
else
-noinst_SCRIPTS += bin/cron bin/crontab bin/crontab-access
+noinst_SCRIPTS += bin/cron bin/crontab bin/crontab-access-real
+noinst_PROGRAMS = bin/crontab-access
endif
+# The dynamic linker should detect that it's being run for a setuid program,
+# but we take no chances.
+bin_crontab_access_LDFLAGS = -static
+
# wrapper to be used in the build environment and for running tests.
noinst_SCRIPTS += pre-inst-env
@@ -81,6 +88,8 @@ compiled_modules = \
CLEANFILES = $(compiled_modules) \
bin/crontab \
bin/crontab-access \
+ src/crontab-access.c \
+ bin/crontab-access-real \
bin/cron \
bin/mcron
DISTCLEANFILES = src/mcron/config.scm
@@ -123,6 +132,9 @@ do_subst = sed -e 's,%PREFIX%,${prefix},g' \
src/mcron/config.scm: src/mcron/config.scm.in Makefile
$(AM_V_GEN)$(do_subst) $< > $@
+src/crontab-access.c: src/crontab-access.c.in Makefile
+ $(AM_V_GEN)$(do_subst) $< > $@
+
bin/% : src/%.in Makefile
$(AM_V_GEN)$(MKDIR_P) bin ; \
$(do_subst) $< > $@ ; \
@@ -163,7 +175,8 @@ EXTRA_DIST = \
HACKING \
src/cron.in \
src/crontab.in \
- src/crontab-access.in \
+ src/crontab-access-real.in \
+ src/crontab-access.c.in \
src/mcron.in \
tests/init.sh \
$(TESTS)
diff --git a/configure.ac b/configure.ac
index 7ea532f..b79e3c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -65,6 +65,14 @@ AC_ARG_ENABLE([multi-user],
[Don't Install legacy cron and crontab programs])],
[enable_multi_user="$enableval"],
[enable_multi_user="yes"])
+
+dnl Not possible to run this conditionally?
+AC_PROG_CC
+dnl AS_IF([test "x$enable_multi_user" = xyes],
+dnl [# Need a C compiler to compile setuid wrapper
+dnl AC_PROG_CC]
+dnl fi
+
AM_CONDITIONAL([MULTI_USER], [test "x$enable_multi_user" = xyes])
# Configure the various files that mcron uses at runtime.
diff --git a/src/crontab-access.in b/src/crontab-access-real.in
index 569d147..569d147 100644
--- a/src/crontab-access.in
+++ b/src/crontab-access-real.in
diff --git a/src/crontab-access.c.in b/src/crontab-access.c.in
new file mode 100644
index 0000000..652b9cc
--- /dev/null
+++ b/src/crontab-access.c.in
@@ -0,0 +1,10 @@
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+ char *envp = NULL;
+ execve("%libexecdir%/crontab-access-real",
+ argv, &envp);
+ /* Should not get here! */
+ return 1;
+}