diff --git a/logrotate-3.7.4.tar.bz2 b/logrotate-3.7.4.tar.bz2 deleted file mode 100644 index 151f9bf..0000000 --- a/logrotate-3.7.4.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cdfcf9a1e632da8ed054c14833b6e06ec82773353d5a06588b3d7c649b705017 -size 33844 diff --git a/logrotate-3.7.5-cfengine.patch b/logrotate-3.7.5-cfengine.patch new file mode 100644 index 0000000..c93d539 --- /dev/null +++ b/logrotate-3.7.5-cfengine.patch @@ -0,0 +1,11 @@ +--- 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 *); + diff --git a/logrotate-3.7.5-date.patch b/logrotate-3.7.5-date.patch new file mode 100644 index 0000000..303723f --- /dev/null +++ b/logrotate-3.7.5-date.patch @@ -0,0 +1,12 @@ +--- 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 + diff --git a/logrotate-3.7.5-errorHandling.patch b/logrotate-3.7.5-errorHandling.patch new file mode 100644 index 0000000..5c19f47 --- /dev/null +++ b/logrotate-3.7.5-errorHandling.patch @@ -0,0 +1,155 @@ +--- 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 diff --git a/logrotate-3.7.5-logfn.patch b/logrotate-3.7.5-logfn.patch new file mode 100644 index 0000000..a04eec4 --- /dev/null +++ b/logrotate-3.7.5-logfn.patch @@ -0,0 +1,11 @@ +--- 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); + } + diff --git a/logrotate-3.7.5-shred.patch b/logrotate-3.7.5-shred.patch new file mode 100644 index 0000000..045bc85 --- /dev/null +++ b/logrotate-3.7.5-shred.patch @@ -0,0 +1,201 @@ +--- 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; diff --git a/logrotate-3.7.5.tar.bz2 b/logrotate-3.7.5.tar.bz2 new file mode 100644 index 0000000..55e430d --- /dev/null +++ b/logrotate-3.7.5.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f3df579874bdb2b44bfb72b5b2b2ce257f24de6ffda302693d13e24f0224d3e +size 35302 diff --git a/logrotate.changes b/logrotate.changes index 5dd63dd..6361e9e 100644 --- a/logrotate.changes +++ b/logrotate.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu Aug 16 15:33:29 CEST 2007 - ro@suse.de + +- update to 3.7.5 with some bugfixes containing: + - 251040 config option size not handled correctly +- added the current fedora patchkit which adds shred support + ------------------------------------------------------------------- Mon Aug 7 18:07:58 CEST 2006 - ro@suse.de diff --git a/logrotate.spec b/logrotate.spec index 6fb7762..bc627df 100644 --- a/logrotate.spec +++ b/logrotate.spec @@ -1,7 +1,7 @@ # -# spec file for package logrotate (Version 3.7.4) +# spec file for package logrotate (Version 3.7.5) # -# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # @@ -13,25 +13,30 @@ Name: logrotate BuildRequires: popt-devel Summary: Rotate, Compress, Remove, and Mail System Log Files -Version: 3.7.4 -Release: 2 -License: GPL +Version: 3.7.5 +Release: 1 +License: GPL v2 or later Group: System/Base Source: ftp://people.redhat.com/sopwith/logrotate-%{version}.tar.bz2 Patch: logrotate-suse.dif Patch1: logrotate-conf.dif Patch2: logrotate-autoext.dif Patch3: logrotate-addextension.dif +Patch11: logrotate-3.7.5-errorHandling.patch +Patch12: logrotate-3.7.5-shred.patch +Patch13: logrotate-3.7.5-cfengine.patch +Patch14: logrotate-3.7.5-date.patch +Patch15: logrotate-3.7.5-logfn.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: %fillup_prereq /bin/rm /bin/mv %description The logrotate utility is designed to simplify the administration of log files on a system that generates a lot of log files. Logrotate allows -for the automatic rotation, compression, removal, and mailing of log -files. Logrotate can be set to handle a log file daily, weekly, -monthly, or when the log file gets to a certain size. Normally, -logrotate runs as a daily cron job. +the automatic rotation, compression, removal, and mailing of log files. +Logrotate can be set to handle a log file daily, weekly, monthly, or +when the log file reaches a certain size. Normally, logrotate runs as a +daily cron job. @@ -47,6 +52,11 @@ Authors: %patch1 %patch2 %patch3 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 %build make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" @@ -79,13 +89,17 @@ rm -rf $RPM_BUILD_ROOT %config /etc/logrotate.conf %config(noreplace)/etc/logrotate.d/wtmp -%changelog -n logrotate +%changelog +* Thu Aug 16 2007 - ro@suse.de +- update to 3.7.5 with some bugfixes containing: + - 251040 config option size not handled correctly +- added the current fedora patchkit which adds shred support * Mon Aug 07 2006 - ro@suse.de - try adding new option "addextension" which provides what some users expected the old "extension" keyword to do * Wed Jun 21 2006 - ro@suse.de - update to 3.7.4 -- adds the "minsize" option + - adds the "minsize" option - clean up comments in sample logrotate.conf (#183440) * Wed Jan 25 2006 - mls@suse.de - converted neededforbuild to BuildRequires