Compare commits

...

No commits in common. 'c9' and 'c10-beta' have entirely different histories.
c9 ... c10-beta

@ -1 +1 @@
30a8158968ff0ffe55d7f728c568618f965c98d8 SOURCES/at_3.1.23.orig.tar.gz ab60b97fb2d878d37a4eba9062a0a3e99f423334 SOURCES/at_3.2.5.orig.tar.gz

2
.gitignore vendored

@ -1 +1 @@
SOURCES/at_3.1.23.orig.tar.gz SOURCES/at_3.2.5.orig.tar.gz

@ -1,111 +0,0 @@
diff -up at-3.1.14/atd.c.timers at-3.1.14/atd.c
--- at-3.1.14/atd.c.timers 2013-12-02 11:03:01.250080057 +0100
+++ at-3.1.14/atd.c 2013-12-02 11:06:15.560243498 +0100
@@ -831,6 +831,54 @@ run_loop()
return next_job;
}
+#ifdef HAVE_TIMER_CREATE
+timer_t timer;
+struct itimerspec timeout;
+
+void timer_setup()
+{
+ struct sigevent sev;
+
+ sev.sigev_notify = SIGEV_SIGNAL;
+ sev.sigev_signo = SIGHUP;
+ sev.sigev_value.sival_ptr = &timer;
+
+ memset(&timeout, 0, sizeof(timeout));
+
+ if (timer_create(CLOCK_REALTIME, &sev, &timer) < 0)
+ pabort("unable to create timer");
+}
+
+time_t atd_gettime()
+{
+ struct timespec curtime;
+
+ clock_gettime(CLOCK_REALTIME, &curtime);
+
+ return curtime.tv_sec;
+}
+
+void atd_setalarm(time_t next)
+{
+ timeout.it_value.tv_sec = next;
+ timer_settime(timer, TIMER_ABSTIME, &timeout, NULL);
+ pause();
+}
+#else
+void timer_setup()
+{
+}
+
+time_t atd_gettime()
+{
+ return time(NULL);
+}
+
+void atd_setalarm(time_t next)
+{
+ sleep(next - atd_gettime());
+}
+#endif
/* Global functions */
int
@@ -936,7 +984,7 @@ main(int argc, char *argv[])
sigaction(SIGCHLD, &act, NULL);
if (!run_as_daemon) {
- now = time(NULL);
+ now = atd_gettime();
run_loop();
exit(EXIT_SUCCESS);
}
@@ -959,13 +1007,14 @@ main(int argc, char *argv[])
act.sa_handler = set_term;
sigaction(SIGINT, &act, NULL);
+ timer_setup();
daemon_setup();
do {
- now = time(NULL);
+ now = atd_gettime();
next_invocation = run_loop();
if (next_invocation > now) {
- sleep(next_invocation - now);
+ atd_setalarm(next_invocation);
}
} while (!term_signal);
daemon_cleanup();
diff -up at-3.1.14/config.h.in.timers at-3.1.14/config.h.in
--- at-3.1.14/config.h.in.timers 2013-12-02 11:00:27.000000000 +0100
+++ at-3.1.14/config.h.in 2013-12-02 11:02:06.521033976 +0100
@@ -38,6 +38,9 @@
/* Define to 1 if you have the `getloadavg' function. */
#undef HAVE_GETLOADAVG
+/* Define to 1 if you have the `timer_create' function. */
+#undef HAVE_TIMER_CREATE
+
/* Define to 1 if you have the <getopt.h> header file. */
#undef HAVE_GETOPT_H
diff -up at-3.1.14/configure.ac.timers at-3.1.14/configure.ac
--- at-3.1.14/configure.ac.timers 2013-12-02 11:00:27.000000000 +0100
+++ at-3.1.14/configure.ac 2013-12-02 11:02:45.217066560 +0100
@@ -254,6 +254,10 @@ AC_CHECK_LIB(selinux, is_selinux_enabled
AC_SUBST(SELINUXLIB)
AC_SUBST(WITH_SELINUX)
+dnl check for POSIX timer functions
+AC_SEARCH_LIBS([timer_create],[rt])
+AC_CHECK_FUNCS([timer_create])
+
AC_MSG_CHECKING(groupname to run under)
AC_ARG_WITH(daemon_groupname,
[ --with-daemon_groupname=DAEMON_GROUPNAME Groupname to run under (default daemon) ],

@ -1,82 +0,0 @@
diff -up at-3.1.18/Makefile.in.make at-3.1.18/Makefile.in
--- at-3.1.18/Makefile.in.make 2015-12-06 16:45:10.000000000 +0100
+++ at-3.1.18/Makefile.in 2016-03-23 12:38:15.652898579 +0100
@@ -68,13 +68,13 @@ LIST = Filelist Filelist.asc
all: at atd atd.service atrun
at: $(ATOBJECTS)
- $(CC) $(LDFLAGS) -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
+ $(CC) $(LDFLAGS) -pie -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
rm -f $(CLONES)
$(LN_S) -f at atq
$(LN_S) -f at atrm
atd: $(RUNOBJECTS)
- $(CC) $(LDFLAGS) -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
+ $(CC) $(LDFLAGS) -pie -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
y.tab.c y.tab.h: parsetime.y
$(YACC) -d parsetime.y
@@ -89,38 +89,41 @@ atrun: atrun.in
configure
.c.o:
- $(CC) -c $(CFLAGS) $(DEFS) $*.c
+ $(CC) -c $(CFLAGS) -fPIE $(DEFS) $*.c
install: all
- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(etcdir)
- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(bindir)
- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(sbindir)
- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(docdir)
- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(atdocdir)
- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
- chmod 1770 $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
+ $(INSTALL) -m 755 -d $(IROOT)$(etcdir)
+ $(INSTALL) -m 755 -d $(IROOT)$(bindir)
+ $(INSTALL) -m 755 -d $(IROOT)$(sbindir)
+ $(INSTALL) -m 755 -d $(IROOT)$(docdir)
+ $(INSTALL) -m 755 -d $(IROOT)$(atdocdir)
+ $(INSTALL) -m 755 -d $(IROOT)$(etcdir)/pam.d/
+ $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR)
+ chmod 700 $(IROOT)$(ATJOB_DIR) $(IROOT)$(ATSPOOL_DIR)
+ chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(IROOT)$(ATJOB_DIR) $(IROOT)$(ATSPOOL_DIR)
touch $(IROOT)$(LFILE)
chmod 600 $(IROOT)$(LFILE)
chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(IROOT)$(LFILE)
- test -f $(IROOT)$(etcdir)/at.allow || test -f $(IROOT)$(etcdir)/at.deny || $(INSTALL) -o root -g $(DAEMON_GROUPNAME) -m 640 at.deny $(IROOT)$(etcdir)/
- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 6755 at $(IROOT)$(bindir)
+ test -f $(IROOT)$(etcdir)/at.allow || test -f $(IROOT)$(etcdir)/at.deny || $(INSTALL) -m 600 at.deny $(IROOT)$(etcdir)/
+ $(INSTALL) -o $(INSTALL_ROOT_USER) -g $(DAEMON_GROUPNAME) pam_atd $(IROOT)$(etcdir)/pam.d/atd
+ $(INSTALL) -m 4755 at $(IROOT)$(bindir)
$(LN_S) -f at $(IROOT)$(bindir)/atq
$(LN_S) -f at $(IROOT)$(bindir)/atrm
- $(INSTALL) -g root -o root -m 755 batch $(IROOT)$(bindir)
- $(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man1dir)
- $(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man5dir)
- $(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man8dir)
- $(INSTALL) -g root -o root -m 755 atd $(IROOT)$(sbindir)
- $(INSTALL) -g root -o root -m 755 atrun $(IROOT)$(sbindir)
- $(INSTALL) -g root -o root -m 644 at.1 $(IROOT)$(man1dir)/
+ $(INSTALL) -m 755 batch $(IROOT)$(bindir)
+ $(INSTALL) -d -m 755 $(IROOT)$(man1dir)
+ $(INSTALL) -d -m 755 $(IROOT)$(man5dir)
+ $(INSTALL) -d -m 755 $(IROOT)$(man8dir)
+ $(INSTALL) -m 755 atd $(IROOT)$(sbindir)
+ $(INSTALL) -m 755 atrun $(IROOT)$(sbindir)
+ $(INSTALL) -m 644 at.1 $(IROOT)$(man1dir)/
cd $(IROOT)$(man1dir) && $(LN_S) -f at.1 atq.1 && $(LN_S) -f at.1 batch.1 && $(LN_S) -f at.1 atrm.1
- $(INSTALL) -g root -o root -m 644 atd.8 $(IROOT)$(man8dir)/
+ $(INSTALL) -m 644 atd.8 $(IROOT)$(man8dir)/
sed "s,\$${exec_prefix},$(exec_prefix),g" <atrun.8>tmpman
- $(INSTALL) -g root -o root -m 644 tmpman $(IROOT)$(man8dir)/atrun.8
+ $(INSTALL) -m 644 tmpman $(IROOT)$(man8dir)/atrun.8
rm -f tmpman
- $(INSTALL) -g root -o root -m 644 at.allow.5 $(IROOT)$(man5dir)/
+ $(INSTALL) -m 644 at.allow.5 $(IROOT)$(man5dir)/
cd $(IROOT)$(man5dir) && $(LN_S) -f at.allow.5 at.deny.5
- $(INSTALL) -g root -o root -m 644 $(DOCS) $(IROOT)$(atdocdir)
+ $(INSTALL) -m 644 $(DOCS) $(IROOT)$(atdocdir)
rm -f $(IROOT)$(mandir)/cat1/at.1* $(IROOT)$(mandir)/cat1/batch.1* \
$(IROOT)$(mandir)/cat1/atq.1*
rm -f $(IROOT)$(mandir)/cat1/atd.8*

@ -1,24 +0,0 @@
diff -up at-3.1.18/parsetime.y.dst at-3.1.18/parsetime.y
--- at-3.1.18/parsetime.y.dst 2015-12-06 16:45:10.000000000 +0100
+++ at-3.1.18/parsetime.y 2015-07-01 13:53:14.088881926 +0200
@@ -476,8 +476,8 @@ parsetime(time_t currtime, int argc, cha
exectm = *localtime(&currtime);
currtime -= exectm.tm_sec;
exectm.tm_sec = 0;
- exectm.tm_isdst = -1;
memcpy(&currtm,&exectm,sizeof(currtm));
+ exectm.tm_isdst = -1;
time_only = 0;
yearspec = 0;
@@ -503,8 +503,8 @@ parsetime(time_t currtime, int argc, cha
return 0;
if (isgmt) {
exectime -= timezone;
- if (currtm.tm_isdst && !exectm.tm_isdst)
- exectime -= 3600;
+ if (exectm.tm_isdst)
+ exectime += 3600;
}
if (exectime < currtime)
panic("refusing to create job destined in the past");

@ -1,6 +1,6 @@
diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c diff -ur b/atd.c a/atd.c
--- at-3.1.20/atd.c.lock-locks 2016-07-01 10:41:50.640867692 +0200 --- b/atd.c 2021-04-25 03:31:30.000000000 +0200
+++ at-3.1.20/atd.c 2016-07-01 10:42:32.345844967 +0200 +++ a/atd.c 2021-05-21 13:00:45.135020670 +0200
@@ -74,6 +74,9 @@ @@ -74,6 +74,9 @@
#include <syslog.h> #include <syslog.h>
#endif #endif
@ -11,7 +11,7 @@ diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c
/* Local headers */ /* Local headers */
#include "privs.h" #include "privs.h"
@@ -288,7 +291,7 @@ run_file(const char *filename, uid_t uid @@ -275,7 +278,7 @@
* mail to the user. * mail to the user.
*/ */
pid_t pid; pid_t pid;
@ -20,7 +20,7 @@ diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c
char jobbuf[9]; char jobbuf[9];
char *mailname = NULL; char *mailname = NULL;
int mailsize = 128; int mailsize = 128;
@@ -410,6 +413,10 @@ run_file(const char *filename, uid_t uid @@ -390,6 +393,10 @@
fcntl(fd_in, F_SETFD, fflags & ~FD_CLOEXEC); fcntl(fd_in, F_SETFD, fflags & ~FD_CLOEXEC);
@ -31,7 +31,7 @@ diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c
/* /*
* If the spool directory is mounted via NFS `atd' isn't able to * If the spool directory is mounted via NFS `atd' isn't able to
* read from the job file and will bump out here. The file is * read from the job file and will bump out here. The file is
@@ -553,10 +560,7 @@ run_file(const char *filename, uid_t uid @@ -520,10 +527,7 @@
PRIV_END PRIV_END
} }
/* We're the parent. Let's wait. /* We're the parent. Let's wait.
@ -43,7 +43,7 @@ diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c
non-blocking waitpid. So this blocking one will eventually non-blocking waitpid. So this blocking one will eventually
return with an ECHILD error. return with an ECHILD error.
*/ */
@@ -573,14 +577,14 @@ run_file(const char *filename, uid_t uid @@ -548,14 +552,14 @@
/* some sendmail implementations are confused if stdout, stderr are /* some sendmail implementations are confused if stdout, stderr are
* not available, so let them point to /dev/null * not available, so let them point to /dev/null
*/ */
@ -63,7 +63,7 @@ diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c
if (unlink(filename) == -1) if (unlink(filename) == -1)
syslog(LOG_WARNING, "Warning: removing output file for job %li failed: %s", syslog(LOG_WARNING, "Warning: removing output file for job %li failed: %s",
@@ -588,7 +592,12 @@ run_file(const char *filename, uid_t uid @@ -563,7 +567,12 @@
/* The job is now finished. We can delete its input file. /* The job is now finished. We can delete its input file.
*/ */
@ -77,15 +77,15 @@ diff -up at-3.1.20/atd.c.lock-locks at-3.1.20/atd.c
unlink(newname); unlink(newname);
free(newname); free(newname);
@@ -723,16 +732,18 @@ run_loop() @@ -673,16 +682,18 @@
/* Skip lock files */ /* Skip lock files */
if (queue == '=') { if (queue == '=') {
- /* FIXME: calhariz */ - /* FIXME: calhariz */
- /* I think the following code is broken, but commenting - /* I think the following code is broken, but commenting it
- may haven unknow side effects. Make a release and see - may cause unknow side effects. Make a release and see
- in the wild how it works. For more information see: - in the wild how it works. For more information see:
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=818508/* - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=818508 */
- -
- /* if ((buf.st_nlink == 1) && (run_time + CHECK_INTERVAL <= now)) { */ - /* if ((buf.st_nlink == 1) && (run_time + CHECK_INTERVAL <= now)) { */
- /* /\* Remove stale lockfile FIXME: lock the lockfile, if you fail, it's still in use. *\/ */ - /* /\* Remove stale lockfile FIXME: lock the lockfile, if you fail, it's still in use. *\/ */

@ -1,6 +1,6 @@
diff -up at-3.1.20/at.c.shell at-3.1.20/at.c diff -ur b/at.c a/at.c
--- at-3.1.20/at.c.shell 2016-07-01 09:47:13.392684445 +0200 --- b/at.c 2021-04-25 03:31:30.000000000 +0200
+++ at-3.1.20/at.c 2016-07-01 09:48:47.679931959 +0200 +++ a/at.c 2021-05-21 12:51:48.123335137 +0200
@@ -62,11 +62,8 @@ @@ -62,11 +62,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -13,7 +13,7 @@ diff -up at-3.1.20/at.c.shell at-3.1.20/at.c
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
@@ -239,6 +236,12 @@ writefile(time_t runtimer, char queue) @@ -245,6 +242,12 @@
int kill_errno; int kill_errno;
int rc; int rc;
int mailsize = 128; int mailsize = 128;
@ -26,7 +26,7 @@ diff -up at-3.1.20/at.c.shell at-3.1.20/at.c
/* Install the signal handler for SIGINT; terminate after removing the /* Install the signal handler for SIGINT; terminate after removing the
* spool file if necessary * spool file if necessary
@@ -465,6 +468,9 @@ writefile(time_t runtimer, char queue) @@ -492,6 +495,9 @@
fprintf(fp, " || {\n\t echo 'Execution directory " fprintf(fp, " || {\n\t echo 'Execution directory "
"inaccessible' >&2\n\t exit 1\n}\n"); "inaccessible' >&2\n\t exit 1\n}\n");
@ -35,8 +35,8 @@ diff -up at-3.1.20/at.c.shell at-3.1.20/at.c
+ +
istty = isatty(fileno(stdin)); istty = isatty(fileno(stdin));
if (istty) { if (istty) {
fprintf(stderr, "at> "); runtime = localtime(&runtimer);
@@ -480,7 +486,7 @@ writefile(time_t runtimer, char queue) @@ -512,7 +518,7 @@
if (istty) { if (istty) {
fprintf(stderr, "<EOT>\n"); fprintf(stderr, "<EOT>\n");
} }
@ -45,3 +45,4 @@ diff -up at-3.1.20/at.c.shell at-3.1.20/at.c
if (ferror(fp)) if (ferror(fp))
panic("Output error"); panic("Output error");
fflush(fp); fflush(fp);
Only in a: .vscode

@ -1,115 +0,0 @@
From 4be4813262b3b57a95a5f3ce909d30741aa3ac72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Stan=C4=9Bk?= <jstanek@redhat.com>
Date: Fri, 9 Apr 2021 16:47:33 +0200
Subject: [PATCH] Address issues raised by static analysis
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Jan Staněk <jstanek@redhat.com>
---
at.c | 22 ++++++++++++++++++----
daemon.c | 21 ++++++++++++++-------
2 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/at.c b/at.c
index df55dc9..0c74e2e 100644
--- a/at.c
+++ b/at.c
@@ -545,17 +545,27 @@ writefile(time_t runtimer, char queue)
return;
}
- if (fstat(fd, &statbuf) == -1)
+ if (fstat(fd, &statbuf) == -1) {
+ close(fd);
return;
+ }
if ((statbuf.st_uid != 0) || !S_ISREG(statbuf.st_mode) ||
- (statbuf.st_mode & (S_IWGRP | S_IWOTH)))
+ (statbuf.st_mode & (S_IWGRP | S_IWOTH))) {
+ close(fd);
return;
+ }
fp = fdopen(fd, "r");
- if (fp == NULL)
+ if (fp == NULL) {
+ close(fd);
return;
- if (fscanf(fp, "%d", &pid) != 1)
+ }
+ if (fscanf(fp, "%d", &pid) != 1) {
+ fclose(fp);
return;
+ } else {
+ fclose(fp);
+ }
kill_errno = 0;
@@ -640,6 +650,8 @@ list_jobs(void)
else
printf("%ld\t%s %c\n", jobno, timestr, queue);
}
+ closedir(spool);
+
PRIV_END
}
@@ -722,6 +734,8 @@ process_jobs(int argc, char **argv, int what)
putchar(ch);
}
done = 1;
+ fclose(fp);
+ fp = NULL;
}
else {
perr("Cannot open %.500s", dirent->d_name);
diff --git a/daemon.c b/daemon.c
index 4003b56..bc8191e 100644
--- a/daemon.c
+++ b/daemon.c
@@ -122,18 +122,23 @@ daemon_setup()
/* Set up standard daemon environment */
pid_t pid;
mode_t old_umask;
- int fd;
+ int fd, devnull;
FILE *fp;
if (!daemon_debug) {
- close(0);
- close(1);
- close(2);
- if ((open("/dev/null", O_RDWR) != 0) ||
- (open("/dev/null", O_RDWR) != 1) ||
- (open("/dev/null", O_RDWR) != 2)) {
+ devnull = open("/dev/null", O_RDWR);
+ if (devnull == -1) {
perr("Error redirecting I/O");
}
+
+ if ((dup2(devnull, 0) == -1) ||
+ (dup2(devnull, 1) == -1) ||
+ (dup2(devnull, 2) == -1)) {
+ close(devnull);
+ perr("Error redirecting I/O");
+ } else {
+ close(devnull);
+ }
}
if (daemon_foreground)
@@ -208,6 +213,8 @@ daemon_setup()
fcntl(fd, F_SETFD, FD_CLOEXEC);
PRIV_END
+ /* See the above comment. */
+ /* coverity[leaked_storage: FALSE] */
return;
}
--
2.31.1

@ -1,14 +1,14 @@
diff -up at-3.1.20/atd.c.aborted at-3.1.20/atd.c diff -ur b/atd.c a/atd.c
--- at-3.1.20/atd.c.aborted 2017-09-14 15:31:47.971486148 +0200 --- b/atd.c 2022-02-22 15:55:28.745663105 +0100
+++ at-3.1.20/atd.c 2017-09-14 15:43:53.506567281 +0200 +++ a/atd.c 2022-02-22 16:07:26.416578085 +0100
@@ -731,12 +731,17 @@ run_loop() @@ -722,12 +722,18 @@
/* Is the file already locked? /* Is the file already locked?
*/ */
if (buf.st_nlink > 1) { if (buf.st_nlink > 1) {
+ if (run_time < buf.st_mtime) + if (run_time < buf.st_mtime)
+ run_time = buf.st_mtime; + run_time = buf.st_mtime;
if (run_time + CHECK_INTERVAL <= now) { if (run_time + CHECK_INTERVAL <= now) {
-
/* Something went wrong the last time this was executed. /* Something went wrong the last time this was executed.
* Let's remove the lockfile and reschedule. * Let's remove the lockfile and reschedule.
+ * We also change the timestamp to avoid rerunning the job more + * We also change the timestamp to avoid rerunning the job more

@ -1,7 +1,7 @@
diff -up at-3.1.14/atd.c.mail at-3.1.14/atd.c diff -ur b/atd.c a/atd.c
--- at-3.1.14/atd.c.mail 2013-12-04 11:39:44.556239282 +0100 --- b/atd.c 2022-02-22 15:21:06.649147600 +0100
+++ at-3.1.14/atd.c 2013-12-04 11:40:50.544234246 +0100 +++ a/atd.c 2022-02-22 15:49:13.640184845 +0100
@@ -100,6 +100,10 @@ int selinux_enabled=0; @@ -98,6 +98,10 @@
#define BATCH_INTERVAL_DEFAULT 60 #define BATCH_INTERVAL_DEFAULT 60
#define CHECK_INTERVAL 3600 #define CHECK_INTERVAL 3600
@ -12,15 +12,15 @@ diff -up at-3.1.14/atd.c.mail at-3.1.14/atd.c
/* Global variables */ /* Global variables */
uid_t real_uid, effective_uid; uid_t real_uid, effective_uid;
@@ -117,6 +121,7 @@ static time_t last_chg; @@ -115,6 +119,7 @@
static int nothing_to_do; static int nothing_to_do = 0;
unsigned int batch_interval; unsigned int batch_interval;
static int run_as_daemon = 0; static int run_as_daemon = 0;
+static int mail_with_hostname = 0; +static int mail_with_hostname = 0;
static int hupped = 0;
static volatile sig_atomic_t term_signal = 0; static volatile sig_atomic_t term_signal = 0;
@@ -301,6 +306,7 @@
@@ -298,6 +303,7 @@ run_file(const char *filename, uid_t uid
char fmt[64]; char fmt[64];
unsigned long jobno; unsigned long jobno;
int rc; int rc;
@ -28,7 +28,7 @@ diff -up at-3.1.14/atd.c.mail at-3.1.14/atd.c
#ifdef WITH_PAM #ifdef WITH_PAM
int retcode; int retcode;
#endif #endif
@@ -452,6 +458,11 @@ run_file(const char *filename, uid_t uid @@ -455,6 +461,11 @@
write_string(fd_out, "Subject: Output from your job "); write_string(fd_out, "Subject: Output from your job ");
write_string(fd_out, jobbuf); write_string(fd_out, jobbuf);
@ -40,7 +40,7 @@ diff -up at-3.1.14/atd.c.mail at-3.1.14/atd.c
write_string(fd_out, "\nTo: "); write_string(fd_out, "\nTo: ");
write_string(fd_out, mailname); write_string(fd_out, mailname);
write_string(fd_out, "\n\n"); write_string(fd_out, "\n\n");
@@ -843,7 +854,7 @@ main(int argc, char *argv[]) @@ -905,7 +916,7 @@
run_as_daemon = 1; run_as_daemon = 1;
batch_interval = BATCH_INTERVAL_DEFAULT; batch_interval = BATCH_INTERVAL_DEFAULT;
@ -49,7 +49,7 @@ diff -up at-3.1.14/atd.c.mail at-3.1.14/atd.c
switch (c) { switch (c) {
case 'l': case 'l':
if (sscanf(optarg, "%lf", &load_avg) != 1) if (sscanf(optarg, "%lf", &load_avg) != 1)
@@ -865,6 +876,10 @@ main(int argc, char *argv[]) @@ -927,6 +938,10 @@
daemon_foreground++; daemon_foreground++;
break; break;

@ -0,0 +1,86 @@
diff -ur b/Makefile.in a/Makefile.in
--- b/Makefile.in 2022-02-05 11:00:57.000000000 +0100
+++ a/Makefile.in 2022-03-08 16:05:28.088069816 +0100
@@ -76,13 +76,13 @@
all: at atd atd.service atrun
at: $(ATOBJECTS)
- $(CC) $(LDFLAGS) -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
+ $(CC) $(LDFLAGS) -pie -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
rm -f $(CLONES)
$(LN_S) -f at atq
$(LN_S) -f at atrm
atd: $(RUNOBJECTS)
- $(CC) $(LDFLAGS) -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
+ $(CC) $(LDFLAGS) -pie -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
y.tab.c y.tab.h: parsetime.y
$(YACC) -d parsetime.y
@@ -99,40 +99,43 @@
configure
.c.o:
- $(CC) -c $(CFLAGS) $(DEFS) $*.c
+ $(CC) -c $(CFLAGS) -fPIE $(DEFS) $*.c
install: all
- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(etcdir)
- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(bindir)
- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(sbindir)
- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(atdatadir)
- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(docdir)
- $(INSTALL) -g root -o root -m 755 -d $(DESTDIR)$(atdocdir)
- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR)
- chmod 1770 $(DESTDIR)$(ATSPOOL_DIR) $(DESTDIR)$(ATJOB_DIR)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(etcdir)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(bindir)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(sbindir)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(atdatadir)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(docdir)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(atdocdir)
+ $(INSTALL) -m 755 -d $(DESTDIR)$(etcdir)/pam.d/
+ $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(DESTDIR)$(ATSPOOL_DIR)
+ chmod 700 $(DESTDIR)$(ATJOB_DIR) $(DESTDIR)$(ATSPOOL_DIR)
+ chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(DESTDIR)$(ATJOB_DIR) $(DESTDIR)$(ATSPOOL_DIR)
touch $(DESTDIR)$(LFILE)
chmod 600 $(DESTDIR)$(LFILE)
chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(DESTDIR)$(LFILE)
- test -f $(DESTDIR)$(etcdir)/at.allow || test -f $(DESTDIR)$(etcdir)/at.deny || $(INSTALL) -o root -g $(DAEMON_GROUPNAME) -m 640 at.deny $(DESTDIR)$(etcdir)/
- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 6755 at $(DESTDIR)$(bindir)
+ test -f $(DESTDIR)$(etcdir)/at.allow || test -f $(DESTDIR)$(etcdir)/at.deny || $(INSTALL) -m 600 at.deny $(DESTDIR)$(etcdir)/
+ $(INSTALL) -o $(INSTALL_ROOT_USER) -g $(DAEMON_GROUPNAME) pam_atd $(DESTDIR)$(etcdir)/pam.d/atd
+ $(INSTALL) -m 4755 at $(DESTDIR)$(bindir)
$(LN_S) -f at $(DESTDIR)$(bindir)/atq
$(LN_S) -f at $(DESTDIR)$(bindir)/atrm
- $(INSTALL) -g root -o root -m 755 batch $(DESTDIR)$(bindir)
- $(INSTALL) -g root -o root -m 755 batch-job $(DESTDIR)$(atdatadir)
- $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man1dir)
- $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man5dir)
- $(INSTALL) -d -o root -g root -m 755 $(DESTDIR)$(man8dir)
- $(INSTALL) -g root -o root -m 755 atd $(DESTDIR)$(sbindir)
- $(INSTALL) -g root -o root -m 755 atrun $(DESTDIR)$(sbindir)
- $(INSTALL) -g root -o root -m 644 at.1 $(DESTDIR)$(man1dir)/
+ $(INSTALL) -m 755 batch $(DESTDIR)$(bindir)
+ $(INSTALL) -m 755 batch-job $(DESTDIR)$(atdatadir)
+ $(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
+ $(INSTALL) -d -m 755 $(DESTDIR)$(man5dir)
+ $(INSTALL) -d -m 755 $(DESTDIR)$(man8dir)
+ $(INSTALL) -m 755 atd $(DESTDIR)$(sbindir)
+ $(INSTALL) -m 755 atrun $(DESTDIR)$(sbindir)
+ $(INSTALL) -m 644 at.1 $(DESTDIR)$(man1dir)/
cd $(DESTDIR)$(man1dir) && $(LN_S) -f at.1 atq.1 && $(LN_S) -f at.1 batch.1 && $(LN_S) -f at.1 atrm.1
- $(INSTALL) -g root -o root -m 644 atd.8 $(DESTDIR)$(man8dir)/
+ $(INSTALL) -m 644 atd.8 $(DESTDIR)$(man8dir)/
sed "s,\$${exec_prefix},$(exec_prefix),g" <atrun.8>tmpman
- $(INSTALL) -g root -o root -m 644 tmpman $(DESTDIR)$(man8dir)/atrun.8
+ $(INSTALL) -m 644 tmpman $(DESTDIR)$(man8dir)/atrun.8
rm -f tmpman
- $(INSTALL) -g root -o root -m 644 at.allow.5 $(DESTDIR)$(man5dir)/
+ $(INSTALL) -m 644 at.allow.5 $(DESTDIR)$(man5dir)/
cd $(DESTDIR)$(man5dir) && $(LN_S) -f at.allow.5 at.deny.5
- $(INSTALL) -g root -o root -m 644 $(DOCS) $(DESTDIR)$(atdocdir)
+ $(INSTALL) -m 644 $(DOCS) $(DESTDIR)$(atdocdir)
rm -f $(DESTDIR)$(mandir)/cat1/at.1* $(DESTDIR)$(mandir)/cat1/batch.1* \
$(DESTDIR)$(mandir)/cat1/atq.1*
rm -f $(DESTDIR)$(mandir)/cat1/atd.8*

@ -1,7 +1,19 @@
diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c diff -ur b/at.1.in a/at.1.in
--- at-3.1.18/atd.c.nit 2016-03-23 12:46:49.222277787 +0100 --- b/at.1.in 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.18/atd.c 2016-03-23 12:47:50.521639804 +0100 +++ a/at.1.in 2022-02-22 15:19:47.598996428 +0100
@@ -196,6 +196,18 @@ myfork() @@ -226,7 +226,7 @@
.BR batch .
Queues with higher letters run with increased niceness. The special
queue "=" is reserved for jobs which are currently running.
-.P
+
If a job is submitted to a queue designated with an uppercase letter, the
job is treated as if it were submitted to batch at the time of the job.
Once the time is reached, the batch processing rules with respect to load
diff -ur b/atd.c a/atd.c
--- b/atd.c 2022-02-22 15:14:02.736336912 +0100
+++ a/atd.c 2022-02-22 15:19:02.163909540 +0100
@@ -197,6 +197,18 @@
#define fork myfork #define fork myfork
#endif #endif
@ -20,7 +32,7 @@ diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
#ifdef WITH_SELINUX #ifdef WITH_SELINUX
static int static int
@@ -339,6 +351,9 @@ run_file(const char *filename, uid_t uid @@ -340,6 +352,9 @@
free(newname); free(newname);
return; return;
} }
@ -30,7 +42,7 @@ diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
/* Let's see who we mail to. Hopefully, we can read it from /* Let's see who we mail to. Hopefully, we can read it from
* the command file; if not, send it to the owner, or, failing that, * the command file; if not, send it to the owner, or, failing that,
* to root. * to root.
@@ -507,6 +522,9 @@ run_file(const char *filename, uid_t uid @@ -508,6 +523,9 @@
if (setuid(uid) < 0) if (setuid(uid) < 0)
perr("Cannot set user id"); perr("Cannot set user id");
@ -40,7 +52,7 @@ diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
chdir("/"); chdir("/");
execle("/bin/sh", "sh", (char *) NULL, nenvp); execle("/bin/sh", "sh", (char *) NULL, nenvp);
@@ -572,6 +590,9 @@ run_file(const char *filename, uid_t uid @@ -573,6 +591,9 @@
if (setuid(uid) < 0) if (setuid(uid) < 0)
perr("Cannot set user id"); perr("Cannot set user id");
@ -50,7 +62,7 @@ diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
chdir ("/"); chdir ("/");
#if defined(SENDMAIL) #if defined(SENDMAIL)
@@ -699,6 +720,7 @@ run_loop() @@ -707,6 +728,7 @@
* Let's remove the lockfile and reschedule. * Let's remove the lockfile and reschedule.
*/ */
strncpy(lock_name, dirent->d_name, sizeof(lock_name)); strncpy(lock_name, dirent->d_name, sizeof(lock_name));
@ -58,7 +70,7 @@ diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
lock_name[0] = '='; lock_name[0] = '=';
unlink(lock_name); unlink(lock_name);
next_job = now; next_job = now;
@@ -733,6 +755,7 @@ run_loop() @@ -741,6 +763,7 @@
run_batch++; run_batch++;
if (strcmp(batch_name, dirent->d_name) > 0) { if (strcmp(batch_name, dirent->d_name) > 0) {
strncpy(batch_name, dirent->d_name, sizeof(batch_name)); strncpy(batch_name, dirent->d_name, sizeof(batch_name));
@ -66,15 +78,3 @@ diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
batch_uid = buf.st_uid; batch_uid = buf.st_uid;
batch_gid = buf.st_gid; batch_gid = buf.st_gid;
batch_queue = queue; batch_queue = queue;
diff -up at-3.1.18/at.1.in.nit at-3.1.18/at.1.in
--- at-3.1.18/at.1.in.nit 2015-12-06 16:45:10.000000000 +0100
+++ at-3.1.18/at.1.in 2016-03-23 12:46:49.226277876 +0100
@@ -210,7 +210,7 @@ queue for
.BR batch .
Queues with higher letters run with increased niceness. The special
queue "=" is reserved for jobs which are currently running.
-.P
+
If a job is submitted to a queue designated with an uppercase letter, the
job is treated as if it were submitted to batch at the time of the job.
Once the time is reached, the batch processing rules with respect to load

@ -1,7 +1,7 @@
diff -up at-3.1.18/atd.c.noabort at-3.1.18/atd.c diff -ur b/atd.c a/atd.c
--- at-3.1.18/atd.c.noabort 2016-03-23 12:49:15.147520116 +0100 --- b/atd.c 2022-02-22 16:09:15.683717386 +0100
+++ at-3.1.18/atd.c 2016-03-23 12:49:15.148520138 +0100 +++ a/atd.c 2022-02-22 16:12:48.992989327 +0100
@@ -349,9 +349,12 @@ run_file(const char *filename, uid_t uid @@ -344,9 +344,12 @@
*/ */
pid = fork(); pid = fork();
@ -17,7 +17,7 @@ diff -up at-3.1.18/atd.c.noabort at-3.1.18/atd.c
else if (pid != 0) { else if (pid != 0) {
free(mailname); free(mailname);
free(newname); free(newname);
@@ -669,15 +672,19 @@ run_loop() @@ -659,16 +662,20 @@
* up. * up.
*/ */
@ -28,10 +28,11 @@ diff -up at-3.1.18/atd.c.noabort at-3.1.18/atd.c
+ return next_job; + return next_job;
+ } + }
if (nothing_to_do && buf.st_mtime <= last_chg) if (nothing_to_do && buf.st_mtime == last_chg)
return next_job; return next_job;
last_chg = buf.st_mtime; last_chg = buf.st_mtime;
hupped = 0;
- if ((spool = opendir(".")) == NULL) - if ((spool = opendir(".")) == NULL)
- perr("Cannot read " ATJOB_DIR); - perr("Cannot read " ATJOB_DIR);
+ if ((spool = opendir(".")) == NULL) { + if ((spool = opendir(".")) == NULL) {

@ -1,7 +1,7 @@
diff -up at-3.1.20/at.c.pam at-3.1.20/at.c diff -ur b/at.c a/at.c
--- at-3.1.20/at.c.pam 2016-06-28 22:18:00.000000000 +0200 --- b/at.c 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.20/at.c 2016-07-01 09:44:22.251683924 +0200 +++ a/at.c 2022-02-23 18:42:45.941757090 +0100
@@ -144,18 +144,13 @@ sigc(int signo) @@ -155,18 +155,12 @@
/* If the user presses ^C, remove the spool file and exit /* If the user presses ^C, remove the spool file and exit
*/ */
if (fcreated) { if (fcreated) {
@ -16,20 +16,19 @@ diff -up at-3.1.20/at.c.pam at-3.1.20/at.c
- unlink(atfile); - unlink(atfile);
- setregid(effective_gid, real_gid); - setregid(effective_gid, real_gid);
- /* - /*
+ unlink(atfile);
PRIV_END PRIV_END
- */ - */
} }
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@@ -315,26 +310,19 @@ writefile(time_t runtimer, char queue) @@ -326,26 +320,19 @@
* bit. Yes, this is a kluge. * bit. Yes, this is a kluge.
*/ */
cmask = umask(S_IRUSR | S_IWUSR | S_IXUSR); cmask = umask(S_IRUSR | S_IWUSR | S_IXUSR);
- seteuid(real_uid); - seteuid(real_uid);
+ if ((seteuid(effective_uid)) < 0) + if ((seteuid(effective_uid)) < 0)
+ perr("Error in seteuid: %s", errno); + perr("Error in seteuid: %s", errno);
if ((fd = open(atfile, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, S_IRUSR)) == -1) if ((fd = open(atfile, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY | O_SYNC, S_IRUSR)) == -1)
perr("Cannot create atjob file %.500s", atfile); perr("Cannot create atjob file %.500s", atfile);
- seteuid(effective_uid); - seteuid(effective_uid);
@ -52,7 +51,7 @@ diff -up at-3.1.20/at.c.pam at-3.1.20/at.c
/* We've successfully created the file; let's set the flag so it /* We've successfully created the file; let's set the flag so it
* gets removed in case of an interrupt or error. * gets removed in case of an interrupt or error.
*/ */
@@ -673,7 +661,7 @@ process_jobs(int argc, char **argv, int @@ -733,7 +720,7 @@
We need the unprivileged uid here since the file is owned by the real We need the unprivileged uid here since the file is owned by the real
(not effective) uid. (not effective) uid.
*/ */
@ -61,7 +60,7 @@ diff -up at-3.1.20/at.c.pam at-3.1.20/at.c
if (queue == '=') { if (queue == '=') {
fprintf(stderr, "Warning: deleting running job\n"); fprintf(stderr, "Warning: deleting running job\n");
@@ -682,8 +670,8 @@ process_jobs(int argc, char **argv, int @@ -742,8 +729,8 @@
perr("Cannot unlink %.500s", dirent->d_name); perr("Cannot unlink %.500s", dirent->d_name);
rc = EXIT_FAILURE; rc = EXIT_FAILURE;
} }
@ -71,7 +70,7 @@ diff -up at-3.1.20/at.c.pam at-3.1.20/at.c
done = 1; done = 1;
break; break;
@@ -693,7 +681,7 @@ process_jobs(int argc, char **argv, int @@ -753,7 +740,7 @@
FILE *fp; FILE *fp;
int ch; int ch;
@ -80,7 +79,7 @@ diff -up at-3.1.20/at.c.pam at-3.1.20/at.c
fp = fopen(dirent->d_name, "r"); fp = fopen(dirent->d_name, "r");
if (fp) { if (fp) {
@@ -706,7 +694,7 @@ process_jobs(int argc, char **argv, int @@ -768,7 +755,7 @@
perr("Cannot open %.500s", dirent->d_name); perr("Cannot open %.500s", dirent->d_name);
rc = EXIT_FAILURE; rc = EXIT_FAILURE;
} }
@ -89,10 +88,10 @@ diff -up at-3.1.20/at.c.pam at-3.1.20/at.c
} }
break; break;
diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c diff -ur b/atd.c a/atd.c
--- at-3.1.20/atd.c.pam 2016-06-28 22:14:39.000000000 +0200 --- b/atd.c 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.20/atd.c 2016-07-01 09:44:22.251683924 +0200 +++ a/atd.c 2022-02-23 18:50:53.743511813 +0100
@@ -91,6 +91,10 @@ int selinux_enabled = 0; @@ -91,6 +91,10 @@
/* Macros */ /* Macros */
@ -103,7 +102,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
#define BATCH_INTERVAL_DEFAULT 60 #define BATCH_INTERVAL_DEFAULT 60
#define CHECK_INTERVAL 3600 #define CHECK_INTERVAL 3600
@@ -114,7 +118,7 @@ static int run_as_daemon = 0; @@ -115,7 +119,7 @@
static volatile sig_atomic_t term_signal = 0; static volatile sig_atomic_t term_signal = 0;
@ -112,7 +111,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
#include <security/pam_appl.h> #include <security/pam_appl.h>
static pam_handle_t *pamh = NULL; static pam_handle_t *pamh = NULL;
@@ -123,15 +127,7 @@ static const struct pam_conv conv = { @@ -124,15 +128,7 @@
NULL NULL
}; };
@ -129,7 +128,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
/* Signal handlers */ /* Signal handlers */
RETSIGTYPE RETSIGTYPE
@@ -292,7 +288,7 @@ run_file(const char *filename, uid_t uid @@ -293,7 +289,7 @@
char fmt[64]; char fmt[64];
unsigned long jobno; unsigned long jobno;
int rc; int rc;
@ -138,7 +137,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
int retcode; int retcode;
#endif #endif
@@ -449,17 +445,11 @@ run_file(const char *filename, uid_t uid @@ -450,17 +446,11 @@
fstat(fd_out, &buf); fstat(fd_out, &buf);
size = buf.st_size; size = buf.st_size;
@ -161,12 +160,12 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
#endif #endif
close(STDIN_FILENO); close(STDIN_FILENO);
@@ -473,7 +463,14 @@ run_file(const char *filename, uid_t uid @@ -475,6 +465,14 @@
else if (pid == 0) {
char *nul = NULL; char *nul = NULL;
char **nenvp = &nul; char **nenvp = &nul;
+ char **pam_envp=0L;
+ char **pam_envp=0L;
+
+ PRIV_START + PRIV_START
+#ifdef WITH_PAM +#ifdef WITH_PAM
+ pam_envp = pam_getenvlist(pamh); + pam_envp = pam_getenvlist(pamh);
@ -176,16 +175,15 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
/* Set up things for the child; we want standard input from the /* Set up things for the child; we want standard input from the
* input file, and standard output and error sent to our output file. * input file, and standard output and error sent to our output file.
*/ */
@@ -492,8 +489,6 @@ run_file(const char *filename, uid_t uid @@ -493,7 +491,6 @@
close(fd_in); close(fd_in);
close(fd_out); close(fd_out);
- PRIV_START - PRIV_START
-
nice((tolower((int) queue) - 'a' + 1) * 2);
#ifdef WITH_SELINUX nice((tolower((int) queue) - 'a') * 2);
@@ -514,9 +509,9 @@ run_file(const char *filename, uid_t uid
@@ -515,9 +512,9 @@
chdir("/"); chdir("/");
@ -198,7 +196,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
PRIV_END PRIV_END
} }
/* We're the parent. Let's wait. /* We're the parent. Let's wait.
@@ -529,14 +524,6 @@ run_file(const char *filename, uid_t uid @@ -530,14 +527,6 @@
*/ */
waitpid(pid, (int *) NULL, 0); waitpid(pid, (int *) NULL, 0);
@ -213,7 +211,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
/* Send mail. Unlink the output file after opening it, so it /* Send mail. Unlink the output file after opening it, so it
* doesn't hang around after the run. * doesn't hang around after the run.
*/ */
@@ -567,8 +554,13 @@ run_file(const char *filename, uid_t uid @@ -568,8 +557,13 @@
unlink(newname); unlink(newname);
free(newname); free(newname);
@ -227,7 +225,7 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
PRIV_START PRIV_START
if (initgroups(pentry->pw_name, pentry->pw_gid)) if (initgroups(pentry->pw_name, pentry->pw_gid))
@@ -590,7 +582,20 @@ run_file(const char *filename, uid_t uid @@ -591,7 +585,20 @@
perr("Exec failed for mail command"); perr("Exec failed for mail command");
PRIV_END PRIV_END
@ -248,10 +246,10 @@ diff -up at-3.1.20/atd.c.pam at-3.1.20/atd.c
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
diff -up at-3.1.20/config.h.in.pam at-3.1.20/config.h.in diff -ur b/config.h.in a/config.h.in
--- at-3.1.20/config.h.in.pam 2015-12-18 21:29:24.000000000 +0100 --- b/config.h.in 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.20/config.h.in 2016-07-01 09:44:22.251683924 +0200 +++ a/config.h.in 2022-02-23 18:51:31.467570176 +0100
@@ -68,8 +68,8 @@ @@ -74,8 +74,8 @@
/* Define to 1 if you have the <nlist.h> header file. */ /* Define to 1 if you have the <nlist.h> header file. */
#undef HAVE_NLIST_H #undef HAVE_NLIST_H
@ -262,10 +260,10 @@ diff -up at-3.1.20/config.h.in.pam at-3.1.20/config.h.in
/* Define to 1 if you have the `pstat_getdynamic' function. */ /* Define to 1 if you have the `pstat_getdynamic' function. */
#undef HAVE_PSTAT_GETDYNAMIC #undef HAVE_PSTAT_GETDYNAMIC
diff -up at-3.1.20/configure.ac.pam at-3.1.20/configure.ac diff -ur b/configure.ac a/configure.ac
--- at-3.1.20/configure.ac.pam 2016-06-28 22:55:52.000000000 +0200 --- b/configure.ac 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.20/configure.ac 2016-07-01 09:45:23.268092527 +0200 +++ a/configure.ac 2022-02-23 18:53:08.516720324 +0100
@@ -78,7 +78,7 @@ AC_FUNC_GETLOADAVG @@ -97,7 +97,7 @@
AC_CHECK_FUNCS(getcwd mktime strftime setreuid setresuid sigaction waitpid) AC_CHECK_FUNCS(getcwd mktime strftime setreuid setresuid sigaction waitpid)
AC_CHECK_HEADERS(security/pam_appl.h, [ AC_CHECK_HEADERS(security/pam_appl.h, [
PAMLIB="-lpam" PAMLIB="-lpam"
@ -274,7 +272,7 @@ diff -up at-3.1.20/configure.ac.pam at-3.1.20/configure.ac
]) ])
dnl Checking for programs dnl Checking for programs
@@ -239,6 +239,13 @@ AC_ARG_WITH(daemon_username, @@ -260,6 +260,13 @@
) )
AC_SUBST(DAEMON_USERNAME) AC_SUBST(DAEMON_USERNAME)
@ -288,10 +286,10 @@ diff -up at-3.1.20/configure.ac.pam at-3.1.20/configure.ac
AC_ARG_WITH(selinux, AC_ARG_WITH(selinux,
[ --with-selinux Define to run with selinux (default=check)], [ --with-selinux Define to run with selinux (default=check)],
[], [],
diff -up at-3.1.20/Makefile.in.pam at-3.1.20/Makefile.in diff -ur b/Makefile.in a/Makefile.in
--- at-3.1.20/Makefile.in.pam 2016-07-01 09:44:22.250683901 +0200 --- b/Makefile.in 2022-02-23 18:33:26.999892289 +0100
+++ at-3.1.20/Makefile.in 2016-07-01 09:44:22.252683947 +0200 +++ a/Makefile.in 2022-02-23 18:53:28.600751396 +0100
@@ -68,7 +68,7 @@ LIST = Filelist Filelist.asc @@ -76,7 +76,7 @@
all: at atd atd.service atrun all: at atd atd.service atrun
at: $(ATOBJECTS) at: $(ATOBJECTS)
@ -300,9 +298,9 @@ diff -up at-3.1.20/Makefile.in.pam at-3.1.20/Makefile.in
rm -f $(CLONES) rm -f $(CLONES)
$(LN_S) -f at atq $(LN_S) -f at atq
$(LN_S) -f at atrm $(LN_S) -f at atrm
diff -up at-3.1.20/perm.c.pam at-3.1.20/perm.c diff -ur b/perm.c a/perm.c
--- at-3.1.20/perm.c.pam 2015-08-22 00:09:22.000000000 +0200 --- b/perm.c 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.20/perm.c 2016-07-01 09:44:22.252683947 +0200 +++ a/perm.c 2022-02-23 18:56:21.401018761 +0100
@@ -51,6 +51,14 @@ @@ -51,6 +51,14 @@
#define PRIV_END while(0) #define PRIV_END while(0)
#endif #endif
@ -318,7 +316,7 @@ diff -up at-3.1.20/perm.c.pam at-3.1.20/perm.c
/* Structures and unions */ /* Structures and unions */
@@ -108,18 +116,45 @@ user_in_file(const char *path, const cha @@ -108,18 +116,45 @@
int int
check_permission() check_permission()
{ {
@ -367,10 +365,10 @@ diff -up at-3.1.20/perm.c.pam at-3.1.20/perm.c
allow = user_in_file(ETCDIR "/at.allow", pentry->pw_name); allow = user_in_file(ETCDIR "/at.allow", pentry->pw_name);
if (allow==0 || allow==1) if (allow==0 || allow==1)
return allow; return allow;
diff -up at-3.1.20/privs.h.pam at-3.1.20/privs.h diff -ur b/privs.h a/privs.h
--- at-3.1.20/privs.h.pam 2015-08-22 00:09:22.000000000 +0200 --- b/privs.h 2022-01-29 17:42:19.000000000 +0100
+++ at-3.1.20/privs.h 2016-07-01 09:44:22.252683947 +0200 +++ a/privs.h 2022-02-23 18:58:20.920203690 +0100
@@ -144,3 +144,63 @@ extern gid_t real_gid, effective_gid, da @@ -144,3 +144,62 @@
#error "Cannot implement user ID swapping without setreuid or setresuid" #error "Cannot implement user ID swapping without setreuid or setresuid"
#endif #endif
#endif #endif
@ -433,4 +431,3 @@ diff -up at-3.1.20/privs.h.pam at-3.1.20/privs.h
+} +}
+ +
+#endif +#endif
+

@ -2,37 +2,34 @@
Summary: Job spooling tools Summary: Job spooling tools
Name: at Name: at
Version: 3.1.23 Version: 3.2.5
Release: 11%{?dist} Release: 10%{?dist}
# http://packages.debian.org/changelogs/pool/main/a/at/current/copyright # http://packages.debian.org/changelogs/pool/main/a/at/current/copyright
# + install-sh is MIT license with changes under Public Domain # + install-sh is MIT license with changes under Public Domain
License: GPLv3+ and GPLv2+ and ISC and MIT and Public Domain License: GPL-3.0-or-later AND GPL-2.0-or-later AND ISC
URL: http://ftp.debian.org/debian/pool/main/a/at URL: http://ftp.debian.org/debian/pool/main/a/at
Source: http://ftp.debian.org/debian/pool/main/a/at/at_%{version}.orig.tar.gz Source: http://software.calhariz.com/at/at_%{version}.orig.tar.gz
# git upstream source git://git.debian.org/git/collab-maint/at.git # git upstream source git://git.debian.org/git/collab-maint/at.git
Source1: pam_atd Source1: pam_atd
Source3: atd.sysconf Source3: atd.sysconf
Source5: atd.systemd Source5: atd.systemd
Patch: at-aarch64.patch Patch: at-aarch64.patch
Patch: at-3.1.18-make.patch Patch: at-3.2.5-make.patch
Patch: at-3.1.20-pam.patch Patch: at-3.2.5-pam.patch
Patch: at-3.1.14-opt_V.patch Patch: at-3.1.14-opt_V.patch
Patch: at-3.1.20-shell.patch Patch: at-3.2.2-shell.patch
Patch: at-3.1.18-nitpicks.patch Patch: at-3.2.5-nitpicks.patch
Patch: at-3.1.14-fix_no_export.patch Patch: at-3.1.14-fix_no_export.patch
Patch: at-3.1.14-mailwithhostname.patch Patch: at-3.2.5-mailwithhostname.patch
Patch: at-3.1.14-usePOSIXtimers.patch Patch: at-3.2.5-aborted-jobs.patch
Patch: at-3.1.20-aborted-jobs.patch Patch: at-3.2.5-noabort.patch
Patch: at-3.1.18-noabort.patch
Patch: at-3.1.16-fclose-error.patch Patch: at-3.1.16-fclose-error.patch
Patch: at-3.1.16-clear-nonjobs.patch Patch: at-3.1.16-clear-nonjobs.patch
Patch: at-3.1.18-utc-dst.patch Patch: at-3.2.2-lock-locks.patch
Patch: at-3.1.20-lock-locks.patch
Patch: at-3.1.23-document-n.patch Patch: at-3.1.23-document-n.patch
Patch: at-3.1.20-log-jobs.patch Patch: at-3.1.20-log-jobs.patch
Patch: at-3.2.23-coverity-fix.patch
BuildRequires: gcc BuildRequires: gcc
BuildRequires: flex flex-static bison autoconf BuildRequires: flex flex-static bison autoconf
@ -72,10 +69,9 @@ cp %{SOURCE1} .
%autopatch -p1 %autopatch -p1
%build %build
# at-3.1.14-usePOSIXtimers.patch touches configure.in
autoconf
# uselles files # uselles files
rm -f lex.yy.* y.tab.* rm -f lex.yy.* y.tab.*
%configure --with-atspool=%{_localstatedir}/spool/at/spool \ %configure --with-atspool=%{_localstatedir}/spool/at/spool \
--with-jobdir=%{_localstatedir}/spool/at \ --with-jobdir=%{_localstatedir}/spool/at \
--with-daemon_username=root \ --with-daemon_username=root \
@ -90,21 +86,22 @@ make install \
DAEMON_USERNAME=`id -nu` \ DAEMON_USERNAME=`id -nu` \
DAEMON_GROUPNAME=`id -ng` \ DAEMON_GROUPNAME=`id -ng` \
DESTDIR=%{buildroot} \ DESTDIR=%{buildroot} \
sbindir=%{buildroot}%{_prefix}/sbin\ sbindir=%{_prefix}/sbin \
bindir=%{buildroot}%{_bindir}\ bindir=%{_bindir} \
prefix=%{buildroot}%{_prefix}\ datadir=%{_datadir} \
exec_prefix=%{buildroot}%{_prefix}\ prefix=%{_prefix} \
docdir=%{buildroot}/usr/doc\ exec_prefix=%{_prefix} \
mandir=%{buildroot}%{_mandir}\ docdir=%{_prefix}/doc \
etcdir=%{buildroot}%{_sysconfdir} \ mandir=%{_mandir} \
ATJOB_DIR=%{buildroot}%{_localstatedir}/spool/at \ etcdir=%{_sysconfdir} \
ATSPOOL_DIR=%{buildroot}%{_localstatedir}/spool/at/spool \ ATJOB_DIR=%{_localstatedir}/spool/at \
ATSPOOL_DIR=%{_localstatedir}/spool/at/spool \
INSTALL_ROOT_USER=`id -nu` \ INSTALL_ROOT_USER=`id -nu` \
INSTALL_ROOT_GROUP=`id -nu`; INSTALL_ROOT_GROUP=`id -nu`;
echo > %{buildroot}%{_sysconfdir}/at.deny echo > %{buildroot}%{_sysconfdir}/at.deny
mkdir docs mkdir docs
cp %{buildroot}/%{_prefix}/doc/at/* docs/ cp %{buildroot}%{_prefix}/doc/at/* docs/
mkdir -p %{buildroot}%{_sysconfdir}/pam.d mkdir -p %{buildroot}%{_sysconfdir}/pam.d
install -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/pam.d/atd install -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/pam.d/atd
@ -163,26 +160,62 @@ chown root:root %{_localstatedir}/spool/at/.SEQ
%{_bindir}/atrm %{_bindir}/atrm
%{_bindir}/atq %{_bindir}/atq
%attr(4755,root,root) %{_bindir}/at %attr(4755,root,root) %{_bindir}/at
%{_datadir}/at/batch-job
%attr(0644,root,root) /%{_unitdir}/atd.service %attr(0644,root,root) /%{_unitdir}/atd.service
%changelog %changelog
* Fri Apr 01 2022 Jan Staněk <jstanek@redhat.com> - 3.1.23-10 * Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 3.2.5-10
- Add preceding newline to delimiter in at-3.1.20-shell.patch - Bump release for June 2024 mass rebuild
Resolves: rhbz#2070858
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.5-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.5-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.5-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Mon Jun 26 2023 Ondřej Pohořelský <opohorel@redhat.com> - 3.2.5-6
- Convert licenses to SPDX format
- Dropped MIT and Public Domain license as they are not present in upstream sources
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.5-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Mar 31 2022 Jan Staněk <jstanek@redhat.com> - 3.2.5-3
- Add preceding newline to delimiter in at-3.2.2-shell.patch
* Tue Mar 08 2022 Ondřej Pohořelský <opohorel@redhat.com> - 3.2.5-2
- Add mising directory and batch-job script into at-3.2.5-make.patch
- Defined datadir in %%install section and listed batch-job in %%files section
* Tue Mar 01 2022 Ondřej Pohořelský <opohorel@redhat.com> - 3.2.5-1
- Update to new upstream release
- Removed at-3.1.14-usePOSIXtimers.patch and at-3.2.23-coverity-fix.patch, because
upstream implemented them
- Defined folder paths without %%{buildroot} in order to make them work with latest
Makefile changes
- Resolves: rhbz#2048132
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> * Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.2-2
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Related: rhbz#1991688
* Tue Jun 22 2021 Mohan Boddu <mboddu@redhat.com> * Fri May 21 2021 Ondřej Pohořelský <opohorel@redhat.com> - 3.2.2-1
- Rebuilt for RHEL 9 BETA for openssl 3.0 - Update to new upstream release
Related: rhbz#1971065
* Fri Apr 23 2021 Jan Staněk <jstanek@redhat.com> - 3.1.23-8 * Fri Apr 16 2021 Jan Staněk <jstanek@redhat.com> - 3.1.23-8
- Patch issues found by coverity. Resolves: rhbz#1938678 - Patch issues found by coverity (rhbz#1938678)
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 3.1.23-7 * Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 3.1.23-7
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - Rebuilt for updated systemd-rpm-macros
See https://pagure.io/fesco/issue/2583.
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.1.23-6 * Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.1.23-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

Loading…
Cancel
Save