*** empty log message ***

This commit is contained in:
Jan Kaluža 2010-06-28 11:02:08 +00:00
parent ea89d9100d
commit 4f28f0f253
18 changed files with 10 additions and 632 deletions

View File

@ -1 +1 @@
logrotate-3.7.8.tar.gz
logrotate-3.7.9.tar.gz

View File

@ -1,40 +0,0 @@
diff -up logrotate-3.7.6/logrotate.c.fdclose logrotate-3.7.6/logrotate.c
--- logrotate-3.7.6/logrotate.c.fdclose 2008-04-21 11:49:57.000000000 +0200
+++ logrotate-3.7.6/logrotate.c 2008-04-21 11:53:08.000000000 +0200
@@ -935,6 +935,9 @@ int rotateSingleLog(logInfo * log, int l
if (oldContext != NULL) {
freecon(oldContext);
}
+ if (close(fdcurr) < 0)
+ message(MESS_ERROR, "error closing file %s",
+ log->files[logNum]);
return 1;
}
}
@@ -946,6 +949,9 @@ int rotateSingleLog(logInfo * log, int l
if (oldContext != NULL) {
freecon(oldContext);
}
+ if (close(fdcurr) < 0)
+ message(MESS_ERROR, "error closing file %s",
+ log->files[logNum]);
return 1;
}
}
@@ -959,10 +965,16 @@ int rotateSingleLog(logInfo * log, int l
message(MESS_ERROR, "getting file context %s: %s\n",
log->files[logNum], strerror(errno));
if (selinux_enforce) {
+ if (close(fdcurr) < 0)
+ message(MESS_ERROR, "error closing file %s",
+ log->files[logNum]);
return 1;
}
}
}
+ if (close(fdcurr) < 0)
+ message(MESS_ERROR, "error closing file %s",
+ log->files[logNum]);
}
#endif
message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],

View File

