Blame SOURCES/fix-unsafe-code.patch

e1a86b
diff -ru cronie-1.5.2/src/cronnext.c cronie-1.5.2_patched/src/cronnext.c
e1a86b
--- cronie-1.5.2/src/cronnext.c	2018-05-03 18:41:12.000000000 +0200
e1a86b
+++ cronie-1.5.2_patched/src/cronnext.c	2018-09-07 15:17:54.555924440 +0200
e1a86b
@@ -71,13 +71,13 @@
e1a86b
 /*
e1a86b
  * print entry flags
e1a86b
  */
e1a86b
-char *flagname[]= {
e1a86b
-	[MIN_STAR] =	"MIN_STAR",
e1a86b
-	[HR_STAR] =	"HR_STAR",
e1a86b
-	[DOM_STAR] =	"DOM_STAR",
e1a86b
-	[DOW_STAR] =	"DOW_STAR",
e1a86b
-	[WHEN_REBOOT] =	"WHEN_REBOOT",
e1a86b
-	[DONT_LOG] =	"DONT_LOG"
e1a86b
+const char *flagname[]= {
e1a86b
+	"MIN_STAR",
e1a86b
+	"HR_STAR",
e1a86b
+	"DOM_STAR",
e1a86b
+	"DOW_STAR",
e1a86b
+	"WHEN_REBOOT",
e1a86b
+	"DONT_LOG"
e1a86b
 };
e1a86b
 
e1a86b
 void printflags(char *indent, int flags) {
e1a86b
@@ -85,8 +85,8 @@
e1a86b
 	int first = 1;
e1a86b
 
e1a86b
 	printf("%s    flagnames:", indent);
e1a86b
-	for (f = 1; f < sizeof(flagname);  f = f << 1)
e1a86b
-		if (flags & f) {
e1a86b
+	for (f = 0; f < sizeof(flagname)/sizeof(char *);  f++)
e1a86b
+		if (flags & (int)1 << f) {
e1a86b
 			printf("%s%s", first ? " " : "|", flagname[f]);
e1a86b
 			first = 0;
e1a86b
 		}
e1a86b
diff -ru cronie-1.5.2/src/do_command.c cronie-1.5.2_patched/src/do_command.c
e1a86b
--- cronie-1.5.2/src/do_command.c	2017-09-14 13:53:21.000000000 +0200
e1a86b
+++ cronie-1.5.2_patched/src/do_command.c	2018-09-07 15:17:54.555924440 +0200
e1a86b
@@ -418,7 +418,7 @@
e1a86b
 			if (mailto && safe_p(usernm, mailto)
e1a86b
 				&& strncmp(MailCmd,"off",3) && !SyslogOutput) {
e1a86b
 				char **env;
e1a86b
-				char mailcmd[MAX_COMMAND];
e1a86b
+				char mailcmd[MAX_COMMAND+1]; /* +1 for terminator */
e1a86b
 				char hostname[MAXHOSTNAMELEN];
e1a86b
 				char *content_type = env_get("CONTENT_TYPE", jobenv),
e1a86b
 					*content_transfer_encoding =
e1a86b
@@ -434,7 +434,7 @@
e1a86b
 					}
e1a86b
 				}
e1a86b
 				else {
e1a86b
-					strncpy(mailcmd, MailCmd, MAX_COMMAND);
e1a86b
+					strncpy(mailcmd, MailCmd, MAX_COMMAND+1);
e1a86b
 				}
e1a86b
 				if (!(mail = cron_popen(mailcmd, "w", e->pwd, jobenv))) {
e1a86b
 					perror(mailcmd);
e1a86b
diff -ru cronie-1.5.2/src/env.c cronie-1.5.2_patched/src/env.c
e1a86b
--- cronie-1.5.2/src/env.c	2017-09-14 13:53:21.000000000 +0200
e1a86b
+++ cronie-1.5.2_patched/src/env.c	2018-09-07 15:17:54.554924435 +0200
e1a86b
@@ -63,7 +63,7 @@
e1a86b
 		for (i = 0; i < count; i++)
e1a86b
 			if ((p[i] = strdup(envp[i])) == NULL) {
e1a86b
 				save_errno = errno;
e1a86b
-				while (--i >= 0)
e1a86b
+				while (i-- > 0)
e1a86b
 					free(p[i]);
e1a86b
 				free(p);
e1a86b
 				errno = save_errno;
e1a86b
@@ -263,7 +263,9 @@
e1a86b
 	}
e1a86b
 	if (state != FINI && state != EQ2 && !(state == VALUE && !quotechar)) {
e1a86b
 		Debug(DPARS, ("load_env, not an env var, state = %d\n", state));
e1a86b
-			fseek(f, filepos, 0);
e1a86b
+			if (fseek(f, filepos, 0)) {
e1a86b
+                return ERR;
e1a86b
+           }
e1a86b
 		Set_LineNum(fileline);
e1a86b
 		return (FALSE);
e1a86b
 	}
e1a86b
diff -ru cronie-1.5.2/src/globals.h cronie-1.5.2_patched/src/globals.h
e1a86b
--- cronie-1.5.2/src/globals.h	2017-01-17 16:53:50.000000000 +0100
e1a86b
+++ cronie-1.5.2_patched/src/globals.h	2018-09-07 15:17:54.555924440 +0200
e1a86b
@@ -77,7 +77,7 @@
e1a86b
 XTRN time_t	StartTime;
e1a86b
 XTRN int	NoFork;
e1a86b
 XTRN int        PermitAnyCrontab;
e1a86b
-XTRN char       MailCmd[MAX_COMMAND];
e1a86b
+XTRN char       MailCmd[MAX_COMMAND+1]; /* +1 for terminator */
e1a86b
 XTRN char       cron_default_mail_charset[MAX_ENVSTR];
e1a86b
 XTRN int        EnableClustering;
e1a86b
 XTRN int	ChangePath;
e1a86b
diff -ru cronie-1.5.2/src/security.c cronie-1.5.2_patched/src/security.c
e1a86b
--- cronie-1.5.2/src/security.c	2017-09-14 13:29:47.000000000 +0200
e1a86b
+++ cronie-1.5.2_patched/src/security.c	2018-09-07 15:17:54.554924435 +0200
e1a86b
@@ -417,7 +417,7 @@
e1a86b
 		}
e1a86b
 	}
e1a86b
 
e1a86b
-	if (strcmp(u->scontext, ucontext)) {
e1a86b
+	if (!ucontext || strcmp(u->scontext, ucontext)) {
e1a86b
 		if (!cron_authorize_range(u->scontext, ucontext)) {
e1a86b
 			if (security_getenforce() > 0) {
e1a86b
 # ifdef WITH_AUDIT
e1a86b
diff -ru cronie-1.5.2/src/user.c cronie-1.5.2_patched/src/user.c
e1a86b
--- cronie-1.5.2/src/user.c	2017-01-17 16:53:50.000000000 +0100
e1a86b
+++ cronie-1.5.2_patched/src/user.c	2018-09-07 15:17:54.555924440 +0200
e1a86b
@@ -44,6 +44,10 @@
e1a86b
 free_user (user * u) {
e1a86b
 	entry *e, *ne;
e1a86b
 
e1a86b
+	if (!u) {
e1a86b
+		return;
e1a86b
+	}
e1a86b
+
e1a86b
 	free(u->name);
e1a86b
 	free(u->tabname);
e1a86b
 	for (e = u->crontab; e != NULL; e = ne)	{