Tomas Mraz 7ca7f0
diff -up at-3.1.16/atd.c.noabort at-3.1.16/atd.c
Tomas Mraz 7ca7f0
--- at-3.1.16/atd.c.noabort	2014-10-02 11:08:26.000000000 +0200
Tomas Mraz 7ca7f0
+++ at-3.1.16/atd.c	2014-11-06 16:07:54.851652541 +0100
Tomas Mraz 7ca7f0
@@ -221,7 +221,7 @@ static int set_selinux_context(const cha
Tomas Mraz 7ca7f0
        security_context_t user_context=NULL;
Tomas Mraz 7ca7f0
        security_context_t  file_context=NULL;
Tomas Mraz 7ca7f0
        struct av_decision avd;
Tomas Mraz 7ca7f0
-       int retval=-1;
Tomas Mraz 7ca7f0
+       int retval=0;
Tomas Mraz 7ca7f0
        char *seuser=NULL;
Tomas Mraz 7ca7f0
        char *level=NULL;
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
@@ -230,12 +230,9 @@ static int set_selinux_context(const cha
Tomas Mraz 7ca7f0
                free(seuser);
Tomas Mraz 7ca7f0
                free(level);
Tomas Mraz 7ca7f0
                if (retval) {
Tomas Mraz 7ca7f0
-                       if (security_getenforce()==1) {
Tomas Mraz 7ca7f0
-                               perr("execle: couldn't get security context for user %s\n", name);
Tomas Mraz 7ca7f0
-                       } else {
Tomas Mraz 7ca7f0
-                               syslog(LOG_ERR, "execle: couldn't get security context for user %s\n", name);
Tomas Mraz 7ca7f0
-                               return -1;
Tomas Mraz 7ca7f0
-                       }
Tomas Mraz 7ca7f0
+                       lerr("execle: couldn't get security context for user %s\n", name);
Tomas Mraz 7ca7f0
+                       retval = -1;
Tomas Mraz 7ca7f0
+                       goto err;
Tomas Mraz 7ca7f0
                }
Tomas Mraz 7ca7f0
        }
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
@@ -246,8 +243,11 @@ static int set_selinux_context(const cha
Tomas Mraz 7ca7f0
        * the user cron job.  It performs an entrypoint
Tomas Mraz 7ca7f0
        * permission check for this purpose.
Tomas Mraz 7ca7f0
        */
Tomas Mraz 7ca7f0
-       if (fgetfilecon(STDIN_FILENO, &file_context) < 0)
Tomas Mraz 7ca7f0
-               perr("fgetfilecon FAILED %s", filename);
Tomas Mraz 7ca7f0
+       if (fgetfilecon(STDIN_FILENO, &file_context) < 0) {
Tomas Mraz 7ca7f0
+               lerr("fgetfilecon FAILED %s", filename);
Tomas Mraz 7ca7f0
+               retval = -1;
Tomas Mraz 7ca7f0
+               goto err;
Tomas Mraz 7ca7f0
+       }
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
        retval = security_compute_av(user_context,
Tomas Mraz 7ca7f0
                                     file_context,
Tomas Mraz 7ca7f0
@@ -256,25 +256,21 @@ static int set_selinux_context(const cha
Tomas Mraz 7ca7f0
                                     &avd);
Tomas Mraz 7ca7f0
        freecon(file_context);
Tomas Mraz 7ca7f0
        if (retval || ((FILE__ENTRYPOINT & avd.allowed) != FILE__ENTRYPOINT)) {
Tomas Mraz 7ca7f0
-               if (security_getenforce()==1) {
Tomas Mraz 7ca7f0
-                       perr("Not allowed to set exec context to %s for user  %s\n", user_context,name);
Tomas Mraz 7ca7f0
-               } else {
Tomas Mraz 7ca7f0
-                       syslog(LOG_ERR, "Not allowed to set exec context to %s for user  %s\n", user_context,name);
Tomas Mraz 7ca7f0
-                       retval = -1;
Tomas Mraz 7ca7f0
-                       goto err;
Tomas Mraz 7ca7f0
-               }
Tomas Mraz 7ca7f0
+               lerr("Not allowed to set exec context to %s for user  %s\n", user_context,name);
Tomas Mraz 7ca7f0
+               retval = -1;
Tomas Mraz 7ca7f0
+               goto err;
Tomas Mraz 7ca7f0
        }
Tomas Mraz 7ca7f0
        if (setexeccon(user_context) < 0) {
Tomas Mraz 7ca7f0
-               if (security_getenforce()==1) {
Tomas Mraz 7ca7f0
-                       perr("Could not set exec context to %s for user  %s\n", user_context,name);
Tomas Mraz 7ca7f0
-                       retval = -1;
Tomas Mraz 7ca7f0
-               } else {
Tomas Mraz 7ca7f0
-                       syslog(LOG_ERR, "Could not set exec context to %s for user  %s\n", user_context,name);
Tomas Mraz 7ca7f0
-               }
Tomas Mraz 7ca7f0
+               lerr("Could not set exec context to %s for user  %s\n", user_context,name);
Tomas Mraz 7ca7f0
+               retval = -1;
Tomas Mraz 7ca7f0
+               goto err;
Tomas Mraz 7ca7f0
        }
Tomas Mraz 7ca7f0
   err:
Tomas Mraz 7ca7f0
-       freecon(user_context);
Tomas Mraz 7ca7f0
-       return 0;
Tomas Mraz 7ca7f0
+       if (retval < 0 && security_getenforce() != 1)
Tomas Mraz 7ca7f0
+               retval = 0;
Tomas Mraz 7ca7f0
+       if (user_context)
Tomas Mraz 7ca7f0
+               freecon(user_context);
Tomas Mraz 7ca7f0
+       return retval;
Tomas Mraz 7ca7f0
 }
Tomas Mraz 7ca7f0
 #endif
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
@@ -347,9 +343,12 @@ run_file(const char *filename, uid_t uid
Tomas Mraz 7ca7f0
      */
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
     pid = fork();
Tomas Mraz 7ca7f0
-    if (pid == -1)
Tomas Mraz 7ca7f0
-	perr("Cannot fork");
Tomas Mraz 7ca7f0
-
Tomas Mraz 7ca7f0
+    if (pid == -1) {
Tomas Mraz 7ca7f0
+	lerr("Cannot fork for job execution");
Tomas Mraz 7ca7f0
+	free(mailname);
Tomas Mraz 7ca7f0
+	free(newname);
Tomas Mraz 7ca7f0
+	return;
Tomas Mraz 7ca7f0
+    }
Tomas Mraz 7ca7f0
     else if (pid != 0) {
Tomas Mraz 7ca7f0
 	free(mailname);
Tomas Mraz 7ca7f0
 	free(newname);
Tomas Mraz 7ca7f0
@@ -667,15 +666,19 @@ run_loop()
Tomas Mraz 7ca7f0
      * up.
Tomas Mraz 7ca7f0
      */
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
-    if (stat(".", &buf) == -1)
Tomas Mraz 7ca7f0
-	perr("Cannot stat " ATJOB_DIR);
Tomas Mraz 7ca7f0
+    if (stat(".", &buf) == -1) {
Tomas Mraz 7ca7f0
+	lerr("Cannot stat " ATJOB_DIR);
Tomas Mraz 7ca7f0
+        return next_job;
Tomas Mraz 7ca7f0
+    }
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
     if (nothing_to_do && buf.st_mtime <= last_chg)
Tomas Mraz 7ca7f0
 	return next_job;
Tomas Mraz 7ca7f0
     last_chg = buf.st_mtime;
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
-    if ((spool = opendir(".")) == NULL)
Tomas Mraz 7ca7f0
-	perr("Cannot read " ATJOB_DIR);
Tomas Mraz 7ca7f0
+    if ((spool = opendir(".")) == NULL) {
Tomas Mraz 7ca7f0
+	lerr("Cannot read " ATJOB_DIR);
Tomas Mraz 7ca7f0
+        return next_job;
Tomas Mraz 7ca7f0
+    }
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
     run_batch = 0;
Tomas Mraz 7ca7f0
     nothing_to_do = 1;
Tomas Mraz 7ca7f0
diff -up at-3.1.16/daemon.c.noabort at-3.1.16/daemon.c
Tomas Mraz 7ca7f0
--- at-3.1.16/daemon.c.noabort	2014-09-30 08:29:02.000000000 +0200
Tomas Mraz 7ca7f0
+++ at-3.1.16/daemon.c	2014-11-06 15:37:22.109277583 +0100
Tomas Mraz 7ca7f0
@@ -83,6 +83,22 @@ perr(const char *fmt,...)
Tomas Mraz 7ca7f0
 }
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
 void
Tomas Mraz 7ca7f0
+lerr(const char *fmt,...)
Tomas Mraz 7ca7f0
+{
Tomas Mraz 7ca7f0
+    char buf[1024];
Tomas Mraz 7ca7f0
+    va_list args;
Tomas Mraz 7ca7f0
+
Tomas Mraz 7ca7f0
+    va_start(args, fmt);
Tomas Mraz 7ca7f0
+    vsnprintf(buf, sizeof(buf), fmt, args);
Tomas Mraz 7ca7f0
+    va_end(args);
Tomas Mraz 7ca7f0
+
Tomas Mraz 7ca7f0
+    if (daemon_debug) {
Tomas Mraz 7ca7f0
+	perror(buf);
Tomas Mraz 7ca7f0
+    } else
Tomas Mraz 7ca7f0
+	syslog(LOG_ERR, "%s: %m", buf);
Tomas Mraz 7ca7f0
+}
Tomas Mraz 7ca7f0
+
Tomas Mraz 7ca7f0
+void
Tomas Mraz 7ca7f0
 pabort(const char *fmt,...)
Tomas Mraz 7ca7f0
 {
Tomas Mraz 7ca7f0
     char buf[1024];
Tomas Mraz 7ca7f0
diff -up at-3.1.16/daemon.h.noabort at-3.1.16/daemon.h
Tomas Mraz 7ca7f0
--- at-3.1.16/daemon.h.noabort	2014-09-30 08:29:02.000000000 +0200
Tomas Mraz 7ca7f0
+++ at-3.1.16/daemon.h	2014-11-06 15:36:10.461660104 +0100
Tomas Mraz 7ca7f0
@@ -13,5 +13,8 @@ __attribute__((noreturn))
Tomas Mraz 7ca7f0
 #endif
Tomas Mraz 7ca7f0
 perr (const char *fmt, ...);
Tomas Mraz 7ca7f0
 
Tomas Mraz 7ca7f0
+void
Tomas Mraz 7ca7f0
+lerr (const char *fmt, ...);
Tomas Mraz 7ca7f0
+
Tomas Mraz 7ca7f0
 extern int daemon_debug;
Tomas Mraz 7ca7f0
 extern int daemon_foreground;