Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package at for openSUSE:Factory checked in at 2022-02-23 16:25:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/at (Old) and /work/SRC/openSUSE:Factory/.at.new.1958 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "at" Wed Feb 23 16:25:55 2022 rev:82 rq:956825 version:3.2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/at/at.changes 2021-11-27 00:51:02.310861286 +0100 +++ /work/SRC/openSUSE:Factory/.at.new.1958/at.changes 2022-02-23 16:26:32.395509023 +0100 @@ -1,0 +2,23 @@ +Tue Feb 22 16:24:52 UTC 2022 - Danilo Spinella <danilo.spine...@suse.com> + +- Update to version 3.2.4: + * Upstream SUSE patches +- Update to version 3.2.3: + * Fix two typos on documentation + * Upstream SUSE patches + * Various improvements to the code and the build system +- Refresh patches: + * at-3.1.16-handle_malformed_jobs.patch + * at-3.2.2.patch + * at-backport-old-privs.patch + * harden_atd.service.patch +- Drop upstreamed patches: + * at-3.1.13-leak-fix.patch + * at-3.1.13-massive_batch.patch + * at-3.1.14-joblist.patch + * at-3.1.14-usePOSIXtimers.patch + * at-3.1.8-jobdir-mtime.patch + * at-atq-timeformat.patch + * at-secure_getenv.patch + +------------------------------------------------------------------- Old: ---- at-3.1.13-leak-fix.patch at-3.1.13-massive_batch.patch at-3.1.14-joblist.patch at-3.1.14-usePOSIXtimers.patch at-3.1.8-jobdir-mtime.patch at-atq-timeformat.patch at-secure_getenv.patch at_3.2.2.orig.tar.gz New: ---- at_3.2.4.orig.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ at.spec ++++++ --- /var/tmp/diff_new_pack.eKvWAN/_old 2022-02-23 16:26:33.315509056 +0100 +++ /var/tmp/diff_new_pack.eKvWAN/_new 2022-02-23 16:26:33.319509057 +0100 @@ -1,7 +1,7 @@ # # spec file for package at # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ %define _fillupdir %{_localstatedir}/adm/fillup-templates %endif Name: at -Version: 3.2.2 +Version: 3.2.4 Release: 0 Summary: A Job Manager License: GPL-2.0-or-later @@ -32,29 +32,18 @@ Source5: atd.service Source6: system-user-at.conf Patch0: at-3.2.2.patch -Patch4: at-3.1.14-joblist.patch -Patch10: at-3.1.13-massive_batch.patch Patch11: at-3.1.13-documentation-dir.patch -# PATCH-FIX-UPSTREAM clean-up opened descriptors (bnc#533454, bnc#523346) -Patch15: at-3.1.13-leak-fix.patch #PATCH-FIX-OPENSUSE add proper system users to the deny list Patch16: at-3.1.8-denylist.patch #PATCH-FIX-UPSTREAM plan jobs with past time to tomorrow (bnc#672586) Patch17: at-3.1.13-tomorrow.patch -#PATCH-FIX-UPSTREAM wrong mtime handling of jobdir (bnc#680113) -Patch19: at-3.1.8-jobdir-mtime.patch Patch20: at-3.1.14-parse-suse-sysconfig.patch #PATCH-FIX-UPSTREAM fix makefile dependencies Patch21: at-3.1.14-makefile-deps.patch #PATCH-FIX-OPENSUSE Set pid dir to /run not /var/run Patch22: at-piddir.patch -Patch23: at-secure_getenv.patch #PATCH-FIX-OPENSUSE backport privs from 3.1.8 (bnc#849720) Patch24: at-backport-old-privs.patch -#PATCH-FEATURE-UPSTREAM introduce -o <timeformat> argument for atq (bnc#879402) -Patch25: at-atq-timeformat.patch -#PATCH-FIX-OPENSUSE use posix timers to avoid the need of suspend/resume hacks. -Patch27: at-3.1.14-usePOSIXtimers.patch Patch28: at-adjust_load_to_cpu_count.patch # PATCH-FIX-UPSTREAM bnc#945124 kstreit...@suse.com -- don't loop on corrupt files and prevent their creation Patch29: at-3.1.16-handle_malformed_jobs.patch ++++++ at-3.1.14-parse-suse-sysconfig.patch ++++++ --- /var/tmp/diff_new_pack.eKvWAN/_old 2022-02-23 16:26:33.351509058 +0100 +++ /var/tmp/diff_new_pack.eKvWAN/_new 2022-02-23 16:26:33.355509057 +0100 @@ -87,7 +87,7 @@ +PKG_CHECK_MODULES([HX], [libHX]) + + AC_CHECK_FUNCS([__secure_getenv secure_getenv]) dnl Checks for header files. AC_HEADER_DIRENT - AC_HEADER_STDC ++++++ at-3.1.16-handle_malformed_jobs.patch ++++++ --- /var/tmp/diff_new_pack.eKvWAN/_old 2022-02-23 16:26:33.367509058 +0100 +++ /var/tmp/diff_new_pack.eKvWAN/_new 2022-02-23 16:26:33.367509058 +0100 @@ -1,17 +1,3 @@ -Index: at-3.1.13/at.c -=================================================================== ---- at-3.1.13.orig/at.c -+++ at-3.1.13/at.c -@@ -319,7 +319,8 @@ writefile(time_t runtimer, char queue) - * bit. Yes, this is a kluge. - */ - cmask = umask(S_IRUSR | S_IWUSR | S_IXUSR); -- 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); - - if ((fd2 = dup(fd)) < 0) Index: at-3.1.13/atd.c =================================================================== --- at-3.1.13.orig/atd.c ++++++ at-3.2.2.patch ++++++ --- /var/tmp/diff_new_pack.eKvWAN/_old 2022-02-23 16:26:33.379509058 +0100 +++ /var/tmp/diff_new_pack.eKvWAN/_new 2022-02-23 16:26:33.383509058 +0100 @@ -6,68 +6,68 @@ $(CC) -c $(CFLAGS) $(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)$(atdatadir) -- $(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)$(atdatadir) -+ $(INSTALL) -m 755 -d $(IROOT)$(docdir) -+ $(INSTALL) -m 755 -d $(IROOT)$(atdocdir) -+ $(INSTALL) -m 755 -d $(IROOT)$(ATJOB_DIR) -+ $(INSTALL) -m 755 -d $(IROOT)$(ATSPOOL_DIR) -+ chmod 1770 $(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 640 at.deny $(IROOT)$(etcdir)/ -+ $(INSTALL) -m 6755 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) -g root -o root -m 755 batch-job $(IROOT)$(atdatadir) -- $(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) -m 755 batch-job $(IROOT)$(atdatadir) -+ $(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)/ +- $(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)$(ATJOB_DIR) ++ $(INSTALL) -m 755 -d $(DESTDIR)$(ATSPOOL_DIR) ++ chmod 1770 $(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 640 at.deny $(DESTDIR)$(etcdir)/ ++ $(INSTALL) -m 6755 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 $(IROOT)$(man8dir)/atrun.8 -+ $(INSTALL) -m 644 tmpman $(IROOT)$(man8dir)/atrun.8 +- $(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 $(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* +- $(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* if test x"$(systemdsystemunitdir)" != xno; then \ -- $(INSTALL) -o root -g root -m 755 -d $(IROOT)$(systemdsystemunitdir); \ -- $(INSTALL) -o root -g root -m 644 atd.service $(IROOT)$(systemdsystemunitdir); \ -+ $(INSTALL) -m 755 -d $(IROOT)$(systemdsystemunitdir); \ -+ $(INSTALL) -m 644 atd.service $(IROOT)$(systemdsystemunitdir); \ +- $(INSTALL) -o root -g root -m 755 -d $(DESTDIR)$(systemdsystemunitdir); \ +- $(INSTALL) -o root -g root -m 644 atd.service $(DESTDIR)$(systemdsystemunitdir); \ ++ $(INSTALL) -m 755 -d $(DESTDIR)$(systemdsystemunitdir); \ ++ $(INSTALL) -m 644 atd.service $(DESTDIR)$(systemdsystemunitdir); \ fi dist: checkin $(DIST) $(LIST) Filelist.asc ++++++ at-backport-old-privs.patch ++++++ --- /var/tmp/diff_new_pack.eKvWAN/_old 2022-02-23 16:26:33.395509059 +0100 +++ /var/tmp/diff_new_pack.eKvWAN/_new 2022-02-23 16:26:33.399509059 +0100 @@ -11,10 +11,10 @@ at.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) -Index: at-3.2.0/at.c +Index: at-3.2.4/at.c =================================================================== ---- at-3.2.0.orig/at.c -+++ at-3.2.0/at.c +--- at-3.2.4.orig/at.c ++++ at-3.2.4/at.c @@ -155,18 +155,11 @@ sigc(int signo) /* If the user presses ^C, remove the spool file and exit */ @@ -40,7 +40,7 @@ */ cmask = umask(S_IRUSR | S_IWUSR | S_IXUSR); - seteuid(real_uid); - 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); - seteuid(effective_uid); @@ -54,7 +54,7 @@ PRIV_END -@@ -719,11 +708,7 @@ process_jobs(int argc, char **argv, int +@@ -729,11 +718,7 @@ process_jobs(int argc, char **argv, int switch (what) { case ATRM: @@ -67,7 +67,7 @@ if (queue == '=') { fprintf(stderr, "Warning: deleting running job\n"); -@@ -733,7 +718,7 @@ process_jobs(int argc, char **argv, int +@@ -743,7 +728,7 @@ process_jobs(int argc, char **argv, int rc = EXIT_FAILURE; } @@ -76,7 +76,7 @@ done = 1; break; -@@ -743,21 +728,25 @@ process_jobs(int argc, char **argv, int +@@ -753,22 +738,26 @@ process_jobs(int argc, char **argv, int FILE *fp; int ch; @@ -96,6 +96,7 @@ + PRIV_START fclose(fp); + PRIV_END + fp = NULL; } else { perr("Cannot open %.500s", dirent->d_name); ++++++ at_3.2.2.orig.tar.gz -> at_3.2.4.orig.tar.gz ++++++ ++++ 2539 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/.gitignore new/at-3.2.4/.gitignore --- old/at-3.2.2/.gitignore 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/.gitignore 2022-01-29 17:42:19.000000000 +0100 @@ -1,2 +1,21 @@ autom4te.cache *~ +Makefile +*.o +at +at.1 +at.allow.5 +atd +atd.8 +atd.service +atq +atrm +atrun +atrun.8 +batch +config.h +config.log +config.status +lex.yy.c +y.tab.c +y.tab.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/CONTRIBUTING.md new/at-3.2.4/CONTRIBUTING.md --- old/at-3.2.2/CONTRIBUTING.md 1970-01-01 01:00:00.000000000 +0100 +++ new/at-3.2.4/CONTRIBUTING.md 2022-01-29 17:42:19.000000000 +0100 @@ -0,0 +1,14 @@ +You may contribute in several ways: + +* PR at https://salsa.debian.org/debian/at + +* Bug report at https://bugs.debian.org + +* Patch file by email. + +Please include a nice description of your changes. Split your changes +into comprehensive chunks if your patch is longer than a dozen lines. +If your patch does more that one thing, split it too. + +If you want to start working on a new feature please open PR at +https://salsa.debian.org or a bug report at https://bugs.debian.org. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/ChangeLog new/at-3.2.4/ChangeLog --- old/at-3.2.2/ChangeLog 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/ChangeLog 2022-01-29 17:42:19.000000000 +0100 @@ -220,3 +220,39 @@ at 3.2.2 (2021-04-25): Jose M Calhariz Add helper script batch-job + +at 3.2.3 (2022-01-29): + Jose M Calhariz + Fix two typos on documentation + Giulio Benetti + MR14 - Makefile: fix parallel build failure + MR12 - Makefile.in: use DESTDIR instead of IROOT + MR11 - Use quotes to include config.h since it is a local file. + MR8 - .gitignore: add all files produced during building + MR13 - getloadavg: use standard fcntl.h for open(), close(), read() and write() + Danilo Spinella + MR16 - Fix leaks in at.c + MR19 - Avoid sleeping when SIGHUP has been received + MR17 - Set PIDDIR to /run if exists on the system + Jan Stan??k + MR15 - Address issues raised by static analysis + +at 3.2.4 (2022-01-29): + Danillo Spinella + Use POSIX timers to wait on next job + Add timeformat argument in at.c + Use secure_getenv when available + Add O_SYNC option when opening atjob file + Fix mtime check in atd.c + https://bugzilla.suse.com/show_bug.cgi?id=680113 + MR18 - Use POSIX timers to wait on next job + Upstreaming openSUSE patch: https://build.opensuse.org/package/view_file/Base:System/at/at-3.1.14-usePOSIXtimers.patch?expand=0&rev=d84f9fe442d5b5cce89c22d52581dfa4 + MR21 - Add timeformat argument in at.c + Upstreaming openSUSE patch: https://build.opensuse.org/package/view_file/Base:System/at/at-atq-timeformat.patch?expand=1 + MR23 - Use secure_getenv when available + https://build.opensuse.org/package/view_file/Base:System/at/at-secure_getenv.patch?expand=1 + MR25 - Fix mtime check in atd.c + https://bugzilla.suse.com/show_bug.cgi?id=680113 + MR22 - Print the selected jobs in atq + https://build.opensuse.org/package/view_file/Base:System/at/at-3.1.14-joblist.patch?expand=1 + MR24 - Add O_SYNC option when opening atjob file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/README new/at-3.2.4/README --- old/at-3.2.2/README 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/README 2022-01-29 17:42:19.000000000 +0100 @@ -1,4 +1,4 @@ -This is version of 3.1.x of at, for running commands at a +This is version of 3.2.x of at, for running commands at a specified time. To install, do a $ ./configure diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/at.1.in new/at-3.2.4/at.1.in --- old/at-3.2.2/at.1.in 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/at.1.in 2022-01-29 17:42:19.000000000 +0100 @@ -29,10 +29,22 @@ .I job [...\&] .br +.B at +.RB [ \-V ] +.RB \-l +.RB [ -o +.IR timeformat ] +.I [job +.IR ... ] +.br .B atq .RB [ \-V ] .RB [ \-q .IR queue ] +.RB [ -o +.IR timeformat ] +.I [job +.IR ... ] .br .B at .RB [ \-rd ] @@ -269,6 +281,9 @@ .B \-c cats the jobs listed on the command line to standard output. +.TP 8 +.BI \-o " fmt" +strftime-like time format used for the job list .SH FILES .I @ATJBD@ .br diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/at.c new/at-3.2.4/at.c --- old/at-3.2.2/at.c 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/at.c 2022-01-29 17:42:19.000000000 +0100 @@ -97,6 +97,12 @@ #define DEFAULT_QUEUE 'a' #define BATCH_QUEUE 'b' +#ifndef HAVE_SECURE_GETENV +# ifdef HAVE___SECURE_GETENV +# define secure_getenv __secure_getenv +# endif +#endif + enum { ATQ, BATCH, ATRM, AT, CAT }; /* what program we want to run */ @@ -128,6 +134,7 @@ char atqueue = 0; /* which queue to examine for jobs (atq) */ char atverify = 0; /* verify time instead of queuing job */ char *mail_rcpt = (char *) 0; /* user to send mail to */ +char *timeformat = TIMEFORMAT_POSIX; /* time format (atq) */ /* Function declarations */ @@ -135,7 +142,10 @@ static void alarmc(int signo); static char *cwdname(void); static void writefile(time_t runtimer, char queue); -static void list_jobs(void); +static void list_jobs(long *, int); +static int in_job_list(long, long *, int); +static long *get_job_list(int, char *[], int *); +static char *at_getenv(char* env); /* Signal catching functions */ @@ -317,7 +327,7 @@ */ cmask = umask(S_IRUSR | S_IWUSR | S_IXUSR); seteuid(real_uid); - 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); seteuid(effective_uid); @@ -370,7 +380,7 @@ */ mailname = getlogin(); if (mailname == NULL) - mailname = getenv("LOGNAME"); + mailname = at_getenv("LOGNAME"); if (mailname == NULL || mailname[0] == '\0' || getpwnam(mailname) == NULL) { pass_entry = getpwuid(real_uid); if (pass_entry != NULL) @@ -535,7 +545,7 @@ /* This line maybe superfluous after commit 11cb731bb560eb7bff4889c5528d5f776606b0d3 */ runtime = localtime(&runtimer); - strftime(timestr, TIMESIZE, TIMEFORMAT_POSIX, runtime); + strftime(timestr, TIMESIZE, timeformat, runtime); fprintf(stderr, "job %ld at %s\n", jobno, timestr); /* Signal atd, if present. Usual precautions taken... */ @@ -545,17 +555,27 @@ 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; @@ -587,8 +607,20 @@ return; } +static int +in_job_list(long job, long *joblist, int len) +{ + int i; + + for (i = 0; i < len; i++) + if (job == joblist[i]) + return 1; + + return 0; +} + static void -list_jobs(void) +list_jobs(long *joblist, int len) { /* List all a user's jobs in the queue, by looping through ATJOB_DIR, * or everybody's if we are root @@ -627,19 +659,26 @@ if (sscanf(dirent->d_name, "%c%5lx%8lx", &queue, &jobno, &ctm) != 3) continue; + /* If jobs are given, only list those jobs */ + if (joblist && !in_job_list(jobno, joblist, len)) + continue; + if (atqueue && (queue != atqueue)) continue; runtimer = 60 * (time_t) ctm; runtime = localtime(&runtimer); - strftime(timestr, TIMESIZE, TIMEFORMAT_POSIX, runtime); + strftime(timestr, TIMESIZE, timeformat, runtime); if ((pwd = getpwuid(buf.st_uid))) printf("%ld\t%s %c %s\n", jobno, timestr, queue, pwd->pw_name); else printf("%ld\t%s %c\n", jobno, timestr, queue); } + + closedir(spool); + PRIV_END } @@ -722,6 +761,8 @@ putchar(ch); } done = 1; + fclose(fp); + fp = NULL; } else { perr("Cannot open %.500s", dirent->d_name); @@ -748,6 +789,29 @@ return rc; } /* delete_jobs */ +static long * +get_job_list(int argc, char *argv[], int *joblen) +{ + int i, len; + long *joblist; + char *ep; + + joblist = NULL; + len = argc; + if (len > 0) { + joblist = (long *) mymalloc(len * sizeof(*joblist)); + for (i = 0; i < argc; i++) { + errno = 0; + if ((joblist[i] = strtol(argv[i], &ep, 10)) < 0 || + ep == argv[i] || *ep != '\0' || errno) + panic("invalid job number"); + } + } + + *joblen = len; + return joblist; +} + /* Global functions */ void * @@ -773,6 +837,8 @@ char *options = "q:f:Mmu:bvlrdhVct:"; /* default options for at */ int disp_version = 0; time_t timer = 0; + long *joblist = NULL; + int joblen = 0; struct passwd *pwe; struct group *ge; @@ -801,7 +867,7 @@ */ if (strcmp(pgm, "atq") == 0) { program = ATQ; - options = "hq:V"; + options = "hq:Vo:"; } else if (strcmp(pgm, "atrm") == 0) { program = ATRM; options = "hV"; @@ -887,6 +953,10 @@ } break; + case 'o': + timeformat = optarg; + break; + default: usage(); break; @@ -912,8 +982,9 @@ case ATQ: REDUCE_PRIV(daemon_uid, daemon_gid) - - list_jobs(); + if (queue_set == 0) + joblist = get_job_list(argc - optind, argv + optind, &joblen); + list_jobs(joblist, joblen); break; case ATRM: @@ -1003,3 +1074,14 @@ exit(EXIT_SUCCESS); } +#if defined (HAVE_SECURE_GETENV) || defined(HAVE___SECURE_GETENV) +static +char *at_getenv(char* env) { + return secure_getenv(env); +} +#else +char *at_getenv(char* env) { + return getenv(env); +} +#endif + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/atd.c new/at-3.2.4/atd.c --- old/at-3.2.2/atd.c 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/atd.c 2022-01-29 17:42:19.000000000 +0100 @@ -108,9 +108,10 @@ static double load_avg = LOADAVG_MX; static time_t now; static time_t last_chg; -static int nothing_to_do; +static int nothing_to_do = 0; unsigned int batch_interval; static int run_as_daemon = 0; +static int hupped = 0; static volatile sig_atomic_t term_signal = 0; @@ -141,10 +142,10 @@ return; } -RETSIGTYPE -sdummy(int dummy) +RETSIGTYPE +set_hup(int dummy) { - /* Empty signal handler */ + hupped = 1; nothing_to_do = 0; return; } @@ -635,10 +636,11 @@ if (stat(".", &buf) == -1) perr("Cannot stat " ATJOB_DIR); - if (nothing_to_do && buf.st_mtime <= last_chg) + if (nothing_to_do && buf.st_mtime == last_chg) return next_job; last_chg = buf.st_mtime; + hupped = 0; if ((spool = opendir(".")) == NULL) perr("Cannot read " ATJOB_DIR); @@ -771,6 +773,54 @@ return next_job; } +#ifdef HAVE_CLOCK_GETTIME +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 @@ -876,7 +926,7 @@ sigaction(SIGCHLD, &act, NULL); if (!run_as_daemon) { - now = time(NULL); + now = atd_gettime(); run_loop(); exit(EXIT_SUCCESS); } @@ -888,7 +938,7 @@ */ sigaction(SIGHUP, NULL, &act); - act.sa_handler = sdummy; + act.sa_handler = set_hup; sigaction(SIGHUP, &act, NULL); sigaction(SIGTERM, NULL, &act); @@ -899,14 +949,16 @@ act.sa_handler = set_term; sigaction(SIGINT, &act, NULL); + timer_setup(); daemon_setup(); do { now = time(NULL); next_invocation = run_loop(); - if (next_invocation > now) { - sleep(next_invocation - now); + if ((next_invocation > now) && (!hupped)) { + atd_setalarm(next_invocation); } + hupped = 0; } while (!term_signal); daemon_cleanup(); exit(EXIT_SUCCESS); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/config.h.in new/at-3.2.4/config.h.in --- old/at-3.2.2/config.h.in 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/config.h.in 2022-01-29 17:42:19.000000000 +0100 @@ -19,6 +19,9 @@ /* Define to 1 if compiler supports __attribute__((noreturn)) */ #undef HAVE_ATTRIBUTE_NORETURN +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H @@ -77,6 +80,9 @@ /* Define to 1 if you have the `pstat_getdynamic' function. */ #undef HAVE_PSTAT_GETDYNAMIC +/* Define to 1 if you have the `secure_getenv' function. */ +#undef HAVE_SECURE_GETENV + /* Define to 1 if you have the <security/pam_appl.h> header file. */ #undef HAVE_SECURITY_PAM_APPL_H @@ -136,6 +142,9 @@ /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H +/* Define to 1 if you have the `timer_create' function. */ +#undef HAVE_TIMER_CREATE + /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H @@ -145,6 +154,9 @@ /* Define to 1 if you have the `waitpid' function. */ #undef HAVE_WAITPID +/* Define to 1 if you have the `__secure_getenv' function. */ +#undef HAVE___SECURE_GETENV + /* Define to 1 if we need to provide our own yywrap() */ #undef NEED_YYWRAP @@ -195,6 +207,28 @@ <sys/cpustats.h>. */ #undef UMAX4_3 +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + /* Define if you are building with_selinux */ #undef WITH_SELINUX @@ -202,6 +236,16 @@ `char[]'. */ #undef YYTEXT_POINTER +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + /* Define to empty if `const' does not conform to ANSI C. */ #undef const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/configure.ac new/at-3.2.4/configure.ac --- old/at-3.2.2/configure.ac 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/configure.ac 2022-01-29 17:42:19.000000000 +0100 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([at],[3.2.2]) +AC_INIT([at],[3.2.4]) AC_CONFIG_SRCDIR(at.c) AC_PREFIX_DEFAULT(/usr) @@ -17,8 +17,8 @@ AC_CANONICAL_HOST dnl Checks for programs. - -AC_PROG_CC +AC_USE_SYSTEM_EXTENSIONS +AC_PROG_CC_STDC AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_YACC @@ -52,6 +52,7 @@ [Define to 1 if we need to provide our own yywrap()]) ) +AC_CHECK_FUNCS([__secure_getenv secure_getenv]) dnl Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC @@ -139,7 +140,9 @@ AC_SUBST(systemdsystemunitdir, [$with_systemdsystemunitdir]) AC_MSG_CHECKING(location of pid file) -if test -d /var/run ; then +if test -d /run ; then + PIDDIR=/run +elif test -d /var/run ; then PIDDIR=/var/run elif test -d /usr/run ; then PIDDIR=/usr/run @@ -276,6 +279,12 @@ 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_SEARCH_LIBS([clock_gettime],[rt]) +AC_CHECK_FUNCS([clock_gettime]) + AC_MSG_CHECKING(groupname to run under) AC_ARG_WITH(daemon_groupname, [ --with-daemon_groupname=DAEMON_GROUPNAME Groupname to run under (default daemon) ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/daemon.c new/at-3.2.4/daemon.c --- old/at-3.2.2/daemon.c 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/daemon.c 2022-01-29 17:42:19.000000000 +0100 @@ -122,18 +122,23 @@ /* 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 @@ fcntl(fd, F_SETFD, FD_CLOEXEC); PRIV_END + /* See the above comment. */ + /* coverity[leaked_storage: FALSE] */ return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/getloadavg.c new/at-3.2.4/getloadavg.c --- old/at-3.2.2/getloadavg.c 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/getloadavg.c 2022-01-29 17:42:19.000000000 +0100 @@ -66,11 +66,10 @@ /* This should always be first. */ #ifdef HAVE_CONFIG_H -#include <config.h> +#include "config.h" #endif -#include "lisp.h" -#include "sysfile.h" /* for encapsulated open, close, read, write */ +#include <fcntl.h> /* for encapsulated open, close, read, write */ #ifndef HAVE_GETLOADAVG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/panic.c new/at-3.2.4/panic.c --- old/at-3.2.2/panic.c 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/panic.c 2022-01-29 17:42:19.000000000 +0100 @@ -95,7 +95,8 @@ fprintf(stderr, "Usage: at [-V] [-q x] [-f file] [-u username] [-mMlbv] timespec ...\n" " at [-V] [-q x] [-f file] [-u username] [-mMlbv] -t time\n" " at -c job ...\n" - " atq [-V] [-q x]\n" + " at [-V] -l [-o timeformat] [job ...]\n" + " atq [-V] [-q x] [-o timeformat] [job ...]\n" " at [ -rd ] job ...\n" " atrm [-V] job ...\n" " batch\n"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/posixtm.c new/at-3.2.4/posixtm.c --- old/at-3.2.2/posixtm.c 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/posixtm.c 2022-01-29 17:42:19.000000000 +0100 @@ -23,7 +23,7 @@ /* Yacc-based version written by Jim Kingdon and David MacKenzie. Rewritten by Jim Meyering. */ -#include <config.h> +#include "config.h" #include "posixtm.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/at-3.2.2/release new/at-3.2.4/release --- old/at-3.2.2/release 2021-04-25 03:31:30.000000000 +0200 +++ new/at-3.2.4/release 2022-01-29 17:42:19.000000000 +0100 @@ -4,7 +4,7 @@ VERSION=$(grep AC_INIT configure.ac | cut -f 2 -d , | tr -d ")" | tr -d " []") echo "Going to release version: $VERSION" -tail ChangeLog +tail -n20 ChangeLog echo "Press enter to continue:" read enter autoconf ++++++ harden_atd.service.patch ++++++ --- /var/tmp/diff_new_pack.eKvWAN/_old 2022-02-23 16:26:33.511509063 +0100 +++ /var/tmp/diff_new_pack.eKvWAN/_new 2022-02-23 16:26:33.515509063 +0100 @@ -1,7 +1,7 @@ -Index: at-3.2.2/atd.service.in +Index: at-3.2.4/atd.service.in =================================================================== ---- at-3.2.2.orig/atd.service.in -+++ at-3.2.2/atd.service.in +--- at-3.2.4.orig/atd.service.in ++++ at-3.2.4/atd.service.in @@ -4,6 +4,17 @@ Documentation=man:atd(8) After=remote-fs.target nss-user-lookup.target