fix #982409 - do not crash when no logs are rotated and "sharedscripts" and

"prerotate" is used
This commit is contained in:
Jan Kaluza 2013-07-10 09:02:12 +02:00
parent 7cea617805
commit 1f5e4c0cb5
2 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,102 @@
Index: test/test-config.51.in
===================================================================
--- test/test-config.51.in (revision 0)
+++ test/test-config.51.in (revision 432)
@@ -0,0 +1,8 @@
+/var/log/this_dir_does_not_exist/*log {
+ size 1
+ missingok
+ sharedscripts
+ prerotate
+ /usr/bin/some-program
+ endscript
+}
Index: test/test
===================================================================
--- test/test (revision 431)
+++ test/test (working copy)
@@ -4,7 +4,7 @@
SELINUX_TESTS=0
LOGROTATE=../logrotate
M="-m ./mailer"
-S=-"s state"
+S="-s state"
RLR="$LOGROTATE $M $S"
# -- ACL - BEGIN --------------------------------
@@ -1284,7 +1284,40 @@
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
Index: logrotate.c
===================================================================
--- logrotate.c (revision 431)
+++ logrotate.c (working copy)
@@ -1601,6 +1601,11 @@
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,7 +1662,6 @@
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) ) ) {
Index: CHANGES
===================================================================
--- CHANGES (revision 431)
+++ CHANGES (working copy)
@@ -1,3 +1,6 @@
+3.8.5 ->
+ - 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.

View File

@ -6,6 +6,8 @@ License: GPL+
Group: System Environment/Base
Url: https://fedorahosted.org/logrotate/
Source: https://fedorahosted.org/releases/l/o/logrotate/logrotate-%{version}.tar.gz
# Backported from upstream, revision 432
Patch0: logrotate-3.8.4-no_logs_crash.patch
Requires: coreutils >= 5.92 popt
BuildRequires: libselinux-devel popt-devel libacl-devel acl
@ -25,6 +27,8 @@ log files on your system.
%prep
%setup -q
%patch0 -p0 -b .nologscrash
%build
make %{?_smp_mflags} RPM_OPT_FLAGS="$RPM_OPT_FLAGS" WITH_SELINUX=yes WITH_ACL=yes
@ -57,6 +61,10 @@ rm -rf $RPM_BUILD_ROOT
%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) %{_localstatedir}/lib/logrotate.status
%changelog
* Wed Jul 10 2013 Jan Kaluza <jkaluza@redhat.com> - 3.8.5-2
- fix #982409 - do not crash when no logs are rotated and "sharedscripts" and
"prerotate" is used
* Mon Jun 10 2013 Jan Kaluza <jkaluza@redhat.com> - 3.8.5-1
- new upstream version 3.8.5