[cronie/f19] Some jobs are not executed because not all environment variables are set. rhbz#995590

Marcela Mašláňová mmaslano at fedoraproject.org
Wed Sep 25 11:57:07 UTC 2013


commit 76452d39b8757bcbf1b0ee7f5c319014338afef6
Author: Marcela Mašláňová <mmaslano at redhat.com>
Date:   Wed Sep 25 13:51:35 2013 +0200

    Some jobs are not executed because not all environment variables are set. rhbz#995590

 correct-env.patch |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 cronie.spec       |    4 ++-
 2 files changed, 59 insertions(+), 1 deletions(-)
---
diff --git a/correct-env.patch b/correct-env.patch
new file mode 100644
index 0000000..4f33457
--- /dev/null
+++ b/correct-env.patch
@@ -0,0 +1,56 @@
+diff -up cronie-1.4.11/src/security.c.old cronie-1.4.11/src/security.c
+--- cronie-1.4.11/src/security.c.old	2013-07-18 14:27:08.000000000 +0200
++++ cronie-1.4.11/src/security.c	2013-09-25 12:29:19.467145843 +0200
+@@ -129,15 +129,13 @@ int cron_set_job_security_context(entry
+ 	}
+ #endif
+ 
+-	*jobenv = build_env(e->envp);
+-
+ #ifdef WITH_SELINUX
+ 	/* we must get the crontab context BEFORE changing user, else
+ 	 * we'll not be permitted to read the cron spool directory :-)
+ 	 */
+ 	security_context_t ucontext = 0;
+ 
+-	if (cron_get_job_range(u, &ucontext, *jobenv) < OK) {
++	if (cron_get_job_range(u, &ucontext, e->envp) < OK) {
+ 		log_it(e->pwd->pw_name, getpid(), "ERROR",
+ 			"failed to get SELinux context", 0);
+ 		return -1;
+@@ -165,6 +163,8 @@ int cron_set_job_security_context(entry
+ 		return -1;
+ 	}
+ 
++	*jobenv = build_env(e->envp);
++
+ 	time_t job_run_time = time(0L);
+ 
+ 	if ((minutely_time > 0) && ((job_run_time / 60) != (minutely_time / 60))) {
+@@ -615,16 +615,23 @@ int crontab_security_access(void) {
+ */
+ static char **build_env(char **cronenv) {
+ #ifdef WITH_PAM
+-	char **jobenv;
+-	char **pamenv = pam_getenvlist(pamh);
++	char **jobenv = pam_getenvlist(pamh);
+ 	char *cronvar;
+ 	int count = 0;
+-	jobenv = env_copy(pamenv);
+ 
+ 	/* Now add the cron environment variables. Since env_set()
+ 	 * overwrites existing variables, this will let cron's
+ 	 * environment settings override pam's */
+ 
++	if (jobenv == NULL) {
++		jobenv = env_init();
++		if (jobenv == NULL) {
++			log_it("CRON", getpid(),
++				"ERROR", "Initialization of cron environment variables failed", 0);
++			return NULL;
++		}
++	}
++
+ 	while ((cronvar = cronenv[count++])) {
+ 		if (!(jobenv = env_set(jobenv, cronvar))) {
+ 			log_it("CRON", getpid(),
diff --git a/cronie.spec b/cronie.spec
index 5194d16..dd0ac0e 100644
--- a/cronie.spec
+++ b/cronie.spec
@@ -6,7 +6,7 @@
 Summary:   Cron daemon for executing programs at set times
 Name:      cronie
 Version:   1.4.10
-Release:   5%{?dist}
+Release:   6%{?dist}
 License:   MIT and BSD and ISC and GPLv2
 Group:     System Environment/Base
 URL:       https://fedorahosted.org/cronie
@@ -14,6 +14,7 @@ Source0:   https://fedorahosted.org/releases/c/r/cronie/%{name}-%{version}.tar.g
 Patch1:    cronie-1.4.10-use-setenv.patch
 Patch2:    cronie-1.4.10-copy-env.patch
 Patch3:    cronie-1.4.10-random-delay.patch
+Patch4:    correct-env.patch
 
 Requires:  dailyjobs
 
@@ -88,6 +89,7 @@ is not used as the system init process.
 %patch1 -p1 -b .setenv
 %patch2 -p1 -b .copy-env
 %patch3 -p1 -b .random-delay
+%patch4 -p1 -b .env
 
 %build
 %configure \


More information about the scm-commits mailing list