aboutsummaryrefslogtreecommitdiff
path: root/sysutils/logrotate
diff options
context:
space:
mode:
authorRong-En Fan <rafan@FreeBSD.org>2007-07-29 15:25:25 +0000
committerRong-En Fan <rafan@FreeBSD.org>2007-07-29 15:25:25 +0000
commit7d537f3450bb8a334618fcee7f9706bf26b57aef (patch)
tree6ae8ed108c9fd00cb5775a280457e6759567d679 /sysutils/logrotate
parenta77b2b80dc545291106dc038ee25a9c7aec7cda8 (diff)
downloadports-7d537f3450bb8a334618fcee7f9706bf26b57aef.tar.gz
ports-7d537f3450bb8a334618fcee7f9706bf26b57aef.zip
- Update to 3.7.1 with Debian patch 3
- Fix path in config.h (/var/lib -> /var/log) to match our hier - Include dateext patch. This is obtained from Fedora CVS: http://www.redhat.com/archives/fedora-cvs-commits/2005-June/msg00761.html PR: ports/114523 Submitted by: Tom Mueko <tmueko at kommunity.net> Approved by: Balazs Nagy <js at iksz.hu> (maintaineR)
Notes
Notes: svn path=/head/; revision=196609
Diffstat (limited to 'sysutils/logrotate')
-rw-r--r--sysutils/logrotate/Makefile5
-rw-r--r--sysutils/logrotate/distinfo12
-rw-r--r--sysutils/logrotate/files/patch-Makefile2
-rw-r--r--sysutils/logrotate/files/patch-aa17
-rw-r--r--sysutils/logrotate/files/patch-config.h4
-rw-r--r--sysutils/logrotate/files/patch-dateext414
6 files changed, 429 insertions, 25 deletions
diff --git a/sysutils/logrotate/Makefile b/sysutils/logrotate/Makefile
index f2e4c232d1a3..3441e0193413 100644
--- a/sysutils/logrotate/Makefile
+++ b/sysutils/logrotate/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= logrotate
-PORTVERSION= 3.7
-PORTREVISION= 5
+PORTVERSION= 3.7.1
CATEGORIES= sysutils
MASTER_SITES= ${MASTER_SITE_DEBIAN_POOL}
MASTER_SITE_SUBDIR= l/logrotate
@@ -15,7 +14,7 @@ DISTNAME= ${PORTNAME}_${PORTVERSION}.orig
PATCH_SITES= ${MASTER_SITES}
PATCH_SITE_SUBDIR= ${MASTER_SITE_SUBDIR}
-PATCHFILES= ${PORTNAME}_${PORTVERSION}-5.diff.gz
+PATCHFILES= ${PORTNAME}_${PORTVERSION}-3.diff.gz
MAINTAINER= js@iksz.hu
COMMENT= Daemon to rotate, compress, remove and mail system log files
diff --git a/sysutils/logrotate/distinfo b/sysutils/logrotate/distinfo
index c81c34551d54..ae4cd90696a3 100644
--- a/sysutils/logrotate/distinfo
+++ b/sysutils/logrotate/distinfo
@@ -1,6 +1,6 @@
-MD5 (logrotate_3.7.orig.tar.gz) = bf0de3a495294300f32e71f136119c41
-SHA256 (logrotate_3.7.orig.tar.gz) = a0fba4f6214fb30cb1f61a51fffca9a7e2ec01aad8dbcf5d3ec157149b460e1b
-SIZE (logrotate_3.7.orig.tar.gz) = 35737
-MD5 (logrotate_3.7-5.diff.gz) = 291d015a7fddd86ee2da4cb7bbb12b19
-SHA256 (logrotate_3.7-5.diff.gz) = dce1378ddafe98478eb0fa2d6064fae7ddbd4eab9e8cac794b333d586759bbf5
-SIZE (logrotate_3.7-5.diff.gz) = 15081
+MD5 (logrotate_3.7.1.orig.tar.gz) = 552639142e163745f6bcd4f1f3816d8a
+SHA256 (logrotate_3.7.1.orig.tar.gz) = 7e79b03d65105541a5fdcc05087bee29ebc9e33149ac33d6563d0b20eddf79e0
+SIZE (logrotate_3.7.1.orig.tar.gz) = 36176
+MD5 (logrotate_3.7.1-3.diff.gz) = 7b0dd9835339bbf85f106d4adb25cf0c
+SHA256 (logrotate_3.7.1-3.diff.gz) = 68b6ebd0cb8f78a8a0a1dcaa8a1a4486288967e9acc7f4c02bb8ee9ecde9cb6c
+SIZE (logrotate_3.7.1-3.diff.gz) = 23547
diff --git a/sysutils/logrotate/files/patch-Makefile b/sysutils/logrotate/files/patch-Makefile
index c7192e6f7fb0..f5cdf054549b 100644
--- a/sysutils/logrotate/files/patch-Makefile
+++ b/sysutils/logrotate/files/patch-Makefile
@@ -1,5 +1,5 @@
--- logrotate-3.7-orig/Makefile Wed Oct 20 19:07:27 2004
-+++ logrotate-3.7/Makefile Wed Oct 20 19:07:42 2004
++++ logrotate-3.7.1/Makefile Wed Oct 20 19:07:42 2004
@@ -1,5 +1,4 @@
VERSION = $(shell awk '/Version:/ { print $$2 }' logrotate.spec)
-CVSROOT = $(shell cat CVS/Root)
diff --git a/sysutils/logrotate/files/patch-aa b/sysutils/logrotate/files/patch-aa
index 2457e3576375..fd36cd706734 100644
--- a/sysutils/logrotate/files/patch-aa
+++ b/sysutils/logrotate/files/patch-aa
@@ -1,25 +1,16 @@
diff -ruN logrotate-3.7-orig/config.c logrotate-3.7/config.c
---- logrotate-3.7-orig/config.c Mon Sep 22 21:11:12 2003
-+++ logrotate-3.7/config.c Mon May 24 08:09:39 2004
+--- logrotate-3.7.1-orig/config.c Mon Sep 22 21:11:12 2003
++++ logrotate-3.7.1/config.c Mon May 24 08:09:39 2004
@@ -1,4 +1,3 @@
-#include <alloca.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
diff -ruN logrotate-3.7-orig/logrotate.c logrotate-3.7/logrotate.c
---- logrotate-3.7-orig/logrotate.c Thu Feb 5 19:42:13 2004
-+++ logrotate-3.7/logrotate.c Tue Jun 15 17:35:48 2004
+--- logrotate-3.7.1-orig/logrotate.c Thu Feb 5 19:42:13 2004
++++ logrotate-3.7.1/logrotate.c Tue Jun 15 17:35:48 2004
@@ -1,4 +1,3 @@
-#include <alloca.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
-@@ -110,7 +109,7 @@
- close(fd);
-
- if (!fork()) {
-- execlp(filespec, logfn, NULL);
-+ execlp(filespec, filespec, logfn, NULL);
- exit(1);
- }
-
diff --git a/sysutils/logrotate/files/patch-config.h b/sysutils/logrotate/files/patch-config.h
index ad69a7affcb9..bca6ddbeb6d1 100644
--- a/sysutils/logrotate/files/patch-config.h
+++ b/sysutils/logrotate/files/patch-config.h
@@ -1,6 +1,6 @@
diff -ruN logrotate-3.7-orig/config.h logrotate-3.7/config.h
--- logrotate-3.7-orig/config.h Mon Sep 22 21:11:12 2003
-+++ logrotate-3.7/config.h Mon May 24 08:05:29 2004
++++ logrotate-3.7.1/config.h Mon May 24 08:05:29 2004
@@ -16,6 +16,13 @@
#define STATEFILE "/var/log/logrotate.status"
#endif
@@ -9,7 +9,7 @@ diff -ruN logrotate-3.7-orig/config.h logrotate-3.7/config.h
+ #define DEFAULT_MAIL_COMMAND "/usr/bin/mailx -s"
+ #define COMPRESS_COMMAND "/usr/bin/gzip"
+ #define UNCOMPRESS_COMMAND "/usr/bin/gunzip"
-+ #define STATEFILE "/var/lib/logrotate.status"
++ #define STATEFILE "/var/log/logrotate.status"
+#endif
+
/*
diff --git a/sysutils/logrotate/files/patch-dateext b/sysutils/logrotate/files/patch-dateext
new file mode 100644
index 000000000000..69d1dbdef51a
--- /dev/null
+++ b/sysutils/logrotate/files/patch-dateext
@@ -0,0 +1,414 @@
+--- logrotate-3.7.1/logrotate.h.dateext 2003-08-07 13:13:14.000000000 +0200
++++ logrotate-3.7.1/logrotate.h 2005-05-03 14:17:28.732914132 +0200
+@@ -15,6 +15,7 @@
+ #define LOG_FLAG_MAILFIRST (1 << 6)
+ #define LOG_FLAG_SHAREDSCRIPTS (1 << 7)
+ #define LOG_FLAG_COPY (1 << 8)
++#define LOG_FLAG_DATEEXT (1 << 9)
+
+ #define NO_FORCE_ROTATE 0
+ #define FORCE_ROTATE 1
+--- logrotate-3.7.1/logrotate.c.dateext 2005-05-03 14:17:28.730914415 +0200
++++ logrotate-3.7.1/logrotate.c 2005-05-03 14:31:29.916899912 +0200
+@@ -11,6 +11,7 @@
+ #include <sys/wait.h>
+ #include <time.h>
+ #include <unistd.h>
++#include <glob.h>
+
+ #ifdef WITH_SELINUX
+ #include <selinux/selinux.h>
+@@ -23,6 +24,10 @@
+ #include "log.h"
+ #include "logrotate.h"
+
++#if !defined(GLOB_ABORTED) && defined(GLOB_ABEND)
++#define GLOB_ABORTED GLOB_ABEND
++#endif
++
+ typedef struct {
+ char * fn;
+ struct tm lastRotated; /* only tm.mon, tm_mday, tm_year are good! */
+@@ -43,6 +48,14 @@
+ char * mailCommand = DEFAULT_MAIL_COMMAND;
+ time_t nowSecs = 0;
+
++static int globerr(const char * pathname, int theerr) {
++ message(MESS_ERROR, "error accessing %s: %s\n", pathname,
++ strerror(theerr));
++
++ /* We want the glob operation to continue, so return 0 */
++ return 1;
++}
++
+ static logState * findState(const char * fn, struct stateSet * sip) {
+ int i;
+ logState * states = sip->states;
+@@ -93,6 +106,17 @@
+ return rc;
+ }
+
++static int removeLogFile(char * name) {
++ message(MESS_DEBUG, "removing old log %s\n", name);
++
++ if (!debug && unlink(name)) {
++ message(MESS_ERROR, "Failed to remove old log %s: %s\n",
++ name, strerror(errno));
++ return 1;
++ }
++ return 0;
++}
++
+ static int compressLogFile(char * name, logInfo * log, struct stat *sb) {
+ char * compressedName;
+ const char ** fullCommand;
+@@ -237,6 +261,25 @@
+ return rc;
+ }
+
++static int mailLogWrapper (char * mailFilename, char * mailCommand, int logNum, logInfo * log) {
++ /* if the log is compressed (and we're not mailing a
++ * file whose compression has been delayed), we need
++ * to uncompress it */
++ if ((log->flags & LOG_FLAG_COMPRESS) &&
++ !((log->flags & LOG_FLAG_DELAYCOMPRESS) &&
++ (log->flags & LOG_FLAG_MAILFIRST))) {
++ if (mailLog(mailFilename, mailCommand,
++ log->uncompress_prog, log->logAddress,
++ log->files[logNum]))
++ return 1;
++ } else {
++ if (mailLog(mailFilename, mailCommand, NULL,
++ log->logAddress, mailFilename))
++ return 1;
++ }
++ return 0;
++}
++
+ static int copyTruncate(char * currLog, char * saveLog, struct stat * sb, int flags) {
+ char buf[BUFSIZ];
+ int fdcurr = -1, fdsave = -1;
+@@ -456,6 +499,9 @@
+ char * baseName;
+ char * dirName;
+ char * firstRotated;
++ char * glob_pattern;
++ glob_t globResult;
++ int rc;
+ size_t alloc_size;
+ int rotateCount = log->rotateCount ? log->rotateCount : 1;
+ int logStart = (log->logStart == -1) ? 1 : log->logStart;
+@@ -486,7 +532,7 @@
+
+ alloc_size = strlen(dirName) + strlen(baseName) +
+ strlen(log->files[logNum]) + strlen(fileext) +
+- strlen(compext) + 10;
++ strlen(compext) + 18;
+
+ oldName = alloca(alloc_size);
+ newName = alloca(alloc_size);
+@@ -508,25 +554,106 @@
+ /* First compress the previous log when necessary */
+ if (log->flags & LOG_FLAG_COMPRESS &&
+ log->flags & LOG_FLAG_DELAYCOMPRESS) {
+- struct stat sbprev;
+-
+- sprintf(oldName, "%s/%s.%d%s", dirName, baseName, logStart, fileext);
+- if (stat(oldName, &sbprev)) {
+- message(MESS_DEBUG, "previous log %s does not exist\n",
+- oldName);
+- } else {
+- hasErrors = compressLogFile(oldName, log, &sbprev);
++ if (log->flags & LOG_FLAG_DATEEXT) {
++ /* glob for uncompressed files with our pattern */
++ glob_pattern = malloc(strlen(dirName) + strlen(baseName)
++ + strlen(fileext) + 44 );
++ sprintf(glob_pattern,
++ "%s/%s-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%s",
++ dirName, baseName, fileext);
++ rc = glob(glob_pattern, 0, globerr, &globResult);
++ if (!rc && globResult.gl_pathc > 0) {
++ for (i = 0; i < globResult.gl_pathc && !hasErrors; i++) {
++ struct stat sbprev;
++
++ sprintf(oldName,"%s",(globResult.gl_pathv)[i]);
++ if (stat(oldName, &sbprev)) {
++ message(MESS_DEBUG, "previous log %s does not exist\n",
++ oldName);
++ } else {
++ hasErrors = compressLogFile(oldName, log, &sbprev);
++ }
++ }
++ } else {
++ message (MESS_DEBUG, "glob finding logs to compress failed\n");
++ /* fallback to old behaviour */
++ sprintf(oldName, "%s/%s.%d%s", dirName, baseName, logStart, fileext);
++ }
++ globfree(&globResult);
++ free(glob_pattern);
++ } else {
++ struct stat sbprev;
++
++ sprintf(oldName, "%s/%s.%d%s", dirName, baseName, logStart, fileext);
++ if (stat(oldName, &sbprev)) {
++ message(MESS_DEBUG, "previous log %s does not exist\n",
++ oldName);
++ } else {
++ hasErrors = compressLogFile(oldName, log, &sbprev);
++ }
+ }
+ }
+
++ firstRotated = alloca(strlen(dirName) + strlen(baseName) +
++ strlen(fileext) + strlen(compext) + 30);
++
++ if(log->flags & LOG_FLAG_DATEEXT) {
++ /* glob for compressed files with our pattern
++ * and compress ext */
++ glob_pattern = malloc(strlen(dirName)+strlen(baseName)
++ +strlen(fileext)+strlen(compext)+44);
++ sprintf(glob_pattern,
++ "%s/%s-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%s%s",
++ dirName, baseName, fileext, compext);
++ rc = glob(glob_pattern, 0, globerr, &globResult);
++ if (!rc) {
++ /* search for files to drop, if we find one remember it,
++ * if we find another one mail and remove the first and
++ * remember the second and so on */
++ struct stat fst_buf;
++ int mail_out = -1;
++ /* remove the first (n - rotateCount) matches
++ * no real rotation needed, since the files have
++ * the date in their name */
++ for (i = 0; i < globResult.gl_pathc; i++) {
++ if( !stat((globResult.gl_pathv)[i],&fst_buf) ) {
++ if (i <= ((int)globResult.gl_pathc - rotateCount)) {
++ if ( mail_out != -1 ) {
++ if (!hasErrors && log->logAddress) {
++ char * mailFilename = (globResult.gl_pathv)[mail_out];
++ hasErrors = mailLogWrapper(mailFilename, mailCommand, logNum, log);
++ if (!hasErrors)
++ hasErrors = removeLogFile(mailFilename);
++ }
++ }
++ mail_out = i;
++ }
++ }
++ }
++ if ( mail_out != -1 ) {
++ /* oldName is oldest Backup found (for unlink later) */
++ sprintf(oldName, "%s", (globResult.gl_pathv)[mail_out]);
++ strcpy(disposeName, oldName);
++ } else
++ disposeName = NULL;
++ } else {
++ message (MESS_DEBUG, "glob finding old rotated logs failed\n");
++ disposeName = NULL;
++ }
++ /* firstRotated is most recently created/compressed rotated log */
++ sprintf(firstRotated, "%s/%s-%04d%02d%02d%s%s",
++ dirName, baseName, now.tm_year+1900,
++ now.tm_mon+1, now.tm_mday, fileext, compext);
++ globfree(&globResult);
++ free(glob_pattern);
++ } else {
++
+ sprintf(oldName, "%s/%s.%d%s%s", dirName, baseName,
+ logStart + rotateCount, fileext, compext);
+ strcpy(newName, oldName);
+
+ strcpy(disposeName, oldName);
+
+- firstRotated = alloca(strlen(dirName) + strlen(baseName) +
+- strlen(fileext) + strlen(compext) + 30);
+ sprintf(firstRotated, "%s/%s.%d%s%s", dirName, baseName,
+ logStart, fileext,
+ (log->flags & LOG_FLAG_DELAYCOMPRESS) ? "" : compext);
+@@ -582,12 +709,27 @@
+ hasErrors = 1;
+ }
+ }
+- }
+-
++ }
++ } /* !LOG_FLAG_DATEEXT */
++
+ finalName = oldName;
+
+- /* note: the gzip extension is *not* used here! */
+- sprintf(finalName, "%s/%s.%d%s", dirName, baseName, logStart, fileext);
++ if(log->flags & LOG_FLAG_DATEEXT) {
++ char * destFile = alloca(strlen(dirName) + strlen(baseName) +
++ strlen(fileext) + strlen(compext) + 30);
++ struct stat fst_buf;
++ sprintf(finalName, "%s/%s-%04d%02d%02d%s",
++ dirName, baseName, now.tm_year+1900,
++ now.tm_mon+1, now.tm_mday, fileext);
++ sprintf(destFile, "%s%s", finalName, compext);
++ if(!stat(destFile,&fst_buf)) {
++ message (MESS_DEBUG, "destination %s already exists, skipping rotation\n", firstRotated);
++ hasErrors = 1;
++ }
++ } else {
++ /* note: the gzip extension is *not* used here! */
++ sprintf(finalName, "%s/%s.%d%s", dirName, baseName, logStart, fileext);
++ }
+
+ /* if the last rotation doesn't exist, that's okay */
+ if (!debug && access(disposeName, F_OK)) {
+@@ -596,9 +738,6 @@
+ disposeName = NULL;
+ }
+
+- free(dirName);
+- free(baseName);
+-
+ if (!hasErrors) {
+ if (log->pre && !(log->flags & LOG_FLAG_SHAREDSCRIPTS)) {
+ message(MESS_DEBUG, "running prerotate script\n");
+@@ -744,6 +883,8 @@
+ }
+ }
+ #endif
++ free(dirName);
++ free(baseName);
+ return hasErrors;
+ }
+
+--- logrotate-3.7.1/config.c.dateext 2003-08-07 13:13:14.000000000 +0200
++++ logrotate-3.7.1/config.c 2005-05-03 14:17:28.734913850 +0200
+@@ -511,6 +511,14 @@
+ newlog->flags &= ~LOG_FLAG_IFEMPTY;
+
+ *endtag = oldchar, start = endtag;
++ } else if (!strcmp(start, "dateext")) {
++ newlog->flags |= LOG_FLAG_DATEEXT;
++
++ *endtag = oldchar, start = endtag;
++ } else if (!strcmp(start, "nodateext")) {
++ newlog->flags &= ~LOG_FLAG_DATEEXT;
++
++ *endtag = oldchar, start = endtag;
+ } else if (!strcmp(start, "noolddir")) {
+ newlog->oldDir = NULL;
+
+--- logrotate-3.7.1/logrotate.8.dateext 2005-05-03 14:17:28.722915545 +0200
++++ logrotate-3.7.1/logrotate.8 2005-05-03 14:17:28.735913708 +0200
+@@ -205,6 +205,11 @@
+ Log files are rotated every day.
+
+ .TP
++\fBdateext\fR
++Archive old versions of log files adding a daily extension like YYYYMMDD
++instead of simply adding a number.
++
++.TP
+ \fBdelaycompress\fR
+ Postpone compression of the previous log file to the next rotation cycle.
+ This has only effect when used in combination with \fBcompress\fR.
+
+logrotate-3.7.1-maxage.patch:
+ config.c | 15 +++++++++++++++
+ logrotate.8 | 6 ++++++
+ logrotate.c | 25 +++++++++++++++++++++++--
+ logrotate.h | 1 +
+ 4 files changed, 45 insertions(+), 2 deletions(-)
+
+--- NEW FILE logrotate-3.7.1-maxage.patch ---
+--- logrotate-3.7.1/logrotate.c.maxage 2005-05-03 14:46:08.154599467 +0200
++++ logrotate-3.7.1/logrotate.c 2005-05-03 14:50:43.707983574 +0200
+@@ -617,7 +617,10 @@
+ * the date in their name */
+ for (i = 0; i < globResult.gl_pathc; i++) {
+ if( !stat((globResult.gl_pathv)[i],&fst_buf) ) {
+- if (i <= ((int)globResult.gl_pathc - rotateCount)) {
++ if ((i <= ((int)globResult.gl_pathc - rotateCount))
++ || ((log->rotateAge > 0)
++ && (((nowSecs - fst_buf.st_mtime)/60/60/24)
++ > log->rotateAge))) {
+ if ( mail_out != -1 ) {
+ if (!hasErrors && log->logAddress) {
+ char * mailFilename = (globResult.gl_pathv)[mail_out];
+@@ -647,6 +650,22 @@
+ globfree(&globResult);
+ free(glob_pattern);
+ } else {
++ if ( log->rotateAge ) {
++ struct stat fst_buf;
++ for (i=1; i <= rotateCount; i++) {
++ sprintf(oldName, "%s/%s.%d%s%s", dirName, baseName,
++ rotateCount + 1, fileext, compext);
++ if(!stat(oldName,&fst_buf)
++ && (((nowSecs - fst_buf.st_mtime)/60/60/24)
++ > log->rotateAge)) {
++ char * mailFilename = (globResult.gl_pathv)[i];
++ if (!hasErrors && log->logAddress)
++ hasErrors = mailLogWrapper(mailFilename, mailCommand, logNum, log);
++ if (!hasErrors)
++ hasErrors = removeLogFile(mailFilename);
++ }
++ }
++ }
+
+ sprintf(oldName, "%s/%s.%d%s%s", dirName, baseName,
+ logStart + rotateCount, fileext, compext);
+@@ -1171,7 +1190,9 @@
+
+ int main(int argc, const char ** argv) {
+ logInfo defConfig = { NULL, NULL, 0, NULL, ROT_SIZE,
+- /* threshHold */ 1024 * 1024, 0,
++ /* threshHold */ 1024 * 1024,
++ /* rotateCount */ 0,
++ /* rotateAge */ 0,
+ /* log start */ -1,
+ /* pre, post */ NULL, NULL,
+ /* first, last */ NULL, NULL,
+--- logrotate-3.7.1/logrotate.h.maxage 2005-05-03 14:51:33.207865757 +0200
++++ logrotate-3.7.1/logrotate.h 2005-05-03 14:51:58.732195346 +0200
+@@ -35,6 +35,7 @@
+ enum { ROT_DAYS, ROT_WEEKLY, ROT_MONTHLY, ROT_SIZE, ROT_FORCE } criterium;
+ unsigned int threshhold;
+ int rotateCount;
++ int rotateAge;
+ int logStart;
+ char * pre, * post, * first, * last;
+ char * logAddress;
+--- logrotate-3.7.1/config.c.maxage 2005-05-03 14:39:35.690020183 +0200
++++ logrotate-3.7.1/config.c 2005-05-03 14:40:33.429711948 +0200
+@@ -678,6 +678,21 @@
+ }
+ *endtag = oldchar, start = endtag;
+ }
++ } else if (!strcmp(start, "maxage")) {
++ *endtag = oldchar, start = endtag;
++
++ if (!isolateValue(configFile, lineNum, "maxage count", &start,
++ &endtag)) {
++ oldchar = *endtag, *endtag = '\0';
++
++ newlog->rotateAge = strtoul(start, &chptr, 0);
++ if (*chptr || newlog->rotateAge < 0) {
++ message(MESS_ERROR, "%s:%d bad maximum age '%s'\n",
++ configFile, lineNum, start);
++ return 1;
++ }
++ *endtag = oldchar, start = endtag;
++ }
+ } else if (!strcmp(start, "errors")) {
+ message(MESS_DEBUG, "%s: %d: the errors directive is deprecated and no longer used.\n",
+ configFile, lineNum);
+--- logrotate-3.7.1/logrotate.8.maxage 2005-05-03 14:41:55.736877916 +0200
++++ logrotate-3.7.1/logrotate.8 2005-05-03 14:45:33.464585908 +0200
+@@ -256,6 +256,12 @@
+ instead of the just-rotated file (this is the default).
+
+ .TP
++\fBmaxage\fR \fIcount\fR
++Remove rotated logs older than <count> days. The age is only checked
++if the logfile is to be rotated. The files are mailed to the
++configured address if \fBmaillast\fR and \fBmail\fR are configured.
++
++.TP
+ \fBmissingok\fR
+ If the log file is missing, go on to the next one without issuing an error
+ message. See also \fBnomissingok\fR.