Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package logrotate for openSUSE:Factory 
checked in at 2022-05-26 18:44:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/logrotate (Old)
 and      /work/SRC/openSUSE:Factory/.logrotate.new.2254 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "logrotate"

Thu May 26 18:44:00 2022 rev:72 rq:979299 version:3.20.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/logrotate/logrotate.changes      2022-03-11 
21:40:03.098017666 +0100
+++ /work/SRC/openSUSE:Factory/.logrotate.new.2254/logrotate.changes    
2022-05-26 18:44:07.449182450 +0200
@@ -1,0 +2,26 @@
+Wed May 25 20:06:20 UTC 2022 - Michael Str??der <mich...@stroeder.com>
+
+- update to 3.20.1:
+  * drop world-readable permission on state file even when ACLs are enabled 
(#446)
+- removed obsolete logrotate-CVE-2022-1348-follow-up.patch
+
+-------------------------------------------------------------------
+Wed May 25 15:31:32 UTC 2022 - David Anes <david.a...@suse.com>
+
+- Security fix: (bsc#1199652, CVE-2022-1348)
+  * Add follow-up upstream patch for the introduced fix.
+  * Added patch logrotate-CVE-2022-1348-follow-up.patch
+
+- Update patch:
+  * logrotate-3.19.0-man_logrotate.patch -> 
logrotate-3.20.0-man_logrotate.patch
+
+-------------------------------------------------------------------
+Wed May 25 13:34:17 UTC 2022 - Michael Str??der <mich...@stroeder.com>
+
+- update to 3.20.0:
+  * fix potential DoS from unprivileged users via the state file 
(CVE-2022-1348)
+  * fix a misleading debug message with copytruncate and rotate 0 (#443)
+  * add support for unsigned time_t (#438)
+  * do not lock state file /dev/null (#433)
+
+-------------------------------------------------------------------

Old:
----
  logrotate-3.19.0-man_logrotate.patch
  logrotate-3.19.0.tar.xz
  logrotate-3.19.0.tar.xz.asc

New:
----
  logrotate-3.20.0-man_logrotate.patch
  logrotate-3.20.1.tar.xz
  logrotate-3.20.1.tar.xz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ logrotate.spec ++++++
--- /var/tmp/diff_new_pack.BaUBfJ/_old  2022-05-26 18:44:08.073183178 +0200
+++ /var/tmp/diff_new_pack.BaUBfJ/_new  2022-05-26 18:44:08.077183182 +0200
@@ -19,7 +19,7 @@
 %{!?_distconfdir: %global _distconfdir %{_prefix}%{_sysconfdir}}
 
 Name:           logrotate
-Version:        3.19.0
+Version:        3.20.1
 Release:        0
 Summary:        Cron service for rotating, compressing, mailing and removing 
system log files
 License:        GPL-2.0-or-later
@@ -32,8 +32,9 @@
 Source3:        logrotate.service
 Source10:       
https://github.com/%{name}/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz.asc
 Source100:      %{name}-rpmlintrc
-Patch0:         logrotate-3.19.0-man_logrotate.patch
+Patch0:         logrotate-3.20.0-man_logrotate.patch
 BuildRequires:  acl
+BuildRequires:  automake
 BuildRequires:  libacl-devel
 BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(libselinux)
@@ -52,9 +53,10 @@
 
 %prep
 %setup -q
-%patch0 -p1
+%autopatch -p1
 
 %build
+autoreconf -f -i
 %configure \
     --disable-silent-rules \
     --with-state-file-path=%{_localstatedir}/lib/misc/logrotate.status \

++++++ logrotate-3.19.0-man_logrotate.patch -> 
logrotate-3.20.0-man_logrotate.patch ++++++
--- /work/SRC/openSUSE:Factory/logrotate/logrotate-3.19.0-man_logrotate.patch   
2022-03-11 21:40:03.078017652 +0100
+++ 
/work/SRC/openSUSE:Factory/.logrotate.new.2254/logrotate-3.20.0-man_logrotate.patch
 2022-05-26 18:44:07.293182268 +0200
@@ -1,6 +1,6 @@
-diff -Naur logrotate-3.19.0.orig/logrotate.8.in logrotate-3.19.0/logrotate.8.in
---- logrotate-3.19.0.orig/logrotate.8.in       2022-02-24 11:18:24.202811846 
+0100
-+++ logrotate-3.19.0/logrotate.8.in    2022-02-24 11:28:25.137690351 +0100
+diff -ur logrotate-3.20.0.orig/logrotate.8.in logrotate-3.20.0/logrotate.8.in
+--- logrotate-3.20.0.orig/logrotate.8.in       2022-03-31 14:00:36.000000000 
+0200
++++ logrotate-3.20.0/logrotate.8.in    2022-05-25 15:40:21.015424608 +0200
 @@ -48,6 +48,17 @@
  is given on the command line, every file in that directory is used as
  a config file.
@@ -19,15 +19,6 @@
  If no command line arguments are given, \fBlogrotate\fR will print
  version and copyright information, along with a short usage summary.  If
  any errors occur while rotating logs, \fBlogrotate\fR will exit with
-@@ -76,7 +87,7 @@
- acquires a lock on the state file, if it cannot be acquired \fBlogrotate\fR
- will exit with value 3.  The default state file is \fI@STATE_FILE_PATH@\fR.
- If \fI/dev/null\fR is given as the state file, then \fBlogrotate\fR will
--not try to write the state file.
-+not try to lock or write the state file.
- 
- .TP
- \fB\-\-skip-state-lock\fR
 @@ -752,7 +763,8 @@
  tab(:);
  l l l.

++++++ logrotate-3.19.0.tar.xz -> logrotate-3.20.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/.tarball-version 
new/logrotate-3.20.1/.tarball-version
--- old/logrotate-3.19.0/.tarball-version       2022-01-07 10:04:13.000000000 
+0100
+++ new/logrotate-3.20.1/.tarball-version       2022-05-25 17:28:25.000000000 
+0200
@@ -1 +1 @@
-3.19.0
+3.20.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/.version 
new/logrotate-3.20.1/.version
--- old/logrotate-3.19.0/.version       2022-01-07 10:04:13.000000000 +0100
+++ new/logrotate-3.20.1/.version       2022-05-25 17:28:25.000000000 +0200
@@ -1 +1 @@
-3.19.0
+3.20.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/ChangeLog.md 
new/logrotate-3.20.1/ChangeLog.md
--- old/logrotate-3.19.0/ChangeLog.md   2022-01-07 09:59:12.000000000 +0100
+++ new/logrotate-3.20.1/ChangeLog.md   2022-05-25 17:22:59.000000000 +0200
@@ -4,7 +4,22 @@
 
 ## [UNRELEASED]
 
-[UNRELEASED]: https://github.com/logrotate/logrotate/compare/3.19.0...master
+[UNRELEASED]: https://github.com/logrotate/logrotate/compare/3.20.1...master
+
+## [3.20.1] - 2022-05-25
+  - drop world-readable permission on state file even when ACLs are enabled 
(#446)
+
+[3.20.1]: https://github.com/logrotate/logrotate/compare/3.20.0...3.20.1
+
+## [3.20.0] - 2022-05-25
+  - fix potential DoS from unprivileged users via the state file 
([CVE-2022-1348])
+  - fix a misleading debug message with `copytruncate` and `rotate 0` (#443)
+  - add support for unsigned `time_t` (#438)
+  - do not lock state file `/dev/null` (#433)
+
+[CVE-2022-1348]: https://bugzilla.redhat.com/CVE-2022-1348
+
+[3.20.0]: https://github.com/logrotate/logrotate/compare/3.19.0...3.20.0
 
 ## [3.19.0] - 2022-01-07
   - continue on `EINTR` in `compressLogFile()` (#430)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/Makefile.in 
new/logrotate-3.20.1/Makefile.in
--- old/logrotate-3.19.0/Makefile.in    2022-01-07 10:04:07.000000000 +0100
+++ new/logrotate-3.20.1/Makefile.in    2022-05-25 17:28:14.000000000 +0200
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.16.4 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2021 Free Software Foundation, Inc.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/README.md 
new/logrotate-3.20.1/README.md
--- old/logrotate-3.19.0/README.md      2022-01-07 09:32:42.000000000 +0100
+++ new/logrotate-3.20.1/README.md      2022-05-25 17:21:10.000000000 +0200
@@ -6,10 +6,12 @@
 
 The latest release is:
 
-* 
[logrotate-3.19.0](https://github.com/logrotate/logrotate/releases/download/3.19.0/logrotate-3.19.0.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.19.0/logrotate-3.19.0.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.19.0))
+* 
[logrotate-3.20.1](https://github.com/logrotate/logrotate/releases/download/3.20.1/logrotate-3.20.1.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.20.1/logrotate-3.20.1.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.20.1))
 
 Previous releases:
 
+* 
[logrotate-3.20.0](https://github.com/logrotate/logrotate/releases/download/3.20.0/logrotate-3.20.0.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.20.0/logrotate-3.20.0.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.20.0))
+* 
[logrotate-3.19.0](https://github.com/logrotate/logrotate/releases/download/3.19.0/logrotate-3.19.0.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.19.0/logrotate-3.19.0.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.19.0))
 * 
[logrotate-3.18.1](https://github.com/logrotate/logrotate/releases/download/3.18.1/logrotate-3.18.1.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.18.1/logrotate-3.18.1.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.18.1))
 * 
[logrotate-3.18.0](https://github.com/logrotate/logrotate/releases/download/3.18.0/logrotate-3.18.0.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.18.0/logrotate-3.18.0.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.18.0))
 * 
[logrotate-3.17.0](https://github.com/logrotate/logrotate/releases/download/3.17.0/logrotate-3.17.0.tar.xz)
 
([sig](https://github.com/logrotate/logrotate/releases/download/3.17.0/logrotate-3.17.0.tar.xz.asc))
 ([Changelog](https://github.com/logrotate/logrotate/releases/tag/3.17.0))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/aclocal.m4 
new/logrotate-3.20.1/aclocal.m4
--- old/logrotate-3.19.0/aclocal.m4     2022-01-07 10:04:06.000000000 +0100
+++ new/logrotate-3.20.1/aclocal.m4     2022-05-25 17:28:14.000000000 +0200
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.16.4 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
 
 # Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
@@ -35,7 +35,7 @@
 [am__api_version='1.16'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.16.4], [],
+m4_if([$1], [1.16.5], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -51,7 +51,7 @@
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.16.4])dnl
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -428,6 +428,10 @@
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
 [AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+  [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+  [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/config.c 
new/logrotate-3.20.1/config.c
--- old/logrotate-3.19.0/config.c       2022-01-06 17:11:00.000000000 +0100
+++ new/logrotate-3.20.1/config.c       2022-05-24 17:20:14.000000000 +0200
@@ -123,7 +123,7 @@
     STATE_ERROR = 64,
 };
 
-static const char *defTabooExts[] = {
+static const char *const defTabooExts[] = {
     ",v",
     ".bak",
     ".cfsaved",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/configure 
new/logrotate-3.20.1/configure
--- old/logrotate-3.19.0/configure      2022-01-07 10:04:06.000000000 +0100
+++ new/logrotate-3.20.1/configure      2022-05-25 17:28:14.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for logrotate 3.19.0.
+# Generated by GNU Autoconf 2.71 for logrotate 3.20.1.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -607,8 +607,8 @@
 # Identity of this package.
 PACKAGE_NAME='logrotate'
 PACKAGE_TARNAME='logrotate'
-PACKAGE_VERSION='3.19.0'
-PACKAGE_STRING='logrotate 3.19.0'
+PACKAGE_VERSION='3.20.1'
+PACKAGE_STRING='logrotate 3.20.1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL='https://github.com/logrotate/logrotate'
 
@@ -1320,7 +1320,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures logrotate 3.19.0 to adapt to many kinds of systems.
+\`configure' configures logrotate 3.20.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1391,7 +1391,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of logrotate 3.19.0:";;
+     short | recursive ) echo "Configuration of logrotate 3.20.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1504,7 +1504,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-logrotate configure 3.19.0
+logrotate configure 3.20.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1839,7 +1839,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by logrotate $as_me 3.19.0, which was
+It was created by logrotate $as_me 3.20.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3111,7 +3111,7 @@
 
 # Define the identity of the package.
  PACKAGE='logrotate'
- VERSION='3.19.0'
+ VERSION='3.20.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -6931,7 +6931,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by logrotate $as_me 3.19.0, which was
+This file was extended by logrotate $as_me 3.20.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -7000,7 +7000,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-logrotate config.status 3.19.0
+logrotate config.status 3.20.1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/logrotate.8 
new/logrotate-3.20.1/logrotate.8
--- old/logrotate-3.19.0/logrotate.8    2022-01-07 10:04:10.000000000 +0100
+++ new/logrotate-3.20.1/logrotate.8    2022-05-25 17:28:20.000000000 +0200
@@ -1,4 +1,4 @@
-.TH LOGROTATE 8 "3.19.0" "Linux" "System Administrator's Manual"
+.TH LOGROTATE 8 "3.20.1" "Linux" "System Administrator's Manual"
 .\" Per groff_man(7), the TQ macro should be copied from an-ext.tmac when
 .\" not running under groff.  That's not quite right; not all groff
 .\" installations include this macro.  So bring it in with another name
@@ -76,7 +76,7 @@
 acquires a lock on the state file, if it cannot be acquired \fBlogrotate\fR
 will exit with value 3.  The default state file is 
\fI/var/lib/logrotate.status\fR.
 If \fI/dev/null\fR is given as the state file, then \fBlogrotate\fR will
-not try to write the state file.
+not try to lock or write the state file.
 
 .TP
 \fB\-\-skip-state-lock\fR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/logrotate.8.in 
new/logrotate-3.20.1/logrotate.8.in
--- old/logrotate-3.19.0/logrotate.8.in 2021-10-06 16:06:15.000000000 +0200
+++ new/logrotate-3.20.1/logrotate.8.in 2022-03-31 14:00:36.000000000 +0200
@@ -76,7 +76,7 @@
 acquires a lock on the state file, if it cannot be acquired \fBlogrotate\fR
 will exit with value 3.  The default state file is \fI@STATE_FILE_PATH@\fR.
 If \fI/dev/null\fR is given as the state file, then \fBlogrotate\fR will
-not try to write the state file.
+not try to lock or write the state file.
 
 .TP
 \fB\-\-skip-state-lock\fR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/logrotate.c 
new/logrotate-3.20.1/logrotate.c
--- old/logrotate-3.19.0/logrotate.c    2022-01-06 17:31:39.000000000 +0100
+++ new/logrotate-3.20.1/logrotate.c    2022-05-25 17:19:45.000000000 +0200
@@ -1248,7 +1248,7 @@
     int rc = 1;
     int fdcurr = -1, fdsave = -1;
 
-    message(MESS_DEBUG, "copying %s to %s\n", currLog, saveLog);
+    message(MESS_DEBUG, "%scopying %s to %s\n", skip_copy ? "skip " : "", 
currLog, saveLog);
 
     if (!debug) {
         /* read access is sufficient for 'copy' but not for 'copytruncate' */
@@ -1338,10 +1338,10 @@
 }
 
 /* return by how many days the date was advanced but ignore exact time */
-static time_t daysElapsed(const struct tm *now, const struct tm *last)
+static long daysElapsed(const struct tm *now, const struct tm *last)
 {
-    const time_t diff = mktimeFromDateOnly(now) - mktimeFromDateOnly(last);
-    return diff / (24 * 3600);
+    const double diff = 
difftime(mktimeFromDateOnly(now),mktimeFromDateOnly(last));
+    return (long) (diff / (24 * 3600));
 }
 
 static int findNeedRotating(const struct logInfo *log, unsigned logNum, int 
force)
@@ -1443,7 +1443,7 @@
             message(MESS_DEBUG, "  log does not need rotating "
                     "(log size is below the 'size' threshold)\n");
         }
-    } else if (mktime(&state->lastRotated) - mktime(&now) > (25 * 3600)) {
+    } else if (difftime(mktime(&state->lastRotated), mktime(&now)) > (25 * 
3600)) {
         /* 25 hours allows for DST changes as well as geographical moves */
         message(MESS_ERROR,
                 "log %s last rotated in the future -- rotation forced\n",
@@ -1453,7 +1453,7 @@
             state->lastRotated.tm_mon != now.tm_mon ||
             state->lastRotated.tm_mday != now.tm_mday ||
             state->lastRotated.tm_hour != now.tm_hour) {
-        time_t days;
+        long days;
         switch (log->criterium) {
             case ROT_WEEKLY:
                 days = daysElapsed(&now, &state->lastRotated);
@@ -1532,7 +1532,7 @@
                     "('minsize' directive is used and the log "
                     "size is smaller than the minsize value)\n");
         }
-        if (log->rotateMinAge && log->rotateMinAge * DAY_SECONDS >= nowSecs - 
sb.st_mtime) {
+        if (log->rotateMinAge && log->rotateMinAge * DAY_SECONDS >= 
difftime(nowSecs, sb.st_mtime)) {
             state->doRotate = 0;
             message(MESS_DEBUG, "  log does not need rotating "
                     "('minage' directive is used and the log "
@@ -1925,7 +1925,7 @@
                     if (((globResult.gl_pathc >= (size_t)rotateCount) && 
(glob_count <= (globResult.gl_pathc - (size_t)rotateCount)))
                             || ((log->rotateAge > 0)
                                 &&
-                                (((nowSecs - fst_buf.st_mtime) / DAY_SECONDS)
+                                ((difftime(nowSecs, fst_buf.st_mtime) / 
DAY_SECONDS)
                                  > log->rotateAge))) {
                         if (mail_out != (size_t)-1) {
                             char *mailFilename =
@@ -2039,7 +2039,7 @@
                     continue;
                 }
 
-                if (((nowSecs - fst_buf.st_mtime) / DAY_SECONDS) > 
log->rotateAge) {
+                if ((difftime(nowSecs, fst_buf.st_mtime) / DAY_SECONDS) > 
log->rotateAge) {
                     if (!hasErrors && log->logAddress)
                         hasErrors = mailLogWrapper(oldName, mailCommand,
                                                    logNum, log);
@@ -2593,6 +2593,7 @@
     struct tm now;
     time_t now_time, last_time;
     char *prevCtx;
+    int force_mode = 0;
 
     if (!strcmp(stateFilename, "/dev/null"))
         /* explicitly asked not to write the state file */
@@ -2664,7 +2665,13 @@
 
     close(fdcurr);
 
-    fdsave = createOutputFile(tmpFilename, O_RDWR, &sb, prev_acl, 0);
+    if (sb.st_mode & (mode_t)S_IROTH) {
+        /* drop world-readable flag to prevent others from locking */
+        sb.st_mode &= ~(mode_t)S_IROTH;
+        force_mode = 1;
+    }
+
+    fdsave = createOutputFile(tmpFilename, O_RDWR, &sb, prev_acl, force_mode);
 #ifdef WITH_ACL
     if (prev_acl) {
         acl_free(prev_acl);
@@ -3000,15 +3007,22 @@
 
 static int lockState(const char *stateFilename, int skip_state_lock)
 {
-    int lockFd = open(stateFilename, O_RDWR | O_CLOEXEC);
+    int lockFd;
+    struct stat sb;
+
+    if (!strcmp(stateFilename, "/dev/null")) {
+        return 0;
+    }
+
+    lockFd = open(stateFilename, O_RDWR | O_CLOEXEC);
     if (lockFd == -1) {
         if (errno == ENOENT) {
             message(MESS_DEBUG, "Creating stub state file: %s\n",
                     stateFilename);
 
-            /* create a stub state file with mode 0644 */
+            /* create a stub state file with mode 0640 */
             lockFd = open(stateFilename, O_CREAT | O_EXCL | O_WRONLY,
-                          S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
+                          S_IWUSR | S_IRUSR | S_IRGRP);
             if (lockFd == -1) {
                 message(MESS_ERROR, "error creating stub state file %s: %s\n",
                         stateFilename, strerror(errno));
@@ -3026,6 +3040,22 @@
                 stateFilename);
         close(lockFd);
         return 0;
+    }
+
+    if (fstat(lockFd, &sb) == -1) {
+        message(MESS_ERROR, "error stat()ing state file %s: %s\n",
+                stateFilename, strerror(errno));
+        close(lockFd);
+        return 1;
+    }
+
+    if (sb.st_mode & S_IROTH) {
+        message(MESS_ERROR, "state file %s is world-readable and thus can"
+                " be locked from other unprivileged users."
+                " Skipping lock acquisition...\n",
+                stateFilename);
+        close(lockFd);
+        return 0;
     }
 
     if (flock(lockFd, LOCK_EX | LOCK_NB) == -1) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/logrotate.spec 
new/logrotate-3.20.1/logrotate.spec
--- old/logrotate-3.19.0/logrotate.spec 2022-01-07 10:04:10.000000000 +0100
+++ new/logrotate-3.20.1/logrotate.spec 2022-05-25 17:28:20.000000000 +0200
@@ -1,6 +1,6 @@
 Summary: Rotates, compresses, removes and mails system log files
 Name: logrotate
-Version: 3.19.0
+Version: 3.20.1
 Release: 1%{?dist}
 License: GPLv2+
 Group: System Environment/Base
@@ -41,7 +41,6 @@
 install -p -m 644 examples/btmp $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/btmp
 install -p -m 644 examples/wtmp $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/wtmp
 install -p -m 755 examples/logrotate.cron 
$RPM_BUILD_ROOT%{_sysconfdir}/cron.daily/logrotate
-touch $RPM_BUILD_ROOT%{_localstatedir}/lib/logrotate.status
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -55,4 +54,4 @@
 %attr(0755, root, root) %{_sysconfdir}/cron.daily/logrotate
 %attr(0644, root, root) %config(noreplace) %{_sysconfdir}/logrotate.conf
 %attr(0755, root, root) %{_sysconfdir}/logrotate.d
-%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) 
%{_localstatedir}/lib/logrotate.status
+%ghost %attr(0640, root, root) %verify(not size md5 mtime) 
%{_localstatedir}/lib/logrotate.status
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/logrotate.spec.in 
new/logrotate-3.20.1/logrotate.spec.in
--- old/logrotate-3.19.0/logrotate.spec.in      2019-10-14 14:10:31.000000000 
+0200
+++ new/logrotate-3.20.1/logrotate.spec.in      2022-05-25 09:06:46.000000000 
+0200
@@ -41,7 +41,6 @@
 install -p -m 644 examples/btmp $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/btmp
 install -p -m 644 examples/wtmp $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/wtmp
 install -p -m 755 examples/logrotate.cron 
$RPM_BUILD_ROOT%{_sysconfdir}/cron.daily/logrotate
-touch $RPM_BUILD_ROOT%{_localstatedir}/lib/logrotate.status
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -55,4 +54,4 @@
 %attr(0755, root, root) %{_sysconfdir}/cron.daily/logrotate
 %attr(0644, root, root) %config(noreplace) %{_sysconfdir}/logrotate.conf
 %attr(0755, root, root) %{_sysconfdir}/logrotate.d
-%attr(0644, root, root) %verify(not size md5 mtime) %config(noreplace) 
%{_localstatedir}/lib/logrotate.status
+%ghost %attr(0640, root, root) %verify(not size md5 mtime) 
%{_localstatedir}/lib/logrotate.status
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/Makefile.am 
new/logrotate-3.20.1/test/Makefile.am
--- old/logrotate-3.19.0/test/Makefile.am       2022-01-06 17:11:00.000000000 
+0100
+++ new/logrotate-3.20.1/test/Makefile.am       2022-05-25 09:06:46.000000000 
+0200
@@ -90,6 +90,7 @@
        test-0089.sh \
        test-0090.sh \
        test-0091.sh \
+       test-0092.sh \
        test-0100.sh \
        test-0101.sh \
        test-0102.sh \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/Makefile.in 
new/logrotate-3.20.1/test/Makefile.in
--- old/logrotate-3.19.0/test/Makefile.in       2022-01-07 10:04:07.000000000 
+0100
+++ new/logrotate-3.20.1/test/Makefile.in       2022-05-25 17:28:14.000000000 
+0200
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.16.4 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994-2021 Free Software Foundation, Inc.
@@ -519,6 +519,7 @@
        test-0089.sh \
        test-0090.sh \
        test-0091.sh \
+       test-0092.sh \
        test-0100.sh \
        test-0101.sh \
        test-0102.sh \
@@ -1362,6 +1363,13 @@
        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
        --log-file $$b.log --trs-file $$b.trs \
        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) 
-- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-0092.sh.log: test-0092.sh
+       @p='test-0092.sh'; \
+       b='test-0092.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) 
-- $(LOG_COMPILE) \
        "$$tst" $(AM_TESTS_FD_REDIRECT)
 test-0100.sh.log: test-0100.sh
        @p='test-0100.sh'; \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/test-0018.sh 
new/logrotate-3.20.1/test/test-0018.sh
--- old/logrotate-3.19.0/test/test-0018.sh      2021-06-11 15:12:52.000000000 
+0200
+++ new/logrotate-3.20.1/test/test-0018.sh      2022-05-09 10:44:06.000000000 
+0200
@@ -14,7 +14,7 @@
 EOF
 
 (echo "gzip -f -9") | diff -u - compress-args
-egrep -q '^LOGROTATE_COMPRESSED_FILENAME=.+/test.log.1$' compress-env
+grep -Eq '^LOGROTATE_COMPRESSED_FILENAME=.+/test.log.1$' compress-env
 if [ $? != 0 ]; then
       echo "LOGROTATE_COMPRESSED_FILENAME environment variable not found."
       cat compress-env
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/test-0048.sh 
new/logrotate-3.20.1/test/test-0048.sh
--- old/logrotate-3.19.0/test/test-0048.sh      2021-06-11 15:12:52.000000000 
+0200
+++ new/logrotate-3.20.1/test/test-0048.sh      2022-05-25 17:19:45.000000000 
+0200
@@ -18,6 +18,7 @@
 logrotate state -- version 2
 EOF
 
+chmod 0640 state
 setfacl -m u:nobody:rwx state
 
 $RLR test-config.48 || exit 23
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/test-0087.sh 
new/logrotate-3.20.1/test/test-0087.sh
--- old/logrotate-3.19.0/test/test-0087.sh      2021-01-05 14:01:16.000000000 
+0100
+++ new/logrotate-3.20.1/test/test-0087.sh      2022-05-25 09:06:46.000000000 
+0200
@@ -8,6 +8,7 @@
 preptest test.log 87 1
 
 touch state
+chmod 0640 state
 
 $RLR test-config.87 -f &
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/test-0092.sh 
new/logrotate-3.20.1/test/test-0092.sh
--- old/logrotate-3.19.0/test/test-0092.sh      1970-01-01 01:00:00.000000000 
+0100
+++ new/logrotate-3.20.1/test/test-0092.sh      2022-05-25 09:32:42.000000000 
+0200
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+. ./test-common.sh
+
+# check state file locking
+cleanup 92
+
+preptest test.log 92 1
+
+touch state
+chmod 0644 state
+flock state -c "sleep 10" &
+
+$RLR -f test-config.92 || exit 23
+
+checkoutput <<EOF
+test.log 0
+test.log.1 0 zero
+EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/logrotate-3.19.0/test/test-config.92.in 
new/logrotate-3.20.1/test/test-config.92.in
--- old/logrotate-3.19.0/test/test-config.92.in 1970-01-01 01:00:00.000000000 
+0100
+++ new/logrotate-3.20.1/test/test-config.92.in 2022-05-25 09:06:46.000000000 
+0200
@@ -0,0 +1,4 @@
+&DIR&/test.log {
+    rotate 1
+    create
+}

Reply via email to