Index: head/sysutils/anacron/Makefile =================================================================== --- head/sysutils/anacron/Makefile (revision 436722) +++ head/sysutils/anacron/Makefile (revision 436723) @@ -1,30 +1,33 @@ # Created by: Derik van Zuetphen # $FreeBSD$ PORTNAME= anacron PORTVERSION= 2.3 PORTREVISION= 6 CATEGORIES= sysutils MASTER_SITES= SF MAINTAINER= dz@426.ch COMMENT= Schedules periodic jobs on systems that are not permanently up +LICENSE= GPLv2+ +LICENSE_FILE= ${WRKSRC}/COPYING + USES= gmake USE_RC_SUBR= anacron SUB_FILES= pkg-message post-patch: .for f in Makefile anacron.8 anacrontab.5 @${REINPLACE_CMD} -e 's|\(/etc/anacrontab\)|${PREFIX}\1|' ${WRKSRC}/${f} .endfor @${REINPLACE_CMD} -e 's|^CFLAGS = .*||' ${WRKSRC}/Makefile do-install: ${INSTALL_PROGRAM} ${WRKSRC}/anacron ${STAGEDIR}${PREFIX}/sbin ${INSTALL_MAN} ${WRKSRC}/anacron.8 ${STAGEDIR}${MAN8PREFIX}/man/man8 ${INSTALL_MAN} ${WRKSRC}/anacrontab.5 ${STAGEDIR}${MAN5PREFIX}/man/man5 ${INSTALL_DATA} ${FILESDIR}/anacrontab.sample ${STAGEDIR}${PREFIX}/etc - [ -d ${STAGEDIR}/var/spool/anacron ] || ${MKDIR} ${STAGEDIR}/var/spool/anacron + @${MKDIR} ${STAGEDIR}/var/spool/anacron .include Index: head/sysutils/anacron/files/patch-gregor.c =================================================================== --- head/sysutils/anacron/files/patch-gregor.c (revision 436722) +++ head/sysutils/anacron/files/patch-gregor.c (revision 436723) @@ -1,11 +1,11 @@ ---- gregor.c.orig Fri Jun 23 00:50:40 2000 -+++ gregor.c Thu Jun 16 17:38:02 2005 -@@ -65,7 +65,7 @@ +--- gregor.c.orig 2000-06-22 22:50:40 UTC ++++ gregor.c +@@ -65,7 +65,7 @@ day_num(int year, int month, int day) { int dn; int i; - const int isleap; /* save three calls to leap() */ + int isleap; /* save three calls to leap() */ /* Some validity checks */ Index: head/sysutils/anacron/files/patch-matchrx.c =================================================================== --- head/sysutils/anacron/files/patch-matchrx.c (revision 436722) +++ head/sysutils/anacron/files/patch-matchrx.c (revision 436723) @@ -1,10 +1,10 @@ ---- matchrx.c.orig Wed Jun 21 01:12:18 2000 -+++ matchrx.c Thu Jun 16 17:31:09 2005 +--- matchrx.c.orig 2000-06-20 23:12:18 UTC ++++ matchrx.c @@ -23,6 +23,7 @@ #include +#include #include #include #include Index: head/sysutils/anacron/files/patch-readtab.c =================================================================== --- head/sysutils/anacron/files/patch-readtab.c (revision 436722) +++ head/sysutils/anacron/files/patch-readtab.c (revision 436723) @@ -1,161 +1,161 @@ ---- readtab.c.orig Fri Jun 23 00:13:12 2000 -+++ readtab.c Thu Jun 16 17:35:07 2005 +--- readtab.c.orig 2000-06-22 22:13:12 UTC ++++ readtab.c @@ -19,6 +19,11 @@ The GNU General Public License can also be found in the file `COPYING' that comes with the Anacron source distribution. + + Changes: + + May 2003 (Derik van Zuetphen) + replaced obstack with malloc/realloc calls */ @@ -29,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -37,8 +41,6 @@ #include "global.h" #include "matchrx.h" -static struct obstack input_o; /* holds input line */ -static struct obstack tab_o; /* holds processed data read from anacrontab */ static FILE *tab; job_rec **job_array; int njobs; /* number of jobs to run */ -@@ -47,9 +49,7 @@ +@@ -47,9 +49,7 @@ static int line_num; /* curr static job_rec *last_job_rec; /* last job stored in memory, at the moment */ static env_rec *last_env_rec; /* last environment assignment stored */ -/* some definitions for the obstack macros */ -#define obstack_chunk_alloc xmalloc -#define obstack_chunk_free free +#define MAXTABLINE 1000 static void * xmalloc (size_t size) -@@ -63,6 +63,18 @@ +@@ -63,6 +63,18 @@ xmalloc (size_t size) return ptr; } +static void * +xrealloc (void *mem, size_t size) +/* Just like standard realloc(), only never returns NULL. */ +{ + void * ptr; + + ptr = realloc(mem,size); + if (ptr == NULL) + die("Memory exhausted"); + return ptr; +} + static int conv2int(const char *s) /* Return the int or -1 on over/under-flow -@@ -78,19 +90,20 @@ +@@ -78,19 +90,20 @@ conv2int(const char *s) } static char * -read_tab_line () +read_tab_line (char *line) /* Read one line and return a pointer to it. Return NULL if no more lines. */ { int c; + int i = 0; if (feof(tab)) return NULL; - while ((c = getc(tab)) != EOF && c != '\n') - obstack_1grow(&input_o, c); + while (i < MAXTABLINE-1 && (c = getc(tab)) != EOF && c != '\n') + line[i++] = c; if (ferror(tab)) die_e("Error reading %s", anacrontab); - obstack_1grow(&input_o, '\0'); - return obstack_finish(&input_o); + line[i] = 0; + return line; } static int -@@ -119,8 +132,8 @@ +@@ -119,8 +132,8 @@ register_env(const char *env_var, const var_len = strlen(env_var); val_len = strlen(value); - er = obstack_alloc(&tab_o, sizeof(env_rec)); - er->assign = obstack_alloc(&tab_o, var_len + 1 + val_len + 1); + er = (env_rec*)xmalloc(sizeof(env_rec)); + er->assign = (char*)xmalloc(var_len + 1 + val_len + 1); strcpy(er->assign, env_var); er->assign[var_len] = '='; strcpy(er->assign + var_len + 1, value); -@@ -151,14 +164,14 @@ +@@ -151,14 +164,14 @@ register_job(const char *periods, const anacrontab, line_num); return; } - jr = obstack_alloc(&tab_o, sizeof(job_rec)); + jr = (job_rec*)xmalloc(sizeof(job_rec)); jr->period = period; jr->delay = delay; jr->tab_line = line_num; - jr->ident = obstack_alloc(&tab_o, ident_len + 1); + jr->ident = (char*)xmalloc(ident_len + 1); strcpy(jr->ident, ident); jr->arg_num = job_arg_num(ident); - jr->command = obstack_alloc(&tab_o, command_len + 1); + jr->command = (char*)xmalloc(command_len + 1); strcpy(jr->command, command); jr->job_pid = jr->mailer_pid = 0; if (last_job_rec != NULL) last_job_rec->next = jr; -@@ -222,7 +235,7 @@ +@@ -222,7 +235,7 @@ void read_tab() /* Read the anacrontab file into memory */ { - char *tab_line; + char tab_line[MAXTABLINE]; first_job_rec = last_job_rec = NULL; first_env_rec = last_env_rec = NULL; -@@ -231,14 +244,10 @@ +@@ -231,14 +244,10 @@ read_tab() /* Open the anacrontab file */ tab = fopen(anacrontab, "r"); if (tab == NULL) die_e("Error opening %s", anacrontab); - /* Initialize the obstacks */ - obstack_init(&input_o); - obstack_init(&tab_o); - while ((tab_line = read_tab_line()) != NULL) + while ((read_tab_line(tab_line)) != NULL) { line_num++; parse_tab_line(tab_line); - obstack_free(&input_o, tab_line); } if (fclose(tab)) die_e("Error closing %s", anacrontab); } -@@ -269,16 +278,17 @@ +@@ -269,16 +278,17 @@ arrange_jobs() j = first_job_rec; njobs = 0; + job_array = NULL; while (j != NULL) { if (j->arg_num != -1 && (update_only || consider_job(j))) { + job_array = (job_rec**)xrealloc(job_array, (njobs+1)*sizeof(j)); + job_array[njobs] = j; njobs++; - obstack_grow(&tab_o, &j, sizeof(j)); } j = j->next; } - job_array = obstack_finish(&tab_o); /* sort the jobs */ qsort(job_array, njobs, sizeof(*job_array), Index: head/sysutils/anacron/files/patch-runjob.c =================================================================== --- head/sysutils/anacron/files/patch-runjob.c (revision 436722) +++ head/sysutils/anacron/files/patch-runjob.c (revision 436723) @@ -1,34 +1,34 @@ ---- runjob.c.orig Thu Jun 16 17:04:19 2005 -+++ runjob.c Thu Jun 16 17:10:48 2005 -@@ -39,26 +39,14 @@ +--- runjob.c.orig 2000-06-20 23:12:18 UTC ++++ runjob.c +@@ -39,26 +39,14 @@ static int temp_file() /* Open a temporary file and return its file descriptor */ { - const int max_retries = 50; - char *name; - int fd, i; + int fd; + char name[] = "/tmp/anacron.XXXXXX"; + + fd = mkstemp(name); - i = 0; - name = NULL; - do - { - i++; - free(name); - name = tempnam(NULL, NULL); - if (name == NULL) die("Can't find a unique temporary filename"); - fd = open(name, O_RDWR | O_CREAT | O_EXCL | O_APPEND, - S_IRUSR | S_IWUSR); - /* I'm not sure we actually need to be so persistent here */ - } while (fd == -1 && errno == EEXIST && i < max_retries); - if (fd == -1) die_e("Can't open temporary file"); if (unlink(name)) die_e("Can't unlink temporary file"); - free(name); + fcntl(fd, F_SETFD, 1); /* set close-on-exec flag */ return fd; }