Clean up cvs
This commit is contained in:
parent
e643368f97
commit
8dcad9baf3
@ -1,14 +0,0 @@
|
|||||||
--- at-3.1.10/at.c.daylight 2007-03-31 00:03:47.000000000 +0200
|
|
||||||
+++ at-3.1.10/at.c 2007-03-31 00:06:23.000000000 +0200
|
|
||||||
@@ -840,8 +840,9 @@
|
|
||||||
|
|
||||||
if( tm.tm_mday )
|
|
||||||
{
|
|
||||||
- tm.tm_isdst = tm_now.tm_isdst;
|
|
||||||
- return mktime(&tm);
|
|
||||||
+ tm.tm_isdst = -1;
|
|
||||||
+ t = mktime(&tm);
|
|
||||||
+ return t;
|
|
||||||
} else
|
|
||||||
return 0L;
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
--- at-3.1.10/Makefile.in.debug 2007-03-06 11:35:28.000000000 +0100
|
|
||||||
+++ at-3.1.10/Makefile.in 2007-03-06 14:50:07.000000000 +0100
|
|
||||||
@@ -104,14 +104,14 @@
|
|
||||||
chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(IROOT)$(ATJOB_DIR) $(IROOT)$(ATSPOOL_DIR)
|
|
||||||
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 -s at $(IROOT)$(bindir)
|
|
||||||
+ $(INSTALL) -m 4755 at $(IROOT)$(bindir)
|
|
||||||
$(LN_S) -f at $(IROOT)$(bindir)/atq
|
|
||||||
$(LN_S) -f at $(IROOT)$(bindir)/atrm
|
|
||||||
$(INSTALL) -m 755 batch $(IROOT)$(bindir)
|
|
||||||
$(INSTALL) -m 755 -d $(IROOT)$(man1dir)
|
|
||||||
$(INSTALL) -m 755 -d $(IROOT)$(man5dir)
|
|
||||||
$(INSTALL) -m 755 -d $(IROOT)$(man8dir)
|
|
||||||
- $(INSTALL) -m 755 -s atd $(IROOT)$(sbindir)
|
|
||||||
+ $(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
|
|
@ -1,245 +0,0 @@
|
|||||||
--- at-3.1.10/atd.c.instinet 2006-09-12 11:01:10.000000000 +0200
|
|
||||||
+++ at-3.1.10/atd.c 2006-09-12 11:24:49.000000000 +0200
|
|
||||||
@@ -102,7 +102,7 @@
|
|
||||||
static const char *svnid = "$Id$";
|
|
||||||
static double load_avg = LOADAVG_MX;
|
|
||||||
static time_t now;
|
|
||||||
-static time_t last_chg;
|
|
||||||
+//static time_t last_chg;
|
|
||||||
static int nothing_to_do;
|
|
||||||
unsigned int batch_interval;
|
|
||||||
static int run_as_daemon = 0;
|
|
||||||
@@ -197,7 +197,7 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
|
||||||
-run_file(const char *filename, uid_t uid, gid_t gid)
|
|
||||||
+run_file(char *filename, uid_t uid, gid_t gid)
|
|
||||||
{
|
|
||||||
/* Run a file by by spawning off a process which redirects I/O,
|
|
||||||
* spawns a subshell, then waits for it to complete and sends
|
|
||||||
@@ -208,7 +208,7 @@
|
|
||||||
char jobbuf[9];
|
|
||||||
char *mailname = NULL;
|
|
||||||
int mailsize = 128;
|
|
||||||
- char *newname;
|
|
||||||
+ char newname[256];
|
|
||||||
FILE *stream;
|
|
||||||
int send_mail = 0;
|
|
||||||
struct stat buf, lbuf;
|
|
||||||
@@ -242,11 +242,17 @@
|
|
||||||
|
|
||||||
sprintf(jobbuf, "%8lu", jobno);
|
|
||||||
|
|
||||||
- if ((newname = malloc(strlen(filename) + 1)) == NULL)
|
|
||||||
- pabort("Job %8lu : out of virtual memory", jobno);
|
|
||||||
+ if( strlen( filename ) >= sizeof( newname ) - 1 )
|
|
||||||
+ pabort("File name too long: %s", filename );
|
|
||||||
|
|
||||||
strcpy(newname, filename);
|
|
||||||
|
|
||||||
+ newname[0] = '!';
|
|
||||||
+
|
|
||||||
+ if( rename( filename, newname ) < 0 )
|
|
||||||
+ perr( "Error renaming job file." );
|
|
||||||
+
|
|
||||||
+ filename[0] = '!';
|
|
||||||
newname[0] = '=';
|
|
||||||
|
|
||||||
/* We try to make a hard link to lock the file. If we fail, then
|
|
||||||
@@ -264,14 +270,15 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* If something goes wrong between here and the unlink() call,
|
|
||||||
- * the job gets restarted as soon as the "=" entry is cleared
|
|
||||||
- * by the main atd loop.
|
|
||||||
- */
|
|
||||||
+ * the job will remain in the "!" queue.
|
|
||||||
+ * no point in retrying, and need glaring proof that something went wrong
|
|
||||||
+ */
|
|
||||||
|
|
||||||
pid = fork();
|
|
||||||
- if (pid == -1)
|
|
||||||
+ if (pid == -1) {
|
|
||||||
+ unlink(newname);
|
|
||||||
perr("Cannot fork");
|
|
||||||
-
|
|
||||||
+ }
|
|
||||||
else if (pid != 0) {
|
|
||||||
free(mailname);
|
|
||||||
free(newname);
|
|
||||||
@@ -284,6 +291,7 @@
|
|
||||||
|
|
||||||
pentry = getpwuid(uid);
|
|
||||||
if (pentry == NULL) {
|
|
||||||
+ unlink(newname);
|
|
||||||
pabort("Userid %lu not found - aborting job %8lu (%.500s)",
|
|
||||||
(unsigned long) uid, jobno, filename);
|
|
||||||
}
|
|
||||||
@@ -293,35 +301,43 @@
|
|
||||||
|
|
||||||
PRIV_END
|
|
||||||
|
|
||||||
- if (stream == NULL)
|
|
||||||
+ if (stream == NULL) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Cannot open input file");
|
|
||||||
-
|
|
||||||
- if ((fd_in = dup(fileno(stream))) < 0)
|
|
||||||
+ }
|
|
||||||
+ if ((fd_in = dup(fileno(stream))) < 0) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error duplicating input file descriptor");
|
|
||||||
-
|
|
||||||
- if (fstat(fd_in, &buf) == -1)
|
|
||||||
+ }
|
|
||||||
+ if (fstat(fd_in, &buf) == -1) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error in fstat of input file descriptor");
|
|
||||||
-
|
|
||||||
- if (lstat(filename, &lbuf) == -1)
|
|
||||||
+ }
|
|
||||||
+ if (lstat(filename, &lbuf) == -1) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error in fstat of input file");
|
|
||||||
-
|
|
||||||
- if (S_ISLNK(lbuf.st_mode))
|
|
||||||
+ }
|
|
||||||
+ if (S_ISLNK(lbuf.st_mode)) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Symbolic link encountered in job %8lu (%.500s) - aborting",
|
|
||||||
jobno, filename);
|
|
||||||
-
|
|
||||||
+ }
|
|
||||||
if ((lbuf.st_dev != buf.st_dev) || (lbuf.st_ino != buf.st_ino) ||
|
|
||||||
(lbuf.st_uid != buf.st_uid) || (lbuf.st_gid != buf.st_gid) ||
|
|
||||||
- (lbuf.st_size != buf.st_size))
|
|
||||||
+ (lbuf.st_size != buf.st_size)) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Somebody changed files from under us for job %8lu (%.500s) - "
|
|
||||||
"aborting", jobno, filename);
|
|
||||||
-
|
|
||||||
+ }
|
|
||||||
if (buf.st_nlink > 2) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Somebody is trying to run a linked script for job %8lu (%.500s)",
|
|
||||||
jobno, filename);
|
|
||||||
}
|
|
||||||
- if ((fflags = fcntl(fd_in, F_GETFD)) < 0)
|
|
||||||
+ if ((fflags = fcntl(fd_in, F_GETFD)) < 0) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error in fcntl");
|
|
||||||
-
|
|
||||||
+ }
|
|
||||||
fcntl(fd_in, F_SETFD, fflags & ~FD_CLOEXEC);
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -335,28 +351,44 @@
|
|
||||||
mailsize );
|
|
||||||
|
|
||||||
if (fscanf(stream, fmt,
|
|
||||||
- &nuid, &ngid, mailname, &send_mail) != 4)
|
|
||||||
+ &nuid, &ngid, mailname, &send_mail) != 4) {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("File %.500s is in wrong format - aborting",
|
|
||||||
filename);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (mailname[0] == '-')
|
|
||||||
+ if (mailname[0] == '-') {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("illegal mail name %.300s in job %8lu (%.300s)", mailname,
|
|
||||||
jobno, filename);
|
|
||||||
-
|
|
||||||
- if (nuid != uid)
|
|
||||||
+ }
|
|
||||||
+ if (nuid != uid) {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("Job %8lu (%.500s) - userid %d does not match file uid %d",
|
|
||||||
jobno, filename, nuid, uid);
|
|
||||||
-
|
|
||||||
+ }
|
|
||||||
+ if (ngid != gid) {
|
|
||||||
+ unlink( newname );
|
|
||||||
+ pabort("Job %8lu %.500s - groupid %d does not match file gid %d",
|
|
||||||
+ jobno, filename, ngid, gid);
|
|
||||||
+ }
|
|
||||||
/* We are now committed to executing this script. Unlink the
|
|
||||||
* original.
|
|
||||||
*/
|
|
||||||
|
|
||||||
unlink(filename);
|
|
||||||
|
|
||||||
+ /* If we bail out from now on, the job gets stuck in "="
|
|
||||||
+ * The main loop should take care of that.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
fclose(stream);
|
|
||||||
+
|
|
||||||
if (chdir(ATSPOOL_DIR) < 0)
|
|
||||||
perr("Cannot chdir to " ATSPOOL_DIR);
|
|
||||||
|
|
||||||
+ filename[0] = queue;
|
|
||||||
+
|
|
||||||
/* Create a file to hold the output of the job we are about to run.
|
|
||||||
* Write the mail header. Complain in case
|
|
||||||
*/
|
|
||||||
@@ -466,19 +498,19 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 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 (if we are to send mail).
|
|
||||||
*/
|
|
||||||
- stat(filename, &buf);
|
|
||||||
- if (open(filename, O_RDONLY) != STDIN_FILENO)
|
|
||||||
- perr("Open of jobfile failed");
|
|
||||||
-
|
|
||||||
- unlink(filename);
|
|
||||||
+ if( send_mail != -1 ) {
|
|
||||||
+ stat(filename, &buf);
|
|
||||||
+ if (open(filename, O_RDONLY) != STDIN_FILENO)
|
|
||||||
+ perr("Open of jobfile failed");
|
|
||||||
+ unlink(filename);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* The job is now finished. We can delete its input file.
|
|
||||||
*/
|
|
||||||
chdir(ATJOB_DIR);
|
|
||||||
unlink(newname);
|
|
||||||
- free(newname);
|
|
||||||
|
|
||||||
if (((send_mail != -1) && (buf.st_size != size)) || (send_mail == 1)) {
|
|
||||||
|
|
||||||
@@ -508,6 +540,8 @@
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define CHECK_INTERVAL_5MIN 300
|
|
||||||
+
|
|
||||||
static time_t
|
|
||||||
run_loop()
|
|
||||||
{
|
|
||||||
@@ -537,7 +571,7 @@
|
|
||||||
* atrun.
|
|
||||||
*/
|
|
||||||
|
|
||||||
- next_job = now + CHECK_INTERVAL;
|
|
||||||
+ next_job = now + CHECK_INTERVAL_5MIN;
|
|
||||||
if (next_batch == 0)
|
|
||||||
next_batch = now;
|
|
||||||
|
|
||||||
@@ -548,11 +582,11 @@
|
|
||||||
|
|
||||||
if (stat(".", &buf) == -1)
|
|
||||||
perr("Cannot stat " ATJOB_DIR);
|
|
||||||
-
|
|
||||||
+/*
|
|
||||||
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);
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
--- at-3.1.10/parsetime.y.parser 2005-08-05 05:31:04.000000000 +0200
|
|
||||||
+++ at-3.1.10/parsetime.y 2006-09-07 12:47:45.000000000 +0200
|
|
||||||
@@ -55,8 +55,10 @@
|
|
||||||
%%
|
|
||||||
timespec : spec_base
|
|
||||||
| spec_base inc_or_dec
|
|
||||||
+ {
|
|
||||||
+ time_only = 0;
|
|
||||||
+ }
|
|
||||||
;
|
|
||||||
-
|
|
||||||
spec_base : date
|
|
||||||
| time
|
|
||||||
{
|
|
@ -1,16 +0,0 @@
|
|||||||
--- at-3.1.10/pam_atd.newpam 2007-01-30 13:04:19.000000000 +0100
|
|
||||||
+++ at-3.1.10/pam_atd 2007-01-30 13:02:09.000000000 +0100
|
|
||||||
@@ -0,0 +1,13 @@
|
|
||||||
+# The PAM configuration file for the at daemon
|
|
||||||
+#
|
|
||||||
+#
|
|
||||||
+auth sufficient pam_rootok.so
|
|
||||||
+auth include system-auth
|
|
||||||
+auth required pam_env.so
|
|
||||||
+account include system-auth
|
|
||||||
+session required pam_loginuid.so
|
|
||||||
+session include system-auth
|
|
||||||
+# Sets up user limits, please uncomment and read /etc/security/limits.conf
|
|
||||||
+# to enable this functionality.
|
|
||||||
+# session required pam_limits.so
|
|
||||||
+#
|
|
@ -1,11 +1,10 @@
|
|||||||
--- at-3.1.10/at.c.perm 2007-07-02 15:40:35.000000000 +0200
|
--- at-3.1.10/at.c.perm 2007-07-04 09:43:19.000000000 +0200
|
||||||
+++ at-3.1.10/at.c 2007-07-02 16:19:54.000000000 +0200
|
+++ at-3.1.10/at.c 2007-07-04 10:04:47.000000000 +0200
|
||||||
@@ -314,10 +314,11 @@
|
@@ -314,26 +314,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);
|
||||||
+ //seteuid(real_uid);
|
|
||||||
+ seteuid(effective_uid);
|
+ seteuid(effective_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, S_IRUSR)) == -1)
|
||||||
perr("Cannot create atjob file %.500s", atfile);
|
perr("Cannot create atjob file %.500s", atfile);
|
||||||
@ -14,3 +13,66 @@
|
|||||||
|
|
||||||
if ((fd2 = dup(fd)) < 0)
|
if ((fd2 = dup(fd)) < 0)
|
||||||
perr("Error in dup() of job file");
|
perr("Error in dup() of job file");
|
||||||
|
|
||||||
|
- /*
|
||||||
|
if (fchown(fd2, real_uid, real_gid) != 0)
|
||||||
|
- perr("Cannot give away file");
|
||||||
|
- */
|
||||||
|
+ perr("Cannot give real_uid and real_gid the file");
|
||||||
|
|
||||||
|
PRIV_END
|
||||||
|
|
||||||
|
- /* We no longer need suid root; now we just need to be able to write
|
||||||
|
- * to the directory, if necessary.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
- REDUCE_PRIV(daemon_uid, daemon_gid)
|
||||||
|
/* We've successfully created the file; let's set the flag so it
|
||||||
|
* gets removed in case of an interrupt or error.
|
||||||
|
*/
|
||||||
|
@@ -491,7 +484,7 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (fchmod(fd2, S_IRUSR | S_IWUSR | S_IXUSR) < 0)
|
||||||
|
- perr("Cannot give away file");
|
||||||
|
+ perr("Cannot change the mode of the file");
|
||||||
|
|
||||||
|
close(fd2);
|
||||||
|
|
||||||
|
@@ -656,7 +649,7 @@
|
||||||
|
We need the unprivileged uid here since the file is owned by the real
|
||||||
|
(not effective) uid.
|
||||||
|
*/
|
||||||
|
- setregid(real_gid, effective_gid);
|
||||||
|
+ PRIV_START
|
||||||
|
|
||||||
|
if (queue == '=') {
|
||||||
|
fprintf(stderr, "Warning: deleting running job\n");
|
||||||
|
@@ -665,8 +658,8 @@
|
||||||
|
perr("Cannot unlink %.500s", dirent->d_name);
|
||||||
|
rc = EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
+ PRIV_END
|
||||||
|
|
||||||
|
- setregid(effective_gid, real_gid);
|
||||||
|
done = 1;
|
||||||
|
|
||||||
|
break;
|
||||||
|
@@ -676,7 +669,7 @@
|
||||||
|
FILE *fp;
|
||||||
|
int ch;
|
||||||
|
|
||||||
|
- setregid(real_gid, effective_gid);
|
||||||
|
+ PRIV_START
|
||||||
|
fp = fopen(dirent->d_name, "r");
|
||||||
|
|
||||||
|
if (fp) {
|
||||||
|
@@ -689,7 +682,7 @@
|
||||||
|
perr("Cannot open %.500s", dirent->d_name);
|
||||||
|
rc = EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
- setregid(effective_gid, real_gid);
|
||||||
|
+ PRIV_END
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
--- at-3.1.10/atrun.8.in.typo 2005-08-29 10:08:41.000000000 +0200
|
|
||||||
+++ at-3.1.10/atrun.8.in 2006-09-12 09:56:54.000000000 +0200
|
|
||||||
@@ -11,7 +11,7 @@
|
|
||||||
.B atrun
|
|
||||||
runs jobs queued by
|
|
||||||
.BR at(1) .
|
|
||||||
-It is a shell script containing invoking
|
|
||||||
+It is a shell script invoking
|
|
||||||
.B @sbindir@/atd
|
|
||||||
with the
|
|
||||||
.I -s
|
|
||||||
--- at-3.1.10/atd.c.typo 2006-09-12 09:56:54.000000000 +0200
|
|
||||||
+++ at-3.1.10/atd.c 2006-09-12 10:00:10.000000000 +0200
|
|
||||||
@@ -363,7 +363,7 @@
|
|
||||||
}
|
|
||||||
if (buf.st_nlink > 2) {
|
|
||||||
unlink( newname );
|
|
||||||
- perr("Someboy is trying to run a linked script for job %8lu (%.500s)",
|
|
||||||
+ perr("Somebody is trying to run a linked script for job %8lu (%.500s)",
|
|
||||||
jobno, filename);
|
|
||||||
}
|
|
||||||
if ((fflags = fcntl(fd_in, F_GETFD)) < 0) {
|
|
||||||
@@ -849,6 +849,7 @@
|
|
||||||
* Let's remove the lockfile and reschedule.
|
|
||||||
*/
|
|
||||||
strncpy(lock_name, dirent->d_name, sizeof(lock_name));
|
|
||||||
+ lock_name[sizeof(lock_name)-1] = '\0';
|
|
||||||
lock_name[0] = '=';
|
|
||||||
unlink(lock_name);
|
|
||||||
next_job = now;
|
|
||||||
@@ -865,7 +866,7 @@
|
|
||||||
nothing_to_do = 0;
|
|
||||||
|
|
||||||
/* There's a job for later. Note its execution time if it's
|
|
||||||
- * the earlierst so far.
|
|
||||||
+ * the earliest so far.
|
|
||||||
*/
|
|
||||||
if (run_time > now) {
|
|
||||||
if (next_job > run_time) {
|
|
||||||
@@ -883,6 +884,7 @@
|
|
||||||
run_batch++;
|
|
||||||
if (strcmp(batch_name, dirent->d_name) > 0) {
|
|
||||||
strncpy(batch_name, dirent->d_name, sizeof(batch_name));
|
|
||||||
+ batch_name[sizeof(batch_name)-1] = '\0';
|
|
||||||
batch_uid = buf.st_uid;
|
|
||||||
batch_gid = buf.st_gid;
|
|
||||||
batch_queue = queue;
|
|
||||||
@@ -925,7 +927,7 @@
|
|
||||||
int
|
|
||||||
main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
-/* Browse through ATJOB_DIR, checking all the jobfiles wether they should
|
|
||||||
+/* Browse through ATJOB_DIR, checking all the jobfiles whether they should
|
|
||||||
* be executed and or deleted. The queue is coded into the first byte of
|
|
||||||
* the job filename, the date (in minutes since Eon) as a hex number in the
|
|
||||||
* following eight bytes, followed by a dot and a serial number. A file
|
|
@ -1,26 +0,0 @@
|
|||||||
diff -u at-3.1.8/at.c.SHELL at-3.1.8/at.c
|
|
||||||
--- at-3.1.8/at.c.SHELL 2003-12-09 17:03:28.000000000 +1000
|
|
||||||
+++ at-3.1.8/at.c 2003-12-09 17:03:28.000000000 +1000
|
|
||||||
@@ -433,6 +433,8 @@
|
|
||||||
fprintf(fp, " || {\n\t echo 'Execution directory "
|
|
||||||
"inaccessible' >&2\n\t exit 1\n}\n");
|
|
||||||
|
|
||||||
+ fprintf(fp, "${SHELL:-/bin/sh} << `(dd if=/dev/urandom count=200 bs=1 2>/dev/null|LC_ALL=C tr -d -c '[:alnum:]')`\n\n");
|
|
||||||
+
|
|
||||||
istty = isatty(fileno(stdin));
|
|
||||||
if (istty) {
|
|
||||||
fprintf(stderr, "at> ");
|
|
||||||
@@ -854,10 +856,11 @@
|
|
||||||
/* POSIX.2 allows the shell specified by the user's SHELL environment
|
|
||||||
variable, the login shell from the user's password database entry,
|
|
||||||
or /bin/sh to be the command interpreter that processes the at-job.
|
|
||||||
- It also alows a warning diagnostic to be printed. Because of the
|
|
||||||
+ It also allows a warning diagnostic to be printed. Because of the
|
|
||||||
possible variance, we always output the diagnostic. */
|
|
||||||
|
|
||||||
- fprintf(stderr, "warning: commands will be executed using /bin/sh\n");
|
|
||||||
+/* fprintf(stderr, "warning: commands will be executed using /bin/sh\n");
|
|
||||||
+ */
|
|
||||||
|
|
||||||
writefile(timer, queue);
|
|
||||||
break;
|
|
@ -1,95 +0,0 @@
|
|||||||
--- at-3.1.8/at.1.in.fix_no_export 2004-10-05 13:34:39.524060000 -0400
|
|
||||||
+++ at-3.1.8/at.1.in 2004-10-05 13:36:12.930550000 -0400
|
|
||||||
@@ -49,8 +49,7 @@
|
|
||||||
and
|
|
||||||
.B batch
|
|
||||||
read commands from standard input or a specified file which are to
|
|
||||||
-be executed at a later time, using
|
|
||||||
-.BR /bin/sh .
|
|
||||||
+be executed at a later time .
|
|
||||||
.TP 8
|
|
||||||
.BR at
|
|
||||||
executes commands at a specified time.
|
|
||||||
@@ -252,8 +251,56 @@
|
|
||||||
option argument, which must have the same format as specified for the
|
|
||||||
.BR touch(1)
|
|
||||||
utility's
|
|
||||||
-.B -t
|
|
||||||
+.B \-t
|
|
||||||
time option argument ([[CC]YY]MMDDhhmm).
|
|
||||||
+.SH ENVIRONMENT
|
|
||||||
+.P
|
|
||||||
+.TP 8
|
|
||||||
+.B SHELL
|
|
||||||
+The value of the SHELL environment variable at the time of
|
|
||||||
+.B at
|
|
||||||
+invocation will determine which shell is used to execute the
|
|
||||||
+.B at
|
|
||||||
+job commands. If SHELL is unset when
|
|
||||||
+.B at
|
|
||||||
+is invoked, the user's login shell will be used; otherwise,
|
|
||||||
+if SHELL is set when
|
|
||||||
+.B at
|
|
||||||
+is invoked, it must contain the path of a shell interpreter
|
|
||||||
+executable that will be used to run the commands at the specified time.
|
|
||||||
+.P
|
|
||||||
+.B at
|
|
||||||
+will record the values of
|
|
||||||
+environment variables present at time of
|
|
||||||
+.B at
|
|
||||||
+invocation. When the commands are run at the specified time,
|
|
||||||
+.B at
|
|
||||||
+will restore these variables to their recorded values .
|
|
||||||
+These variables are excluded from this processing and are never
|
|
||||||
+set by
|
|
||||||
+.B at
|
|
||||||
+when the commands are run :
|
|
||||||
+.br
|
|
||||||
+.BI TERM,
|
|
||||||
+.BI DISPLAY,
|
|
||||||
+.BI SHELLOPTS,
|
|
||||||
+.BI _,
|
|
||||||
+.BI PPID,
|
|
||||||
+.BI BASH_VERSINFO,
|
|
||||||
+.BI EUID,
|
|
||||||
+.BI UID,
|
|
||||||
+.BI GROUPS.
|
|
||||||
+.br
|
|
||||||
+If the user submitting the
|
|
||||||
+.B at
|
|
||||||
+job is not the super-user, variables that alter the behaviour of the
|
|
||||||
+loader
|
|
||||||
+.BR ld.so(8),
|
|
||||||
+such as
|
|
||||||
+.B LD_LIBRARY_PATH
|
|
||||||
+, cannot be recorded and restored by
|
|
||||||
+.B at .
|
|
||||||
+.P
|
|
||||||
.SH FILES
|
|
||||||
.I @ATJBD@
|
|
||||||
.br
|
|
||||||
--- at-3.1.8/at.c.fix_no_export 2004-10-05 13:34:39.538036000 -0400
|
|
||||||
+++ at-3.1.8/at.c 2004-10-05 13:34:39.629944000 -0400
|
|
||||||
@@ -358,8 +358,8 @@
|
|
||||||
for (atenv = environ; *atenv != NULL; atenv++) {
|
|
||||||
int export = 1;
|
|
||||||
char *pch;
|
|
||||||
- char * eqp = *atenv;
|
|
||||||
- char * valp = *atenv;
|
|
||||||
+ char * eqp = *atenv;
|
|
||||||
+ char * valp = *atenv;
|
|
||||||
|
|
||||||
if ((pch = strchr(*atenv, '=')) != 0) {
|
|
||||||
unsigned int i;
|
|
||||||
@@ -368,8 +368,9 @@
|
|
||||||
valp = pch + 1;
|
|
||||||
for (i = 0; i < sizeof(no_export) / sizeof(no_export[0]); i++) {
|
|
||||||
export = export
|
|
||||||
- && (strncmp(*atenv, no_export[i],
|
|
||||||
- (size_t) (eqp - *atenv)) != 0);
|
|
||||||
+ && ( (((size_t) (eqp - *atenv)) != strlen(no_export[i]))
|
|
||||||
+ ||(strncmp(*atenv, no_export[i],(size_t) (eqp - *atenv)) != 0)
|
|
||||||
+ );
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
continue; /* no '=', so bail on this one */
|
|
@ -1,248 +0,0 @@
|
|||||||
--- at-3.1.8.orig/atd.c Tue Jul 16 21:35:17 2002
|
|
||||||
+++ at-3.1.8/atd.c Sat Jul 20 17:26:24 2002
|
|
||||||
@@ -113,7 +113,7 @@
|
|
||||||
static char rcsid[] = "$Id: atd.c,v 1.28 1997/05/06 08:31:09 ig25 Exp $";
|
|
||||||
static double load_avg = LOADAVG_MX;
|
|
||||||
static time_t now;
|
|
||||||
-static time_t last_chg;
|
|
||||||
+//static time_t last_chg;
|
|
||||||
static int nothing_to_do;
|
|
||||||
unsigned int batch_interval;
|
|
||||||
static int run_as_daemon = 0;
|
|
||||||
@@ -188,7 +188,7 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
|
||||||
-run_file(const char *filename, uid_t uid, gid_t gid)
|
|
||||||
+run_file(char *filename, uid_t uid, gid_t gid)
|
|
||||||
{
|
|
||||||
/* Run a file by by spawning off a process which redirects I/O,
|
|
||||||
* spawns a subshell, then waits for it to complete and sends
|
|
||||||
@@ -198,7 +198,7 @@
|
|
||||||
int fd_out, fd_in;
|
|
||||||
char mailbuf[256], jobbuf[9];
|
|
||||||
char *mailname = NULL;
|
|
||||||
- char *newname;
|
|
||||||
+ char newname[256];
|
|
||||||
FILE *stream;
|
|
||||||
int send_mail = 0;
|
|
||||||
struct stat buf, lbuf;
|
|
||||||
@@ -214,12 +214,18 @@
|
|
||||||
|
|
||||||
sprintf(jobbuf, "%8lu", jobno);
|
|
||||||
|
|
||||||
- if ((newname = malloc(strlen(filename) + 1)) == NULL)
|
|
||||||
- pabort("Job %8lu : out of virtual memory", jobno);
|
|
||||||
+ if( strlen( filename ) >= sizeof( newname ) - 1 )
|
|
||||||
+ pabort("File name too long: %s", filename );
|
|
||||||
|
|
||||||
strcpy(newname, filename);
|
|
||||||
+
|
|
||||||
+ newname[0] = '!';
|
|
||||||
+
|
|
||||||
+ if( rename( filename, newname ) < 0 )
|
|
||||||
+ perr( "Error renaming job file." );
|
|
||||||
|
|
||||||
- newname[0] = '=';
|
|
||||||
+ filename[0] = '!';
|
|
||||||
+ newname[0] = '=';
|
|
||||||
|
|
||||||
/* We try to make a hard link to lock the file. If we fail, then
|
|
||||||
* somebody else has already locked it (a second atd?); log the
|
|
||||||
@@ -234,13 +240,15 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* If something goes wrong between here and the unlink() call,
|
|
||||||
- * the job gets restarted as soon as the "=" entry is cleared
|
|
||||||
- * by the main atd loop.
|
|
||||||
- */
|
|
||||||
+ * the job will remain in the "!" queue.
|
|
||||||
+ * no point in retrying, and need glaring proof that something went wrong
|
|
||||||
+ */
|
|
||||||
|
|
||||||
pid = fork();
|
|
||||||
- if (pid == -1)
|
|
||||||
+ if (pid == -1) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Cannot fork");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
else if (pid != 0) {
|
|
||||||
return;
|
|
||||||
@@ -252,6 +260,7 @@
|
|
||||||
|
|
||||||
pentry = getpwuid(uid);
|
|
||||||
if (pentry == NULL) {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("Userid %lu not found - aborting job %8lu (%.500s)",
|
|
||||||
(unsigned long) uid, jobno, filename);
|
|
||||||
}
|
|
||||||
@@ -261,34 +270,49 @@
|
|
||||||
|
|
||||||
PRIV_END
|
|
||||||
|
|
||||||
- if (stream == NULL)
|
|
||||||
+ if (stream == NULL) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Cannot open input file");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if ((fd_in = dup(fileno(stream))) < 0)
|
|
||||||
+ if ((fd_in = dup(fileno(stream))) < 0) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error duplicating input file descriptor");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (fstat(fd_in, &buf) == -1)
|
|
||||||
+ if (fstat(fd_in, &buf) == -1) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error in fstat of input file descriptor");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (lstat(filename, &lbuf) == -1)
|
|
||||||
+ if (lstat(filename, &lbuf) == -1) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error in fstat of input file");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (S_ISLNK(lbuf.st_mode))
|
|
||||||
+ if (S_ISLNK(lbuf.st_mode)) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Symbolic link encountered in job %8lu (%.500s) - aborting",
|
|
||||||
jobno, filename);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if ((lbuf.st_dev != buf.st_dev) || (lbuf.st_ino != buf.st_ino) ||
|
|
||||||
(lbuf.st_uid != buf.st_uid) || (lbuf.st_gid != buf.st_gid) ||
|
|
||||||
- (lbuf.st_size != buf.st_size))
|
|
||||||
+ (lbuf.st_size != buf.st_size)) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Somebody changed files from under us for job %8lu (%.500s) - "
|
|
||||||
"aborting", jobno, filename);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (buf.st_nlink > 2) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Somebody is trying to run a linked script for job %8lu (%.500s)",
|
|
||||||
filename);
|
|
||||||
}
|
|
||||||
- if ((fflags = fcntl(fd_in, F_GETFD)) < 0)
|
|
||||||
+ if ((fflags = fcntl(fd_in, F_GETFD)) < 0) {
|
|
||||||
+ unlink( newname );
|
|
||||||
perr("Error in fcntl");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
fcntl(fd_in, F_SETFD, fflags & ~FD_CLOEXEC);
|
|
||||||
|
|
||||||
@@ -300,33 +324,47 @@
|
|
||||||
* the bug is located. -Joey
|
|
||||||
*/
|
|
||||||
if (fscanf(stream, "#!/bin/sh\n# atrun uid=%d gid=%d\n# mail %255s %d",
|
|
||||||
- &nuid, &ngid, mailbuf, &send_mail) != 4)
|
|
||||||
+ &nuid, &ngid, mailbuf, &send_mail) != 4) {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("File %.500s is in wrong format - aborting",
|
|
||||||
filename);
|
|
||||||
+ }
|
|
||||||
mailbuf[255] = '\0';
|
|
||||||
|
|
||||||
- if (mailbuf[0] == '-')
|
|
||||||
+ if (mailbuf[0] == '-') {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("illegal mail name %.300s in job %8lu (%.300s)", mailbuf,
|
|
||||||
jobno, filename);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
mailname = mailbuf;
|
|
||||||
- if (nuid != uid)
|
|
||||||
+ if (nuid != uid) {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("Job %8lu (%.500s) - userid %d does not match file uid %d",
|
|
||||||
jobno, filename, nuid, uid);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (ngid != gid)
|
|
||||||
+ if (ngid != gid) {
|
|
||||||
+ unlink( newname );
|
|
||||||
pabort("Job %8lu %.500s - groupid %d does not match file gid %d",
|
|
||||||
jobno, filename, ngid, gid);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* We are now committed to executing this script. Unlink the
|
|
||||||
* original.
|
|
||||||
*/
|
|
||||||
|
|
||||||
unlink(filename);
|
|
||||||
+
|
|
||||||
+ /* If we bail out from now on, the job gets stuck in "="
|
|
||||||
+ * The main loop should take care of that.
|
|
||||||
+ */
|
|
||||||
|
|
||||||
fclose(stream);
|
|
||||||
if (chdir(ATSPOOL_DIR) < 0)
|
|
||||||
perr("Cannot chdir to " ATSPOOL_DIR);
|
|
||||||
+
|
|
||||||
+ filename[0] = queue;
|
|
||||||
|
|
||||||
/* Create a file to hold the output of the job we are about to run.
|
|
||||||
* Write the mail header. Complain in case
|
|
||||||
@@ -417,19 +455,21 @@
|
|
||||||
waitpid(pid, (int *) NULL, 0);
|
|
||||||
|
|
||||||
/* 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 (if we are to send mail)
|
|
||||||
*/
|
|
||||||
- stat(filename, &buf);
|
|
||||||
- if (open(filename, O_RDONLY) != STDIN_FILENO)
|
|
||||||
- perr("Open of jobfile failed");
|
|
||||||
+
|
|
||||||
+ if( send_mail != -1 ) {
|
|
||||||
+ stat(filename, &buf);
|
|
||||||
+ if (open(filename, O_RDONLY) != STDIN_FILENO)
|
|
||||||
+ perr("Open of jobfile failed");
|
|
||||||
|
|
||||||
- unlink(filename);
|
|
||||||
+ unlink(filename);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* The job is now finished. We can delete its input file.
|
|
||||||
*/
|
|
||||||
chdir(ATJOB_DIR);
|
|
||||||
unlink(newname);
|
|
||||||
- free(newname);
|
|
||||||
|
|
||||||
if (((send_mail != -1) && (buf.st_size != size)) || (send_mail == 1)) {
|
|
||||||
|
|
||||||
@@ -462,6 +502,8 @@
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define CHECK_INTERVAL_5MIN 300
|
|
||||||
+
|
|
||||||
static time_t
|
|
||||||
run_loop()
|
|
||||||
{
|
|
||||||
@@ -491,7 +533,7 @@
|
|
||||||
* atrun.
|
|
||||||
*/
|
|
||||||
|
|
||||||
- next_job = now + CHECK_INTERVAL;
|
|
||||||
+ next_job = now + CHECK_INTERVAL_5MIN;
|
|
||||||
if (next_batch == 0)
|
|
||||||
next_batch = now;
|
|
||||||
|
|
||||||
@@ -502,11 +544,11 @@
|
|
||||||
|
|
||||||
if (stat(".", &buf) == -1)
|
|
||||||
perr("Cannot stat " ATJOB_DIR);
|
|
||||||
-
|
|
||||||
+/*
|
|
||||||
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);
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
diff -u at-3.1.8/at.1.in~ at-3.1.8/at.1.in
|
|
||||||
--- at-3.1.8/at.1.in~ 2003-06-03 10:06:37.000000000 +0900
|
|
||||||
+++ at-3.1.8/at.1.in 2003-06-03 10:06:37.000000000 +0900
|
|
||||||
@@ -117,7 +117,7 @@
|
|
||||||
.B at 1am tomorrow.
|
|
||||||
.PP
|
|
||||||
The exact definition of the time specification can be found in
|
|
||||||
-.IR @prefix@/share/doc/at/timespec .
|
|
||||||
+.IR @prefix@/share/doc/at-@VERSION@/timespec .
|
|
||||||
.PP
|
|
||||||
For both
|
|
||||||
.BR at " and " batch ,
|
|
||||||
@@ -240,7 +240,7 @@
|
|
||||||
Times displayed will be in the format "1997-02-20 14:50" unless the
|
|
||||||
environment variable
|
|
||||||
.B POSIXLY_CORRECT
|
|
||||||
-is set; then, it will be "Thu Feb 20 14:50:00 1996".
|
|
||||||
+is set; then, it will be "Thu Feb 20 14:50:00 1997".
|
|
||||||
.TP
|
|
||||||
.B
|
|
||||||
\-c
|
|
@ -1,27 +0,0 @@
|
|||||||
--- at-3.1.8/Makefile.in.pie 2004-05-12 11:11:07.690785433 +0200
|
|
||||||
+++ at-3.1.8/Makefile.in 2004-05-12 11:23:10.367957697 +0200
|
|
||||||
@@ -69,13 +69,13 @@
|
|
||||||
all: at atd atrun
|
|
||||||
|
|
||||||
at: $(ATOBJECTS)
|
|
||||||
- $(CC) $(CFLAGS) -o at $(ATOBJECTS) $(LIBS) $(LEXLIB)
|
|
||||||
+ $(CC) $(CFLAGS) -o at -pie $(ATOBJECTS) $(LIBS) $(LEXLIB)
|
|
||||||
rm -f $(CLONES)
|
|
||||||
$(LN_S) -f at atq
|
|
||||||
$(LN_S) -f at atrm
|
|
||||||
|
|
||||||
atd: $(RUNOBJECTS)
|
|
||||||
- $(CC) $(CFLAGS) -o atd $(RUNOBJECTS) $(LIBS) $(SELINUXLIB)
|
|
||||||
+ $(CC) $(CFLAGS) -o atd -pie $(RUNOBJECTS) $(LIBS) $(SELINUXLIB)
|
|
||||||
|
|
||||||
y.tab.c y.tab.h: parsetime.y
|
|
||||||
$(YACC) -d parsetime.y
|
|
||||||
@@ -87,7 +87,7 @@
|
|
||||||
configure
|
|
||||||
|
|
||||||
.c.o:
|
|
||||||
- $(CC) -c $(CFLAGS) $(DEFS) $*.c
|
|
||||||
+ $(CC) -c $(CFLAGS) -fpie $(DEFS) $*.c
|
|
||||||
|
|
||||||
install: all
|
|
||||||
$(INSTALL) -m 755 -d $(IROOT)$(etcdir)
|
|
@ -1,30 +0,0 @@
|
|||||||
--- at-3.1.8/at.1.in.-r-man 2005-08-03 19:45:50.000000000 -0400
|
|
||||||
+++ at-3.1.8/at.1.in 2005-09-02 12:17:44.435351000 -0400
|
|
||||||
@@ -9,7 +9,7 @@
|
|
||||||
.IR queue ]
|
|
||||||
.RB [ -f
|
|
||||||
.IR file ]
|
|
||||||
-.RB [ -mldbv ]
|
|
||||||
+.RB [ -mldrbv ]
|
|
||||||
.B TIME
|
|
||||||
.br
|
|
||||||
.B at
|
|
||||||
@@ -18,7 +18,7 @@
|
|
||||||
.IR queue ]
|
|
||||||
.RB [ -f
|
|
||||||
.IR file ]
|
|
||||||
-.RB [ -mldbv ]
|
|
||||||
+.RB [ -mldrbv ]
|
|
||||||
.RB -t
|
|
||||||
.IR time_arg
|
|
||||||
.br
|
|
||||||
@@ -232,6 +232,9 @@
|
|
||||||
Is an alias for
|
|
||||||
.B atrm.
|
|
||||||
.TP
|
|
||||||
+.B \-r
|
|
||||||
+Is an alias for
|
|
||||||
+.B atrm.
|
|
||||||
.TP
|
|
||||||
.B \-v
|
|
||||||
Shows the time the job will be executed.
|
|
@ -1,5 +1,5 @@
|
|||||||
--- at-3.1.10/at.c.t_option 2007-06-28 14:43:51.000000000 +0200
|
--- at-3.1.10/at.c.t_option 2007-07-04 11:12:10.000000000 +0200
|
||||||
+++ at-3.1.10/at.c 2007-06-28 14:54:04.000000000 +0200
|
+++ at-3.1.10/at.c 2007-07-04 11:13:19.000000000 +0200
|
||||||
@@ -396,8 +396,9 @@
|
@@ -396,8 +396,9 @@
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
for (i = 0; i < sizeof(no_export) / sizeof(no_export[0]); i++) {
|
for (i = 0; i < sizeof(no_export) / sizeof(no_export[0]); i++) {
|
||||||
@ -138,7 +138,24 @@
|
|||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
break;
|
break;
|
||||||
@@ -955,10 +1054,12 @@
|
@@ -923,10 +1022,12 @@
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AT:
|
||||||
|
- if (argc > optind) {
|
||||||
|
- timer = parsetime(argc - optind, argv + optind);
|
||||||
|
- } else {
|
||||||
|
- timer = 0;
|
||||||
|
+ if (timer == 0) {
|
||||||
|
+ if (argc > optind) {
|
||||||
|
+ timer = parsetime(argc - optind, argv + optind);
|
||||||
|
+ } else {
|
||||||
|
+ timer = 0;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timer == 0) {
|
||||||
|
@@ -955,10 +1056,12 @@
|
||||||
else
|
else
|
||||||
queue = DEFAULT_BATCH_QUEUE;
|
queue = DEFAULT_BATCH_QUEUE;
|
||||||
|
|
||||||
@ -155,8 +172,8 @@
|
|||||||
|
|
||||||
if (atverify) {
|
if (atverify) {
|
||||||
struct tm *tm = localtime(&timer);
|
struct tm *tm = localtime(&timer);
|
||||||
--- at-3.1.10/at.1.in.t_option 2007-06-28 14:43:51.000000000 +0200
|
--- at-3.1.10/at.1.in.t_option 2007-07-04 11:12:10.000000000 +0200
|
||||||
+++ at-3.1.10/at.1.in 2007-06-28 14:43:51.000000000 +0200
|
+++ at-3.1.10/at.1.in 2007-07-04 11:12:10.000000000 +0200
|
||||||
@@ -12,6 +12,16 @@
|
@@ -12,6 +12,16 @@
|
||||||
.RB [ -mldbv ]
|
.RB [ -mldbv ]
|
||||||
.B TIME
|
.B TIME
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
diff -u at-3.1.8/Makefile.in.orig at-3.1.8/Makefile.in
|
|
||||||
--- at-3.1.8/Makefile.in.orig Wed Feb 14 13:59:09 2001
|
|
||||||
+++ at-3.1.8/Makefile.in Mon Feb 19 14:48:42 2001
|
|
||||||
@@ -51,6 +51,8 @@
|
|
||||||
|
|
||||||
OTHERS = parsetime.l parsetime.y
|
|
||||||
|
|
||||||
+TEST_VERBOSE = 0
|
|
||||||
+
|
|
||||||
DOCS = Problems Copyright README ChangeLog timespec
|
|
||||||
|
|
||||||
MISC = COPYING Makefile.in configure acconfig.h install-sh \
|
|
||||||
@@ -150,6 +152,9 @@
|
|
||||||
|
|
||||||
parsetest: lex.yy.c y.tab.c
|
|
||||||
$(CC) -o parsetest $(CFLAGS) $(DEFS) -DTEST_PARSER -DNEED_YYWRAP lex.yy.c y.tab.c
|
|
||||||
+
|
|
||||||
+test: parsetest
|
|
||||||
+ PERL_DL_NONLAZY=1 perl -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' test.pl
|
|
||||||
|
|
||||||
.depend: $(CSRCS)
|
|
||||||
gcc $(CFLAGS) $(DEFS) -MM $(CSRCS) > .depend
|
|
||||||
diff -u at-3.1.8/test.pl.orig at-3.1.8/test.pl
|
|
@ -1,11 +0,0 @@
|
|||||||
--- at-3.1.8/panic.c.usage 2002-01-17 23:15:27.000000000 -0500
|
|
||||||
+++ at-3.1.8/panic.c 2004-08-03 17:23:22.628494000 -0400
|
|
||||||
@@ -92,6 +92,8 @@
|
|
||||||
/* Print usage and exit.
|
|
||||||
*/
|
|
||||||
fprintf(stderr, "Usage: at [-V] [-q x] [-f file] [-m] time\n"
|
|
||||||
+ " at [-V] [-q x] [-f file] [-m] -t [[CC]YY]MMDDhhmm\n"
|
|
||||||
+ " at -c job [job...]\n"
|
|
||||||
" atq [-V] [-q x]\n"
|
|
||||||
" atrm [-V] [-q x] job ...\n"
|
|
||||||
" batch [-V] [-f file] [-m]\n");
|
|
31
at.spec
31
at.spec
@ -6,7 +6,7 @@
|
|||||||
Summary: Job spooling tools
|
Summary: Job spooling tools
|
||||||
Name: at
|
Name: at
|
||||||
Version: 3.1.10
|
Version: 3.1.10
|
||||||
Release: 12%{?dist}
|
Release: 13%{?dist}
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: System Environment/Daemons
|
Group: System Environment/Daemons
|
||||||
URL: http://ftp.debian.org/debian/pool/main/a/at
|
URL: http://ftp.debian.org/debian/pool/main/a/at
|
||||||
@ -18,13 +18,12 @@ Patch1: at-3.1.10-makefile.patch
|
|||||||
Patch2: at-3.1.10-man-timespec-path.patch
|
Patch2: at-3.1.10-man-timespec-path.patch
|
||||||
Patch3: at-3.1.7-sigchld.patch
|
Patch3: at-3.1.7-sigchld.patch
|
||||||
Patch4: at-3.1.10-typo.patch
|
Patch4: at-3.1.10-typo.patch
|
||||||
Patch7: at-3.1.8-perr.patch
|
Patch5: at-3.1.8-perr.patch
|
||||||
#Patch8: at-3.1.8-instinet.patch
|
Patch6: at-3.1.10-shell.patch
|
||||||
Patch9: at-3.1.10-shell.patch
|
Patch7: at-3.1.8-t_option.patch
|
||||||
Patch11: at-3.1.8-t_option.patch
|
Patch8: at-3.1.10-pam.patch
|
||||||
Patch14: at-3.1.10-pam.patch
|
Patch9: at-3.1.10-dont_fork.patch
|
||||||
Patch15: at-3.1.10-dont_fork.patch
|
Patch10: at-3.1.10-perm.patch
|
||||||
Patch21: at-3.1.10-perm.patch
|
|
||||||
|
|
||||||
BuildRequires: fileutils chkconfig /etc/init.d
|
BuildRequires: fileutils chkconfig /etc/init.d
|
||||||
BuildRequires: flex bison autoconf
|
BuildRequires: flex bison autoconf
|
||||||
@ -63,13 +62,12 @@ cp %{SOURCE1} .
|
|||||||
%patch2 -p1 -b .paths
|
%patch2 -p1 -b .paths
|
||||||
%patch3 -p1 -b .sigchld
|
%patch3 -p1 -b .sigchld
|
||||||
%patch4 -p1 -b .typo
|
%patch4 -p1 -b .typo
|
||||||
%patch7 -p1 -b .perr
|
%patch5 -p1 -b .perr
|
||||||
#%patch8 -p1 -b .instinet #unlink unsucessful jobs, removed -> atd crash
|
%patch6 -p1 -b .shell
|
||||||
%patch9 -p1 -b .shell
|
%patch7 -p1 -b .t_option
|
||||||
%patch11 -p1 -b .t_option
|
%patch8 -p1 -b .pam
|
||||||
%patch14 -p1 -b .pam
|
%patch9 -p1 -b .dont_fork
|
||||||
%patch15 -p1 -b .dont_fork
|
%patch10 -p1 -b .perm
|
||||||
%patch21 -p1 -b .perm
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# patch10 touches configure.in
|
# patch10 touches configure.in
|
||||||
@ -167,6 +165,9 @@ fi
|
|||||||
%attr(4755,root,root) %{_bindir}/at
|
%attr(4755,root,root) %{_bindir}/at
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jul 3 2007 Marcela Maslanova <mmaslano@redhat.com> - 3.1.10-13
|
||||||
|
- Resolves: rhbz#243064
|
||||||
|
|
||||||
* Tue Jul 3 2007 Marcela Maslanova <mmaslano@redhat.com> - 3.1.10-12
|
* Tue Jul 3 2007 Marcela Maslanova <mmaslano@redhat.com> - 3.1.10-12
|
||||||
- crashing atd
|
- crashing atd
|
||||||
- work only for root, still broken some functions
|
- work only for root, still broken some functions
|
||||||
|
Loading…
Reference in New Issue
Block a user