@ -1,11 +0,0 @@
diff -up logrotate-3.7.6/logrotate.c.segfault logrotate-3.7.6/logrotate.c
--- logrotate-3.7.6/logrotate.c.segfault 2008-04-23 14:40:51.000000000 +0200
+++ logrotate-3.7.6/logrotate.c 2008-04-23 14:41:14.000000000 +0200
@@ -1380,6 +1380,7 @@ static int readState(char *stateFilename
line++;
while (fgets(buf, sizeof(buf) - 1, f)) {
+ argv = NULL;
line++;
i = strlen(buf);
if (buf[i - 1] != '\n') {

View File

@ -1,128 +0,0 @@
diff -up logrotate-3.7.6/logrotate.c.selinux logrotate-3.7.6/logrotate.c
--- logrotate-3.7.6/logrotate.c.selinux 2007-08-07 09:14:35.000000000 +0200
+++ logrotate-3.7.6/logrotate.c 2008-01-21 09:32:56.000000000 +0100
@@ -409,15 +409,17 @@ static int copyTruncate(char *currLog, c
}
#ifdef WITH_SELINUX
if (selinux_enabled) {
- security_context_t oldContext;
+ security_context_t oldContext = NULL;
if (fgetfilecon_raw(fdcurr, &oldContext) >= 0) {
if (getfscreatecon_raw(&prev_context) < 0) {
message(MESS_ERROR,
"getting default context: %s\n",
strerror(errno));
if (selinux_enforce) {
- freecon(oldContext);
- return 1;
+ if (oldContext != NULL) {
+ freecon(oldContext);
+ }
+ return 1;
}
}
if (setfscreatecon_raw(oldContext) < 0) {
@@ -425,11 +427,15 @@ static int copyTruncate(char *currLog, c
"setting file context %s to %s: %s\n",
saveLog, oldContext, strerror(errno));
if (selinux_enforce) {
- freecon(oldContext);
- return 1;
+ if (oldContext != NULL) {
+ freecon(oldContext);
+ }
+ return 1;
}
}
- freecon(oldContext);
+ if (oldContext != NULL) {
+ freecon(oldContext);
+ }
} else {
if (errno != ENOTSUP) {
message(MESS_ERROR, "getting file context %s: %s\n",
@@ -899,6 +905,9 @@ int rotateSingleLog(logInfo * log, int l
int hasErrors = 0;
struct stat sb;
int fd;
+#ifdef WITH_SELINUX
+ security_context_t savedContext = NULL;
+#endif
if (!state->doRotate)
return 0;
@@ -906,7 +915,57 @@ int rotateSingleLog(logInfo * log, int l
if (!hasErrors) {
if (!(log->flags & (LOG_FLAG_COPYTRUNCATE | LOG_FLAG_COPY))) {
- message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
+#ifdef WITH_SELINUX
+ if (selinux_enabled) {
+ security_context_t oldContext = NULL;
+ int fdcurr = -1;
+
+ if ((fdcurr = open(log->files[logNum], O_RDWR)) < 0) {
+ message(MESS_ERROR, "error opening %s: %s\n",
+ log->files[logNum],
+ strerror(errno));
+ return 1;
+ }
+ if (fgetfilecon_raw(fdcurr, &oldContext) >= 0) {
+ if (getfscreatecon_raw(&savedContext) < 0) {
+ message(MESS_ERROR,
+ "getting default context: %s\n",
+ strerror(errno));
+ if (selinux_enforce) {
+ if (oldContext != NULL) {
+ freecon(oldContext);
+ }
+ return 1;
+ }
+ }
+ if (setfscreatecon_raw(oldContext) < 0) {
+ message(MESS_ERROR,
+ "setting file context %s to %s: %s\n",
+ log->files[logNum], oldContext, strerror(errno));
+ if (selinux_enforce) {
+ if (oldContext != NULL) {
+ freecon(oldContext);
+ }
+ return 1;
+ }
+ }
+ message(MESS_DEBUG, "fscreate context set to %s\n",
+ oldContext);
+ if (oldContext != NULL) {
+ freecon(oldContext);
+ }
+ } else {
+ if (errno != ENOTSUP) {
+ message(MESS_ERROR, "getting file context %s: %s\n",
+ log->files[logNum], strerror(errno));
+ if (selinux_enforce) {
+ return 1;
+ }
+ }
+ }
+ }
+#endif
+ message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
rotNames->finalName);
if (!debug && !hasErrors &&
@@ -961,6 +1020,15 @@ int rotateSingleLog(logInfo * log, int l
close(fd);
}
}
+#ifdef WITH_SELINUX
+ if (selinux_enabled) {
+ setfscreatecon_raw(savedContext);
+ if (savedContext != NULL) {
+ freecon(savedContext);
+ savedContext = NULL;
+ }
+ }
+#endif
if (!hasErrors
&& log->flags & (LOG_FLAG_COPYTRUNCATE | LOG_FLAG_COPY))

View File

@ -1,71 +0,0 @@
diff -up logrotate-3.7.7/config.c.curdir logrotate-3.7.7/config.c
--- logrotate-3.7.7/config.c.curdir 2008-11-20 14:50:29.000000000 +0100
+++ logrotate-3.7.7/config.c 2008-11-20 14:51:35.000000000 +0100
@@ -301,7 +301,7 @@ static void freeTailLogs(int num)
static int readConfigPath(const char *path, struct logInfo *defConfig)
{
struct stat sb;
- int here, oldnumlogs, result = 1;
+ int oldnumlogs, result = 1;
struct logInfo defConfigBackup;
if (stat(path, &sb)) {
@@ -315,17 +315,10 @@ static int readConfigPath(const char *pa
int files_count, i;
DIR *dirp;
- here = open(".", O_RDONLY);
- if (here < 0) {
- message(MESS_ERROR, "cannot open current directory: %s\n",
- strerror(errno));
- return 1;
- }
if ((dirp = opendir(path)) == NULL) {
message(MESS_ERROR, "cannot open directory %s: %s\n", path,
strerror(errno));
- close(here);
return 1;
}
files_count = 0;
@@ -344,7 +337,6 @@ static int readConfigPath(const char *pa
} else {
free_2d_array(namelist, files_count);
closedir(dirp);
- close(here);
message(MESS_ERROR, "cannot realloc: %s\n",
strerror(errno));
return 1;
@@ -358,7 +350,6 @@ static int readConfigPath(const char *pa
} else {
free_2d_array(namelist, files_count);
closedir(dirp);
- close(here);
message(MESS_ERROR, "cannot realloc: %s\n",
strerror(errno));
return 1;
@@ -370,14 +361,12 @@ static int readConfigPath(const char *pa
if (files_count > 0) {
qsort(namelist, files_count, sizeof(char *), compar);
} else {
- close(here);
return 0;
}
if (chdir(path)) {
message(MESS_ERROR, "error in chdir(\"%s\"): %s\n", path,
strerror(errno));
- close(here);
free_2d_array(namelist, files_count);
return 1;
}
@@ -399,8 +388,7 @@ static int readConfigPath(const char *pa
freeLogInfo(&defConfigBackup);
}
- fchdir(here);
- close(here);
+ chdir(".");
free_2d_array(namelist, files_count);
} else {
oldnumlogs = numLogs;

View File

@ -1,15 +0,0 @@
diff -up logrotate-3.7.7/config.c.curdir logrotate-3.7.7/config.c
--- logrotate-3.7.7/config.c.curdir 2008-05-09 09:28:59.000000000 +0200
+++ logrotate-3.7.7/config.c 2008-11-20 15:35:05.000000000 +0100
@@ -316,11 +316,6 @@ static int readConfigPath(const char *pa
DIR *dirp;
here = open(".", O_RDONLY);
- if (here < 0) {
- message(MESS_ERROR, "cannot open current directory: %s\n",
- strerror(errno));
- return 1;
- }
if ((dirp = opendir(path)) == NULL) {
message(MESS_ERROR, "cannot open directory %s: %s\n", path,

View File

@ -1,17 +0,0 @@
diff -up logrotate-3.7.7/config.c.toolarge logrotate-3.7.7/config.c
--- logrotate-3.7.7/config.c.toolarge 2008-11-21 12:57:25.000000000 +0100
+++ logrotate-3.7.7/config.c 2008-11-21 12:57:41.000000000 +0100
@@ -530,6 +530,13 @@ static int readConfigFile(const char *co
length = sb.st_size;
+ if (length > 0xffffff) {
+ message(MESS_ERROR, "file %s too large, probably not a config file.\n",
+ configFile);
+ close(fd);
+ return 1;
+ }
+
buf = alloca(length + 2);
if (!buf) {
message(MESS_ERROR, "alloca() of %d bytes failed\n", (int) length);

View File

@ -1,42 +0,0 @@
Index: /trunk/logrotate.c
===================================================================
--- /trunk/logrotate.c (revision 273)
+++ /trunk/logrotate.c (revision 276)
@@ -1199,5 +1199,5 @@
switch (log->criterium) {
case ROT_DAYS:
- message(MESS_DEBUG, "after %d days ", log->threshhold);
+ message(MESS_DEBUG, "after %llu days ", log->threshhold);
break;
case ROT_WEEKLY:
@@ -1211,5 +1211,5 @@
break;
case ROT_SIZE:
- message(MESS_DEBUG, "%d bytes ", log->threshhold);
+ message(MESS_DEBUG, "%llu bytes ", log->threshhold);
break;
case ROT_FORCE:
Index: /trunk/logrotate.h
===================================================================
--- /trunk/logrotate.h (revision 248)
+++ /trunk/logrotate.h (revision 276)
@@ -34,6 +34,6 @@
enum { ROT_DAYS, ROT_WEEKLY, ROT_MONTHLY, ROT_YEARLY, ROT_SIZE,
ROT_FORCE } criterium;
- unsigned int threshhold;
- unsigned int minsize;
+ unsigned long long threshhold;
+ unsigned long long minsize;
int rotateCount;
int rotateAge;
Index: /trunk/config.c
===================================================================
--- /trunk/config.c (revision 274)
+++ /trunk/config.c (revision 276)
@@ -794,5 +794,5 @@
*endtag = oldchar, start = endtag;
} else if (!strcmp(start, "size") || !strcmp(start, "minsize")) {
- unsigned int size = 0;
+ unsigned long long size = 0;
char *opt = start;
*endtag = oldchar, start = endtag;

View File

@ -1,11 +0,0 @@
diff -up logrotate-3.7.8/examples/logrotate.cron.devnull logrotate-3.7.8/examples/logrotate.cron
--- logrotate-3.7.8/examples/logrotate.cron.devnull 2009-09-17 11:29:19.000000000 +0200
+++ logrotate-3.7.8/examples/logrotate.cron 2009-09-17 11:29:40.000000000 +0200
@@ -1,6 +1,6 @@
#!/bin/sh
-/usr/sbin/logrotate /etc/logrotate.conf
+/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

View File

@ -1,16 +0,0 @@
Index: logrotate.c
===================================================================
--- logrotate.c (revision 276)
+++ logrotate.c (working copy)
@@ -848,9 +848,10 @@
mailLogWrapper(mailFilename,
mailCommand, logNum,
log);
- if (!hasErrors)
+ if (!hasErrors) {
message(MESS_DEBUG, "removing %s\n", mailFilename);
hasErrors = removeLogFile(mailFilename, log);
+ }
}
mail_out = i;
}

View File

@ -1,34 +0,0 @@
diff -up /dev/null logrotate-3.7.8/logrotate.conf.5
--- /dev/null 2009-09-29 13:43:00.063127317 +0200
+++ logrotate-3.7.8/logrotate.conf.5 2009-09-29 14:46:24.000000000 +0200
@@ -0,0 +1 @@
+.so man8/logrotate.8
diff -up logrotate-3.7.8/Makefile.man5 logrotate-3.7.8/Makefile
--- logrotate-3.7.8/Makefile.man5 2008-05-19 12:25:54.000000000 +0200
+++ logrotate-3.7.8/Makefile 2009-09-29 14:47:01.000000000 +0200
@@ -3,7 +3,8 @@ OS_NAME = $(shell uname -s)
LFS = $(shell echo `getconf LFS_CFLAGS 2>/dev/null`)
CFLAGS = -Wall -D_GNU_SOURCE -D$(OS_NAME) -DVERSION=\"$(VERSION)\" $(RPM_OPT_FLAGS) $(LFS)
PROG = logrotate
-MAN = logrotate.8
+MAN = logrotate.8
+MAN5 = logrotate.conf.5
LOADLIBES = -lpopt
SVNURL= svn+ssh://svn.fedorahosted.org/svn/logrotate
SVNPUBURL = http://svn.fedorahosted.org/svn/logrotate
@@ -99,6 +100,7 @@ install:
[ -d $(PREFIX)/$(BINDIR) ] || mkdir -p $(PREFIX)/$(BINDIR)
[ -d $(PREFIX)/$(MANDIR) ] || mkdir -p $(PREFIX)/$(MANDIR)
[ -d $(PREFIX)/$(MANDIR)/man8 ] || mkdir -p $(PREFIX)/$(MANDIR)/man8
+ [ -d $(PREFIX)/$(MANDIR)/man5 ] || mkdir -p $(PREFIX)/$(MANDIR)/man5
if [ "$(OS_NAME)" = HP-UX ]; then \
$(INSTALL) $(PROG) $(PREFIX)/$(BINDIR) 0755 bin bin; \
@@ -106,6 +108,7 @@ install:
else \
$(INSTALL) -m 755 $(PROG) $(PREFIX)/$(BINDIR); \
$(INSTALL) -m 644 $(MAN) $(PREFIX)/$(MANDIR)/man`echo $(MAN) | sed "s/.*\.//"`/$(MAN); \
+ $(INSTALL) -m 644 $(MAN5) $(PREFIX)/$(MANDIR)/man`echo $(MAN5) | sed "s/.*\.//"`/$(MAN5); \
fi
co:

View File

@ -1,74 +0,0 @@
diff -up logrotate-3.7.8/config.c.missingok logrotate-3.7.8/config.c
--- logrotate-3.7.8/config.c.missingok 2010-04-06 11:35:11.000000000 +0200
+++ logrotate-3.7.8/config.c 2010-04-06 11:43:37.000000000 +0200
@@ -41,6 +41,7 @@ static int defTabooCount = sizeof(defTab
/* I shouldn't use globals here :-( */
static char **tabooExts = NULL;
int tabooCount = 0;
+static int glob_errno = 0;
static int readConfigFile(const char *configFile, struct logInfo *defConfig);
static int globerr(const char *pathname, int theerr);
@@ -461,8 +462,7 @@ int readAllConfigPaths(const char **path
static int globerr(const char *pathname, int theerr)
{
- message(MESS_ERROR, "error accessing %s: %s\n", pathname,
- strerror(theerr));
+ glob_errno = theerr;
/* We want the glob operation to abort on error, so return 1 */
return 1;
@@ -501,6 +501,7 @@ static int readConfigFile(const char *co
int logerror = 0;
struct logInfo *log;
static unsigned recursion_depth = 0U;
+ char *globerr_msg = NULL;
/* FIXME: createOwner and createGroup probably shouldn't be fixed
length arrays -- of course, if we aren't run setuid it doesn't
@@ -1346,16 +1347,25 @@ static int readConfigFile(const char *co
newlog->files = NULL;
newlog->numFiles = 0;
for (argNum = 0; argNum < argc && logerror != 1; argNum++) {
+ if (globerr_msg) {
+ free(globerr_msg);
+ globerr_msg = NULL;
+ }
+
rc = glob(argv[argNum], GLOB_NOCHECK, globerr,
&globResult);
if (rc == GLOB_ABORTED) {
if (newlog->flags & LOG_FLAG_MISSINGOK)
continue;
- message(MESS_ERROR, "%s:%d glob failed for %s\n",
- configFile, lineNum, argv[argNum]);
- logerror = 1;
- break;
+ /* We don't yet know whether this stanza has "missingok"
+ * set, so store the error message for later. */
+ rc = asprintf(&globerr_msg, "%s:%d glob failed for %s: %s\n",
+ configFile, lineNum, argv[argNum], strerror(glob_errno));
+ if (rc == -1)
+ globerr_msg = NULL;
+
+ globResult.gl_pathc = 0;
}
newlog->files =
@@ -1407,6 +1417,14 @@ duperror:
lineNum);
return 1;
}
+ if (globerr_msg) {
+ if (!(newlog->flags & LOG_FLAG_MISSINGOK))
+ message(MESS_ERROR, globerr_msg);
+ free(globerr_msg);
+ globerr_msg = NULL;
+ if (!(newlog->flags & LOG_FLAG_MISSINGOK))
+ return 1;
+ }
if (newlog->oldDir) {
for (i = 0; i < newlog->numFiles; i++) {

View File

@ -1,12 +0,0 @@
diff -up logrotate-3.7.8/examples/logrotate-default.perm logrotate-3.7.8/examples/logrotate-default
--- logrotate-3.7.8/examples/logrotate-default.perm 2010-01-11 13:48:15.000000000 +0100
+++ logrotate-3.7.8/examples/logrotate-default 2010-01-11 13:48:46.000000000 +0100
@@ -6,7 +6,7 @@ weekly
rotate 4
# create new (empty) log files after rotating old ones
-create
+create 0640 root adm
# use date as a suffix of the rotated file
dateext

View File

@ -1,11 +0,0 @@
--- logrotate-3.7.8/logrotate.c.readonly 2009-12-09 09:09:10.000000000 -0800
+++ logrotate-3.7.8/logrotate.c 2009-12-09 09:21:37.000000000 -0800
@@ -432,7 +432,7 @@ static int copyTruncate(char *currLog, c
message(MESS_DEBUG, "copying %s to %s\n", currLog, saveLog);
if (!debug) {
- if ((fdcurr = open(currLog, O_RDWR)) < 0) {
+ if ((fdcurr = open(currLog, (flags & LOG_FLAG_COPY) ? O_RDONLY : O_RDWR)) < 0) {
message(MESS_ERROR, "error opening %s: %s\n", currLog,
strerror(errno));
return 1;

View File

@ -1,22 +0,0 @@
Index: logrotate.c
===================================================================
--- logrotate.c (revision 277)
+++ logrotate.c (working copy)
@@ -1293,7 +1293,7 @@
"since no logs will be rotated\n");
} else {
message(MESS_DEBUG, "running prerotate script\n");
- if (runScript(log->pattern, log->pre)) {
+ if (runScript(log->flags & LOG_FLAG_SHAREDSCRIPTS ? log->pattern : log->files[j], log->pre)) {
if (log->flags & LOG_FLAG_SHAREDSCRIPTS)
message(MESS_ERROR,
"error running shared prerotate script "
@@ -1328,7 +1328,7 @@
"since no logs were rotated\n");
} else {
message(MESS_DEBUG, "running postrotate script\n");
- if (runScript(log->pattern, log->post)) {
+ if (runScript(log->flags & LOG_FLAG_SHAREDSCRIPTS ? log->pattern : log->files[j], log->post)) {
if (log->flags & LOG_FLAG_SHAREDSCRIPTS)
message(MESS_ERROR,
"error running shared postrotate script "

View File

@ -1,102 +0,0 @@
Index: logrotate.8
===================================================================
--- logrotate.8 (revision 277)
+++ logrotate.8 (working copy)
@@ -217,6 +217,11 @@
The default value is -%Y%m%d. Note that also the character separating log
name from the extension is part of the dateformat string. The system clock
must be set past Sep 9th 2001 for %s to work correctly.
+Note that the datestamps generated by this format must be lexically sortable
+(i.e., first the year, then the month then the day. e.g., 2001/12/01 is ok,
+but 01/12/2001 is not, since 01/11/2002 would sort lower while it is later).
+This is because when using the \fBrotate\fR option, logrotate sorts all
+rotated filenames to find out which logfiles are older and should be removed.
.TP
\fBdelaycompress\fR
@@ -336,7 +341,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). If the scripts exit with error, the remaining actions will
+option). The absolute path to the log file is passed as first argument
+to the script. If the scripts exit with error, the remaining actions will
not be executed for the affected log only.
.TP
@@ -359,36 +365,44 @@
.TP
\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 a log file definition.
+must appear on lines by themselves) are executed (using \fB/bin/sh\fR)
+after the log file is rotated. These directives may only appear inside
+a log file definition. Normally, the absolute path to the log file is
+passed as first argument to the script. If \fBsharedscripts\fR is specified,
+whole pattern is passed to the script.
See also \fBprerotate\fR. See \fBsharedscripts\fR and \fBnosharedscripts\fR
for error handling.
.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 a log file definition. See also \fBpostrotate\fR.
+must appear on lines by themselves) are executed (using \fB/bin/sh\fR) before
+the log file is rotated and only if the log will actually be rotated. These
+directives may only appear inside a log file definition. Normally,
+the absolute path to the log file is passed as first argument to the script.
+If \fBsharedscripts\fR is specified, whole pattern is passed to the script.
+See also \fBpostrotate\fR.
See \fBsharedscripts\fR and \fBnosharedscripts\fR for error handling.
.TP
\fBfirstaction\fR/\fBendscript\fR
The lines between \fBfirstaction\fR and \fBendscript\fR (both of which
-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 a log file definition. If the script exits
-with error, no further processing is done. See also \fBlastaction\fR.
+must appear on lines by themselves) are executed (using \fB/bin/sh\fR) 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 a log file definition. Whole pattern is
+passed to the script as first argument. If the script exits with error,
+no further processing is done. See also \fBlastaction\fR.
.TP
\fBlastaction\fR/\fBendscript\fR
The lines between \fBlastaction\fR and \fBendscript\fR (both of which
-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. If the script exits with
-error, just an error message is shown (as this is the last
+must appear on lines by themselves) are executed (using \fB/bin/sh\fR) 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. Whole pattern is
+passed to the script as first argument. If the script exits
+with error, just an error message is shown (as this is the last
action). See also \fBfirstaction\fR.
.TP
@@ -408,10 +422,12 @@
.TP
\fBsharedscripts\fR
Normally, \fBprerotate\fR and \fBpostrotate\fR scripts are run for each
-log which is rotated, meaning that a single script may be run multiple
+log which is rotated and the absolute path to the log file is passed as first
+argument to the script. That means a single script may be run multiple
times for log file entries which match multiple files (such as the
-\fI/var/log/news/*\fR example). If \fBsharedscript\fR is specified, the scripts
-are only run once, no matter how many logs match the wildcarded pattern.
+\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,
+and whole pattern is passed to them.
However, if none of the logs in the pattern require rotating, the scripts
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

View File

@ -1,21 +1,11 @@
Summary: Rotates, compresses, removes and mails system log files
Name: logrotate
Version: 3.7.8
Release: 12%{?dist}
Version: 3.7.9
Release: 1%{?dist}
License: GPL+
Group: System Environment/Base
Source: https://fedorahosted.org/releases/l/o/logrotate/logrotate-%{version}.tar.gz
Patch1: logrotate-3.7.7-curdir2.patch
Patch2: logrotate-3.7.7-toolarge.patch
Patch3: logrotate-3.7.8-devnull.patch
Patch4: logrotate-3.7.8-man5.patch
Patch5: logrotate-3.7.8-readonly.patch
#Patch6: logrotate-3.7.8-perm.patch
Patch7: logrotate-3.7.8-missingok.patch
Patch8: logrotate-3.7.8-configsize.patch
Patch9: logrotate-3.7.8-dont-remove-log.patch
Patch10: logrotate-3.7.8-scripts-args.patch
Patch11: logrotate-3.7.8-scripts-man.patch
#Patch1: logrotate-3.7.8-perm.patch
Requires: coreutils >= 5.92 libsepol libselinux popt
BuildRequires: libselinux-devel popt-devel
@ -34,17 +24,7 @@ log files on your system.
%prep
%setup -q
%patch1 -p1 -b .curdir
%patch2 -p1 -b .toolarge
%patch3 -p1 -b .devnull
%patch4 -p1 -b .man5
%patch5 -p1 -b .readonly
#%%patch6 -p1 -b .perm
%patch7 -p1 -b .missingok
%patch8 -p2 -b .configsize
%patch9 -b dont-remove-log.patch
%patch10 -b .scripts-args
%patch11 -b .scripts-man
#%%patch1 -p1 -b .perm
%build
make %{?_smp_mflags} RPM_OPT_FLAGS="$RPM_OPT_FLAGS" WITH_SELINUX=yes
@ -75,6 +55,10 @@ rm -rf $RPM_BUILD_ROOT
%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) %{_localstatedir}/lib/logrotate.status
%changelog
* Mon Jun 28 2010 Jan Kaluza <jkaluza@redhat.com> 3.7.9-1
- new upstream version 3.7.9
* Tue Jun 22 2010 Jan Kaluza <jkaluza@redhat.com> 3.7.8-12
- fix #602643 - update manpage to reflect scripts changes
- fix #606675 - pass currently rotated file as argument to

View File

@ -1 +1 @@
b3589bea6d8d5afc8a84134fddaae973 logrotate-3.7.8.tar.gz
eeba9dbca62a9210236f4b83195e4ea5 logrotate-3.7.9.tar.gz