new upstream release
- correct the DST correction when using UTC time specification (#1320322)
This commit is contained in:
parent
2f9ec0f869
commit
4e99767fd3
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ at_3.1.12.orig.tar.gz
|
|||||||
/at_3.1.13.orig.tar.gz
|
/at_3.1.13.orig.tar.gz
|
||||||
/at_3.1.14.orig.tar.gz
|
/at_3.1.14.orig.tar.gz
|
||||||
/at_3.1.16.orig.tar.gz
|
/at_3.1.16.orig.tar.gz
|
||||||
|
/at_3.1.18.orig.tar.gz
|
||||||
|
@ -1,154 +0,0 @@
|
|||||||
diff -up at-3.1.14/config.h.in.selinux at-3.1.14/config.h.in
|
|
||||||
--- at-3.1.14/config.h.in.selinux 2013-09-26 15:06:55.177049852 +0200
|
|
||||||
+++ at-3.1.14/config.h.in 2013-09-26 15:06:55.180049850 +0200
|
|
||||||
@@ -71,6 +71,9 @@
|
|
||||||
/* Define if you are building with_pam */
|
|
||||||
#undef WITH_PAM
|
|
||||||
|
|
||||||
+/* Define if you are building with_selinux */
|
|
||||||
+#undef WITH_SELINUX
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the `pstat_getdynamic' function. */
|
|
||||||
#undef HAVE_PSTAT_GETDYNAMIC
|
|
||||||
|
|
||||||
diff -up at-3.1.14/configure.ac.selinux at-3.1.14/configure.ac
|
|
||||||
--- at-3.1.14/configure.ac.selinux 2013-09-26 15:06:55.178049851 +0200
|
|
||||||
+++ at-3.1.14/configure.ac 2013-09-26 15:06:55.180049850 +0200
|
|
||||||
@@ -246,6 +246,14 @@ AC_DEFINE(WITH_PAM),
|
|
||||||
AC_CHECK_LIB(pam, pam_start, PAMLIB='-lpam -lpam_misc')
|
|
||||||
AC_SUBST(PAMLIB)
|
|
||||||
|
|
||||||
+AC_ARG_WITH(selinux,
|
|
||||||
+[ --with-selinux Define to run with selinux],
|
|
||||||
+AC_DEFINE(WITH_SELINUX),
|
|
||||||
+)
|
|
||||||
+AC_CHECK_LIB(selinux, is_selinux_enabled, SELINUXLIB=-lselinux)
|
|
||||||
+AC_SUBST(SELINUXLIB)
|
|
||||||
+AC_SUBST(WITH_SELINUX)
|
|
||||||
+
|
|
||||||
AC_MSG_CHECKING(groupname to run under)
|
|
||||||
AC_ARG_WITH(daemon_groupname,
|
|
||||||
[ --with-daemon_groupname=DAEMON_GROUPNAME Groupname to run under (default daemon) ],
|
|
||||||
diff -up at-3.1.14/Makefile.in.selinux at-3.1.14/Makefile.in
|
|
||||||
--- at-3.1.14/Makefile.in.selinux 2013-09-26 15:06:55.175049853 +0200
|
|
||||||
+++ at-3.1.14/Makefile.in 2013-09-26 15:06:55.180049850 +0200
|
|
||||||
@@ -40,6 +40,7 @@ LIBS = @LIBS@
|
|
||||||
LIBOBJS = @LIBOBJS@
|
|
||||||
INSTALL = @INSTALL@
|
|
||||||
PAMLIB = @PAMLIB@
|
|
||||||
+SELINUXLIB = @SELINUXLIB@
|
|
||||||
|
|
||||||
CLONES = atq atrm
|
|
||||||
ATOBJECTS = at.o panic.o perm.o posixtm.o y.tab.o lex.yy.o
|
|
||||||
diff -up at-3.1.14/atd.c.selinux2 at-3.1.14/atd.c
|
|
||||||
--- at-3.1.14/atd.c.selinux2 2013-12-04 11:27:28.729005384 +0100
|
|
||||||
+++ at-3.1.14/atd.c 2013-12-04 11:30:17.709091150 +0100
|
|
||||||
@@ -83,6 +83,14 @@
|
|
||||||
#include "getloadavg.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef WITH_SELINUX
|
|
||||||
+#include <selinux/selinux.h>
|
|
||||||
+#include <selinux/get_context_list.h>
|
|
||||||
+int selinux_enabled=0;
|
|
||||||
+#include <selinux/flask.h>
|
|
||||||
+#include <selinux/av_permissions.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#ifndef LOG_ATD
|
|
||||||
#define LOG_ATD LOG_DAEMON
|
|
||||||
#endif
|
|
||||||
@@ -191,6 +199,68 @@ myfork()
|
|
||||||
#define fork myfork
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef WITH_SELINUX
|
|
||||||
+static int set_selinux_context(const char *name, const char *filename) {
|
|
||||||
+ security_context_t user_context=NULL;
|
|
||||||
+ security_context_t file_context=NULL;
|
|
||||||
+ struct av_decision avd;
|
|
||||||
+ int retval=-1;
|
|
||||||
+ char *seuser=NULL;
|
|
||||||
+ char *level=NULL;
|
|
||||||
+
|
|
||||||
+ if (getseuserbyname(name, &seuser, &level) == 0) {
|
|
||||||
+ retval=get_default_context_with_level(seuser, level, NULL, &user_context);
|
|
||||||
+ free(seuser);
|
|
||||||
+ free(level);
|
|
||||||
+ if (retval) {
|
|
||||||
+ if (security_getenforce()==1) {
|
|
||||||
+ perr("execle: couldn't get security context for user %s\n", name);
|
|
||||||
+ } else {
|
|
||||||
+ syslog(LOG_ERR, "execle: couldn't get security context for user %s\n", name);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Since crontab files are not directly executed,
|
|
||||||
+ * crond must ensure that the crontab file has
|
|
||||||
+ * a context that is appropriate for the context of
|
|
||||||
+ * the user cron job. It performs an entrypoint
|
|
||||||
+ * permission check for this purpose.
|
|
||||||
+ */
|
|
||||||
+ if (fgetfilecon(STDIN_FILENO, &file_context) < 0)
|
|
||||||
+ perr("fgetfilecon FAILED %s", filename);
|
|
||||||
+
|
|
||||||
+ retval = security_compute_av(user_context,
|
|
||||||
+ file_context,
|
|
||||||
+ SECCLASS_FILE,
|
|
||||||
+ FILE__ENTRYPOINT,
|
|
||||||
+ &avd);
|
|
||||||
+ freecon(file_context);
|
|
||||||
+ if (retval || ((FILE__ENTRYPOINT & avd.allowed) != FILE__ENTRYPOINT)) {
|
|
||||||
+ if (security_getenforce()==1) {
|
|
||||||
+ perr("Not allowed to set exec context to %s for user %s\n", user_context,name);
|
|
||||||
+ } else {
|
|
||||||
+ syslog(LOG_ERR, "Not allowed to set exec context to %s for user %s\n", user_context,name);
|
|
||||||
+ retval = -1;
|
|
||||||
+ goto err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (setexeccon(user_context) < 0) {
|
|
||||||
+ if (security_getenforce()==1) {
|
|
||||||
+ perr("Could not set exec context to %s for user %s\n", user_context,name);
|
|
||||||
+ retval = -1;
|
|
||||||
+ } else {
|
|
||||||
+ syslog(LOG_ERR, "Could not set exec context to %s for user %s\n", user_context,name);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ err:
|
|
||||||
+ freecon(user_context);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
run_file(const char *filename, uid_t uid, gid_t gid)
|
|
||||||
{
|
|
||||||
@@ -419,6 +489,13 @@ run_file(const char *filename, uid_t uid
|
|
||||||
|
|
||||||
nice((tolower((int) queue) - 'a' + 1) * 2);
|
|
||||||
|
|
||||||
+#ifdef WITH_SELINUX
|
|
||||||
+ if (selinux_enabled > 0) {
|
|
||||||
+ if (set_selinux_context(pentry->pw_name, filename) < 0)
|
|
||||||
+ perr("SELinux Failed to set context\n");
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
if (initgroups(pentry->pw_name, pentry->pw_gid))
|
|
||||||
perr("Cannot initialize the supplementary group access list");
|
|
||||||
|
|
||||||
@@ -712,6 +789,10 @@ main(int argc, char *argv[])
|
|
||||||
struct passwd *pwe;
|
|
||||||
struct group *ge;
|
|
||||||
|
|
||||||
+#ifdef WITH_SELINUX
|
|
||||||
+ selinux_enabled=is_selinux_enabled();
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* We don't need root privileges all the time; running under uid and gid
|
|
||||||
* daemon is fine.
|
|
||||||
*/
|
|
@ -1,157 +0,0 @@
|
|||||||
diff -up at-3.1.16/atd.c.noabort at-3.1.16/atd.c
|
|
||||||
--- at-3.1.16/atd.c.noabort 2014-10-02 11:08:26.000000000 +0200
|
|
||||||
+++ at-3.1.16/atd.c 2014-11-06 16:07:54.851652541 +0100
|
|
||||||
@@ -221,7 +221,7 @@ static int set_selinux_context(const cha
|
|
||||||
security_context_t user_context=NULL;
|
|
||||||
security_context_t file_context=NULL;
|
|
||||||
struct av_decision avd;
|
|
||||||
- int retval=-1;
|
|
||||||
+ int retval=0;
|
|
||||||
char *seuser=NULL;
|
|
||||||
char *level=NULL;
|
|
||||||
|
|
||||||
@@ -230,12 +230,9 @@ static int set_selinux_context(const cha
|
|
||||||
free(seuser);
|
|
||||||
free(level);
|
|
||||||
if (retval) {
|
|
||||||
- if (security_getenforce()==1) {
|
|
||||||
- perr("execle: couldn't get security context for user %s\n", name);
|
|
||||||
- } else {
|
|
||||||
- syslog(LOG_ERR, "execle: couldn't get security context for user %s\n", name);
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
+ lerr("execle: couldn't get security context for user %s\n", name);
|
|
||||||
+ retval = -1;
|
|
||||||
+ goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -246,8 +243,11 @@ static int set_selinux_context(const cha
|
|
||||||
* the user cron job. It performs an entrypoint
|
|
||||||
* permission check for this purpose.
|
|
||||||
*/
|
|
||||||
- if (fgetfilecon(STDIN_FILENO, &file_context) < 0)
|
|
||||||
- perr("fgetfilecon FAILED %s", filename);
|
|
||||||
+ if (fgetfilecon(STDIN_FILENO, &file_context) < 0) {
|
|
||||||
+ lerr("fgetfilecon FAILED %s", filename);
|
|
||||||
+ retval = -1;
|
|
||||||
+ goto err;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
retval = security_compute_av(user_context,
|
|
||||||
file_context,
|
|
||||||
@@ -256,25 +256,21 @@ static int set_selinux_context(const cha
|
|
||||||
&avd);
|
|
||||||
freecon(file_context);
|
|
||||||
if (retval || ((FILE__ENTRYPOINT & avd.allowed) != FILE__ENTRYPOINT)) {
|
|
||||||
- if (security_getenforce()==1) {
|
|
||||||
- perr("Not allowed to set exec context to %s for user %s\n", user_context,name);
|
|
||||||
- } else {
|
|
||||||
- syslog(LOG_ERR, "Not allowed to set exec context to %s for user %s\n", user_context,name);
|
|
||||||
- retval = -1;
|
|
||||||
- goto err;
|
|
||||||
- }
|
|
||||||
+ lerr("Not allowed to set exec context to %s for user %s\n", user_context,name);
|
|
||||||
+ retval = -1;
|
|
||||||
+ goto err;
|
|
||||||
}
|
|
||||||
if (setexeccon(user_context) < 0) {
|
|
||||||
- if (security_getenforce()==1) {
|
|
||||||
- perr("Could not set exec context to %s for user %s\n", user_context,name);
|
|
||||||
- retval = -1;
|
|
||||||
- } else {
|
|
||||||
- syslog(LOG_ERR, "Could not set exec context to %s for user %s\n", user_context,name);
|
|
||||||
- }
|
|
||||||
+ lerr("Could not set exec context to %s for user %s\n", user_context,name);
|
|
||||||
+ retval = -1;
|
|
||||||
+ goto err;
|
|
||||||
}
|
|
||||||
err:
|
|
||||||
- freecon(user_context);
|
|
||||||
- return 0;
|
|
||||||
+ if (retval < 0 && security_getenforce() != 1)
|
|
||||||
+ retval = 0;
|
|
||||||
+ if (user_context)
|
|
||||||
+ freecon(user_context);
|
|
||||||
+ return retval;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -347,9 +343,12 @@ run_file(const char *filename, uid_t uid
|
|
||||||
*/
|
|
||||||
|
|
||||||
pid = fork();
|
|
||||||
- if (pid == -1)
|
|
||||||
- perr("Cannot fork");
|
|
||||||
-
|
|
||||||
+ if (pid == -1) {
|
|
||||||
+ lerr("Cannot fork for job execution");
|
|
||||||
+ free(mailname);
|
|
||||||
+ free(newname);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
else if (pid != 0) {
|
|
||||||
free(mailname);
|
|
||||||
free(newname);
|
|
||||||
@@ -667,15 +666,19 @@ run_loop()
|
|
||||||
* up.
|
|
||||||
*/
|
|
||||||
|
|
||||||
- if (stat(".", &buf) == -1)
|
|
||||||
- perr("Cannot stat " ATJOB_DIR);
|
|
||||||
+ if (stat(".", &buf) == -1) {
|
|
||||||
+ lerr("Cannot stat " ATJOB_DIR);
|
|
||||||
+ return next_job;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (nothing_to_do && buf.st_mtime <= last_chg)
|
|
||||||
return next_job;
|
|
||||||
last_chg = buf.st_mtime;
|
|
||||||
|
|
||||||
- if ((spool = opendir(".")) == NULL)
|
|
||||||
- perr("Cannot read " ATJOB_DIR);
|
|
||||||
+ if ((spool = opendir(".")) == NULL) {
|
|
||||||
+ lerr("Cannot read " ATJOB_DIR);
|
|
||||||
+ return next_job;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
run_batch = 0;
|
|
||||||
nothing_to_do = 1;
|
|
||||||
diff -up at-3.1.16/daemon.c.noabort at-3.1.16/daemon.c
|
|
||||||
--- at-3.1.16/daemon.c.noabort 2014-09-30 08:29:02.000000000 +0200
|
|
||||||
+++ at-3.1.16/daemon.c 2014-11-06 15:37:22.109277583 +0100
|
|
||||||
@@ -83,6 +83,22 @@ perr(const char *fmt,...)
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
+lerr(const char *fmt,...)
|
|
||||||
+{
|
|
||||||
+ char buf[1024];
|
|
||||||
+ va_list args;
|
|
||||||
+
|
|
||||||
+ va_start(args, fmt);
|
|
||||||
+ vsnprintf(buf, sizeof(buf), fmt, args);
|
|
||||||
+ va_end(args);
|
|
||||||
+
|
|
||||||
+ if (daemon_debug) {
|
|
||||||
+ perror(buf);
|
|
||||||
+ } else
|
|
||||||
+ syslog(LOG_ERR, "%s: %m", buf);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
pabort(const char *fmt,...)
|
|
||||||
{
|
|
||||||
char buf[1024];
|
|
||||||
diff -up at-3.1.16/daemon.h.noabort at-3.1.16/daemon.h
|
|
||||||
--- at-3.1.16/daemon.h.noabort 2014-09-30 08:29:02.000000000 +0200
|
|
||||||
+++ at-3.1.16/daemon.h 2014-11-06 15:36:10.461660104 +0100
|
|
||||||
@@ -13,5 +13,8 @@ __attribute__((noreturn))
|
|
||||||
#endif
|
|
||||||
perr (const char *fmt, ...);
|
|
||||||
|
|
||||||
+void
|
|
||||||
+lerr (const char *fmt, ...);
|
|
||||||
+
|
|
||||||
extern int daemon_debug;
|
|
||||||
extern int daemon_foreground;
|
|
@ -1,23 +1,23 @@
|
|||||||
diff -up at-3.1.14/Makefile.in.make at-3.1.14/Makefile.in
|
diff -up at-3.1.18/Makefile.in.make at-3.1.18/Makefile.in
|
||||||
--- at-3.1.14/Makefile.in.make 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/Makefile.in.make 2015-12-06 16:45:10.000000000 +0100
|
||||||
+++ at-3.1.14/Makefile.in 2013-09-19 16:48:03.605192754 +0200
|
+++ at-3.1.18/Makefile.in 2016-03-23 12:38:15.652898579 +0100
|
||||||
@@ -67,13 +67,13 @@ LIST = Filelist Filelist.asc
|
@@ -68,13 +68,13 @@ LIST = Filelist Filelist.asc
|
||||||
all: at atd atd.service atrun
|
all: at atd atd.service atrun
|
||||||
|
|
||||||
at: $(ATOBJECTS)
|
at: $(ATOBJECTS)
|
||||||
- $(CC) $(LDFLAGS) -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
|
- $(CC) $(LDFLAGS) -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
|
||||||
+ $(CC) $(LDFLAGS) -o at -pie $(ATOBJECTS) $(LIBS) $(LEXLIB) $(SELINUXLIB) $(PAMLIB)
|
+ $(CC) $(LDFLAGS) -pie -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
|
||||||
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
|
||||||
|
|
||||||
atd: $(RUNOBJECTS)
|
atd: $(RUNOBJECTS)
|
||||||
- $(CC) $(LDFLAGS) -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB)
|
- $(CC) $(LDFLAGS) -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
|
||||||
+ $(CC) $(LDFLAGS) -o atd -pie $(RUNOBJECTS) $(LIBS) $(SELINUXLIB) $(PAMLIB)
|
+ $(CC) $(LDFLAGS) -pie -o atd $(RUNOBJECTS) $(LIBS) $(PAMLIB) $(SELINUXLIB)
|
||||||
|
|
||||||
y.tab.c y.tab.h: parsetime.y
|
y.tab.c y.tab.h: parsetime.y
|
||||||
$(YACC) -d parsetime.y
|
$(YACC) -d parsetime.y
|
||||||
@@ -88,38 +88,41 @@ atrun: atrun.in
|
@@ -89,38 +89,41 @@ atrun: atrun.in
|
||||||
configure
|
configure
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@ -32,11 +32,11 @@ diff -up at-3.1.14/Makefile.in.make at-3.1.14/Makefile.in
|
|||||||
- $(INSTALL) -g root -o root -m 755 -d $(IROOT)$(atdocdir)
|
- $(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)
|
- $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
|
||||||
- chmod 1770 $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
|
- chmod 1770 $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
|
||||||
+ $(INSTALL) root -m 755 -d $(IROOT)$(etcdir)
|
+ $(INSTALL) -m 755 -d $(IROOT)$(etcdir)
|
||||||
+ $(INSTALL) root -m 755 -d $(IROOT)$(bindir)
|
+ $(INSTALL) -m 755 -d $(IROOT)$(bindir)
|
||||||
+ $(INSTALL) root -m 755 -d $(IROOT)$(sbindir)
|
+ $(INSTALL) -m 755 -d $(IROOT)$(sbindir)
|
||||||
+ $(INSTALL) root -m 755 -d $(IROOT)$(docdir)
|
+ $(INSTALL) -m 755 -d $(IROOT)$(docdir)
|
||||||
+ $(INSTALL) root -m 755 -d $(IROOT)$(atdocdir)
|
+ $(INSTALL) -m 755 -d $(IROOT)$(atdocdir)
|
||||||
+ $(INSTALL) -m 755 -d $(IROOT)$(etcdir)/pam.d/
|
+ $(INSTALL) -m 755 -d $(IROOT)$(etcdir)/pam.d/
|
||||||
+ $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR)
|
+ $(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR)
|
||||||
+ chmod 700 $(IROOT)$(ATJOB_DIR) $(IROOT)$(ATSPOOL_DIR)
|
+ chmod 700 $(IROOT)$(ATJOB_DIR) $(IROOT)$(ATSPOOL_DIR)
|
@ -1,19 +1,7 @@
|
|||||||
diff -up at-3.1.14/at.1.in.nit at-3.1.14/at.1.in
|
diff -up at-3.1.18/atd.c.nit at-3.1.18/atd.c
|
||||||
--- at-3.1.14/at.1.in.nit 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/atd.c.nit 2016-03-23 12:46:49.222277787 +0100
|
||||||
+++ at-3.1.14/at.1.in 2013-12-04 11:36:29.737279969 +0100
|
+++ at-3.1.18/atd.c 2016-03-23 12:47:50.521639804 +0100
|
||||||
@@ -204,7 +204,7 @@ queue for
|
@@ -196,6 +196,18 @@ myfork()
|
||||||
.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 -up at-3.1.14/atd.c.nit at-3.1.14/atd.c
|
|
||||||
--- at-3.1.14/atd.c.nit 2013-12-04 11:36:29.733279967 +0100
|
|
||||||
+++ at-3.1.14/atd.c 2013-12-04 11:38:44.551247496 +0100
|
|
||||||
@@ -198,6 +198,18 @@ myfork()
|
|
||||||
|
|
||||||
#define fork myfork
|
#define fork myfork
|
||||||
#endif
|
#endif
|
||||||
@ -31,8 +19,8 @@ diff -up at-3.1.14/atd.c.nit at-3.1.14/atd.c
|
|||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
#ifdef WITH_SELINUX
|
#ifdef WITH_SELINUX
|
||||||
static int set_selinux_context(const char *name, const char *filename) {
|
static int
|
||||||
@@ -337,6 +349,9 @@ run_file(const char *filename, uid_t uid
|
@@ -339,6 +351,9 @@ run_file(const char *filename, uid_t uid
|
||||||
free(newname);
|
free(newname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -42,7 +30,7 @@ diff -up at-3.1.14/atd.c.nit at-3.1.14/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.
|
||||||
@@ -505,6 +520,9 @@ run_file(const char *filename, uid_t uid
|
@@ -507,6 +522,9 @@ run_file(const char *filename, uid_t uid
|
||||||
if (setuid(uid) < 0)
|
if (setuid(uid) < 0)
|
||||||
perr("Cannot set user id");
|
perr("Cannot set user id");
|
||||||
|
|
||||||
@ -52,7 +40,7 @@ diff -up at-3.1.14/atd.c.nit at-3.1.14/atd.c
|
|||||||
chdir("/");
|
chdir("/");
|
||||||
|
|
||||||
execle("/bin/sh", "sh", (char *) NULL, nenvp);
|
execle("/bin/sh", "sh", (char *) NULL, nenvp);
|
||||||
@@ -570,6 +588,9 @@ run_file(const char *filename, uid_t uid
|
@@ -572,6 +590,9 @@ run_file(const char *filename, uid_t uid
|
||||||
if (setuid(uid) < 0)
|
if (setuid(uid) < 0)
|
||||||
perr("Cannot set user id");
|
perr("Cannot set user id");
|
||||||
|
|
||||||
@ -62,7 +50,7 @@ diff -up at-3.1.14/atd.c.nit at-3.1.14/atd.c
|
|||||||
chdir ("/");
|
chdir ("/");
|
||||||
|
|
||||||
#if defined(SENDMAIL)
|
#if defined(SENDMAIL)
|
||||||
@@ -697,6 +718,7 @@ run_loop()
|
@@ -699,6 +720,7 @@ run_loop()
|
||||||
* 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));
|
||||||
@ -70,7 +58,7 @@ diff -up at-3.1.14/atd.c.nit at-3.1.14/atd.c
|
|||||||
lock_name[0] = '=';
|
lock_name[0] = '=';
|
||||||
unlink(lock_name);
|
unlink(lock_name);
|
||||||
next_job = now;
|
next_job = now;
|
||||||
@@ -731,6 +753,7 @@ run_loop()
|
@@ -733,6 +755,7 @@ run_loop()
|
||||||
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));
|
||||||
@ -78,3 +66,15 @@ diff -up at-3.1.14/atd.c.nit at-3.1.14/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
|
43
at-3.1.18-noabort.patch
Normal file
43
at-3.1.18-noabort.patch
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
diff -up at-3.1.18/atd.c.noabort at-3.1.18/atd.c
|
||||||
|
--- at-3.1.18/atd.c.noabort 2016-03-23 12:49:15.147520116 +0100
|
||||||
|
+++ at-3.1.18/atd.c 2016-03-23 12:49:15.148520138 +0100
|
||||||
|
@@ -349,9 +349,12 @@ run_file(const char *filename, uid_t uid
|
||||||
|
*/
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
- if (pid == -1)
|
||||||
|
- perr("Cannot fork");
|
||||||
|
-
|
||||||
|
+ if (pid == -1) {
|
||||||
|
+ lerr("Cannot fork for job execution");
|
||||||
|
+ free(mailname);
|
||||||
|
+ free(newname);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
else if (pid != 0) {
|
||||||
|
free(mailname);
|
||||||
|
free(newname);
|
||||||
|
@@ -669,15 +672,19 @@ run_loop()
|
||||||
|
* up.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- if (stat(".", &buf) == -1)
|
||||||
|
- perr("Cannot stat " ATJOB_DIR);
|
||||||
|
+ if (stat(".", &buf) == -1) {
|
||||||
|
+ lerr("Cannot stat " ATJOB_DIR);
|
||||||
|
+ return next_job;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (nothing_to_do && buf.st_mtime <= last_chg)
|
||||||
|
return next_job;
|
||||||
|
last_chg = buf.st_mtime;
|
||||||
|
|
||||||
|
- if ((spool = opendir(".")) == NULL)
|
||||||
|
- perr("Cannot read " ATJOB_DIR);
|
||||||
|
+ if ((spool = opendir(".")) == NULL) {
|
||||||
|
+ lerr("Cannot read " ATJOB_DIR);
|
||||||
|
+ return next_job;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
run_batch = 0;
|
||||||
|
nothing_to_do = 1;
|
@ -1,6 +1,6 @@
|
|||||||
diff -up at-3.1.14/at.c.pam at-3.1.14/at.c
|
diff -up at-3.1.18/at.c.pam at-3.1.18/at.c
|
||||||
--- at-3.1.14/at.c.pam 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/at.c.pam 2015-12-06 16:45:10.000000000 +0100
|
||||||
+++ at-3.1.14/at.c 2013-12-04 11:09:56.165752053 +0100
|
+++ at-3.1.18/at.c 2016-03-23 12:40:10.694447117 +0100
|
||||||
@@ -144,18 +144,13 @@ sigc(int signo)
|
@@ -144,18 +144,13 @@ sigc(int signo)
|
||||||
/* If the user presses ^C, remove the spool file and exit
|
/* If the user presses ^C, remove the spool file and exit
|
||||||
*/
|
*/
|
||||||
@ -52,7 +52,7 @@ diff -up at-3.1.14/at.c.pam at-3.1.14/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.
|
||||||
*/
|
*/
|
||||||
@@ -654,7 +642,7 @@ process_jobs(int argc, char **argv, int
|
@@ -670,7 +658,7 @@ process_jobs(int argc, char **argv, int
|
||||||
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 +61,7 @@ diff -up at-3.1.14/at.c.pam at-3.1.14/at.c
|
|||||||
|
|
||||||
if (queue == '=') {
|
if (queue == '=') {
|
||||||
fprintf(stderr, "Warning: deleting running job\n");
|
fprintf(stderr, "Warning: deleting running job\n");
|
||||||
@@ -663,8 +651,8 @@ process_jobs(int argc, char **argv, int
|
@@ -679,8 +667,8 @@ process_jobs(int argc, char **argv, int
|
||||||
perr("Cannot unlink %.500s", dirent->d_name);
|
perr("Cannot unlink %.500s", dirent->d_name);
|
||||||
rc = EXIT_FAILURE;
|
rc = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ diff -up at-3.1.14/at.c.pam at-3.1.14/at.c
|
|||||||
done = 1;
|
done = 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -674,7 +662,7 @@ process_jobs(int argc, char **argv, int
|
@@ -690,7 +678,7 @@ process_jobs(int argc, char **argv, int
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ diff -up at-3.1.14/at.c.pam at-3.1.14/at.c
|
|||||||
fp = fopen(dirent->d_name, "r");
|
fp = fopen(dirent->d_name, "r");
|
||||||
|
|
||||||
if (fp) {
|
if (fp) {
|
||||||
@@ -687,7 +675,7 @@ process_jobs(int argc, char **argv, int
|
@@ -703,7 +691,7 @@ process_jobs(int argc, char **argv, int
|
||||||
perr("Cannot open %.500s", dirent->d_name);
|
perr("Cannot open %.500s", dirent->d_name);
|
||||||
rc = EXIT_FAILURE;
|
rc = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
@ -89,21 +89,21 @@ diff -up at-3.1.14/at.c.pam at-3.1.14/at.c
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
diff -up at-3.1.18/atd.c.pam at-3.1.18/atd.c
|
||||||
--- at-3.1.14/atd.c.pam 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/atd.c.pam 2015-12-06 16:45:10.000000000 +0100
|
||||||
+++ at-3.1.14/atd.c 2013-12-04 11:14:31.780617480 +0100
|
+++ at-3.1.18/atd.c 2016-03-23 12:43:31.990906478 +0100
|
||||||
@@ -83,6 +83,10 @@
|
@@ -91,6 +91,10 @@ int selinux_enabled = 0;
|
||||||
#include "getloadavg.h"
|
|
||||||
#endif
|
/* Macros */
|
||||||
|
|
||||||
+#ifndef LOG_ATD
|
+#ifndef LOG_ATD
|
||||||
+#define LOG_ATD LOG_DAEMON
|
+#define LOG_ATD LOG_DAEMON
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
/* Macros */
|
|
||||||
|
|
||||||
#define BATCH_INTERVAL_DEFAULT 60
|
#define BATCH_INTERVAL_DEFAULT 60
|
||||||
@@ -108,7 +112,7 @@ static int run_as_daemon = 0;
|
#define CHECK_INTERVAL 3600
|
||||||
|
|
||||||
|
@@ -114,7 +118,7 @@ static int run_as_daemon = 0;
|
||||||
|
|
||||||
static volatile sig_atomic_t term_signal = 0;
|
static volatile sig_atomic_t term_signal = 0;
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
#include <security/pam_appl.h>
|
#include <security/pam_appl.h>
|
||||||
|
|
||||||
static pam_handle_t *pamh = NULL;
|
static pam_handle_t *pamh = NULL;
|
||||||
@@ -117,15 +121,7 @@ static const struct pam_conv conv = {
|
@@ -123,15 +127,7 @@ static const struct pam_conv conv = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
|
|
||||||
/* Signal handlers */
|
/* Signal handlers */
|
||||||
RETSIGTYPE
|
RETSIGTYPE
|
||||||
@@ -220,7 +216,7 @@ run_file(const char *filename, uid_t uid
|
@@ -292,7 +288,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;
|
||||||
@ -138,7 +138,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
int retcode;
|
int retcode;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -377,17 +373,11 @@ run_file(const char *filename, uid_t uid
|
@@ -449,17 +445,11 @@ run_file(const char *filename, uid_t uid
|
||||||
fstat(fd_out, &buf);
|
fstat(fd_out, &buf);
|
||||||
size = buf.st_size;
|
size = buf.st_size;
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
close(STDIN_FILENO);
|
close(STDIN_FILENO);
|
||||||
@@ -401,7 +391,14 @@ run_file(const char *filename, uid_t uid
|
@@ -473,7 +463,14 @@ run_file(const char *filename, uid_t uid
|
||||||
else if (pid == 0) {
|
else if (pid == 0) {
|
||||||
char *nul = NULL;
|
char *nul = NULL;
|
||||||
char **nenvp = &nul;
|
char **nenvp = &nul;
|
||||||
@ -176,7 +176,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/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.
|
||||||
*/
|
*/
|
||||||
@@ -420,8 +417,6 @@ run_file(const char *filename, uid_t uid
|
@@ -492,8 +489,6 @@ run_file(const char *filename, uid_t uid
|
||||||
close(fd_in);
|
close(fd_in);
|
||||||
close(fd_out);
|
close(fd_out);
|
||||||
|
|
||||||
@ -184,8 +184,8 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
-
|
-
|
||||||
nice((tolower((int) queue) - 'a' + 1) * 2);
|
nice((tolower((int) queue) - 'a' + 1) * 2);
|
||||||
|
|
||||||
if (initgroups(pentry->pw_name, pentry->pw_gid))
|
#ifdef WITH_SELINUX
|
||||||
@@ -435,9 +430,9 @@ run_file(const char *filename, uid_t uid
|
@@ -514,9 +509,9 @@ run_file(const char *filename, uid_t uid
|
||||||
|
|
||||||
chdir("/");
|
chdir("/");
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
PRIV_END
|
PRIV_END
|
||||||
}
|
}
|
||||||
/* We're the parent. Let's wait.
|
/* We're the parent. Let's wait.
|
||||||
@@ -450,14 +445,6 @@ run_file(const char *filename, uid_t uid
|
@@ -529,14 +524,6 @@ run_file(const char *filename, uid_t uid
|
||||||
*/
|
*/
|
||||||
waitpid(pid, (int *) NULL, 0);
|
waitpid(pid, (int *) NULL, 0);
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/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.
|
||||||
*/
|
*/
|
||||||
@@ -488,8 +475,13 @@ run_file(const char *filename, uid_t uid
|
@@ -567,8 +554,13 @@ run_file(const char *filename, uid_t uid
|
||||||
unlink(newname);
|
unlink(newname);
|
||||||
free(newname);
|
free(newname);
|
||||||
|
|
||||||
@ -227,7 +227,7 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
PRIV_START
|
PRIV_START
|
||||||
|
|
||||||
if (initgroups(pentry->pw_name, pentry->pw_gid))
|
if (initgroups(pentry->pw_name, pentry->pw_gid))
|
||||||
@@ -511,7 +503,20 @@ run_file(const char *filename, uid_t uid
|
@@ -590,7 +582,20 @@ run_file(const char *filename, uid_t uid
|
||||||
perr("Exec failed for mail command");
|
perr("Exec failed for mail command");
|
||||||
|
|
||||||
PRIV_END
|
PRIV_END
|
||||||
@ -248,9 +248,9 @@ diff -up at-3.1.14/atd.c.pam at-3.1.14/atd.c
|
|||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
diff -up at-3.1.14/config.h.in.pam at-3.1.14/config.h.in
|
diff -up at-3.1.18/config.h.in.pam at-3.1.18/config.h.in
|
||||||
--- at-3.1.14/config.h.in.pam 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/config.h.in.pam 2015-12-06 16:45:10.000000000 +0100
|
||||||
+++ at-3.1.14/config.h.in 2013-12-04 11:09:56.165752053 +0100
|
+++ at-3.1.18/config.h.in 2016-03-23 12:40:10.695447139 +0100
|
||||||
@@ -68,8 +68,8 @@
|
@@ -68,8 +68,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,9 +262,9 @@ diff -up at-3.1.14/config.h.in.pam at-3.1.14/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.14/configure.ac.pam at-3.1.14/configure.ac
|
diff -up at-3.1.18/configure.ac.pam at-3.1.18/configure.ac
|
||||||
--- at-3.1.14/configure.ac.pam 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/configure.ac.pam 2015-12-06 16:45:10.000000000 +0100
|
||||||
+++ at-3.1.14/configure.ac 2013-12-04 11:09:56.165752053 +0100
|
+++ at-3.1.18/configure.ac 2016-03-23 12:45:27.885473913 +0100
|
||||||
@@ -78,7 +78,7 @@ AC_FUNC_GETLOADAVG
|
@@ -78,7 +78,7 @@ AC_FUNC_GETLOADAVG
|
||||||
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, [
|
||||||
@ -285,12 +285,24 @@ diff -up at-3.1.14/configure.ac.pam at-3.1.14/configure.ac
|
|||||||
+AC_CHECK_LIB(pam, pam_start, PAMLIB='-lpam -lpam_misc')
|
+AC_CHECK_LIB(pam, pam_start, PAMLIB='-lpam -lpam_misc')
|
||||||
+AC_SUBST(PAMLIB)
|
+AC_SUBST(PAMLIB)
|
||||||
+
|
+
|
||||||
AC_MSG_CHECKING(groupname to run under)
|
AC_ARG_WITH(selinux,
|
||||||
AC_ARG_WITH(daemon_groupname,
|
[ --with-selinux Define to run with selinux],
|
||||||
[ --with-daemon_groupname=DAEMON_GROUPNAME Groupname to run under (default daemon) ],
|
AC_DEFINE(WITH_SELINUX, 1, [Define if you are building with_selinux]),
|
||||||
diff -up at-3.1.14/perm.c.pam at-3.1.14/perm.c
|
diff -up at-3.1.18/Makefile.in.pam at-3.1.18/Makefile.in
|
||||||
--- at-3.1.14/perm.c.pam 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/Makefile.in.pam 2016-03-23 12:55:30.000000000 +0100
|
||||||
+++ at-3.1.14/perm.c 2013-12-04 11:09:56.165752053 +0100
|
+++ at-3.1.18/Makefile.in 2016-03-23 12:57:58.347145148 +0100
|
||||||
|
@@ -68,7 +68,7 @@ LIST = Filelist Filelist.asc
|
||||||
|
all: at atd atd.service atrun
|
||||||
|
|
||||||
|
at: $(ATOBJECTS)
|
||||||
|
- $(CC) $(LDFLAGS) -pie -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
|
||||||
|
+ $(CC) $(LDFLAGS) -pie -o at $(ATOBJECTS) $(LIBS) $(LEXLIB) $(PAMLIB)
|
||||||
|
rm -f $(CLONES)
|
||||||
|
$(LN_S) -f at atq
|
||||||
|
$(LN_S) -f at atrm
|
||||||
|
diff -up at-3.1.18/perm.c.pam at-3.1.18/perm.c
|
||||||
|
--- at-3.1.18/perm.c.pam 2015-12-06 16:45:10.000000000 +0100
|
||||||
|
+++ at-3.1.18/perm.c 2016-03-23 12:40:10.695447139 +0100
|
||||||
@@ -51,6 +51,14 @@
|
@@ -51,6 +51,14 @@
|
||||||
#define PRIV_END while(0)
|
#define PRIV_END while(0)
|
||||||
#endif
|
#endif
|
||||||
@ -355,9 +367,9 @@ diff -up at-3.1.14/perm.c.pam at-3.1.14/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.14/privs.h.pam at-3.1.14/privs.h
|
diff -up at-3.1.18/privs.h.pam at-3.1.18/privs.h
|
||||||
--- at-3.1.14/privs.h.pam 2013-09-08 14:43:53.000000000 +0200
|
--- at-3.1.18/privs.h.pam 2015-12-06 16:45:10.000000000 +0100
|
||||||
+++ at-3.1.14/privs.h 2013-12-04 11:09:56.166752054 +0100
|
+++ at-3.1.18/privs.h 2016-03-23 12:40:10.695447139 +0100
|
||||||
@@ -144,3 +144,63 @@ extern gid_t real_gid, effective_gid, da
|
@@ -144,3 +144,63 @@ extern gid_t real_gid, effective_gid, da
|
||||||
#error "Cannot implement user ID swapping without setreuid or setresuid"
|
#error "Cannot implement user ID swapping without setreuid or setresuid"
|
||||||
#endif
|
#endif
|
24
at-3.1.18-utc-dst.patch
Normal file
24
at-3.1.18-utc-dst.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
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");
|
22
at.spec
22
at.spec
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
Summary: Job spooling tools
|
Summary: Job spooling tools
|
||||||
Name: at
|
Name: at
|
||||||
Version: 3.1.16
|
Version: 3.1.18
|
||||||
Release: 8%{?dist}
|
Release: 1%{?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: GPLv3+ and GPLv2+ and ISC and MIT and Public Domain
|
||||||
@ -17,19 +17,19 @@ Source3: atd.sysconf
|
|||||||
Source5: atd.systemd
|
Source5: atd.systemd
|
||||||
|
|
||||||
Patch0: at-aarch64.patch
|
Patch0: at-aarch64.patch
|
||||||
Patch1: at-3.1.14-makefile.patch
|
Patch1: at-3.1.18-make.patch
|
||||||
Patch2: at-3.1.14-pam.patch
|
Patch2: at-3.1.18-pam.patch
|
||||||
Patch3: at-3.1.14-selinux.patch
|
|
||||||
Patch4: at-3.1.14-opt_V.patch
|
Patch4: at-3.1.14-opt_V.patch
|
||||||
Patch5: at-3.1.14-shell.patch
|
Patch5: at-3.1.14-shell.patch
|
||||||
Patch6: at-3.1.14-nitpicks.patch
|
Patch6: at-3.1.18-nitpicks.patch
|
||||||
Patch8: at-3.1.14-fix_no_export.patch
|
Patch8: at-3.1.14-fix_no_export.patch
|
||||||
Patch9: at-3.1.14-mailwithhostname.patch
|
Patch9: at-3.1.14-mailwithhostname.patch
|
||||||
Patch10: at-3.1.14-usePOSIXtimers.patch
|
Patch10: at-3.1.14-usePOSIXtimers.patch
|
||||||
Patch12: at-3.1.14-wrong_format.patch
|
Patch12: at-3.1.14-wrong_format.patch
|
||||||
Patch13: at-3.1.16-noabort.patch
|
Patch13: at-3.1.18-noabort.patch
|
||||||
Patch14: at-3.1.16-fclose-error.patch
|
Patch14: at-3.1.16-fclose-error.patch
|
||||||
Patch15: at-3.1.16-clear-nonjobs.patch
|
Patch15: at-3.1.16-clear-nonjobs.patch
|
||||||
|
Patch16: at-3.1.18-utc-dst.patch
|
||||||
|
|
||||||
BuildRequires: fileutils /etc/init.d
|
BuildRequires: fileutils /etc/init.d
|
||||||
BuildRequires: flex flex-static bison autoconf
|
BuildRequires: flex flex-static bison autoconf
|
||||||
@ -63,12 +63,11 @@ need to be repeated at the same time every day/week, etc. you should
|
|||||||
use crontab instead.
|
use crontab instead.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -c -q
|
||||||
cp %{SOURCE1} .
|
cp %{SOURCE1} .
|
||||||
%patch0 -p1 -b .arm
|
%patch0 -p1 -b .arm
|
||||||
%patch1 -p1 -b .make
|
%patch1 -p1 -b .make
|
||||||
%patch2 -p1 -b .pam
|
%patch2 -p1 -b .pam
|
||||||
%patch3 -p1 -b .selinux
|
|
||||||
%patch4 -p1 -b .opt_V
|
%patch4 -p1 -b .opt_V
|
||||||
%patch5 -p1 -b .shell
|
%patch5 -p1 -b .shell
|
||||||
%patch6 -p1 -b .nit
|
%patch6 -p1 -b .nit
|
||||||
@ -79,6 +78,7 @@ cp %{SOURCE1} .
|
|||||||
%patch13 -p1 -b .noabort
|
%patch13 -p1 -b .noabort
|
||||||
%patch14 -p1 -b .fclose
|
%patch14 -p1 -b .fclose
|
||||||
%patch15 -p1 -b .clear-nojobs
|
%patch15 -p1 -b .clear-nojobs
|
||||||
|
%patch16 -p1 -b .dst
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# patch9 touches configure.in
|
# patch9 touches configure.in
|
||||||
@ -176,6 +176,10 @@ chown daemon:daemon %{_localstatedir}/spool/at/.SEQ
|
|||||||
%attr(0644,root,root) /%{_unitdir}/atd.service
|
%attr(0644,root,root) /%{_unitdir}/atd.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 23 2016 Tomáš Mráz <tmraz@redhat.com> - 3.1.18-1
|
||||||
|
- new upstream release
|
||||||
|
- correct the DST correction when using UTC time specification (#1320322)
|
||||||
|
|
||||||
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.1.16-8
|
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.1.16-8
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user