Commit 01d65c7c authored by Tobias Frost's avatar Tobias Frost

Import Upstream version 3.8.6

parent 03c92dcf
3.8.5 -> 3.8.6
- Fixed memory corruption caused by rotation directory which does not
exist with "sharedscripts" together with "prerotate" script.
3.8.4 -> 3.8.5
- Improved rotation during daylight saving time and between timezone
changes.
......
......@@ -812,7 +812,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
if (key == NULL)
continue;
rc = sscanf(key, "%200s %200s%c", createOwner,
rc = sscanf(key, "%199s %199s%c", createOwner,
createGroup, &foo);
if (rc == 3) {
message(MESS_ERROR, "%s:%d extra arguments for "
......@@ -863,11 +863,11 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
if (key == NULL)
continue;
rc = sscanf(key, "%o %200s %200s%c", &createMode,
rc = sscanf(key, "%o %199s %199s%c", &createMode,
createOwner, createGroup, &foo);
/* We support 'create <owner> <group> notation now */
if (rc == 0) {
rc = sscanf(key, "%200s %200s%c",
rc = sscanf(key, "%199s %199s%c",
createOwner, createGroup, &foo);
/* Simulate that we have read createMode and se it
* to NO_MODE. */
......
......@@ -1601,6 +1601,11 @@ int rotateLogSet(struct logInfo *log, int force)
message(MESS_DEBUG, "old logs are removed\n");
}
if (log->numFiles == 0) {
message(MESS_DEBUG, "No logs found. Rotation not needed.\n");
return 0;
}
if (log->flags & LOG_FLAG_SU) {
if (switch_user(log->suUid, log->suGid) != 0) {
return 1;
......@@ -1657,10 +1662,12 @@ int rotateLogSet(struct logInfo *log, int force)
hasErrors |= logHasErrors[i];
}
/* (nemam chyby nebo shared) a (nemam chyby nebo nonshared) */
if (log->pre
&& (!logHasErrors[j] || log->flags & LOG_FLAG_SHAREDSCRIPTS) &&
((!hasErrors && state[j]->doRotate) || (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && state[j]->doRotate) ) ) {
&& (!(
((logHasErrors[j] || !state[j]->doRotate) && !(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");
......@@ -1694,8 +1701,11 @@ int rotateLogSet(struct logInfo *log, int force)
}
if (log->post
&& (!logHasErrors[j] || log->flags & LOG_FLAG_SHAREDSCRIPTS) &&
((!hasErrors && state[j]->doRotate) || (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && state[j]->doRotate) ) ) {
&& (!(
((logHasErrors[j] || !state[j]->doRotate) && !(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");
......
Summary: Rotates, compresses, removes and mails system log files
Name: logrotate
Version: 3.8.5
Version: 3.8.6
Release: 1
License: GPL+
Group: System Environment/Base
......@@ -52,6 +52,9 @@ rm -rf $RPM_BUILD_ROOT
%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) %{_localstatedir}/lib/logrotate.status
%changelog
* Wed Jul 31 2013 Jan Kaluza <jkaluza@redhat.com> 3.8.6-1
- new upstream version
* Mon Jun 10 2013 Jan Kaluza <jkaluza@redhat.com> 3.8.5-1
- new upstream version
......
......@@ -4,7 +4,7 @@ ACL_TESTS=1
SELINUX_TESTS=0
LOGROTATE=../logrotate
M="-m ./mailer"
S=-"s state"
S="-s state"
RLR="$LOGROTATE $M $S"
# -- ACL - BEGIN --------------------------------
......@@ -1284,7 +1284,54 @@ else
echo "Does not have GNU Date, skipping part of this test"
fi
cleanup 51
# ------------------------------- Test 51 ------------------------------------
# regression in 3.8.4, logrotate crashes with sharedscripts when 0 logs rotated
preptest test.log 51 1 0
# It's memory corruption and without something in state file, it won't crash
# reliably. It would be better to run valgrind here and check the errors, but
# I don't want the test-suite to depend on valgrind...
cat > state << EOF
logrotate state -- version 2
"/var/log/httpd/backend_error_log" 2013-6-16
"/var/log/tokyotyrant/*.log" 2011-5-30
"/var/log/mailman/digest" 2011-5-30
"/var/log/piranha/piranha-gui-access" 2011-5-30
"/var/log/boincerr.log" 2011-5-30
"/var/log/btmp" 2013-7-9
"/var/log/httpd/a_log" 2011-11-15
"/var/log/cups/*_log" 2012-7-19
"/var/log/rabbitmq/*.log" 2011-5-30
"/var/log/func/func.log" 2011-11-17
"/var/log/wtmp" 2013-7-9
"/var/log/glusterfs/*glusterd.vol.log" 2011-11-17
"/var/log/imapd.log" 2011-5-30
"/var/log/cobbler/cobbler.log" 2011-11-6
"/var/log/httpd/ssl_access_log" 2013-3-27
"/var/log/mrepo.log" 2011-5-30
EOF
$RLR test-config.51
if [ $? != 0 ]; then
echo "logrotate ended with non-zero exit code (probably crashed)"
exit 3
fi
cleanup 52
# ------------------------------- Test 52 ------------------------------------
# sharedscripts are not run if the first log file does not exist
preptest test.log 52 1 0
$RLR test-config.52
checkoutput <<EOF
test.log 0
test.log.1 0 zero
scriptout 0 foo
EOF
cleanup
/var/log/this_dir_does_not_exist/*log {
size 1
missingok
sharedscripts
prerotate
/usr/bin/some-program
endscript
}
create
/var/log/does_not_exist.log &DIR&/test.log {
rotate 14
size 2
missingok
sharedscripts
postrotate
touch scriptout
echo $(cat scriptout) foo > foo
mv foo scriptout
endscript
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment