summaryrefslogtreecommitdiffstats
path: root/patches/logrotate-3.7.1
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2006-09-04 15:17:48 +0000
committerMarc Kleine-Budde <mkl@pengutronix.de>2006-09-04 15:17:48 +0000
commitef414ffc029cde393e4ef812629b20c1505f9174 (patch)
treea9d50c38a9c8ffcf01ce22b072d84df855006f14 /patches/logrotate-3.7.1
parent7dcb203793f816b3a4dd529dd19ab18056a9b132 (diff)
downloadptxdist-ef414ffc029cde393e4ef812629b20c1505f9174.tar.gz
ptxdist-ef414ffc029cde393e4ef812629b20c1505f9174.tar.xz
git-svn-id: https://svn.pengutronix.de/svn/ptxdist/trunks/ptxdist-trunk@6027 33e552b5-05e3-0310-8538-816dae2090ed
Diffstat (limited to 'patches/logrotate-3.7.1')
-rw-r--r--patches/logrotate-3.7.1/generic/compressutime.patch34
-rw-r--r--patches/logrotate-3.7.1/generic/configparse.patch25
-rw-r--r--patches/logrotate-3.7.1/generic/cpp-crossbuild.patch21
-rw-r--r--patches/logrotate-3.7.1/generic/datehack.patch16
-rw-r--r--patches/logrotate-3.7.1/generic/deb-config-h.patch24
-rw-r--r--patches/logrotate-3.7.1/generic/deb-taboos.patch17
-rw-r--r--patches/logrotate-3.7.1/generic/dst.patch32
-rw-r--r--patches/logrotate-3.7.1/generic/man-189243.patch22
-rw-r--r--patches/logrotate-3.7.1/generic/man-333996.patch58
-rw-r--r--patches/logrotate-3.7.1/generic/man-lastaction.patch16
-rw-r--r--patches/logrotate-3.7.1/generic/man-mailtypo.patch16
-rw-r--r--patches/logrotate-3.7.1/generic/man-overriden.patch16
-rw-r--r--patches/logrotate-3.7.1/generic/man-rh-1.patch26
-rw-r--r--patches/logrotate-3.7.1/generic/man-sizetypo.patch13
-rw-r--r--patches/logrotate-3.7.1/generic/man-startcount.patch16
-rw-r--r--patches/logrotate-3.7.1/generic/manpage.patch399
-rw-r--r--patches/logrotate-3.7.1/generic/ptx-timeext.patch154
-rw-r--r--patches/logrotate-3.7.1/generic/rh-dateext.patch319
-rw-r--r--patches/logrotate-3.7.1/generic/rh-maxage.patch108
-rw-r--r--patches/logrotate-3.7.1/generic/rh-noTMPDIR.patch58
-rw-r--r--patches/logrotate-3.7.1/generic/rh-selinux.patch173
-rw-r--r--patches/logrotate-3.7.1/generic/script-argument.patch18
-rw-r--r--patches/logrotate-3.7.1/generic/scripterrors.patch28
-rw-r--r--patches/logrotate-3.7.1/generic/series25
-rw-r--r--patches/logrotate-3.7.1/generic/taboo-to-debug.patch15
-rw-r--r--patches/logrotate-3.7.1/generic/uncompressChild-warning.patch13
26 files changed, 1662 insertions, 0 deletions
diff --git a/patches/logrotate-3.7.1/generic/compressutime.patch b/patches/logrotate-3.7.1/generic/compressutime.patch
new file mode 100644
index 000000000..e2da5cba2
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/compressutime.patch
@@ -0,0 +1,34 @@
+Preserve mtime/atime on compression. (Closes: #286957)
+
+--- ./logrotate.c 2005-09-03 14:07:42.000000000 +0100
++++ /tmp/dpep-work.m2M7hf/logrotate-3.7.1/logrotate.c 2005-09-03 14:08:14.000000000 +0100
+@@ -12,6 +12,8 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include <glob.h>
++#include <sys/types.h>
++#include <utime.h>
+
+ #ifdef WITH_SELINUX
+ #include <selinux/selinux.h>
+@@ -120,6 +122,7 @@
+ static int compressLogFile(char * name, logInfo * log, struct stat *sb) {
+ char * compressedName;
+ const char ** fullCommand;
++ struct utimbuf utim;
+ int inFile;
+ int outFile;
+ int i;
+@@ -190,6 +193,12 @@
+ message(MESS_ERROR, "failed to compress log %s\n", name);
+ return 1;
+ }
++
++ utim.actime = sb->st_atime;
++ utim.modtime = sb->st_mtime;
++ utime(compressedName,&utim);
++ /* If we can't change atime/mtime, it's not a disaster.
++ It might possibly fail under SELinux. */
+
+ unlink(name);
+
diff --git a/patches/logrotate-3.7.1/generic/configparse.patch b/patches/logrotate-3.7.1/generic/configparse.patch
new file mode 100644
index 000000000..a86eadb39
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/configparse.patch
@@ -0,0 +1,25 @@
+# Loosens the config syntax checking to allow more flexibility.
+# (Closes: #95617,#95630)
+
+Index: logrotate-3.7.1/config.c
+===================================================================
+--- logrotate-3.7.1.orig/config.c 2006-04-08 20:46:40.250457779 +0100
++++ logrotate-3.7.1/config.c 2006-04-08 20:48:15.188228344 +0100
+@@ -768,7 +768,7 @@
+
+ while (*start) {
+ chptr = start;
+- while (!isspace(*chptr) && *chptr != ',' && *chptr)
++ while (!isspace(*chptr) && /* *chptr != ',' && */ *chptr)
+ chptr++;
+
+ tabooExts = realloc(tabooExts, sizeof(*tabooExts) *
+@@ -780,7 +780,7 @@
+ tabooCount++;
+
+ start = chptr;
+- if (*start == ',') start++;
++ /* if (*start == ',') start++; */
+ while (isspace(*start) && *start) start++;
+ }
+
diff --git a/patches/logrotate-3.7.1/generic/cpp-crossbuild.patch b/patches/logrotate-3.7.1/generic/cpp-crossbuild.patch
new file mode 100644
index 000000000..783e405ce
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/cpp-crossbuild.patch
@@ -0,0 +1,21 @@
+Closes: #284040
+Patch from: NIIBE Yutaka <gniibe@fsij.org>
+
+Cross-building logrotate with dpkg-cross, I encountered a problem.
+dpkg-cross sets CPP variable, and compilation failures, because
+the executable 'cpp' does not accept multiple input files.
+
+
+Index: logrotate-3.7.1/Makefile
+===================================================================
+--- logrotate-3.7.1.orig/Makefile 2003-10-09 21:05:07.000000000 +0100
++++ logrotate-3.7.1/Makefile 2006-04-08 21:21:31.333853922 +0100
+@@ -88,7 +88,7 @@
+ rm -f $(OBJS) $(PROG) core* .depend
+
+ depend:
+- $(CPP) $(CFLAGS) -M $(SOURCES) > .depend
++ $(CC) -E $(CFLAGS) -M $(SOURCES) > .depend
+
+ .PHONY : test
+ test: $(TARGET)
diff --git a/patches/logrotate-3.7.1/generic/datehack.patch b/patches/logrotate-3.7.1/generic/datehack.patch
new file mode 100644
index 000000000..fa58fbd43
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/datehack.patch
@@ -0,0 +1,16 @@
+No longer consider state file dates before 1996 as fatal errors.
+(Closes: #65534)
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 20:46:40.217463729 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 20:52:51.770419373 +0100
+@@ -1145,7 +1145,7 @@
+ }
+
+ /* Hack to hide earlier bug */
+- if ((year != 1900) && (year < 1996 || year > 2100)) {
++ if ((year != 1900) && (year < 1970 || year > 2100)) {
+ message(MESS_ERROR, "bad year %d for file %s in state file %s\n",
+ year, argv[0], stateFilename);
+ fclose(f);
diff --git a/patches/logrotate-3.7.1/generic/deb-config-h.patch b/patches/logrotate-3.7.1/generic/deb-config-h.patch
new file mode 100644
index 000000000..3e78b509b
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/deb-config-h.patch
@@ -0,0 +1,24 @@
+Fix locations of STATEFILE and DEFAULT_MAIL_COMMAND for Debian.
+
+
+Index: logrotate-3.7.1/config.h
+===================================================================
+--- logrotate-3.7.1.orig/config.h 2006-04-08 20:26:13.052651364 +0100
++++ logrotate-3.7.1/config.h 2006-04-08 20:51:24.180005096 +0100
+@@ -20,7 +20,7 @@
+ * Default settings for Linux - leave these last.
+ */
+ #ifndef DEFAULT_MAIL_COMMAND
+- #define DEFAULT_MAIL_COMMAND "/bin/mail"
++ #define DEFAULT_MAIL_COMMAND "/usr/bin/mail"
+ #endif
+
+ #ifndef COMPRESS_COMMAND
+@@ -36,6 +36,6 @@
+ #endif
+
+ #ifndef STATEFILE
+- #define STATEFILE "/var/lib/logrotate.status"
++ #define STATEFILE "/var/lib/logrotate/status"
+ #endif
+
diff --git a/patches/logrotate-3.7.1/generic/deb-taboos.patch b/patches/logrotate-3.7.1/generic/deb-taboos.patch
new file mode 100644
index 000000000..7d3d0f88d
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/deb-taboos.patch
@@ -0,0 +1,17 @@
+Fix the taboo list to avoid .dpkg-old, etc.
+
+
+
+Index: logrotate-3.7.1/config.c
+===================================================================
+--- logrotate-3.7.1.orig/config.c 2006-04-08 20:46:40.147476352 +0100
++++ logrotate-3.7.1/config.c 2006-04-08 20:48:26.323326011 +0100
+@@ -30,6 +30,8 @@
+ #endif
+
+ static char * defTabooExts[] = { ".rpmsave", ".rpmorig", "~", ",v",
++ ".disabled", ".dpkg-old", ".dpkg-dist",
++ ".dpkg-new",
+ ".rpmnew", ".swp" };
+ static int defTabooCount = sizeof(defTabooExts) / sizeof(char *);
+
diff --git a/patches/logrotate-3.7.1/generic/dst.patch b/patches/logrotate-3.7.1/generic/dst.patch
new file mode 100644
index 000000000..08538eb4c
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/dst.patch
@@ -0,0 +1,32 @@
+Closes: #278591
+Patch from: Holger Weiss <holger@ZEDAT.FU-Berlin.DE>
+
+If you call logrotate once a week between 00:00 and 01:00 AM and
+daylight saving time is in effect, "weekly" rotations will be done only
+once in two weeks. E.g., the following crontab won't work as expected:
+
+12 0 * * 1 /usr/sbin/logrotate
+
+logrotate uses the tm struct "lastRotated" in order to find out whether
+a logfile needs rotating. "lastRotated" is filled by first setting
+everything to zero, then setting the mday, month and year of the last
+rotation and then calling mktime(3) in order to normalize the rest of
+the struct. The problem is that if daylight saving time is in effect,
+mktime() will increment "lastRotated.tm_isdst" from 0 to 1 and push
+"lastRotated" by one hour. Hence, the current time will be compared
+with the day of the last rotation, 01:00 AM. This can be solved by
+setting lastRotated.tm_isdst correctly prior to the mktime() call.
+
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 21:36:03.268110593 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 21:36:11.342764986 +0100
+@@ -78,6 +78,7 @@
+ states[i].lastRotated.tm_mon = now.tm_mon;
+ states[i].lastRotated.tm_mday = now.tm_mday;
+ states[i].lastRotated.tm_year = now.tm_year;
++ states[i].lastRotated.tm_isdst = now.tm_isdst;
+
+ /* fill in the rest of the st->lastRotated fields */
+ lr_time = mktime(&states[i].lastRotated);
diff --git a/patches/logrotate-3.7.1/generic/man-189243.patch b/patches/logrotate-3.7.1/generic/man-189243.patch
new file mode 100644
index 000000000..46a5e4acc
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-189243.patch
@@ -0,0 +1,22 @@
+Fix location of killall in the examples. (Closes: #189243)
+
+--- /home/pm/deb/logrotate/logrotate-3.7/logrotate.8 2004-02-11 21:18:23.000000000 +0000
++++ logrotate-3.7/logrotate.8 2004-02-11 21:18:54.000000000 +0000
+@@ -83,7 +83,7 @@
+ rotate 5
+ weekly
+ postrotate
+- /sbin/killall -HUP syslogd
++ /usr/bin/killall -HUP syslogd
+ endscript
+ }
+
+@@ -93,7 +93,7 @@
+ size=100k
+ sharedscripts
+ postrotate
+- /sbin/killall -HUP httpd
++ /usr/bin/killall -HUP httpd
+ endscript
+ }
+
diff --git a/patches/logrotate-3.7.1/generic/man-333996.patch b/patches/logrotate-3.7.1/generic/man-333996.patch
new file mode 100644
index 000000000..11c2731db
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-333996.patch
@@ -0,0 +1,58 @@
+Closes: #333996
+Patch from: Adrian Knoth <adi@drcomp.erfurt.thur.de>
+
+The manpage contains several sentences with the same mistake:
+the use of "then" instead of "than".
+
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:47:40.000000000 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:48:43.456864197 +0100
+@@ -125,7 +125,7 @@
+ \fI/var/log/httpd/access.log\fR and \fI/var/log/httpd/error.log\fR.
+ Each is rotated whenever it grows over 100k in size, and the old log
+ files are mailed (uncompressed) to www@my.org after going through 5
+-rotations, rather then being removed. The \fBsharedscripts\fR means that
++rotations, rather than being removed. The \fBsharedscripts\fR means that
+ the \fBpostrotate\fR script will only be run once (after the old logs
+ have been compressed), not once for each
+ log which is rotated. Note that log file names may be enclosed in
+@@ -135,7 +135,7 @@
+
+ The last section defines the parameters for all of the files in
+ \fI/var/log/news\fR. Each file is rotated on a monthly basis. This is
+-considered a single rotation directive and if errors occur for more then
++considered a single rotation directive and if errors occur for more than
+ one file, the log files are not compressed.
+
+ Please use wildcards with caution. If you specify *, \fBlogrotate\fR will
+@@ -366,7 +366,7 @@
+ \fBrotate \fIcount\fR
+ Log files are rotated \fIcount\fR times before being removed or mailed to the
+ address specified in a \fBmail\fR directive. If \fIcount\fR is 0, old versions
+-are removed rather then rotated.
++are removed rather than rotated.
+
+ .TP
+ \fBsharedscripts\fR
+@@ -381,7 +381,7 @@
+
+ .TP
+ \fBsize \fIsize\fR[\fBG\fR|\fBM\fR|\fBk\fR]
+-Log files are rotated when they grow bigger then \fIsize\fR bytes. If
++Log files are rotated when they grow bigger than \fIsize\fR bytes. If
+ \fIsize\fR is followed by \fIM\fR, the size if assumed to be in megabytes.
+ If the \fIG\fR suffix is used, the size is in gigabytes.
+ If the \fIk\fR suffix is used, the size is in kilobytes. So \fBsize 100\fR,
+@@ -408,8 +408,8 @@
+
+ .TP
+ \fBweekly\fR
+-Log files are rotated if the current weekday is less then the weekday
+-of the last rotation or if more then a week has passed since the last
++Log files are rotated if the current weekday is less than the weekday
++of the last rotation or if more than a week has passed since the last
+ rotation. This is normally the same as rotating logs on the first day
+ of the week, but if \fBlogrotate\fR is not being run every night a log
+ rotation will happen at the first valid opportunity.
diff --git a/patches/logrotate-3.7.1/generic/man-lastaction.patch b/patches/logrotate-3.7.1/generic/man-lastaction.patch
new file mode 100644
index 000000000..9babc4dfb
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-lastaction.patch
@@ -0,0 +1,16 @@
+Fix typo in the lastaction section of the manpage. It refers to itself
+rather than to firstaction.
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:11:37.760424103 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:13:28.917607025 +0100
+@@ -359,7 +359,7 @@
+ must appear on lines by themselves) are executed once after all log
+ files that match the wildcarded pattern are rotated, after postrotate script
+ is run and only if at least one log is rotated. These directives may only
+-appear inside a log file definition. See also \fBlastaction\fR.
++appear inside a log file definition. See also \fBfirstaction\fR.
+
+ .TP
+ \fBrotate \fIcount\fR
diff --git a/patches/logrotate-3.7.1/generic/man-mailtypo.patch b/patches/logrotate-3.7.1/generic/man-mailtypo.patch
new file mode 100644
index 000000000..578d6694a
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-mailtypo.patch
@@ -0,0 +1,16 @@
+Fix the markup on the "mail" part of the manpage (Closes: #300644)
+
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:14:56.187543069 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:16:19.525257240 +0100
+@@ -45,7 +45,7 @@
+ correctly.
+
+ .TP
+-\fB-m\R, \B-\-mail <command>\fR
++\fB-m\fR, \fB-\-mail <command>\fR
+ Tells \fBlogrotate\fR which command to use when mailing logs. This
+ command should accept two arguments: 1) the subject of the message, and
+ 2) the recipient. The command must then read a message on standard input
diff --git a/patches/logrotate-3.7.1/generic/man-overriden.patch b/patches/logrotate-3.7.1/generic/man-overriden.patch
new file mode 100644
index 000000000..3a7cceacb
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-overriden.patch
@@ -0,0 +1,16 @@
+Fix manpage typo (Closes: #310337)
+
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:13:28.917607025 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:14:56.187543069 +0100
+@@ -329,7 +329,7 @@
+ and is assumed to be relative to the directory holding the log file
+ unless an absolute path name is specified. When this option is used all
+ old versions of the log end up in \fIdirectory\fR. This option may be
+-overriden by the \fBnoolddir\fR option.
++overridden by the \fBnoolddir\fR option.
+
+ .TP
+ \fBpostrotate\fR/\fBendscript\fR
diff --git a/patches/logrotate-3.7.1/generic/man-rh-1.patch b/patches/logrotate-3.7.1/generic/man-rh-1.patch
new file mode 100644
index 000000000..c4c6d8fd7
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-rh-1.patch
@@ -0,0 +1,26 @@
+Fixes from upstream 3.7.1-4:
+ * Typo and missing information in man page (#139346)
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:16:19.525257240 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:17:39.954145340 +0100
+@@ -126,7 +126,8 @@
+ Each is rotated whenever it grows over 100k is size, and the old log
+ files are mailed (uncompressed) to www@my.org after going through 5
+ rotations, rather then being removed. The \fBsharedscripts\fR means that
+-the \fBpostrotate\fR script will only be run once, not once for each
++the \fBpostrotate\fR script will only be run once (after the old logs
++have been compressed), not once for each
+ log which is rotated. Note that log file names may be enclosed in
+ quotes (and that quotes are required if the name contains spaces).
+ Normal shell quoting rules apply, with \fB'\fR, \fB"\fR, and \fB\\\fR
+@@ -384,7 +385,7 @@
+ are only run once, no matter how many logs match the wildcarded pattern.
+ However, if none of the logs in the pattern require rotating, the scripts
+ will not be run at all. This option overrides the \fBnosharedscripts\fR
+-option.
++option and implies \fBcreate\fR option.
+
+ .TP
+ \fBstart \fIcount\fR
diff --git a/patches/logrotate-3.7.1/generic/man-sizetypo.patch b/patches/logrotate-3.7.1/generic/man-sizetypo.patch
new file mode 100644
index 000000000..ea9154c34
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-sizetypo.patch
@@ -0,0 +1,13 @@
+Fix manpage typo in the size example.
+
+--- /home/pm/deb/logrotate/logrotate-3.7/logrotate.8 2004-09-13 22:50:08.000000000 +0100
++++ logrotate-3.7/logrotate.8 2004-09-13 22:50:25.000000000 +0100
+@@ -90,7 +90,7 @@
+ "/var/log/httpd/access.log" /var/log/httpd/error.log {
+ rotate 5
+ mail www@my.org
+- size=100k
++ size 100k
+ sharedscripts
+ postrotate
+ /usr/bin/killall -HUP httpd
diff --git a/patches/logrotate-3.7.1/generic/man-startcount.patch b/patches/logrotate-3.7.1/generic/man-startcount.patch
new file mode 100644
index 000000000..5553e6f74
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/man-startcount.patch
@@ -0,0 +1,16 @@
+Inconsistency in manpage logrotate(8), start directive
+(Closes: #290628)
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:09:24.530501346 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:11:37.760424103 +0100
+@@ -392,7 +392,7 @@
+ you specify 0, the logs will be created with a .0 extension as they are
+ rotated from the original log files. If you specify 9, log files will
+ be created with a .9, skipping 0-8. Files will still be rotated the
+-number of times specified with the \fBcount\fR directive.
++number of times specified with the \fBrotate\fR directive.
+
+ .TP
+ \fBtabooext\fR [+] \fIlist\fR
diff --git a/patches/logrotate-3.7.1/generic/manpage.patch b/patches/logrotate-3.7.1/generic/manpage.patch
new file mode 100644
index 000000000..0a43dbf1f
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/manpage.patch
@@ -0,0 +1,399 @@
+Closes: #101272, #335060
+Patches from: J S Bygott <jsb_no_spm@jsbygott.fsnet.co.uk>
+
+General fixes to manpages.
+
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 21:43:29.280038309 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 21:45:53.721194620 +0100
+@@ -3,7 +3,8 @@
+ .SH NAME
+ logrotate \- rotates, compresses, and mails system logs
+ .SH SYNOPSIS
+-\fBlogrotate\fR [-dv] [-f|--force] [-s|--state \fIfile\fR] \fIconfig_file\fR+
++\fBlogrotate\fR [\fB\-dv\fR] [\fB\-f\fR|\fB\-\-force\fR]
++[\fB\-s\fR|\fB-\-state\ \fIstatefile\fR] \fIconfig_file\fR ..
+ .SH DESCRIPTION
+ \fBlogrotate\fR is designed to ease administration of systems that generate
+ large numbers of log files. It allows automatic rotation, compression,
+@@ -11,16 +12,16 @@
+ weekly, monthly, or when it grows too large.
+ .P
+ Normally, \fBlogrotate\fR is run as a daily cron job. It will not modify
+-a log multiple times in one day unless the criterium for that log is
+-based on the log's size and \fBlogrotate\fR is being run multiple times
+-each day, or unless the \fB-f\fR or \fB-force\fR option is used.
++a log more than once in one day unless the criterion for that log is
++based on the log's size and \fBlogrotate\fR is being run more than once
++each day, or unless the \fB-f\fR or \fB-\-force\fR option is used.
+ .P
+ Any number of config files may be given on the command line. Later config
+ files may override the options given in earlier files, so the order
+-in which the \fBlogrotate\fR config files are listed in is important.
++in which the \fBlogrotate\fR config files are listed is important.
+ Normally, a single config file which includes any other config files
+ which are needed should be used. See below for more information on how
+-to use the \fIinclude\fR directive to accomplish this. If a directory
++to use the \fBinclude\fR directive to accomplish this. If a directory
+ is given on the command line, every file in that directory is used as
+ a config file.
+ .P
+@@ -36,37 +37,42 @@
+ be made to the logs or to the \fBlogrotate\fR state file.
+
+ .TP
+-\fB-f, -\-force\fR
++\fB-f\fR, \fB-\-force\fR
+ Tells \fBlogrotate\fR to force the rotation, even if it doesn't think
+ this is necessary. Sometimes this is useful after adding new entries to
+-\fBlogrotate\fR, or if old log files have been removed by hand, as the
+-new files will be created, and logging will continue correctly.
++a \fBlogrotate\fR config file, or if old log files have been removed
++by hand, as the new files will be created, and logging will continue
++correctly.
+
+ .TP
+-\fB-m, -\-mail <command>\fR
++\fB-m\R, \B-\-mail <command>\fR
+ Tells \fBlogrotate\fR which command to use when mailing logs. This
+ command should accept two arguments: 1) the subject of the message, and
+ 2) the recipient. The command must then read a message on standard input
+-and mail it to the recipient. The default mail command is \fB/bin/mail
++and mail it to the recipient. The default mail command is \fB/usr/bin/mail
+ -s\fR.
+
+ .TP
+-\fB-s, -\-state <statefile>\fR
++\fB-s\fR, \fB-\-state <statefile>\fR
+ Tells \fBlogrotate\fR to use an alternate state file. This is useful
+-if logrotate is being run as a different user for various sets of
++if \fBlogrotate\fR is being run as a different user for various sets of
+ log files. The default state file is \fI/var/lib/logrotate/status\fR.
+
+ .TP
+ \fB-\-usage\fR
+ Prints a short usage message.
+
++.TP
++\fB-v\fR, \fB--verbose\fR
++Display messages during rotation.
++
+ .SH CONFIGURATION FILE
+
+ \fBlogrotate\fR reads everything about the log files it should be handling
+ from the series of configuration files specified on the command line. Each
+ configuration file can set global options (local definitions override
+ global ones, and later definitions override earlier ones) and specify
+-a logfile to rotate. A simple configuration file looks like this:
++some logfiles to rotate. A simple configuration file looks like this:
+
+ .nf
+ .ta +3i
+@@ -77,7 +83,7 @@
+ rotate 5
+ weekly
+ postrotate
+- /sbin/killall -HUP syslogd
++ /sbin/killall -HUP syslogd
+ endscript
+ }
+
+@@ -87,7 +93,7 @@
+ size=100k
+ sharedscripts
+ postrotate
+- /sbin/killall -HUP httpd
++ /sbin/killall -HUP httpd
+ endscript
+ }
+
+@@ -97,7 +103,7 @@
+ olddir /var/log/news/old
+ missingok
+ postrotate
+- kill -HUP `cat /var/run/inn.pid`
++ kill -HUP `cat /var/run/inn.pid`
+ endscript
+ nocompress
+ }
+@@ -107,9 +113,9 @@
+ The first few lines set global options; in the example, logs are
+ compressed after they are rotated. Note that comments may appear
+ anywhere in the config file as long as the first non-whitespace
+-character on the line is a #.
++character on the line is a \fB#\fR.
+
+-The next section of the config files defined how to handle the log file
++The next section of the config file defines how to handle the log file
+ \fI/var/log/messages\fR. The log will go through five weekly rotations before
+ being removed. After the log file has been rotated (but before the old
+ version of the log has been compressed), the command
+@@ -117,13 +123,13 @@
+
+ The next section defines the parameters for both
+ \fI/var/log/httpd/access.log\fR and \fI/var/log/httpd/error.log\fR.
+-They are rotated whenever is grows over 100k is size, and the old logs
++Each is rotated whenever it grows over 100k in size, and the old log
+ files are mailed (uncompressed) to www@my.org after going through 5
+ rotations, rather then being removed. The \fBsharedscripts\fR means that
+ the \fBpostrotate\fR script will only be run once, not once for each
+-log which is rotated. Note that the double quotes around the first filename
+-at the beginning of this section allows logrotate to rotate logs with
+-spaces in the name. Normal shell quoting rules apply, with ', ", and \\
++log which is rotated. Note that log file names may be enclosed in
++quotes (and that quotes are required if the name contains spaces).
++Normal shell quoting rules apply, with \fB'\fR, \fB"\fR, and \fB\\\fR
+ characters supported.
+
+ The last section defines the parameters for all of the files in
+@@ -135,29 +141,33 @@
+ rotate all files, including previously rotated ones. A way around this
+ is to use the \fBolddir\fR directive or a more exact wildcard (such as *.log).
+
++If the directory \fI/var/log/news\fR does not exist, this will cause
++\fBlogrotate\fR to report an error. This error cannot be stopped with
++the \fBmissingok\fR directive.
++
+ Here is more information on the directives which may be included in
+ a \fBlogrotate\fR configuration file:
+
+ .TP
+ \fBcompress\fR
+-Old versions of log files are compressed with \fBgzip\fR by default. See also
+-\fBnocompress\fR.
++Old versions of log files are compressed with \fBgzip\fR(1) by default.
++See also \fBnocompress\fR.
+
+ .TP
+ \fBcompresscmd\fR
+ Specifies which command to use to compress log files. The default is
+-\fBgzip\fR. See also \fBcompress\fR.
++\fBgzip\fR(1). See also \fBcompress\fR.
+
+ .TP
+ \fBuncompresscmd\fR
+ Specifies which command to use to uncompress log files. The default is
+-\fBgunzip\fR.
++\fBgunzip\fR(1).
+
+ .TP
+ \fBcompressext\fR
+ Specifies which extension to use on compressed logfiles, if compression
+-is enabled. The default follows that of the configured compression
+-command.
++is enabled. The default follows that of the default compression
++command (.gz).
+
+ .TP
+ \fBcompressoptions\fR
+@@ -174,9 +184,9 @@
+
+ .TP
+ \fBcopytruncate\fR
+-Truncate the original log file in place after creating a copy,
+-instead of moving the old log file and optionally creating a new one,
+-It can be used when some program can not be told to close its logfile
++Truncate the original log file to zero size in place after creating a copy,
++instead of moving the old log file and optionally creating a new one.
++It can be used when some program cannot be told to close its logfile
+ and thus might continue writing (appending) to the previous log file forever.
+ Note that there is a very small time slice between copying the file and
+ truncating it, so some logging data might be lost.
+@@ -188,7 +198,7 @@
+ Immediately after rotation (before the \fBpostrotate\fR script is run)
+ the log file is created (with the same name as the log file just rotated).
+ \fImode\fR specifies the mode for the log file in octal (the same
+-as \fBchmod(2)\fR), \fIowner\fR specifies the user name who will own the
++as \fBchmod\fR(2)), \fIowner\fR specifies the user name who will own the
+ log file, and \fIgroup\fR specifies the group the log file will belong
+ to. Any of the log file attributes may be omitted, in which case those
+ attributes for the new file will use the same values as the original log
+@@ -207,20 +217,20 @@
+ .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.
+-It can be used when some program can not be told to close its logfile
++This only has effect when used in combination with \fBcompress\fR.
++It can be used when some program cannot be told to close its logfile
+ and thus might continue writing to the previous log file for some time.
+
+ .TP
+ \fBextension \fIext\fR
+ Log files are given the final extension \fIext\fR after rotation. If
+-compression is used, the compression extension (normally \fB.gz\fR)
++compression is used, the compression extension (normally \fI.gz\fR)
+ appears after \fIext\fR.
+
+ .TP
+ \fBifempty\fR
+-Rotate the log file even if it is empty, overiding the \fBnotifempty\fR
+-option (ifempty is the default).
++Rotate the log file even if it is empty, overriding the \fBnotifempty\fR
++option (\fBifempty\fR is the default).
+
+ .TP
+ \fBinclude \fIfile_or_directory\fR
+@@ -231,12 +241,12 @@
+ which are ignored are files which are not regular files (such as
+ directories and named pipes) and files whose names end with one of
+ the taboo extensions, as specified by the \fBtabooext\fR directive.
+-The \fBinclude\fR directive may not appear inside of a log file
++The \fBinclude\fR directive may not appear inside a log file
+ definition.
+
+ .TP
+ \fBmail \fIaddress\fR
+-When a log is rotated out-of-existence, it is mailed to \fIaddress\fR. If
++When a log is rotated out of existence, it is mailed to \fIaddress\fR. If
+ no mail should be generated by a particular log, the \fBnomail\fR directive
+ may be used.
+
+@@ -268,8 +278,7 @@
+
+ .TP
+ \fBnocompress\fR
+-Old versions of log files are not compressed with \fBgzip\fR. See also
+-\fBcompress\fR.
++Old versions of log files are not compressed. See also \fBcompress\fR.
+
+ .TP
+ \fBnocopy\fR
+@@ -292,7 +301,7 @@
+
+ .TP
+ \fBnomail\fR
+-Don't mail old log files to any address.
++Do not mail old log files to any address.
+
+ .TP
+ \fBnomissingok\fR
+@@ -300,12 +309,12 @@
+
+ .TP
+ \fBnoolddir\fR
+-Logs are rotated in the same directory the log normally resides in (this
++Logs are rotated in the directory they normally reside in (this
+ overrides the \fBolddir\fR option).
+
+ .TP
+ \fBnosharedscripts\fR
+-Run \fBprerotate\fR and \fBpostrotate\fR scripts for every script which
++Run \fBprerotate\fR and \fBpostrotate\fR scripts for every log which
+ is rotated (this is the default, and overrides the \fBsharedscripts\fR
+ option).
+
+@@ -326,16 +335,15 @@
+ \fBpostrotate\fR/\fBendscript\fR
+ The lines between \fBpostrotate\fR and \fBendscript\fR (both of which
+ must appear on lines by themselves) are executed after the log file is
+-rotated. These directives may only appear inside of a log file definition.
+-See \fBprerotate\fR as well.
++rotated. These directives may only appear inside a log file definition.
++See also \fBprerotate\fR.
+
+ .TP
+ \fBprerotate\fR/\fBendscript\fR
+ The lines between \fBprerotate\fR and \fBendscript\fR (both of which
+ must appear on lines by themselves) are executed before the log file is
+ rotated and only if the log will actually be rotated. These directives
+-may only appear inside of a log file definition. See \fBpostrotate\fR
+-as well.
++may only appear inside a log file definition. See also \fBpostrotate\fR.
+
+ .TP
+ \fBfirstaction\fR/\fBendscript\fR
+@@ -351,33 +359,34 @@
+ must appear on lines by themselves) are executed once after all log
+ files that match the wildcarded pattern are rotated, after postrotate script
+ is run and only if at least one log is rotated. These directives may only
+-appear inside of a log file definition. See \fBlastaction\fR as well.
++appear inside a log file definition. See also \fBlastaction\fR.
+
+ .TP
+ \fBrotate \fIcount\fR
+-Log files are rotated <count> times before being removed or mailed to the
++Log files are rotated \fIcount\fR times before being removed or mailed to the
+ address specified in a \fBmail\fR directive. If \fIcount\fR is 0, old versions
+ are removed rather then rotated.
+
+ .TP
+-\fBsize \fIsize\fR
+-Log files are rotated when they grow bigger then \fIsize\fR bytes. If
+-\fIsize\fR is followed by \fIM\fR, the size if assumed to be in megabytes.
+-If the \fIk\fR is used, the size is in kilobytes. So \fBsize 100\fR,
+-\fIsize 100k\fR, and \fIsize 100M\fR are all valid.
+-
+-.TP
+ \fBsharedscripts\fR
+-Normally, \fBprescript\fR and \fBpostscript\fR scripts are run for each
++Normally, \fBprerotate\fR and \fBpostrotate\fR scripts are run for each
+ log which is rotated, meaning that a single script may be run multiple
+ times for log file entries which match multiple files (such as the
+-/var/log/news/* example). If \fBsharedscript\fR is specified, the scripts
++\fI/var/log/news/*\fR example). If \fBsharedscripts\fR is specified, the scripts
+ are only run once, no matter how many logs match the wildcarded pattern.
+ However, if none of the logs in the pattern require rotating, the scripts
+-will not be run at all. This option overrides the \fbnosharedscripts\fR
++will not be run at all. This option overrides the \fBnosharedscripts\fR
+ option.
+
+ .TP
++\fBsize \fIsize\fR[\fBG\fR|\fBM\fR|\fBk\fR]
++Log files are rotated when they grow bigger then \fIsize\fR bytes. If
++\fIsize\fR is followed by \fIM\fR, the size if assumed to be in megabytes.
++If the \fIG\fR suffix is used, the size is in gigabytes.
++If the \fIk\fR suffix is used, the size is in kilobytes. So \fBsize 100\fR,
++\fIsize 100k\fR, \fIsize 100M\fR and \fIsize 1G\fR are all valid.
++
++.TP
+ \fBstart \fIcount\fR
+ This is the number to use as the base for rotation. For example, if
+ you specify 0, the logs will be created with a .0 extension as they are
+@@ -388,18 +397,21 @@
+ .TP
+ \fBtabooext\fR [+] \fIlist\fR
+ The current taboo extension list is changed (see the \fBinclude\fR directive
+-for information on the taboo extensions). If a + precedes the list of
+-extensions, the current taboo extension list is augmented, otherwise it
++for information on the taboo extensions). If a \fB+\fR precedes \fIlist\fR,
++the current taboo extension list is augmented by \fIlist\fR, otherwise it
+ is replaced. At startup, the taboo extension list
+-contains .rpmorig, .rpmsave, ,v, .swp, .rpmnew, and ~.
++contains .rpmorig, .rpmsave, .dpkg-dist, .dpkg-old, .dpkg-new, .disabled,
++,v, .swp, .rpmnew, and ~. The members of the list are separated by spaces,
++not commas.
++
+
+ .TP
+ \fBweekly\fR
+ Log files are rotated if the current weekday is less then the weekday
+ of the last rotation or if more then a week has passed since the last
+ rotation. This is normally the same as rotating logs on the first day
+-of the week, but it works better if \fIlogrotate\fR is not run every
+-night.
++of the week, but if \fBlogrotate\fR is not being run every night a log
++rotation will happen at the first valid opportunity.
+
+ .SH FILES
+ .PD 0
+@@ -411,11 +423,16 @@
+ Configuration options.
+
+ .SH SEE ALSO
+-.IR gzip (1)
++.BR gzip (1)
++
++.SH NOTES
++The \fBkillall\fR(1) program in Debian is found in the \fIpsmisc\fR package.
+
+ .SH AUTHORS
+ .nf
+ Erik Troan <ewt@redhat.com>
+ .nf
+ Preston Brown <pbrown@redhat.com>
++.nf
++Corrections and changes for Debian by Paul Martin <pm@debian.org>
+ .fi
diff --git a/patches/logrotate-3.7.1/generic/ptx-timeext.patch b/patches/logrotate-3.7.1/generic/ptx-timeext.patch
new file mode 100644
index 000000000..8931e3ab6
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/ptx-timeext.patch
@@ -0,0 +1,154 @@
+Index: logrotate.h
+===================================================================
+--- a/logrotate.h.orig
++++ b/logrotate.h
+@@ -16,6 +16,7 @@
+ #define LOG_FLAG_SHAREDSCRIPTS (1 << 7)
+ #define LOG_FLAG_COPY (1 << 8)
+ #define LOG_FLAG_DATEEXT (1 << 9)
++#define LOG_FLAG_TIMEEXT (1 << 10)
+
+ #define NO_FORCE_ROTATE 0
+ #define FORCE_ROTATE 1
+Index: config.c
+===================================================================
+--- a/config.c.orig
++++ b/config.c
+@@ -521,6 +521,14 @@ static int readConfigFile(const char * c
+ newlog->flags &= ~LOG_FLAG_DATEEXT;
+
+ *endtag = oldchar, start = endtag;
++ } else if (!strcmp(start, "timeext")) {
++ newlog->flags |= (LOG_FLAG_TIMEEXT);
++
++ *endtag = oldchar, start = endtag;
++ } else if (!strcmp(start, "notimeext")) {
++ newlog->flags &= ~LOG_FLAG_TIMEEXT;
++
++ *endtag = oldchar, start = endtag;
+ } else if (!strcmp(start, "noolddir")) {
+ newlog->oldDir = NULL;
+
+Index: logrotate.8
+===================================================================
+--- a/logrotate.8.orig
++++ b/logrotate.8
+@@ -216,6 +216,14 @@ Archive old versions of log files adding
+ instead of simply adding a number.
+
+ .TP
++\fBtimeext\fR
++Archive old versions of log files adding a timestamp extension like
++YYYYMMDDThhmmssZ instead of simply adding a number.
++The timestamp conforms to International Standard ISO 8601.
++20060307T114252Z -> 2006/03/07 11:42:52 Zulu (UTC)
++
++
++.TP
+ \fBdelaycompress\fR
+ Postpone compression of the previous log file to the next rotation cycle.
+ This only has effect when used in combination with \fBcompress\fR.
+Index: logrotate.c
+===================================================================
+--- a/logrotate.c.orig
++++ b/logrotate.c
+@@ -542,7 +542,7 @@ int rotateSingleLog(logInfo * log, int l
+
+ alloc_size = strlen(dirName) + strlen(baseName) +
+ strlen(log->files[logNum]) + strlen(fileext) +
+- strlen(compext) + 18;
++ strlen(compext) + 18 + 8;
+
+ oldName = alloca(alloc_size);
+ newName = alloca(alloc_size);
+@@ -564,13 +564,17 @@ int rotateSingleLog(logInfo * log, int l
+ /* First compress the previous log when necessary */
+ if (log->flags & LOG_FLAG_COMPRESS &&
+ log->flags & LOG_FLAG_DELAYCOMPRESS) {
+- if (log->flags & LOG_FLAG_DATEEXT) {
++ if (log->flags & LOG_FLAG_DATEEXT ||
++ log->flags & LOG_FLAG_TIMEEXT) {
+ /* glob for uncompressed files with our pattern */
+ glob_pattern = malloc(strlen(dirName) + strlen(baseName)
+- + strlen(fileext) + 44 );
++ + strlen(fileext) + 44 + 32);
+ 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);
++ "%s/%s%s%s",
++ dirName, baseName, log->flags & LOG_FLAG_TIMEEXT ?
++ "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]Z" :
++ "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",
++ fileext);
+ rc = glob(glob_pattern, 0, globerr, &globResult);
+ if (!rc && globResult.gl_pathc > 0) {
+ for (i = 0; i < globResult.gl_pathc && !hasErrors; i++) {
+@@ -605,16 +609,20 @@ int rotateSingleLog(logInfo * log, int l
+ }
+
+ firstRotated = alloca(strlen(dirName) + strlen(baseName) +
+- strlen(fileext) + strlen(compext) + 30);
++ strlen(fileext) + strlen(compext) + 30 + 8);
+
+- if(log->flags & LOG_FLAG_DATEEXT) {
++ if(log->flags & LOG_FLAG_DATEEXT ||
++ log->flags & LOG_FLAG_TIMEEXT) {
+ /* glob for compressed files with our pattern
+ * and compress ext */
+ glob_pattern = malloc(strlen(dirName)+strlen(baseName)
+- +strlen(fileext)+strlen(compext)+44);
++ +strlen(fileext)+strlen(compext)+44+32);
+ 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);
++ "%s/%s%s%s%s",
++ dirName, baseName, log->flags & LOG_FLAG_TIMEEXT ?
++ "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]Z" :
++ "-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]",
++ fileext, compext);
+ rc = glob(glob_pattern, 0, globerr, &globResult);
+ if (!rc) {
+ /* search for files to drop, if we find one remember it,
+@@ -654,9 +662,17 @@ int rotateSingleLog(logInfo * log, int l
+ disposeName = NULL;
+ }
+ /* firstRotated is most recently created/compressed rotated log */
++ if(log->flags & LOG_FLAG_TIMEEXT)
++ sprintf(firstRotated, "%s/%s-%04d%02d%02dT%02d%02d%02dZ%s%s",
++ dirName, baseName, now.tm_year+1900,
++ now.tm_mon+1, now.tm_mday,
++ now.tm_hour, now.tm_min, now.tm_sec,
++ fileext, compext);
++ else
+ 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 {
+@@ -743,13 +759,22 @@ int rotateSingleLog(logInfo * log, int l
+
+ finalName = oldName;
+
+- if(log->flags & LOG_FLAG_DATEEXT) {
++ if(log->flags & LOG_FLAG_DATEEXT ||
++ log->flags & LOG_FLAG_TIMEEXT) {
+ char * destFile = alloca(strlen(dirName) + strlen(baseName) +
+- strlen(fileext) + strlen(compext) + 30);
++ strlen(fileext) + strlen(compext) + 30 + 8);
+ struct stat fst_buf;
++ if(log->flags & LOG_FLAG_TIMEEXT)
++ sprintf(finalName, "%s/%s-%04d%02d%02dT%02d%02d%02dZ%s",
++ dirName, baseName, now.tm_year+1900,
++ now.tm_mon+1, now.tm_mday,
++ now.tm_hour, now.tm_min, now.tm_sec,
++ fileext);
++ else
+ 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);
diff --git a/patches/logrotate-3.7.1/generic/rh-dateext.patch b/patches/logrotate-3.7.1/generic/rh-dateext.patch
new file mode 100644
index 000000000..7efbf896f
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/rh-dateext.patch
@@ -0,0 +1,319 @@
+Enhance logrotate with "dateext".
+From RedHat patches
+
+Index: logrotate-3.7.1/logrotate.h
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.h 2006-04-08 20:32:36.772133783 +0100
++++ logrotate-3.7.1/logrotate.h 2006-04-08 20:36:00.250859767 +0100
+@@ -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
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 20:32:36.773133590 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 20:36:00.254859022 +0100
+@@ -11,6 +11,7 @@
+ #include <sys/wait.h>
+ #include <time.h>
+ #include <unistd.h>
++#include <glob.h>
+
+ #ifdef WITH_SELINUX
+ #include <selinux/selinux.h>
+@@ -22,6 +23,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! */
+@@ -42,6 +47,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;
+@@ -121,6 +134,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;
+@@ -265,6 +289,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;
+@@ -479,6 +522,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;
+@@ -509,7 +555,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);
+@@ -531,25 +577,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);
+@@ -599,12 +726,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)) {
+@@ -613,9 +755,6 @@
+ disposeName = NULL;
+ }
+
+- free(dirName);
+- free(baseName);
+-
+ if (!hasErrors) {
+ if (log->pre && !(log->flags & LOG_FLAG_SHAREDSCRIPTS)) {
+ message(MESS_DEBUG, "running prerotate script\n");
+@@ -761,6 +900,8 @@
+ }
+ }
+ #endif
++ free(dirName);
++ free(baseName);
+ return hasErrors;
+ }
+
+Index: logrotate-3.7.1/config.c
+===================================================================
+--- logrotate-3.7.1.orig/config.c 2006-04-08 20:32:36.774133397 +0100
++++ logrotate-3.7.1/config.c 2006-04-08 20:36:00.256858650 +0100
+@@ -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;
+
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 20:32:36.775133204 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 20:36:00.257858464 +0100
+@@ -200,6 +200,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.
diff --git a/patches/logrotate-3.7.1/generic/rh-maxage.patch b/patches/logrotate-3.7.1/generic/rh-maxage.patch
new file mode 100644
index 000000000..03d15a102
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/rh-maxage.patch
@@ -0,0 +1,108 @@
+Enhance logrotate with "maxage".
+From upstream RedHat patch.
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 20:38:58.277761983 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 20:38:58.314755223 +0100
+@@ -640,7 +640,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];
+@@ -670,6 +673,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);
+@@ -1188,7 +1207,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,
+Index: logrotate-3.7.1/logrotate.h
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.h 2006-04-08 20:38:58.274762531 +0100
++++ logrotate-3.7.1/logrotate.h 2006-04-08 20:38:58.315755040 +0100
+@@ -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;
+Index: logrotate-3.7.1/config.c
+===================================================================
+--- logrotate-3.7.1.orig/config.c 2006-04-08 20:38:58.279761617 +0100
++++ logrotate-3.7.1/config.c 2006-04-08 20:38:58.317754675 +0100
+@@ -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);
+Index: logrotate-3.7.1/logrotate.8
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.8 2006-04-08 20:38:58.280761435 +0100
++++ logrotate-3.7.1/logrotate.8 2006-04-08 20:38:58.318754492 +0100
+@@ -251,6 +251,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.
diff --git a/patches/logrotate-3.7.1/generic/rh-noTMPDIR.patch b/patches/logrotate-3.7.1/generic/rh-noTMPDIR.patch
new file mode 100644
index 000000000..2b277f940
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/rh-noTMPDIR.patch
@@ -0,0 +1,58 @@
+Do not use tmpfile to run script anymore (Closes: #149270)
+From RedHat patches.
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 20:38:58.314755223 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 20:42:11.628324134 +0100
+@@ -88,10 +88,7 @@
+ }
+
+ static int runScript(char * logfn, char * script) {
+- int fd;
+- char *filespec;
+ int rc;
+- char buf[256];
+
+ if (debug) {
+ message(MESS_DEBUG, "running script with arg %s: \"%s\"\n",
+@@ -99,38 +96,12 @@
+ return 0;
+ }
+
+- filespec = buf;
+- snprintf(buf, sizeof(buf), "%s/logrotate.XXXXXX", getenv("TMPDIR") ?: "/tmp");
+- fd = -1;
+- if (!filespec || (fd = mkstemp(filespec)) < 0 || fchmod(fd, 0700)) {
+- message(MESS_DEBUG, "error creating %s: %s\n", filespec,
+- strerror(errno));
+- if (fd >= 0) {
+- close(fd);
+- unlink(filespec);
+- }
+- return -1;
+- }
+-
+- if (write(fd, "#!/bin/sh\n\n", 11) != 11 ||
+- write(fd, script, strlen(script)) != strlen(script)) {
+- message(MESS_DEBUG, "error writing %s\n", filespec);
+- close(fd);
+- unlink(filespec);
+- return -1;
+- }
+-
+- close(fd);
+-
+ if (!fork()) {
+- execlp(filespec, filespec, logfn, NULL);
++ execl("/bin/sh", "sh", "-c", script, NULL);
+ exit(1);
+ }
+
+ wait(&rc);
+-
+- unlink(filespec);
+-
+ return rc;
+ }
+
diff --git a/patches/logrotate-3.7.1/generic/rh-selinux.patch b/patches/logrotate-3.7.1/generic/rh-selinux.patch
new file mode 100644
index 000000000..0e1a3bbdf
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/rh-selinux.patch
@@ -0,0 +1,173 @@
+Add selinux_getenforce() calls to work when not in enforcing mode
+- use security_getenforce() instead of selinux_getenforcemode
+From RedHat patches.
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 20:42:37.114533654 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 20:44:17.311634566 +0100
+@@ -17,6 +17,7 @@
+ #include <selinux/selinux.h>
+ static security_context_t prev_context=NULL;
+ int selinux_enabled=0;
++int selinux_enforce=0;
+ #endif
+
+ #include "basenames.h"
+@@ -293,38 +294,43 @@
+ return 1;
+ }
+ #ifdef WITH_SELINUX
+- if ((selinux_enabled=(is_selinux_enabled()>0)))
+- {
+- security_context_t oldContext;
+- if (fgetfilecon(fdcurr, &oldContext) >=0) {
+- if (getfscreatecon(&prev_context) < 0) {
+- message(MESS_ERROR, "error getting default context: %s\n",
+- strerror(errno));
+- freecon(oldContext);
+- return 1;
+- }
+- if (setfscreatecon(oldContext) < 0) {
+- message(MESS_ERROR, "error setting file context %s to %s: %s\n",
+- saveLog, oldContext,strerror(errno));
+- freecon(oldContext);
+- return 1;
+- }
+- freecon(oldContext);
+- } else {
+- message(MESS_ERROR, "error getting file context %s: %s\n", currLog,
+- strerror(errno));
+- return 1;
+- }
+- }
++ if (selinux_enabled) {
++ security_context_t oldContext;
++ if (fgetfilecon(fdcurr, &oldContext) >=0) {
++ if (getfscreatecon(&prev_context) < 0) {
++ message(MESS_ERROR, "error getting default context: %s\n",
++ strerror(errno));
++ if (selinux_enforce) {
++ freecon(oldContext);
++ return 1;
++ }
++ }
++ if (setfscreatecon(oldContext) < 0) {
++ message(MESS_ERROR, "error setting file context %s to %s: %s\n",
++ saveLog, oldContext,strerror(errno));
++ if (selinux_enforce) {
++ freecon(oldContext);
++ return 1;
++ }
++ }
++ freecon(oldContext);
++ } else {
++ message(MESS_ERROR, "error getting file context %s: %s\n", currLog,
++ strerror(errno));
++ if (selinux_enforce) {
++ return 1;
++ }
++ }
++ }
+ #endif
+ fdsave = open(saveLog, O_WRONLY | O_CREAT | O_TRUNC,sb->st_mode);
+ #ifdef WITH_SELINUX
+ if (selinux_enabled) {
+- setfscreatecon(prev_context);
+- if (prev_context!= NULL) {
+- freecon(prev_context);
+- prev_context=NULL;
+- }
++ setfscreatecon(prev_context);
++ if (prev_context!= NULL) {
++ freecon(prev_context);
++ prev_context=NULL;
++ }
+ }
+ #endif
+ if (fdsave < 0) {
+@@ -672,28 +678,34 @@
+ (log->flags & LOG_FLAG_DELAYCOMPRESS) ? "" : compext);
+
+ #ifdef WITH_SELINUX
+- if ((selinux_enabled=(is_selinux_enabled()>0))) {
+- security_context_t oldContext=NULL;
+- if (getfilecon(log->files[logNum], &oldContext)>0) {
+- if (getfscreatecon(&prev_context) < 0) {
+- message(MESS_ERROR, "error getting default context: %s\n",
+- strerror(errno));
+- freecon(oldContext);
+- return 1;
+- }
+- if (setfscreatecon(oldContext) < 0) {
+- message(MESS_ERROR, "error setting file context %s to %s: %s\n",
+- log->files[logNum], oldContext,strerror(errno));
+- freecon(oldContext);
+- return 1;
+- }
+- freecon(oldContext);
+- } else {
+- message(MESS_ERROR, "error getting file context %s: %s\n",
+- log->files[logNum],
+- strerror(errno));
+- return 1;
+- }
++ if (selinux_enabled) {
++ security_context_t oldContext=NULL;
++ if (getfilecon(log->files[logNum], &oldContext)>0) {
++ if (getfscreatecon(&prev_context) < 0) {
++ message(MESS_ERROR, "error getting default context: %s\n",
++ strerror(errno));
++ if (selinux_enforce) {
++ freecon(oldContext);
++ return 1;
++ }
++ }
++ if (setfscreatecon(oldContext) < 0) {
++ message(MESS_ERROR, "error setting file context %s to %s: %s\n",
++ log->files[logNum], oldContext,strerror(errno));
++ if (selinux_enforce) {
++ freecon(oldContext);
++ return 1;
++ }
++ }
++ freecon(oldContext);
++ } else {
++ message(MESS_ERROR, "error getting file context %s: %s\n",
++ log->files[logNum],
++ strerror(errno));
++ if (selinux_enforce) {
++ return 1;
++ }
++ }
+ }
+ #endif
+ for (i = rotateCount + logStart - 1; (i >= 0) && !hasErrors; i--) {
+@@ -883,11 +895,11 @@
+
+ #ifdef WITH_SELINUX
+ if (selinux_enabled) {
+- setfscreatecon(prev_context);
+- if (prev_context!= NULL) {
+- freecon(prev_context);
+- prev_context=NULL;
+- }
++ setfscreatecon(prev_context);
++ if (prev_context!= NULL) {
++ freecon(prev_context);
++ prev_context=NULL;
++ }
+ }
+ #endif
+ free(dirName);
+@@ -1249,6 +1261,10 @@
+ exit(1);
+ }
+
++#ifdef WITH_SELINUX
++ selinux_enabled=(is_selinux_enabled()>0);
++ selinux_enforce=security_getenforce();
++#endif
+ for (file = files; *file; file++) {
+ if (readConfigPath(*file, &defConfig, &logs, &numLogs)) {
+ exit(1);
diff --git a/patches/logrotate-3.7.1/generic/script-argument.patch b/patches/logrotate-3.7.1/generic/script-argument.patch
new file mode 100644
index 000000000..86ac656b0
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/script-argument.patch
@@ -0,0 +1,18 @@
+Closes: #330783
+
+Allow the use of $1 in scripts.
+
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 21:47:41.000000000 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 22:01:23.722498089 +0100
+@@ -101,7 +101,7 @@
+ }
+
+ if (!fork()) {
+- execl("/bin/sh", "sh", "-c", script, NULL);
++ execl("/bin/sh", "sh", "-c", script, "sh", logfn, NULL);
+ exit(1);
+ }
+
diff --git a/patches/logrotate-3.7.1/generic/scripterrors.patch b/patches/logrotate-3.7.1/generic/scripterrors.patch
new file mode 100644
index 000000000..628897582
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/scripterrors.patch
@@ -0,0 +1,28 @@
+Give error messages identifying log file on script errors
+(Closes: #122691, #195790, #222050, #306020)
+
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 21:03:38.961646055 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 21:05:20.850933782 +0100
+@@ -770,8 +770,8 @@
+ if (log->pre && !(log->flags & LOG_FLAG_SHAREDSCRIPTS)) {
+ message(MESS_DEBUG, "running prerotate script\n");
+ if (runScript(log->files[logNum], log->pre)) {
+- message(MESS_ERROR, "error running prerotate script, "
+- "leaving old log in place\n");
++ message(MESS_ERROR, "error running prerotate script for %s, "
++ "leaving old log in place\n", log->files[logNum]);
+ hasErrors = 1;
+ }
+ }
+@@ -853,7 +853,8 @@
+ !(log->flags & LOG_FLAG_SHAREDSCRIPTS)) {
+ message(MESS_DEBUG, "running postrotate script\n");
+ if (runScript(log->files[logNum], log->post)) {
+- message(MESS_ERROR, "error running postrotate script\n");
++ message(MESS_ERROR, "error running postrotate script for %s\n",
++ log->files[logNum]);
+ hasErrors = 1;
+ }
+ }
diff --git a/patches/logrotate-3.7.1/generic/series b/patches/logrotate-3.7.1/generic/series
new file mode 100644
index 000000000..3f2595bf4
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/series
@@ -0,0 +1,25 @@
+rh-dateext.patch
+rh-maxage.patch
+rh-noTMPDIR.patch
+rh-selinux.patch
+deb-taboos.patch
+configparse.patch
+taboo-to-debug.patch
+deb-config-h.patch
+datehack.patch
+compressutime.patch
+scripterrors.patch
+manpage.patch
+man-189243.patch
+man-sizetypo.patch
+man-startcount.patch
+man-lastaction.patch
+man-overriden.patch
+man-mailtypo.patch
+man-rh-1.patch
+cpp-crossbuild.patch
+dst.patch
+man-333996.patch
+script-argument.patch
+uncompressChild-warning.patch
+ptx-timeext.patch
diff --git a/patches/logrotate-3.7.1/generic/taboo-to-debug.patch b/patches/logrotate-3.7.1/generic/taboo-to-debug.patch
new file mode 100644
index 000000000..d4086d354
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/taboo-to-debug.patch
@@ -0,0 +1,15 @@
+Quietens the taboo list from ERROR to a DEBUG (Closes: #249073)
+
+Index: logrotate-3.7.1/config.c
+===================================================================
+--- logrotate-3.7.1.orig/config.c 2006-04-08 20:48:47.169764580 +0100
++++ logrotate-3.7.1/config.c 2006-04-08 20:49:55.460798704 +0100
+@@ -149,7 +149,7 @@
+ for (i = 0; i < tabooCount; i++) {
+ if (!strcmp(fname + strlen(fname) - strlen(tabooExts[i]),
+ tabooExts[i])) {
+- message(MESS_ERROR, "Ignoring %s, because of %s "
++ message(MESS_DEBUG, "Ignoring %s, because of %s "
+ "ending\n", fname, tabooExts[i]);
+
+ return 0;
diff --git a/patches/logrotate-3.7.1/generic/uncompressChild-warning.patch b/patches/logrotate-3.7.1/generic/uncompressChild-warning.patch
new file mode 100644
index 000000000..b8fde6e69
--- /dev/null
+++ b/patches/logrotate-3.7.1/generic/uncompressChild-warning.patch
@@ -0,0 +1,13 @@
+Index: logrotate-3.7.1/logrotate.c
+===================================================================
+--- logrotate-3.7.1.orig/logrotate.c 2006-04-08 22:58:51.000000000 +0100
++++ logrotate-3.7.1/logrotate.c 2006-04-08 23:01:00.459602124 +0100
+@@ -209,7 +209,7 @@
+ static int mailLog(char * logFile, char * mailCommand, char * uncompressCommand,
+ char * address, char * subject) {
+ int mailInput;
+- pid_t mailChild, uncompressChild;
++ pid_t mailChild, uncompressChild=-1;
+ int mailStatus, uncompressStatus;
+ int uncompressPipe[2];
+ char * mailArgv[] = { mailCommand, "-s", subject, address, NULL };