cronie package update
Signed-off-by: basebuilder_pel7x64builder0 <basebuilder@powerel.org>master
parent
9a9e7ddc77
commit
7040af9a48
|
|
@ -0,0 +1,90 @@
|
|||
diff -up cronie-1.4.11/anacron/runjob.c.mailto cronie-1.4.11/anacron/runjob.c
|
||||
--- cronie-1.4.11/anacron/runjob.c.mailto 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/anacron/runjob.c 2017-03-07 14:00:06.968348389 +0100
|
||||
@@ -88,10 +88,18 @@ static char *
|
||||
username(void)
|
||||
{
|
||||
struct passwd *ps;
|
||||
+ static char *user;
|
||||
+
|
||||
+ if (user)
|
||||
+ return user;
|
||||
|
||||
ps = getpwuid(geteuid());
|
||||
- if (ps == NULL) die_e("getpwuid() error");
|
||||
- return ps->pw_name;
|
||||
+ if (ps == NULL || ps->pw_name == NULL) die_e("getpwuid() error");
|
||||
+
|
||||
+ user = strdup(ps->pw_name);
|
||||
+ if (user == NULL) die_e("memory allocation error");
|
||||
+
|
||||
+ return user;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -167,6 +175,12 @@ launch_mailer(job_rec *jr)
|
||||
pid_t pid;
|
||||
struct stat buf;
|
||||
|
||||
+ if (jr->mailto == NULL)
|
||||
+ {
|
||||
+ explain("Empty MAILTO set, not mailing output");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* Check that we have a way of sending mail. */
|
||||
if(stat(SENDMAIL, &buf))
|
||||
{
|
||||
@@ -245,14 +259,12 @@ launch_job(job_rec *jr)
|
||||
}
|
||||
|
||||
setup_env(jr);
|
||||
-
|
||||
+
|
||||
/* Get the destination email address if set, or current user otherwise */
|
||||
mailto = getenv("MAILTO");
|
||||
|
||||
- if (mailto)
|
||||
- jr->mailto = mailto;
|
||||
- else
|
||||
- jr->mailto = username ();
|
||||
+ if (mailto == NULL)
|
||||
+ mailto = username();
|
||||
|
||||
/* create temporary file for stdout and stderr of the job */
|
||||
temp_file(jr); fd = jr->output_fd;
|
||||
@@ -262,11 +274,7 @@ launch_job(job_rec *jr)
|
||||
xwrite(fd, username());
|
||||
xwrite(fd, ">\n");
|
||||
xwrite(fd, "To: ");
|
||||
- if (mailto) {
|
||||
- xwrite(fd, mailto);
|
||||
- } else {
|
||||
- xwrite(fd, username());
|
||||
- }
|
||||
+ xwrite(fd, mailto);
|
||||
xwrite(fd, "\n");
|
||||
xwrite(fd, "Content-Type: text/plain; charset=\"");
|
||||
xwrite(fd, nl_langinfo(CODESET));
|
||||
@@ -277,6 +285,12 @@ launch_job(job_rec *jr)
|
||||
xwrite(fd, hostname);
|
||||
xwrite(fd, "\n\n");
|
||||
|
||||
+ if (*mailto == '\0')
|
||||
+ jr->mailto = NULL;
|
||||
+ else
|
||||
+ /* ugly but works without strdup() */
|
||||
+ jr->mailto = mailto;
|
||||
+
|
||||
jr->mail_header_size = file_size(fd);
|
||||
|
||||
pid = xfork();
|
||||
@@ -305,7 +319,7 @@ tend_job(job_rec *jr, int status)
|
||||
if (file_size(jr->output_fd) > jr->mail_header_size) mail_output = 1;
|
||||
else mail_output = 0;
|
||||
|
||||
- m = mail_output ? " (mailing output)" : "";
|
||||
+ m = mail_output ? " (produced output)" : "";
|
||||
if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
|
||||
explain("Job `%s' terminated%s", jr->ident, m);
|
||||
else if (WIFEXITED(status))
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
diff -up cronie-1.4.11/src/crontab.c.root cronie-1.4.11/src/crontab.c
|
||||
--- cronie-1.4.11/src/crontab.c.root 2017-03-07 13:52:23.000000000 +0100
|
||||
+++ cronie-1.4.11/src/crontab.c 2017-03-07 13:53:40.491278915 +0100
|
||||
@@ -170,7 +170,7 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
#if defined(WITH_PAM)
|
||||
- if (cron_start_pam(pw) != PAM_SUCCESS) {
|
||||
+ if (getuid() != 0 && cron_start_pam(pw) != PAM_SUCCESS) {
|
||||
fprintf(stderr,
|
||||
"You (%s) are not allowed to access to (%s) because of pam configuration.\n",
|
||||
User, ProgramName);
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
diff -up cronie-1.4.11/src/env.c.empty-var cronie-1.4.11/src/env.c
|
||||
--- cronie-1.4.11/src/env.c.empty-var 2017-03-07 15:17:14.604948015 +0100
|
||||
+++ cronie-1.4.11/src/env.c 2017-09-15 15:38:24.275112187 +0200
|
||||
@@ -255,7 +255,7 @@ int load_env(char *envstr, FILE * f) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
- if (state != FINI && !(state == VALUE && !quotechar)) {
|
||||
+ if (state != FINI && state != EQ2 && !(state == VALUE && !quotechar)) {
|
||||
Debug(DPARS, ("load_env, not an env var, state = %d\n", state));
|
||||
fseek(f, filepos, 0);
|
||||
Set_LineNum(fileline);
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
diff -up cronie-1.4.11/src/misc.c.ddd cronie-1.4.11/src/misc.c
|
||||
--- cronie-1.4.11/src/misc.c.ddd 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/misc.c 2013-08-30 13:51:22.227040980 +0200
|
||||
@@ -75,7 +75,9 @@ static int LogFD = ERR;
|
||||
static int syslog_open = FALSE;
|
||||
#endif
|
||||
|
||||
-#if defined(HAVE_FCNTL) && defined(F_SETLK)
|
||||
+#if defined(HAVE_FLOCK)
|
||||
+# define trylock_file(fd) flock((fd), LOCK_EX|LOCK_NB)
|
||||
+#elif defined(HAVE_FCNTL) && defined(F_SETLK)
|
||||
static int trylock_file(int fd) {
|
||||
struct flock fl;
|
||||
|
||||
@@ -89,8 +91,6 @@ static int trylock_file(int fd) {
|
||||
}
|
||||
#elif defined(HAVE_LOCKF)
|
||||
# define trylock_file(fd) lockf((fd), F_TLOCK, 0)
|
||||
-#elif defined(HAVE_FLOCK)
|
||||
-# define trylock_file(fd) flock((fd), LOCK_EX|LOCK_NB)
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -346,6 +346,14 @@ void acquire_daemonlock(int closeflag) {
|
||||
(void) fcntl(fd, F_SETFD, 1);
|
||||
}
|
||||
|
||||
+#if !defined(HAVE_FLOCK)
|
||||
+ else {
|
||||
+ /* Racy but better than nothing, just hope the parent exits */
|
||||
+ sleep(0);
|
||||
+ trylock_file(fd);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
sprintf(buf, "%ld\n", (long) pid);
|
||||
(void) lseek(fd, (off_t) 0, SEEK_SET);
|
||||
len = strlen(buf);
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
diff -up cronie-1.4.11/man/cron.8.old cronie-1.4.11/man/cron.8
|
||||
--- cronie-1.4.11/man/cron.8.old 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/man/cron.8 2013-10-04 16:34:31.248401373 +0200
|
||||
@@ -22,7 +22,7 @@
|
||||
.\"
|
||||
.\" $Id: cron.8,v 1.8 2004/01/23 19:03:32 vixie Exp $
|
||||
.\"
|
||||
-.TH CRON "8" "2013-01-02" "cronie" "System Administration"
|
||||
+.TH CRON "8" "2013-09-26" "cronie" "System Administration"
|
||||
.SH NAME
|
||||
crond \- daemon to execute scheduled commands
|
||||
.SH SYNOPSIS
|
||||
@@ -160,7 +160,11 @@ will disable the sending of mail.
|
||||
.TP
|
||||
.B "\-n"
|
||||
Tells the daemon to run in the foreground. This can be useful when
|
||||
-starting it out of init.
|
||||
+starting it out of init. With this option is needed to change pam setting.
|
||||
+.I /etc/pam.d/crond
|
||||
+must not enable
|
||||
+.I pam_loginuid.so
|
||||
+module.
|
||||
.TP
|
||||
.B "\-p"
|
||||
Allows
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
diff -up cronie-1.4.11/man/crontab.1.man-file cronie-1.4.11/man/crontab.1
|
||||
--- cronie-1.4.11/man/crontab.1.man-file 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/man/crontab.1 2017-03-07 13:56:19.650013901 +0100
|
||||
@@ -44,8 +44,9 @@ crontab \- maintains crontab files for i
|
||||
.BR -c
|
||||
.SH DESCRIPTION
|
||||
.I Crontab
|
||||
-is the program used to install, remove or list the tables used to serve
|
||||
-the
|
||||
+is the program used to install a crontab table
|
||||
+.IR file ,
|
||||
+remove or list the existing tables used to serve the
|
||||
.BR cron (8)
|
||||
daemon. Each user can have their own crontab, and though these are files
|
||||
in
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
diff -up cronie-1.4.11/src/security.c.no-pam cronie-1.4.11/src/security.c
|
||||
--- cronie-1.4.11/src/security.c.no-pam 2017-03-07 15:17:14.610948157 +0100
|
||||
+++ cronie-1.4.11/src/security.c 2017-09-15 09:36:26.709112459 +0200
|
||||
@@ -86,6 +86,7 @@ static int cron_open_pam_session(struct
|
||||
if (pam_session_opened != 0) \
|
||||
pam_close_session(pamh, PAM_SILENT); \
|
||||
pam_end(pamh, retcode); \
|
||||
+ pamh = NULL; \
|
||||
} \
|
||||
return(retcode); }
|
||||
#endif
|
||||
@@ -221,7 +222,10 @@ void cron_close_pam(void) {
|
||||
pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
|
||||
pam_close_session(pamh, PAM_SILENT);
|
||||
}
|
||||
- pam_end(pamh, PAM_SUCCESS);
|
||||
+ if (pamh != NULL) {
|
||||
+ pam_end(pamh, PAM_SUCCESS);
|
||||
+ pamh = NULL;
|
||||
+ }
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
diff -up cronie-1.4.11/src/security.c.ppp cronie-1.4.11/src/security.c
|
||||
--- cronie-1.4.11/src/security.c.ppp 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/security.c 2013-08-30 14:00:15.263788467 +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,11 +615,18 @@ 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);
|
||||
+
|
||||
+ if (jobenv == NULL) {
|
||||
+ jobenv = env_init();
|
||||
+ if (jobenv == NULL) {
|
||||
+ log_it("CRON", getpid(),
|
||||
+ "ERROR", "Initialization of cron environment variables failed", 0);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/* Now add the cron environment variables. Since env_set()
|
||||
* overwrites existing variables, this will let cron's
|
||||
|
|
@ -0,0 +1,243 @@
|
|||
diff -up cronie-1.4.11/src/cron.c.refresh-users cronie-1.4.11/src/cron.c
|
||||
--- cronie-1.4.11/src/cron.c.refresh-users 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/cron.c 2015-04-21 14:43:11.205438697 +0200
|
||||
@@ -525,7 +525,6 @@ static void find_jobs(int vtime, cron_db
|
||||
int minute, hour, dom, month, dow;
|
||||
user *u;
|
||||
entry *e;
|
||||
- const char *uname;
|
||||
|
||||
/* The support for the job-specific timezones is not perfect. There will
|
||||
* be jobs missed or run twice during the DST change in the job timezone.
|
||||
@@ -562,16 +561,11 @@ static void find_jobs(int vtime, cron_db
|
||||
*/
|
||||
for (u = db->head; u != NULL; u = u->next) {
|
||||
for (e = u->crontab; e != NULL; e = e->next) {
|
||||
- Debug(DSCH | DEXT, ("user [%s:%ld:%ld:...] cmd=\"%s\"\n",
|
||||
- e->pwd->pw_name, (long) e->pwd->pw_uid,
|
||||
- (long) e->pwd->pw_gid, e->cmd));
|
||||
- uname = e->pwd->pw_name;
|
||||
- /* check if user exists in time of job is being run f.e. ldap */
|
||||
- if (getpwnam(uname) != NULL) {
|
||||
time_t virtualSecond = (vtime - e->delay) * SECONDS_PER_MINUTE;
|
||||
time_t virtualGMTSecond = virtualSecond - vGMToff;
|
||||
job_tz = env_get("CRON_TZ", e->envp);
|
||||
maketime(job_tz, orig_tz);
|
||||
+
|
||||
/* here we test whether time is NOW */
|
||||
if (bit_test(e->minute, minute) &&
|
||||
bit_test(e->hour, hour) &&
|
||||
@@ -591,10 +585,9 @@ static void find_jobs(int vtime, cron_db
|
||||
!(e->flags & (MIN_STAR | HR_STAR))) ||
|
||||
(doWild && (e->flags & (MIN_STAR | HR_STAR))))
|
||||
job_add(e, u); /*will add job, if it isn't in queue already for NOW. */
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
if (orig_tz != NULL)
|
||||
setenv("TZ", orig_tz, 1);
|
||||
else
|
||||
diff -up cronie-1.4.11/src/database.c.refresh-users cronie-1.4.11/src/database.c
|
||||
--- cronie-1.4.11/src/database.c.refresh-users 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/database.c 2015-04-21 15:20:03.768846359 +0200
|
||||
@@ -152,10 +152,41 @@ check_orphans(cron_db *db) {
|
||||
}
|
||||
}
|
||||
|
||||
+static int
|
||||
+find_orphan(const char *uname, const char *fname, const char *tabname) {
|
||||
+ orphan *o;
|
||||
+
|
||||
+ for (o = orphans; o != NULL; o = o->next) {
|
||||
+ if (uname && o->uname) {
|
||||
+ if (strcmp(uname, o->uname) != 0)
|
||||
+ continue;
|
||||
+ } else if (uname != o->uname)
|
||||
+ continue;
|
||||
+
|
||||
+ if (fname && o->fname) {
|
||||
+ if (strcmp(fname, o->fname) != 0)
|
||||
+ continue;
|
||||
+ } else if (fname != o->fname)
|
||||
+ continue;
|
||||
+
|
||||
+ if (tabname && o->tabname) {
|
||||
+ if (strcmp(tabname, o->tabname) != 0)
|
||||
+ continue;
|
||||
+ } else if (tabname != o->tabname)
|
||||
+ continue;
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
add_orphan(const char *uname, const char *fname, const char *tabname) {
|
||||
orphan *o;
|
||||
|
||||
+ if (find_orphan(uname, fname, tabname))
|
||||
+ return;
|
||||
+
|
||||
o = calloc(1, sizeof(*o));
|
||||
if (o == NULL)
|
||||
return;
|
||||
diff -up cronie-1.4.11/src/entry.c.refresh-users cronie-1.4.11/src/entry.c
|
||||
--- cronie-1.4.11/src/entry.c.refresh-users 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/entry.c 2015-04-21 14:40:13.473310662 +0200
|
||||
@@ -99,6 +99,7 @@ entry *load_entry(FILE * file, void (*er
|
||||
char envstr[MAX_ENVSTR];
|
||||
char **tenvp;
|
||||
char *p;
|
||||
+ struct passwd temppw;
|
||||
|
||||
Debug(DPARS, ("load_entry()...about to eat comments\n"));
|
||||
|
||||
@@ -286,11 +287,15 @@ entry *load_entry(FILE * file, void (*er
|
||||
|
||||
pw = getpwnam(username);
|
||||
if (pw == NULL) {
|
||||
- ecode = e_username;
|
||||
- goto eof;
|
||||
- }
|
||||
- Debug(DPARS, ("load_entry()...uid %ld, gid %ld\n",
|
||||
+ Debug(DPARS, ("load_entry()...unknown user entry\n"));
|
||||
+ memset(&temppw, 0, sizeof (temppw));
|
||||
+ temppw.pw_name = username;
|
||||
+ temppw.pw_passwd = "";
|
||||
+ pw = &temppw;
|
||||
+ } else {
|
||||
+ Debug(DPARS, ("load_entry()...uid %ld, gid %ld\n",
|
||||
(long) pw->pw_uid, (long) pw->pw_gid));
|
||||
+ }
|
||||
}
|
||||
|
||||
if ((e->pwd = pw_dup(pw)) == NULL) {
|
||||
@@ -331,17 +336,11 @@ entry *load_entry(FILE * file, void (*er
|
||||
else
|
||||
log_it("CRON", getpid(), "ERROR", "can't set SHELL", 0);
|
||||
}
|
||||
- if (!env_get("HOME", e->envp)) {
|
||||
- if (glue_strings(envstr, sizeof envstr, "HOME", pw->pw_dir, '=')) {
|
||||
- if ((tenvp = env_set(e->envp, envstr)) == NULL) {
|
||||
- ecode = e_memory;
|
||||
- goto eof;
|
||||
- }
|
||||
- e->envp = tenvp;
|
||||
- }
|
||||
- else
|
||||
- log_it("CRON", getpid(), "ERROR", "can't set HOME", 0);
|
||||
+ if ((tenvp = env_update_home(e->envp, pw->pw_dir)) == NULL) {
|
||||
+ ecode = e_memory;
|
||||
+ goto eof;
|
||||
}
|
||||
+ e->envp = tenvp;
|
||||
#ifndef LOGIN_CAP
|
||||
/* If login.conf is in used we will get the default PATH later. */
|
||||
if (ChangePath && !env_get("PATH", e->envp)) {
|
||||
diff -up cronie-1.4.11/src/env.c.refresh-users cronie-1.4.11/src/env.c
|
||||
--- cronie-1.4.11/src/env.c.refresh-users 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/env.c 2015-04-21 14:40:13.473310662 +0200
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
+#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "globals.h"
|
||||
@@ -291,3 +292,19 @@ char *env_get(const char *name, char **e
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
+
|
||||
+char **env_update_home(char **envp, const char *dir) {
|
||||
+ char envstr[MAX_ENVSTR];
|
||||
+
|
||||
+ if (dir == NULL || *dir == '\0' || env_get("HOME", envp)) {
|
||||
+ return envp;
|
||||
+ }
|
||||
+
|
||||
+ if (glue_strings(envstr, sizeof envstr, "HOME", dir, '=')) {
|
||||
+ envp = env_set(envp, envstr);
|
||||
+ }
|
||||
+ else
|
||||
+ log_it("CRON", getpid(), "ERROR", "can't set HOME", 0);
|
||||
+
|
||||
+ return envp;
|
||||
+}
|
||||
diff -up cronie-1.4.11/src/funcs.h.refresh-users cronie-1.4.11/src/funcs.h
|
||||
--- cronie-1.4.11/src/funcs.h.refresh-users 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/funcs.h 2015-04-21 14:40:13.473310662 +0200
|
||||
@@ -82,7 +82,8 @@ char *env_get(const char *, char **),
|
||||
*first_word(const char *, const char *),
|
||||
**env_init(void),
|
||||
**env_copy(char **),
|
||||
- **env_set(char **, const char *);
|
||||
+ **env_set(char **, const char *),
|
||||
+ **env_update_home(char **, const char *);
|
||||
|
||||
user *load_user(int, struct passwd *, const char *, const char *, const char *),
|
||||
*find_user(cron_db *, const char *, const char *);
|
||||
diff -up cronie-1.4.11/src/job.c.refresh-users cronie-1.4.11/src/job.c
|
||||
--- cronie-1.4.11/src/job.c.refresh-users 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/src/job.c 2015-04-21 14:40:13.474310685 +0200
|
||||
@@ -22,6 +22,11 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
+#include <pwd.h>
|
||||
+#include <errno.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
|
||||
#include "funcs.h"
|
||||
#include "globals.h"
|
||||
@@ -36,12 +41,42 @@ static job *jhead = NULL, *jtail = NULL;
|
||||
|
||||
void job_add(entry * e, user * u) {
|
||||
job *j;
|
||||
+ struct passwd *newpwd;
|
||||
+ struct passwd *temppwd;
|
||||
+ const char *uname;
|
||||
|
||||
/* if already on queue, keep going */
|
||||
for (j = jhead; j != NULL; j = j->next)
|
||||
if (j->e == e && j->u == u)
|
||||
return;
|
||||
|
||||
+ uname = e->pwd->pw_name;
|
||||
+ /* check if user exists in time of job is being run f.e. ldap */
|
||||
+ if ((temppwd = getpwnam(uname)) != NULL) {
|
||||
+ char **tenvp;
|
||||
+
|
||||
+ Debug(DSCH | DEXT, ("user [%s:%ld:%ld:...] cmd=\"%s\"\n",
|
||||
+ e->pwd->pw_name, (long) temppwd->pw_uid,
|
||||
+ (long) temppwd->pw_gid, e->cmd));
|
||||
+ if ((newpwd = pw_dup(temppwd)) == NULL) {
|
||||
+ log_it(uname, getpid(), "ERROR", "memory allocation failed", errno);
|
||||
+ return;
|
||||
+ }
|
||||
+ free(e->pwd);
|
||||
+ e->pwd = newpwd;
|
||||
+
|
||||
+ if ((tenvp = env_update_home(e->envp, e->pwd->pw_dir)) == NULL) {
|
||||
+ log_it(uname, getpid(), "ERROR", "memory allocation failed", errno);
|
||||
+ return;
|
||||
+ }
|
||||
+ e->envp = tenvp;
|
||||
+ } else {
|
||||
+ log_it(uname, getpid(), "ERROR", "getpwnam() failed",errno);
|
||||
+ Debug(DSCH | DEXT, ("%s:%d pid=%d time=%ld getpwnam(%s) failed errno=%d error=%s\n",
|
||||
+ __FILE__,__LINE__,getpid(),time(NULL),uname,errno,strerror(errno)));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* build a job queue element */
|
||||
if ((j = (job *) malloc(sizeof (job))) == NULL)
|
||||
return;
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
diff -up cronie-1.4.11/src/security.c.selinux-user cronie-1.4.11/src/security.c
|
||||
--- cronie-1.4.11/src/security.c.selinux-user 2017-03-07 13:52:23.076462218 +0100
|
||||
+++ cronie-1.4.11/src/security.c 2017-03-07 14:47:32.957371610 +0100
|
||||
@@ -41,8 +41,6 @@
|
||||
#ifdef WITH_SELINUX
|
||||
# include <selinux/selinux.h>
|
||||
# include <selinux/context.h>
|
||||
-# include <selinux/flask.h>
|
||||
-# include <selinux/av_permissions.h>
|
||||
# include <selinux/get_context_list.h>
|
||||
#endif
|
||||
|
||||
@@ -476,7 +474,9 @@ get_security_context(const char *name, i
|
||||
security_context_t scontext = NULL;
|
||||
security_context_t file_context = NULL;
|
||||
security_context_t rawcontext=NULL;
|
||||
- int retval = 0;
|
||||
+ context_t current_context = NULL;
|
||||
+ int retval;
|
||||
+ char *current_context_str = NULL;
|
||||
char *seuser = NULL;
|
||||
char *level = NULL;
|
||||
|
||||
@@ -490,10 +490,29 @@ get_security_context(const char *name, i
|
||||
log_it(name, getpid(), "getseuserbyname FAILED", name, 0);
|
||||
return (security_getenforce() > 0);
|
||||
}
|
||||
+
|
||||
+ retval = get_default_context_with_level(seuser, level, NULL, &scontext);
|
||||
+ }
|
||||
+ else {
|
||||
+ if (getcon(¤t_context_str) < 0) {
|
||||
+ log_it(name, getpid(), "getcon FAILED", "", 0);
|
||||
+ return (security_getenforce() > 0);
|
||||
+ }
|
||||
+
|
||||
+ current_context = context_new(current_context_str);
|
||||
+ if (current_context == NULL) {
|
||||
+ log_it(name, getpid(), "context_new FAILED", current_context_str, 0);
|
||||
+ freecon(current_context_str);
|
||||
+ return (security_getenforce() > 0);
|
||||
+ }
|
||||
+
|
||||
+ const char *current_user = context_user_get(current_context);
|
||||
+ retval = get_default_context_with_level(current_user, level, NULL, &scontext);
|
||||
+
|
||||
+ freecon(current_context_str);
|
||||
+ context_free(current_context);
|
||||
}
|
||||
|
||||
- retval = get_default_context_with_level(name == NULL ? "system_u" : seuser,
|
||||
- level, NULL, &scontext);
|
||||
if (selinux_trans_to_raw_context(scontext, &rawcontext) == 0) {
|
||||
freecon(scontext);
|
||||
scontext = rawcontext;
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
diff -up cronie-1.4.11/src/cron.c.shutdown-msg cronie-1.4.11/src/cron.c
|
||||
--- cronie-1.4.11/src/cron.c.shutdown-msg 2015-04-21 15:29:14.218651528 +0200
|
||||
+++ cronie-1.4.11/src/cron.c 2015-04-21 15:29:30.212023639 +0200
|
||||
@@ -486,6 +486,8 @@ int main(int argc, char *argv[]) {
|
||||
log_it("CRON", pid, "INFO", "Inotify close failed", errno);
|
||||
#endif
|
||||
|
||||
+ log_it("CRON", pid, "INFO", "Shutting down", 0);
|
||||
+
|
||||
(void) unlink(_PATH_CRON_PID);
|
||||
|
||||
return 0;
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
diff -up cronie-1.4.11/src/crontab.c.temp-name cronie-1.4.11/src/crontab.c
|
||||
--- cronie-1.4.11/src/crontab.c.temp-name 2016-02-23 15:32:33.754463457 +0100
|
||||
+++ cronie-1.4.11/src/crontab.c 2016-02-23 15:33:17.401466818 +0100
|
||||
@@ -104,7 +104,7 @@ edit_cmd(void),
|
||||
poke_daemon(void),
|
||||
check_error(const char *), parse_args(int c, char *v[]), die(int) ATTRIBUTE_NORETURN;
|
||||
static int replace_cmd(void), hostset_cmd(void), hostget_cmd(void);
|
||||
-static char *host_specific_filename(const char *filename, int prefix);
|
||||
+static char *host_specific_filename(const char *prefix, const char *suffix);
|
||||
static const char *tmp_path(void);
|
||||
|
||||
static void usage(const char *msg) ATTRIBUTE_NORETURN;
|
||||
@@ -445,26 +445,27 @@ static const char *tmp_path(void) {
|
||||
return tmpdir ? tmpdir : "/tmp";
|
||||
}
|
||||
|
||||
-static char *host_specific_filename(const char *filename, int prefix)
|
||||
+static char *host_specific_filename(const char *prefix, const char *suffix)
|
||||
{
|
||||
/*
|
||||
* For cluster-wide use, where there is otherwise risk of the same
|
||||
- * name being generated on more than one host at once, prefix with
|
||||
- * "hostname." or suffix with ".hostname" as requested, and return
|
||||
- * static buffer or NULL on failure.
|
||||
+ * name being generated on more than one host at once, insert hostname
|
||||
+ * separated with dots, and return static buffer or NULL on failure.
|
||||
*/
|
||||
|
||||
static char safename[MAX_FNAME];
|
||||
- char hostname[MAXHOSTNAMELEN];
|
||||
+ char hostname[MAX_FNAME];
|
||||
|
||||
if (gethostname(hostname, sizeof hostname) != 0)
|
||||
return NULL;
|
||||
|
||||
if (prefix) {
|
||||
- if (!glue_strings(safename, sizeof safename, hostname, filename, '.'))
|
||||
+ if (!glue_strings(safename, sizeof safename, prefix, hostname, '.'))
|
||||
return NULL;
|
||||
- } else {
|
||||
- if (!glue_strings(safename, sizeof safename, filename, hostname, '.'))
|
||||
+ strcpy(hostname, safename);
|
||||
+ }
|
||||
+ if (suffix) {
|
||||
+ if (!glue_strings(safename, sizeof safename, hostname, suffix, '.'))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -745,7 +746,7 @@ static int replace_cmd(void) {
|
||||
char *safename;
|
||||
|
||||
|
||||
- safename = host_specific_filename("tmp.XXXXXXXXXX", 1);
|
||||
+ safename = host_specific_filename("#tmp", "XXXXXXXXXX");
|
||||
if (!safename || !glue_strings(TempFilename, sizeof TempFilename, SPOOL_DIR,
|
||||
safename, '/')) {
|
||||
TempFilename[0] = '\0';
|
||||
@@ -911,7 +912,7 @@ static int hostset_cmd(void) {
|
||||
if (!HostSpecified)
|
||||
gethostname(Host, sizeof Host);
|
||||
|
||||
- safename = host_specific_filename("tmp.XXXXXXXXXX", 1);
|
||||
+ safename = host_specific_filename("#tmp", "XXXXXXXXXX");
|
||||
if (!safename || !glue_strings(TempFilename, sizeof TempFilename, SPOOL_DIR,
|
||||
safename, '/')) {
|
||||
TempFilename[0] = '\0';
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
diff -up cronie-1.4.11/anacron/readtab.c.bla cronie-1.4.11/anacron/readtab.c
|
||||
--- cronie-1.4.11/anacron/readtab.c.bla 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/anacron/readtab.c 2014-01-27 17:47:41.362138084 +0100
|
||||
@@ -271,7 +271,8 @@ parse_tab_line(char *line)
|
||||
if (strncmp(env_var, "START_HOURS_RANGE", 17) == 0)
|
||||
{
|
||||
r = match_rx("^([[:digit:]]+)-([[:digit:]]+)$", value, 2, &from, &to);
|
||||
- if ((r == -1) || (from == NULL) || (to == NULL)) goto reg_invalid;
|
||||
+ if (r == -1) goto reg_err;
|
||||
+ if (r == 0) goto reg_invalid;
|
||||
range_start = atoi(from);
|
||||
range_stop = atoi(to);
|
||||
if (range_stop < range_start) {
|
||||
@@ -282,6 +283,8 @@ parse_tab_line(char *line)
|
||||
}
|
||||
if (strncmp(env_var, "RANDOM_DELAY", 12) == 0) {
|
||||
r = match_rx("^([[:digit:]]+)$", value, 0);
|
||||
+ if (r == -1) goto reg_err;
|
||||
+ if (r == 0) goto reg_invalid;
|
||||
if (r != -1) {
|
||||
int i = random();
|
||||
double x = 0;
|
||||
@@ -289,7 +292,6 @@ parse_tab_line(char *line)
|
||||
random_number = (int)x;
|
||||
Debug(("Randomized delay set: %d", random_number));
|
||||
}
|
||||
- else goto reg_invalid;
|
||||
}
|
||||
if (strncmp(env_var, "PREFERRED_HOUR", 14) == 0) {
|
||||
r = match_rx("^([[:digit:]]+)$", value, 1, &pref_hour);
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
diff -up cronie-1.4.11/contrib/cronie.systemd.sss cronie-1.4.11/contrib/cronie.systemd
|
||||
--- cronie-1.4.11/contrib/cronie.systemd.sss 2013-07-18 14:27:08.000000000 +0200
|
||||
+++ cronie-1.4.11/contrib/cronie.systemd 2013-08-30 13:37:33.848391897 +0200
|
||||
@@ -5,6 +5,7 @@ After=syslog.target auditd.service syste
|
||||
[Service]
|
||||
EnvironmentFile=/etc/sysconfig/crond
|
||||
ExecStart=/usr/sbin/crond -n $CRONDARGS
|
||||
+KillMode=process
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
diff -up cronie-1.4.11/contrib/cronie.systemd.old cronie-1.4.11/contrib/cronie.systemd
|
||||
--- cronie-1.4.11/contrib/cronie.systemd.old 2014-01-27 14:31:47.696467385 +0100
|
||||
+++ cronie-1.4.11/contrib/cronie.systemd 2014-07-04 15:18:16.000000000 +0200
|
||||
@@ -1,10 +1,11 @@
|
||||
[Unit]
|
||||
Description=Command Scheduler
|
||||
-After=syslog.target auditd.service systemd-user-sessions.service time-sync.target
|
||||
+After=auditd.service systemd-user-sessions.service time-sync.target
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=/etc/sysconfig/crond
|
||||
ExecStart=/usr/sbin/crond -n $CRONDARGS
|
||||
+ExecReload=/bin/kill -HUP $MAINPID
|
||||
KillMode=process
|
||||
|
||||
[Install]
|
||||
|
|
@ -0,0 +1,521 @@
|
|||
%bcond_without selinux
|
||||
%bcond_without pam
|
||||
%bcond_without audit
|
||||
%bcond_without inotify
|
||||
|
||||
Summary: Cron daemon for executing programs at set times
|
||||
Name: cronie
|
||||
Version: 1.4.11
|
||||
Release: 19%{?dist}
|
||||
License: MIT and BSD and ISC and GPLv2+
|
||||
Group: System Environment/Base
|
||||
URL: https://github.com/cronie-crond/cronie
|
||||
Source0: https://github.com/cronie-crond/cronie/releases/download/cronie-%{version}/cronie-%{version}.tar.gz
|
||||
|
||||
Patch0: cronie-systemd.patch
|
||||
Patch1: cronie-1.4.11-fcntl_locking.patch
|
||||
Patch2: cronie-1.4.11-pamenv.patch
|
||||
Patch3: cronie-1.4.11-man-debug.patch
|
||||
Patch4: cronie-check-config-param.patch
|
||||
Patch5: cronie-unitfile.patch
|
||||
Patch6: cronie-1.4.11-refresh-users.patch
|
||||
Patch7: cronie-1.4.11-shutdown-msg.patch
|
||||
Patch8: cronie-1.4.11-temp-name.patch
|
||||
Patch9: cronie-1.4.11-anacron-mailto.patch
|
||||
Patch10: cronie-1.4.11-crontab-root.patch
|
||||
Patch11: cronie-1.4.11-man-file.patch
|
||||
Patch12: cronie-1.4.11-selinux-user.patch
|
||||
Patch13: cronie-1.4.11-no-pam.patch
|
||||
Patch14: cronie-1.4.11-empty-var.patch
|
||||
|
||||
Requires: dailyjobs
|
||||
|
||||
%if %{with selinux}
|
||||
Requires: libselinux >= 2.0.64
|
||||
Buildrequires: libselinux-devel >= 2.0.64
|
||||
%endif
|
||||
%if %{with pam}
|
||||
Requires: pam >= 1.0.1
|
||||
Buildrequires: pam-devel >= 1.0.1
|
||||
%endif
|
||||
%if %{with audit}
|
||||
Buildrequires: audit-libs-devel >= 1.4.1
|
||||
%endif
|
||||
|
||||
BuildRequires: systemd
|
||||
Obsoletes: %{name}-sysvinit
|
||||
|
||||
Requires(post): coreutils sed
|
||||
Requires(post): systemd
|
||||
Requires(preun): systemd
|
||||
Requires(postun): systemd
|
||||
Requires(post): systemd
|
||||
|
||||
%description
|
||||
Cronie contains the standard UNIX daemon crond that runs specified programs at
|
||||
scheduled times and related tools. It is a fork of the original vixie-cron and
|
||||
has security and configuration enhancements like the ability to use pam and
|
||||
SELinux.
|
||||
|
||||
%package anacron
|
||||
Summary: Utility for running regular jobs
|
||||
Requires: crontabs
|
||||
Group: System Environment/Base
|
||||
Provides: dailyjobs
|
||||
Provides: anacron = 2.4
|
||||
Obsoletes: anacron <= 2.3
|
||||
Requires(post): coreutils
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%description anacron
|
||||
Anacron is part of cronie that is used for running jobs with regular
|
||||
periodicity which do not have exact time of day of execution.
|
||||
|
||||
The default settings of anacron execute the daily, weekly, and monthly
|
||||
jobs, but anacron allows setting arbitrary periodicity of jobs.
|
||||
|
||||
Using anacron allows running the periodic jobs even if the system is often
|
||||
powered off and it also allows randomizing the time of the job execution
|
||||
for better utilization of resources shared among multiple systems.
|
||||
|
||||
%package noanacron
|
||||
Summary: Utility for running simple regular jobs in old cron style
|
||||
Group: System Environment/Base
|
||||
Provides: dailyjobs
|
||||
Requires: crontabs
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%description noanacron
|
||||
Old style of running {hourly,daily,weekly,monthly}.jobs without anacron. No
|
||||
extra features.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1 -b .systemd
|
||||
%patch1 -p1 -b .locking
|
||||
%patch2 -p1 -b .pamenv
|
||||
%patch3 -p1 -b .man-debug
|
||||
%patch4 -p1 -b .check-config
|
||||
%patch5 -p1 -b .unitfile
|
||||
%patch6 -p1 -b .refresh-users
|
||||
%patch7 -p1 -b .shutdown-msg
|
||||
%patch8 -p1 -b .temp-name
|
||||
%patch9 -p1 -b .mailto
|
||||
%patch10 -p1 -b .root
|
||||
%patch11 -p1 -b .man-file
|
||||
%patch12 -p1 -b .selinux-user
|
||||
%patch13 -p1 -b .no-pam
|
||||
%patch14 -p1 -b .empty-var
|
||||
|
||||
%build
|
||||
%configure \
|
||||
%if %{with pam}
|
||||
--with-pam \
|
||||
%endif
|
||||
%if %{with selinux}
|
||||
--with-selinux \
|
||||
%endif
|
||||
%if %{with audit}
|
||||
--with-audit \
|
||||
%endif
|
||||
%if %{with inotify}
|
||||
--with-inotify \
|
||||
%endif
|
||||
--enable-anacron \
|
||||
--enable-pie \
|
||||
--enable-relro
|
||||
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
make install DESTDIR=$RPM_BUILD_ROOT DESTMAN=$RPM_BUILD_ROOT%{_mandir}
|
||||
mkdir -pm700 $RPM_BUILD_ROOT%{_localstatedir}/spool/cron
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/
|
||||
mkdir -pm755 $RPM_BUILD_ROOT%{_sysconfdir}/cron.d/
|
||||
%if ! %{with pam}
|
||||
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/crond
|
||||
%endif
|
||||
install -m 600 crond.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/crond
|
||||
touch $RPM_BUILD_ROOT%{_sysconfdir}/cron.deny
|
||||
install -m 600 contrib/anacrontab $RPM_BUILD_ROOT%{_sysconfdir}/anacrontab
|
||||
install -c -m755 contrib/0hourly $RPM_BUILD_ROOT%{_sysconfdir}/cron.d/0hourly
|
||||
mkdir -pm 700 $RPM_BUILD_ROOT%{_sysconfdir}/cron.hourly
|
||||
install -c -m755 contrib/0anacron $RPM_BUILD_ROOT%{_sysconfdir}/cron.hourly/0anacron
|
||||
mkdir -p $RPM_BUILD_ROOT/var/spool/anacron
|
||||
touch $RPM_BUILD_ROOT/var/spool/anacron/cron.daily
|
||||
touch $RPM_BUILD_ROOT/var/spool/anacron/cron.weekly
|
||||
touch $RPM_BUILD_ROOT/var/spool/anacron/cron.monthly
|
||||
|
||||
# noanacron package
|
||||
install -m 644 contrib/dailyjobs $RPM_BUILD_ROOT/%{_sysconfdir}/cron.d/dailyjobs
|
||||
|
||||
# install systemd initscript
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system/
|
||||
install -m 644 contrib/cronie.systemd $RPM_BUILD_ROOT/usr/lib/systemd/system/crond.service
|
||||
|
||||
%post
|
||||
# run after an installation
|
||||
%systemd_post crond.service
|
||||
|
||||
%post anacron
|
||||
[ -e /var/spool/anacron/cron.daily ] || touch /var/spool/anacron/cron.daily
|
||||
[ -e /var/spool/anacron/cron.weekly ] || touch /var/spool/anacron/cron.weekly
|
||||
[ -e /var/spool/anacron/cron.monthly ] || touch /var/spool/anacron/cron.monthly
|
||||
|
||||
%preun
|
||||
# run before a package is removed
|
||||
%systemd_preun crond.service
|
||||
|
||||
%postun
|
||||
# run after a package is removed
|
||||
%systemd_postun_with_restart crond.service
|
||||
|
||||
%triggerun -- cronie-anacron < 1.4.1
|
||||
# empty /etc/crontab in case there are only old regular jobs
|
||||
cp -a /etc/crontab /etc/crontab.rpmsave
|
||||
sed -e '/^01 \* \* \* \* root run-parts \/etc\/cron\.hourly/d'\
|
||||
-e '/^02 4 \* \* \* root run-parts \/etc\/cron\.daily/d'\
|
||||
-e '/^22 4 \* \* 0 root run-parts \/etc\/cron\.weekly/d'\
|
||||
-e '/^42 4 1 \* \* root run-parts \/etc\/cron\.monthly/d' /etc/crontab.rpmsave > /etc/crontab
|
||||
exit 0
|
||||
|
||||
%triggerun -- cronie < 1.4.7-2
|
||||
# Save the current service runlevel info
|
||||
# User must manually run systemd-sysv-convert --apply crond
|
||||
# to migrate them to systemd targets
|
||||
/usr/bin/systemd-sysv-convert --save crond
|
||||
|
||||
# The package is allowed to autostart:
|
||||
/bin/systemctl enable crond.service >/dev/null 2>&1
|
||||
|
||||
/sbin/chkconfig --del crond >/dev/null 2>&1 || :
|
||||
/bin/systemctl try-restart crond.service >/dev/null 2>&1 || :
|
||||
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
|
||||
%triggerin -- pam, glibc, libselinux
|
||||
# changes in pam, glibc or libselinux can make crond crash
|
||||
# when it calls pam
|
||||
/bin/systemctl try-restart crond.service >/dev/null 2>&1 || :
|
||||
|
||||
%files
|
||||
%doc AUTHORS COPYING INSTALL README ChangeLog
|
||||
%attr(755,root,root) %{_sbindir}/crond
|
||||
%attr(4755,root,root) %{_bindir}/crontab
|
||||
%{_mandir}/man8/crond.*
|
||||
%{_mandir}/man8/cron.*
|
||||
%{_mandir}/man5/crontab.*
|
||||
%{_mandir}/man1/crontab.*
|
||||
%dir %{_localstatedir}/spool/cron
|
||||
%dir %{_sysconfdir}/cron.d
|
||||
%if %{with pam}
|
||||
%attr(0644,root,root) %config(noreplace) %{_sysconfdir}/pam.d/crond
|
||||
%endif
|
||||
%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/sysconfig/crond
|
||||
%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/cron.deny
|
||||
%attr(0644,root,root) %config(noreplace) %{_sysconfdir}/cron.d/0hourly
|
||||
%attr(0644,root,root) /usr/lib/systemd/system/crond.service
|
||||
|
||||
%files anacron
|
||||
%{_sbindir}/anacron
|
||||
%attr(0755,root,root) %{_sysconfdir}/cron.hourly/0anacron
|
||||
%attr(0600,root,root) %config(noreplace) %{_sysconfdir}/anacrontab
|
||||
%dir /var/spool/anacron
|
||||
%ghost %attr(0600,root,root) %verify(not md5 size mtime) /var/spool/anacron/cron.daily
|
||||
%ghost %attr(0600,root,root) %verify(not md5 size mtime) /var/spool/anacron/cron.weekly
|
||||
%ghost %attr(0600,root,root) %verify(not md5 size mtime) /var/spool/anacron/cron.monthly
|
||||
%{_mandir}/man5/anacrontab.*
|
||||
%{_mandir}/man8/anacron.*
|
||||
|
||||
%files noanacron
|
||||
%attr(0644,root,root) %config(noreplace) %{_sysconfdir}/cron.d/dailyjobs
|
||||
|
||||
%changelog
|
||||
* Mon Oct 16 2017 Tomáš Mráz <tmraz@redhat.com> - 1.4.11-19
|
||||
- fix URL and source URL of the package (#1501726)
|
||||
|
||||
* Fri Sep 15 2017 Tomáš Mráz <tmraz@redhat.com> - 1.4.11-18
|
||||
- fix regression - spurious PAM log message from crontab (#1479064)
|
||||
- allow empty variables in crontabs (#1439217)
|
||||
|
||||
* Wed Mar 29 2017 Tomáš Mráz <tmraz@redhat.com> - 1.4.11-17
|
||||
- make anacron not to contradict itself in syslog
|
||||
(job output does not have to be necessarily mailed)
|
||||
|
||||
* Tue Mar 7 2017 Tomáš Mráz <tmraz@redhat.com> - 1.4.11-16
|
||||
- disable mail from anacron with empty MAILTO
|
||||
- crontab: do not block access with PAM when running as root
|
||||
- improve the crontab man page
|
||||
- do not hardcode system_u selinux user but use the user from
|
||||
the current context
|
||||
|
||||
* Tue Feb 23 2016 Tomáš Mráz <tmraz@redhat.com> - 1.4.11-15
|
||||
- crontab: use temporary filename properly ignored by crond
|
||||
|
||||
* Tue Apr 21 2015 Tomáš Mráz <tmraz@redhat.com> - 1.4.11-14
|
||||
- mark the 0hourly and dailyjobs crontabs as config
|
||||
- properly handle users for whose getpwnam() returns NULL temporarily
|
||||
- log when crond is shutting down
|
||||
|
||||
* Mon Jul 7 2014 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-13
|
||||
- reload in unit file was still missing
|
||||
- Related: rhbz#1114815
|
||||
|
||||
* Fri Jul 4 2014 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-12
|
||||
- reload in unit file was missing
|
||||
- Resolves: rhbz#1114815
|
||||
|
||||
* Mon Jan 27 2014 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-11
|
||||
- now it's work even on ppc64, all checks working correctly
|
||||
- Related: rhbz#1031384
|
||||
|
||||
* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 1.4.11-10
|
||||
- Mass rebuild 2014-01-24
|
||||
|
||||
* Wed Jan 22 2014 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-9
|
||||
- fix coverity warnings about dead code. Incorrect checking of values.
|
||||
- Related: rhbz#1031384
|
||||
|
||||
* Mon Jan 20 2014 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-8
|
||||
- anacron do not execute jobs run from command line
|
||||
- Related: rhbz#1031384
|
||||
|
||||
* Wed Jan 08 2014 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-7
|
||||
- anacron segfaults with certain config data
|
||||
- Resolves: rhbz#1031384
|
||||
|
||||
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 1.4.11-6
|
||||
- Mass rebuild 2013-12-27
|
||||
|
||||
* Tue Oct 15 2013 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-5
|
||||
- Cronie doesn't work when is executed as stand alone without systemd (for
|
||||
debuging issues)
|
||||
- Fix another permission, hopefully all now.
|
||||
- Resolves: rhbz#1012420, rhbz#1015567
|
||||
|
||||
* Fri Sep 13 2013 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-4
|
||||
- fix permission on configuration files, same as rhbz#706979
|
||||
|
||||
* Fri Aug 30 2013 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-3
|
||||
- 919290 systemd script use "KillMode=process"
|
||||
- Fcntl locking has different semantics than flock. Prefer flock.
|
||||
- 49225e172d156531ca142518d2638350752e373a
|
||||
- Pull PAM environment variables also from session modules.
|
||||
- c8e7d1b43c86a85441cb09cf7e08090f3ec1f384
|
||||
|
||||
* Mon Jul 22 2013 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-2
|
||||
- scriptlets are not created correctly if systemd is not in BR 986698
|
||||
- remove sub-package sysvinit, which is not needed anymore
|
||||
- update license, anacron is under GPLv2+
|
||||
|
||||
* Thu Jul 18 2013 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.11-1
|
||||
- new release 1.4.11 (contains previous bug fixes from 1.4.10-5)
|
||||
|
||||
* Tue Jun 11 2013 Tomáš Mráz <tmraz@redhat.com> - 1.4.10-5
|
||||
- add support for RANDOM_DELAY - delaying job startups
|
||||
- pass some environment variables to processes (LANG, etc.) (#969761)
|
||||
- do not use putenv() with string literals (#971516)
|
||||
|
||||
* Wed Feb 13 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.10-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
* Wed Jan 2 2013 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.10-3
|
||||
- change configuration files to 644
|
||||
- change 6755 to 4755 for crontab binary
|
||||
|
||||
* Tue Nov 27 2012 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.10-1
|
||||
- New release 1.4.10
|
||||
|
||||
* Thu Nov 22 2012 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.9-1
|
||||
- New release 1.4.9
|
||||
|
||||
* Wed Sep 05 2012 Václav Pavlín <vpavlin@redhat.com> - 1.4.8-13
|
||||
- Scriptlets replaced with new systemd macros (#850070)
|
||||
|
||||
* Fri Jul 27 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.8-12
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.8-11
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
* Wed Oct 26 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.8-10
|
||||
- Rebuilt for glibc bug#747377
|
||||
|
||||
* Tue Oct 25 2011 Tomáš Mráz <tmraz@redhat.com> - 1.4.8-9
|
||||
- make crond run a little bit later in the boot process (#747759)
|
||||
|
||||
* Mon Oct 17 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.8-8
|
||||
- change triggerun to fix 735802 during upgrade
|
||||
|
||||
* Wed Jul 27 2011 Karsten Hopp <karsten@redhat.com> 1.4.8-7
|
||||
- rebuild again, ppc still had the broken rpm in the buildroots
|
||||
|
||||
* Thu Jul 21 2011 Rex Dieter <rdieter@fedoraproject.org> 1.4.8-6
|
||||
- rebuild (broken rpm in buildroot)
|
||||
|
||||
* Thu Jul 21 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.8-5
|
||||
- fix permission of init.d/crond
|
||||
|
||||
* Thu Jun 30 2011 Tomáš Mráz <tmraz@redhat.com> - 1.4.8-4
|
||||
- drop the without systemd build condition
|
||||
- add the chkconfig readding trigger to the sysvinit subpackage
|
||||
|
||||
* Wed Jun 29 2011 Tomáš Mráz <tmraz@redhat.com> - 1.4.8-3
|
||||
- start crond after auditd
|
||||
|
||||
* Wed Jun 29 2011 Tomáš Mráz <tmraz@redhat.com> - 1.4.8-2
|
||||
- fix inotify support to not leak fds (#717505)
|
||||
|
||||
* Tue Jun 28 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.8-1
|
||||
- update to 1.4.8
|
||||
- create sub-package sysvinit for initscript
|
||||
|
||||
* Mon May 9 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.7-3
|
||||
- missing requirement on systemd-sysv for scriptlets
|
||||
|
||||
* Thu May 05 2011 Tomáš Mráz <tmraz@redhat.com> - 1.4.7-2
|
||||
- use only systemd units with systemd
|
||||
- add trigger for restart on glibc, libselinux or pam upgrades (#699189)
|
||||
|
||||
* Tue Mar 15 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.7-1
|
||||
- new release 1.4.7
|
||||
|
||||
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.6-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
|
||||
* Mon Jan 17 2011 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-8
|
||||
- enable crond even with systemctl
|
||||
|
||||
* Thu Dec 16 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-7
|
||||
- 663193 rewritten selinux support
|
||||
|
||||
* Wed Dec 15 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-6
|
||||
- apply selinux patch from dwalsh
|
||||
|
||||
* Fri Dec 10 2010 Tomas Mraz <tmraz@redhat.com> - 1.4.6-5
|
||||
- do not lock jobs that fall out of allowed range - 661966
|
||||
|
||||
* Thu Dec 02 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-4
|
||||
- fix post (thanks plautrba for review)
|
||||
|
||||
* Tue Nov 30 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-3
|
||||
- systemd init script 617320
|
||||
|
||||
* Tue Nov 30 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-2
|
||||
- fix typos in man pages
|
||||
|
||||
* Fri Oct 22 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.6-1
|
||||
- update to 1.4.6
|
||||
|
||||
* Fri Aug 13 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.5-4
|
||||
- 623908 fix fd leak in anacron, which caused denail of prelink
|
||||
and others
|
||||
|
||||
* Mon Aug 9 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.5-2
|
||||
- remove sendmail from requirements. If it's not installed, it will
|
||||
log into (r)syslog.
|
||||
|
||||
* Mon Aug 2 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.5-1
|
||||
- update to new release
|
||||
|
||||
* Fri Feb 19 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.4-1
|
||||
- update to new release
|
||||
|
||||
* Mon Feb 15 2010 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.3-3
|
||||
- 564894 FTBFS DSOLinking
|
||||
|
||||
* Thu Nov 5 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.3-2
|
||||
- 533189 pam needs add a line and selinux needs defined one function
|
||||
|
||||
* Fri Oct 30 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.3-1
|
||||
- 531963 and 532482 creating noanacron package
|
||||
|
||||
* Mon Oct 19 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.2-2
|
||||
- 529632 service crond stop returns appropriate value
|
||||
|
||||
* Mon Oct 12 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.2-1
|
||||
- new release
|
||||
|
||||
* Fri Aug 21 2009 Tomas Mraz <tmraz@redhat.com> - 1.4.1-3
|
||||
- rebuilt with new audit
|
||||
|
||||
* Fri Aug 14 2009 Tomas Mraz <tmraz@redhat.com> - 1.4.1-2
|
||||
- create the anacron timestamps in correct post script
|
||||
|
||||
* Fri Aug 14 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.4.1-1
|
||||
- update to 1.4.1
|
||||
- create and own /var/spool/anacron/cron.{daily,weekly,monthly} to
|
||||
remove false warning about non existent files
|
||||
- Resolves: 517398
|
||||
|
||||
* Wed Aug 5 2009 Tomas Mraz <tmraz@redhat.com> - 1.4-4
|
||||
- 515762 move anacron provides and obsoletes to the anacron subpackage
|
||||
|
||||
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
|
||||
|
||||
* Mon Jul 20 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.4-2
|
||||
- merge cronie and anacron in new release of cronie
|
||||
- obsolete/provide anacron in spec
|
||||
|
||||
* Thu Jun 18 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.3-2
|
||||
- 506560 check return value of access
|
||||
|
||||
* Mon Apr 27 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.3-1
|
||||
- new release
|
||||
|
||||
* Fri Apr 24 2009 Marcela Mašláňová <mmaslano@redhat.com> - 1.2-8
|
||||
- 496973 close file descriptors after exec
|
||||
|
||||
* Mon Mar 9 2009 Tomas Mraz <tmraz@redhat.com> - 1.2-7
|
||||
- rebuild
|
||||
|
||||
* Tue Feb 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||
|
||||
* Tue Dec 23 2008 Marcela Mašláňová <mmaslano@redhat.com> - 1.2-5
|
||||
- 477100 NO_FOLLOW was removed, reload after change in symlinked
|
||||
crontab is needed, man updated.
|
||||
|
||||
* Fri Oct 24 2008 Marcela Mašláňová <mmaslano@redhat.com> - 1.2-4
|
||||
- update init script
|
||||
|
||||
* Thu Sep 25 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.2-3
|
||||
- add sendmail file into requirement, cause it's needed some MTA
|
||||
|
||||
* Thu Sep 18 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.2-2
|
||||
- 462252 /etc/sysconfig/crond does not need to be executable
|
||||
|
||||
* Thu Jun 26 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.2-1
|
||||
- update to 1.2
|
||||
|
||||
* Tue Jun 17 2008 Tomas Mraz <tmraz@redhat.com> - 1.1-3
|
||||
- fix setting keycreate context
|
||||
- unify logging a bit
|
||||
- cleanup some warnings and fix a typo in TZ code
|
||||
- 450993 improve and fix inotify support
|
||||
|
||||
* Wed Jun 4 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.1-2
|
||||
- 49864 upgrade/update problem. Syntax error in spec.
|
||||
|
||||
* Wed May 28 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.1-1
|
||||
- release 1.1
|
||||
|
||||
* Tue May 20 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.0-6
|
||||
- 446360 check for lock didn't call chkconfig
|
||||
|
||||
* Tue Feb 12 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.0-5
|
||||
- upgrade from less than cronie-1.0-4 didn't add chkconfig
|
||||
|
||||
* Wed Feb 6 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.0-4
|
||||
- 431366 after reboot wasn't cron in chkconfig
|
||||
|
||||
* Tue Feb 5 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.0-3
|
||||
- 431366 trigger part => after update from vixie-cron on cronie will
|
||||
be daemon running.
|
||||
|
||||
* Wed Jan 30 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.0-2
|
||||
- change the provides on higher version than obsoletes
|
||||
|
||||
* Tue Jan 8 2008 Marcela Maslanova <mmaslano@redhat.com> - 1.0-1
|
||||
- packaging cronie
|
||||
- thank's for help with packaging to my reviewers
|
||||
Loading…
Reference in New Issue