- new upstream version
- fix #248565 logrotate never rotates /var/log/btmp - fix compile warnings - tabooext accepts wildcards (related #247816) - fix minor errors and update man page (related #250059) - fix handling of size directive (related #247410)
This commit is contained in:
parent
fb9fe1eb21
commit
09013345a1
@ -1 +1 @@
|
||||
logrotate-3.7.5.tar.gz
|
||||
logrotate-3.7.6.tar.gz
|
||||
|
@ -1,11 +0,0 @@
|
||||
--- logrotate-3.7.5/config.c.cfengine 2007-05-14 14:18:44.000000000 +0200
|
||||
+++ logrotate-3.7.5/config.c 2007-05-14 14:19:06.000000000 +0200
|
||||
@@ -31,7 +31,7 @@
|
||||
#endif
|
||||
|
||||
static char *defTabooExts[] = { ".rpmsave", ".rpmorig", "~", ",v",
|
||||
- ".rpmnew", ".swp"
|
||||
+ ".rpmnew", ".swp", ".cfsaved"
|
||||
};
|
||||
static int defTabooCount = sizeof(defTabooExts) / sizeof(char *);
|
||||
|
@ -1,12 +0,0 @@
|
||||
--- logrotate-3.7.5/examples/logrotate-default.date 2007-05-16 16:36:06.000000000 +0200
|
||||
+++ logrotate-3.7.5/examples/logrotate-default 2007-05-16 16:36:50.000000000 +0200
|
||||
@@ -8,6 +8,9 @@
|
||||
# create new (empty) log files after rotating old ones
|
||||
create
|
||||
|
||||
+# use date as a suffix of rotated file
|
||||
+dateext
|
||||
+
|
||||
# uncomment this if you want your log files compressed
|
||||
#compress
|
||||
|
@ -1,155 +0,0 @@
|
||||
--- logrotate-3.7.5/logrotate.c.errorHandling 2007-03-01 12:05:30.000000000 +0100
|
||||
+++ logrotate-3.7.5/logrotate.c 2007-03-31 12:50:33.000000000 +0200
|
||||
@@ -1043,6 +1043,8 @@
|
||||
message(MESS_ERROR, "error running first action script "
|
||||
"for %s\n", log->pattern);
|
||||
hasErrors = 1;
|
||||
+ /* finish early, firstaction failed, affects all logs in set */
|
||||
+ return hasErrors;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1067,16 +1069,25 @@
|
||||
hasErrors |= logHasErrors[i];
|
||||
}
|
||||
|
||||
- if (log->pre) {
|
||||
+ if (log->pre
|
||||
+ && (! ( (logHasErrors[j] && !(log->flags & LOG_FLAG_SHAREDSCRIPTS))
|
||||
+ || (hasErrors && (log->flags & LOG_FLAG_SHAREDSCRIPTS)) ) )) {
|
||||
if (!numRotated) {
|
||||
message(MESS_DEBUG, "not running prerotate script, "
|
||||
"since no logs will be rotated\n");
|
||||
} else {
|
||||
message(MESS_DEBUG, "running prerotate script\n");
|
||||
if (runScript(log->pattern, log->pre)) {
|
||||
- message(MESS_ERROR,
|
||||
- "error running shared prerotate script "
|
||||
- "for %s\n", log->pattern);
|
||||
+ if (log->flags & LOG_FLAG_SHAREDSCRIPTS)
|
||||
+ message(MESS_ERROR,
|
||||
+ "error running shared prerotate script "
|
||||
+ "for '%s'\n", log->pattern);
|
||||
+ else {
|
||||
+ message(MESS_ERROR,
|
||||
+ "error running non-shared prerotate script "
|
||||
+ "for %s of '%s'\n", log->files[j], log->pattern);
|
||||
+ }
|
||||
+ logHasErrors[j] = 1;
|
||||
hasErrors = 1;
|
||||
}
|
||||
}
|
||||
@@ -1085,22 +1096,33 @@
|
||||
for (i = j;
|
||||
((log->flags & LOG_FLAG_SHAREDSCRIPTS) && i < log->numFiles)
|
||||
|| (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && i == j); i++) {
|
||||
- if (!logHasErrors[i]) {
|
||||
+ if (! ( (logHasErrors[i] && !(log->flags & LOG_FLAG_SHAREDSCRIPTS))
|
||||
+ || (hasErrors && (log->flags & LOG_FLAG_SHAREDSCRIPTS)) ) ) {
|
||||
logHasErrors[i] |=
|
||||
rotateSingleLog(log, i, state[i], rotNames[i]);
|
||||
hasErrors |= logHasErrors[i];
|
||||
}
|
||||
}
|
||||
|
||||
- if (log->post) {
|
||||
+ if (log->post
|
||||
+ && (! ( (logHasErrors[j] && !(log->flags & LOG_FLAG_SHAREDSCRIPTS))
|
||||
+ || (hasErrors && (log->flags & LOG_FLAG_SHAREDSCRIPTS)) ) )) {
|
||||
if (!numRotated) {
|
||||
message(MESS_DEBUG, "not running postrotate script, "
|
||||
"since no logs were rotated\n");
|
||||
} else {
|
||||
message(MESS_DEBUG, "running postrotate script\n");
|
||||
if (runScript(log->pattern, log->post)) {
|
||||
- message(MESS_ERROR, "error running postrotate script "
|
||||
- "for %s\n", log->pattern);
|
||||
+ if (log->flags & LOG_FLAG_SHAREDSCRIPTS)
|
||||
+ message(MESS_ERROR,
|
||||
+ "error running shared postrotate script "
|
||||
+ "for '%s'\n", log->pattern);
|
||||
+ else {
|
||||
+ message(MESS_ERROR,
|
||||
+ "error running non-shared postrotate script "
|
||||
+ "for %s of '%s'\n", log->files[j], log->pattern);
|
||||
+ }
|
||||
+ logHasErrors[j] = 1;
|
||||
hasErrors = 1;
|
||||
}
|
||||
}
|
||||
@@ -1109,7 +1131,8 @@
|
||||
for (i = j;
|
||||
((log->flags & LOG_FLAG_SHAREDSCRIPTS) && i < log->numFiles)
|
||||
|| (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && i == j); i++) {
|
||||
- if (!logHasErrors[i]) {
|
||||
+ if (! ( (logHasErrors[i] && !(log->flags & LOG_FLAG_SHAREDSCRIPTS))
|
||||
+ || (hasErrors && (log->flags & LOG_FLAG_SHAREDSCRIPTS)) ) ) {
|
||||
logHasErrors[i] |=
|
||||
postrotateSingleLog(log, i, state[i], rotNames[i]);
|
||||
hasErrors |= logHasErrors[i];
|
||||
--- logrotate-3.7.5/logrotate.8.errorHandling 2006-05-17 16:46:51.000000000 +0200
|
||||
+++ logrotate-3.7.5/logrotate.8 2007-03-31 12:37:06.000000000 +0200
|
||||
@@ -326,7 +326,8 @@
|
||||
\fBnosharedscripts\fR
|
||||
Run \fBprerotate\fR and \fBpostrotate\fR scripts for every log file which
|
||||
is rotated (this is the default, and overrides the \fBsharedscripts\fR
|
||||
-option).
|
||||
+option). If the scripts exit with error, the remaining actions will
|
||||
+not be executed for the affected log only.
|
||||
|
||||
.TP
|
||||
\fBnotifempty\fR
|
||||
@@ -346,7 +347,8 @@
|
||||
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.
|
||||
+See \fBprerotate\fR as well. See \fBsharedscripts\fR and
|
||||
+\fBnosharedscripts\fR for error handling.
|
||||
|
||||
.TP
|
||||
\fBprerotate\fR/\fBendscript\fR
|
||||
@@ -354,7 +356,8 @@
|
||||
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.
|
||||
+as well. See \fBsharedscripts\fR and \fBnosharedscripts\fR for error
|
||||
+handling.
|
||||
|
||||
.TP
|
||||
\fBfirstaction\fR/\fBendscript\fR
|
||||
@@ -362,7 +365,8 @@
|
||||
must appear on lines by themselves) are executed once before all log
|
||||
files that match the wildcarded pattern are rotated, before prerotate script
|
||||
is run and only if at least one log will actually be rotated. These directives
|
||||
-may only appear inside of a log file definition. See \fBlastaction\fR as well.
|
||||
+may only appear inside of a log file definition. If the script exits
|
||||
+with error, no further processing is done. See \fBlastaction\fR as well.
|
||||
|
||||
.TP
|
||||
\fBlastaction\fR/\fBendscript\fR
|
||||
@@ -370,7 +374,9 @@
|
||||
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 \fBfirstaction\fR as well.
|
||||
+appear inside of a log file definition. If the script exits with
|
||||
+error, just an error message is shown (as this is the last
|
||||
+action). See \fBfirstaction\fR as well.
|
||||
|
||||
.TP
|
||||
\fBrotate \fIcount\fR
|
||||
@@ -393,8 +399,10 @@
|
||||
/var/log/news/* example). If \fBsharedscript\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
|
||||
-option and implies \fBcreate\fR option.
|
||||
+will not be run at all. If the scripts exit with error, the remaining
|
||||
+actions will not be executed for any logs. This option overrides the
|
||||
+\fBnosharedscripts\fR option and implies \fBcreate\fR option.
|
||||
+
|
||||
|
||||
.TP
|
||||
\fBstart \fIcount\fR
|
@ -1,11 +0,0 @@
|
||||
--- logrotate-3.7.5/logrotate.c.logfn 2007-05-30 14:52:21.000000000 +0200
|
||||
+++ logrotate-3.7.5/logrotate.c 2007-05-30 14:53:08.000000000 +0200
|
||||
@@ -151,7 +151,7 @@
|
||||
}
|
||||
|
||||
if (!fork()) {
|
||||
- execl("/bin/sh", "sh", "-c", script, NULL);
|
||||
+ execl("/bin/sh", "sh", "-c", script, script, logfn, NULL);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -1,201 +0,0 @@
|
||||
--- logrotate-3.7.5/logrotate.h.shred 2007-05-14 09:25:50.000000000 +0200
|
||||
+++ logrotate-3.7.5/logrotate.h 2007-05-14 10:27:48.000000000 +0200
|
||||
@@ -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_SHRED (1 << 10)
|
||||
|
||||
#define NO_MODE ((mode_t) -1)
|
||||
#define NO_UID ((uid_t) -1)
|
||||
@@ -44,6 +45,7 @@
|
||||
char *uncompress_prog;
|
||||
char *compress_ext;
|
||||
int flags;
|
||||
+ int shred_cycles; /* if !=0, pass -n shred_cycles to GNU shred */
|
||||
mode_t createMode; /* if any/all of these are -1, we use the */
|
||||
uid_t createUid; /* attributes from the log file just rotated */
|
||||
gid_t createGid;
|
||||
--- logrotate-3.7.5/logrotate.c.shred 2007-05-14 09:25:30.000000000 +0200
|
||||
+++ logrotate-3.7.5/logrotate.c 2007-05-14 10:35:41.000000000 +0200
|
||||
@@ -53,6 +53,8 @@
|
||||
char *mailCommand = DEFAULT_MAIL_COMMAND;
|
||||
time_t nowSecs = 0;
|
||||
|
||||
+static int shred_file(char * filename, logInfo *log);
|
||||
+
|
||||
static int globerr(const char *pathname, int theerr)
|
||||
{
|
||||
message(MESS_ERROR, "error accessing %s: %s\n", pathname,
|
||||
@@ -188,11 +190,54 @@
|
||||
return fd;
|
||||
}
|
||||
|
||||
-static int removeLogFile(char *name)
|
||||
+#define SHRED_CALL "shred -u "
|
||||
+#define SHRED_COUNT_FLAG "-n "
|
||||
+#define DIGITS 10
|
||||
+/* unlink, but try to call shred from GNU fileutils */
|
||||
+static int shred_file(char * filename, logInfo *log)
|
||||
+{
|
||||
+ int len, ret;
|
||||
+ char *cmd;
|
||||
+ char count[DIGITS]; /* that's a lot of shredding :) */
|
||||
+
|
||||
+ if (!(log->flags & LOG_FLAG_SHRED)) {
|
||||
+ return unlink(filename);
|
||||
+ }
|
||||
+
|
||||
+ len = strlen(filename) + strlen(SHRED_CALL);
|
||||
+ len += strlen(SHRED_COUNT_FLAG) + DIGITS;
|
||||
+ cmd = malloc(len);
|
||||
+
|
||||
+ if (!cmd) {
|
||||
+ message(MESS_ERROR, "malloc error while shredding");
|
||||
+ return unlink(filename);
|
||||
+ }
|
||||
+ strcpy(cmd, SHRED_CALL);
|
||||
+ if (log->shred_cycles != 0) {
|
||||
+ strcat(cmd, SHRED_COUNT_FLAG);
|
||||
+ snprintf(count, DIGITS - 1, "%d", log->shred_cycles);
|
||||
+ strcat(count, " ");
|
||||
+ strcat(cmd, count);
|
||||
+ }
|
||||
+ strcat(cmd, filename);
|
||||
+ ret = system(cmd);
|
||||
+ free(cmd);
|
||||
+ if (ret != 0) {
|
||||
+ message(MESS_ERROR, "Failed to shred %s\n, trying unlink", filename);
|
||||
+ if (ret != -1) {
|
||||
+ message(MESS_NORMAL, "Shred returned %d\n", ret);
|
||||
+ }
|
||||
+ return unlink(filename);
|
||||
+ } else {
|
||||
+ return ret;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int removeLogFile(char *name, logInfo *log)
|
||||
{
|
||||
message(MESS_DEBUG, "removing old log %s\n", name);
|
||||
|
||||
- if (!debug && unlink(name)) {
|
||||
+ if (!debug && shred_file(name, log)) {
|
||||
message(MESS_ERROR, "Failed to remove old log %s: %s\n",
|
||||
name, strerror(errno));
|
||||
return 1;
|
||||
@@ -255,7 +300,7 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- unlink(name);
|
||||
+ shred_file(name, log);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -697,7 +742,7 @@
|
||||
mailCommand, logNum,
|
||||
log);
|
||||
if (!hasErrors)
|
||||
- hasErrors = removeLogFile(mailFilename);
|
||||
+ hasErrors = removeLogFile(mailFilename, log);
|
||||
}
|
||||
mail_out = i;
|
||||
}
|
||||
@@ -737,7 +782,7 @@
|
||||
mailLogWrapper(mailFilename, mailCommand,
|
||||
logNum, log);
|
||||
if (!hasErrors)
|
||||
- hasErrors = removeLogFile(mailFilename);
|
||||
+ hasErrors = removeLogFile(mailFilename, log);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -954,7 +999,7 @@
|
||||
}
|
||||
|
||||
if (!hasErrors && rotNames->disposeName)
|
||||
- hasErrors = removeLogFile(rotNames->disposeName);
|
||||
+ hasErrors = removeLogFile(rotNames->disposeName, log);
|
||||
|
||||
#ifdef WITH_SELINUX
|
||||
if (selinux_enabled) {
|
||||
--- logrotate-3.7.5/logrotate.8.shred 2007-05-14 09:26:02.000000000 +0200
|
||||
+++ logrotate-3.7.5/logrotate.8 2007-05-14 10:42:16.000000000 +0200
|
||||
@@ -330,6 +330,10 @@
|
||||
not be executed for the affected log only.
|
||||
|
||||
.TP
|
||||
+\fBnoshred\fR
|
||||
+Do not use \fBshred\fR when deleting old log files. See also \fBshred\fR.
|
||||
+
|
||||
+.TP
|
||||
\fBnotifempty\fR
|
||||
Do not rotate the log if it is empty (this overrides the \fBifempty\fR option).
|
||||
|
||||
@@ -403,6 +407,16 @@
|
||||
actions will not be executed for any logs. This option overrides the
|
||||
\fBnosharedscripts\fR option and implies \fBcreate\fR option.
|
||||
|
||||
+.TP
|
||||
+\fBshred\fR
|
||||
+Delete log files using \fBshred\fR -u instead of unlink(). This should
|
||||
+ensure that logs are not readable after their scheduled deletion; this is
|
||||
+off by default. See also \fBnoshred\fR.
|
||||
+
|
||||
+.TP
|
||||
+\fBshredcycles\fR \fIcount\fR
|
||||
+Asks GNU \fBshred\fR to overwite log files \fBcount\fR times before
|
||||
+deletion. Without this option, \fBshred\fR's default will be used.
|
||||
|
||||
.TP
|
||||
\fBstart \fIcount\fR
|
||||
--- logrotate-3.7.5/config.c.shred 2007-05-14 09:26:42.000000000 +0200
|
||||
+++ logrotate-3.7.5/config.c 2007-05-14 10:32:37.000000000 +0200
|
||||
@@ -432,6 +432,7 @@
|
||||
/* uncompress_prog */ NULL,
|
||||
/* compress_ext */ NULL,
|
||||
/* flags */ LOG_FLAG_IFEMPTY,
|
||||
+ /* shred_cycles */ 0,
|
||||
/* createMode/Uid/Gid */ NO_MODE, NO_UID, NO_GID,
|
||||
/* compress_options_list/count */ NULL, 0
|
||||
};
|
||||
@@ -638,6 +639,14 @@
|
||||
newlog->flags &= ~LOG_FLAG_DELAYCOMPRESS;
|
||||
|
||||
*endtag = oldchar, start = endtag;
|
||||
+ } else if (!strcmp(start, "shred")) {
|
||||
+ newlog->flags |= LOG_FLAG_SHRED;
|
||||
+
|
||||
+ *endtag = oldchar, start = endtag;
|
||||
+ } else if (!strcmp(start, "noshred")) {
|
||||
+ newlog->flags &= ~LOG_FLAG_SHRED;
|
||||
+
|
||||
+ *endtag = oldchar, start = endtag;
|
||||
} else if (!strcmp(start, "sharedscripts")) {
|
||||
newlog->flags |= LOG_FLAG_SHAREDSCRIPTS;
|
||||
|
||||
@@ -833,7 +842,22 @@
|
||||
*endtag = oldchar, start = endtag;
|
||||
}
|
||||
#endif
|
||||
- } else if (!strcmp(start, "daily")) {
|
||||
+ } else if (!strcmp(start, "shredcycles")) {
|
||||
+ *endtag = oldchar, start = endtag;
|
||||
+
|
||||
+ if (!isolateValue(configFile, lineNum, "shred cycles",
|
||||
+ &start, &endtag)) {
|
||||
+ oldchar = *endtag, *endtag = '\0';
|
||||
+
|
||||
+ newlog->shred_cycles = strtoul(start, &chptr, 0);
|
||||
+ if (*chptr || newlog->shred_cycles < 0) {
|
||||
+ message(MESS_ERROR, "%s:%d bad shred cycles '%s'\n",
|
||||
+ configFile, lineNum, start);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ *endtag = oldchar, start = endtag;
|
||||
+ }
|
||||
+ } else if (!strcmp(start, "daily")) {
|
||||
*endtag = oldchar, start = endtag;
|
||||
|
||||
newlog->criterium = ROT_DAYS;
|
@ -1,7 +1,7 @@
|
||||
Summary: Rotates, compresses, removes and mails system log files
|
||||
Name: logrotate
|
||||
Version: 3.7.5
|
||||
Release: 5%{?dist}
|
||||
Version: 3.7.6
|
||||
Release: 1%{?dist}
|
||||
License: GPL
|
||||
Group: System Environment/Base
|
||||
# The source for this package was pulled from cvs.
|
||||
@ -12,11 +12,6 @@ Group: System Environment/Base
|
||||
# cd logrotate
|
||||
# make create-archive
|
||||
Source: logrotate-%{version}.tar.gz
|
||||
Patch1: logrotate-3.7.5-errorHandling.patch
|
||||
Patch2: logrotate-3.7.5-shred.patch
|
||||
Patch3: logrotate-3.7.5-cfengine.patch
|
||||
Patch4: logrotate-3.7.5-date.patch
|
||||
Patch5: logrotate-3.7.5-logfn.patch
|
||||
Requires: coreutils >= 5.92
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
@ -34,11 +29,6 @@ log files on your system.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch1 -p1 -b .errorHandling
|
||||
%patch2 -p1 -b .shred
|
||||
%patch3 -p1 -b .cfengine
|
||||
%patch4 -p1 -b .dateext
|
||||
%patch5 -p1 -b .logfn
|
||||
|
||||
%build
|
||||
make %{?_smp_mflags} RPM_OPT_FLAGS="$RPM_OPT_FLAGS" WITH_SELINUX=yes
|
||||
@ -68,6 +58,14 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) %{_localstatedir}/lib/logrotate.status
|
||||
|
||||
%changelog
|
||||
* Tue Aug 07 2007 Tomas Smetana <tsmetana@redhat.com> 3.7.6-1
|
||||
- new upstream version
|
||||
- fix #248565 logrotate never rotates /var/log/btmp
|
||||
- fix compile warnings
|
||||
- tabooext accepts wildcards (related #247816)
|
||||
- fix minor errors and update man page (related #250059)
|
||||
- fix handling of size directive (related #247410)
|
||||
|
||||
* Thu May 31 2007 Tomas Smetana <tsmetana@redhat.com> 3.7.5-5
|
||||
- fix ignoring pre/postrotate arguments (related #241766)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user