Tomas Mraz c65246
diff -up at-3.1.16/atd.c.clear-nonjobs at-3.1.16/atd.c
Tomas Mraz c65246
--- at-3.1.16/atd.c.clear-nonjobs	2014-12-11 10:32:24.000000000 +0100
Tomas Mraz c65246
+++ at-3.1.16/atd.c	2015-09-09 11:40:22.544679351 +0200
Tomas Mraz c65246
@@ -414,10 +414,22 @@ run_file(const char *filename, uid_t uid
Tomas Mraz c65246
     sprintf(fmt, "#!/bin/sh\n# atrun uid=%%d gid=%%d\n# mail %%%ds %%d",
Tomas Mraz c65246
 	mailsize );
Tomas Mraz c65246
 
Tomas Mraz c65246
+    /* Unlink the file unless there was an error reading it (perhaps
Tomas Mraz c65246
+     * temporary).
Tomas Mraz c65246
+     * If the file has a bogus format there is no reason in trying
Tomas Mraz c65246
+     * to run it again and again.
Tomas Mraz c65246
+     */
Tomas Mraz c65246
     if (fscanf(stream, fmt,
Tomas Mraz c65246
-	       &nuid, &ngid, mailname, &send_mail) != 4)
Tomas Mraz c65246
-	pabort("File %.500s is in wrong format - aborting",
Tomas Mraz c65246
-	       filename);
Tomas Mraz c65246
+	       &nuid, &ngid, mailname, &send_mail) != 4) {
Tomas Mraz c65246
+		if (ferror(stream))
Tomas Mraz c65246
+			perr("Error reading the job file");
Tomas Mraz c65246
+
Tomas Mraz c65246
+		unlink(filename);
Tomas Mraz c65246
+		pabort("File %.500s is in wrong format - aborting",
Tomas Mraz c65246
+			filename);
Tomas Mraz c65246
+    }
Tomas Mraz c65246
+
Tomas Mraz c65246
+    unlink(filename);
Tomas Mraz c65246
 
Tomas Mraz c65246
     if (mailname[0] == '-')
Tomas Mraz c65246
 	pabort("illegal mail name %.300s in job %8lu (%.300s)", mailname,
Tomas Mraz c65246
@@ -427,12 +439,6 @@ run_file(const char *filename, uid_t uid
Tomas Mraz c65246
 	pabort("Job %8lu (%.500s) - userid %d does not match file uid %d",
Tomas Mraz c65246
 	       jobno, filename, nuid, uid);
Tomas Mraz c65246
 
Tomas Mraz c65246
-    /* We are now committed to executing this script.  Unlink the
Tomas Mraz c65246
-     * original.
Tomas Mraz c65246
-     */
Tomas Mraz c65246
-
Tomas Mraz c65246
-    unlink(filename);
Tomas Mraz c65246
-
Tomas Mraz c65246
     fclose(stream);
Tomas Mraz c65246
     if (chdir(ATSPOOL_DIR) < 0)
Tomas Mraz c65246
 	perr("Cannot chdir to " ATSPOOL_DIR);