From 32fd2ff5f5af9755c4c8aea5f8d8478097668120 Mon Sep 17 00:00:00 2001 From: han_hui_hui Date: Mon, 5 Jun 2023 13:07:45 +0000 Subject: [PATCH] do not rotate logs on prerotate failure --- ...rotate-old-logs-on-prerotate-failure.patch | 45 +++++++++++++++++++ logrotate.spec | 7 ++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 backport-do-not-rotate-old-logs-on-prerotate-failure.patch diff --git a/backport-do-not-rotate-old-logs-on-prerotate-failure.patch b/backport-do-not-rotate-old-logs-on-prerotate-failure.patch new file mode 100644 index 0000000..76c3284 --- /dev/null +++ b/backport-do-not-rotate-old-logs-on-prerotate-failure.patch @@ -0,0 +1,45 @@ +From 5f24239f282b8c6291cf35ea5f871ed0ca6b2672 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= +Date: Tue, 4 Apr 2023 17:49:06 +0200 +Subject: [PATCH] do not rotate old logs on prerotate failure + +Ensures old logs are preserved and not rotated out for logs with a +failing prerotate script. + +Alternative to #502 +--- + logrotate.c | 14 ++++++++++---- + 1 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/logrotate.c b/logrotate.c +index f44b3851..d3ccb447 100644 +--- a/logrotate.c ++++ b/logrotate.c +@@ -2476,10 +2476,6 @@ static int rotateLogSet(const struct logInfo *log, int force) + return 1; + } + memset(rotNames[i], 0, sizeof(struct logNames)); +- +- logHasErrors[i] |= +- prerotateSingleLog(log, i, state[i], rotNames[i]); +- hasErrors |= logHasErrors[i]; + } + + if (log->pre +@@ -2509,6 +2505,16 @@ static int rotateLogSet(const struct logInfo *log, int force) + } + } + ++ for (i = j; ++ ((log->flags & LOG_FLAG_SHAREDSCRIPTS) && i < log->numFiles) ++ || (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && i == j); i++) { ++ if (! ( (logHasErrors[i] && !(log->flags & LOG_FLAG_SHAREDSCRIPTS)) ++ || (hasErrors && (log->flags & LOG_FLAG_SHAREDSCRIPTS)) ) ) { ++ logHasErrors[i] |= prerotateSingleLog(log, i, state[i], rotNames[i]); ++ hasErrors |= logHasErrors[i]; ++ } ++ } ++ + for (i = j; + ((log->flags & LOG_FLAG_SHAREDSCRIPTS) && i < log->numFiles) + || (!(log->flags & LOG_FLAG_SHAREDSCRIPTS) && i == j); i++) { diff --git a/logrotate.spec b/logrotate.spec index 622b585..7a3a799 100644 --- a/logrotate.spec +++ b/logrotate.spec @@ -2,13 +2,15 @@ Name: logrotate Version: 3.20.1 -Release: 1 +Release: 2 Summary: simplify the administration of log files License: GPLv2+ Url: https://github.com/logrotate/logrotate Source0: https://github.com/logrotate/logrotate/releases/download/%{version}/logrotate-%{version}.tar.xz # lockState: do not print `error:` when exit code is unaffected Patch0: 0001-logrotate-3.20.1-lock-state-msg.patch +Patch6001: backport-do-not-rotate-old-logs-on-prerotate-failure.patch + BuildRequires: acl gcc automake libacl-devel libselinux-devel popt-devel Requires: coreutils @@ -75,6 +77,9 @@ fi %{_mandir}/man5/logrotate.conf.5* %changelog +* Mon Jun 5 2023 hanhuihui - 3.20.1-2 +- do not rotate old logs on prerotate failure + * Fri Jun 10 2022 duyiwei - 3.20.1-1 - upgrade version to 3.20.1 and fix CVE-2022-1348 -- Gitee