diff --git a/0006-logrotate-3.18.0-Ensure-the-type-for-configuration-flags-is-wide-enou.patch b/0006-logrotate-3.18.0-Ensure-the-type-for-configuration-flags-is-wide-enou.patch
new file mode 100644
index 0000000..3ae1ca7
--- /dev/null
+++ b/0006-logrotate-3.18.0-Ensure-the-type-for-configuration-flags-is-wide-enou.patch
@@ -0,0 +1,104 @@
+From a272346b75de27b5c87ea60901ccd790c823ec52 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= <cgzones@googlemail.com>
+Date: Fri, 18 Dec 2020 15:09:35 +0100
+Subject: [PATCH 1/3] Ensure the type for configuration flags is wide enough
+
+On 32-bit platforms int might be only 16 bit wide.  With the next added
+flag this size will be exceeded.
+
+(cherry picked from commit dcb05f64bf1d397e3fff8b4b2a2418a177bb9377)
+---
+ configure.ac |  2 ++
+ logrotate.c  |  2 +-
+ logrotate.h  | 35 ++++++++++++++++++-----------------
+ 3 files changed, 21 insertions(+), 18 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 5229db0..9ffcb22 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -18,6 +18,8 @@ AC_STRUCT_ST_BLOCKS
+ 
+ AC_CANONICAL_HOST
+ 
++AC_TYPE_UINT32_T
++
+ dnl Use 64-bit file offsets on 32-bit systems (defines C macros if necessary)
+ AC_SYS_LARGEFILE
+ 
+diff --git a/logrotate.c b/logrotate.c
+index 43ff9ef..819aaed 100644
+--- a/logrotate.c
++++ b/logrotate.c
+@@ -1155,7 +1155,7 @@ static int sparse_copy(int src_fd, int dest_fd, const struct stat *sb,
+ }
+ 
+ static int copyTruncate(const char *currLog, const char *saveLog, const struct stat *sb,
+-                        int flags, int skip_copy)
++                        uint32_t flags, int skip_copy)
+ {
+     int rc = 1;
+     int fdcurr = -1, fdsave = -1;
+diff --git a/logrotate.h b/logrotate.h
+index 25b5851..0a086ae 100644
+--- a/logrotate.h
++++ b/logrotate.h
+@@ -1,6 +1,7 @@
+ #ifndef H_LOGROTATE
+ #define H_LOGROTATE
+ 
++#include <stdint.h>
+ #include <sys/types.h>
+ #include "queue.h"
+ #include <glob.h>
+@@ -10,22 +11,22 @@
+ #   include <libgen.h>
+ #endif
+ 
+-#define LOG_FLAG_COMPRESS       (1 << 0)
+-#define LOG_FLAG_CREATE         (1 << 1)
+-#define LOG_FLAG_IFEMPTY        (1 << 2)
+-#define LOG_FLAG_DELAYCOMPRESS  (1 << 3)
+-#define LOG_FLAG_COPYTRUNCATE   (1 << 4)
+-#define LOG_FLAG_MISSINGOK      (1 << 5)
+-#define LOG_FLAG_MAILFIRST      (1 << 6)
+-#define LOG_FLAG_SHAREDSCRIPTS  (1 << 7)
+-#define LOG_FLAG_COPY           (1 << 8)
+-#define LOG_FLAG_DATEEXT        (1 << 9)
+-#define LOG_FLAG_SHRED          (1 << 10)
+-#define LOG_FLAG_SU             (1 << 11)
+-#define LOG_FLAG_DATEYESTERDAY  (1 << 12)
+-#define LOG_FLAG_OLDDIRCREATE   (1 << 13)
+-#define LOG_FLAG_TMPFILENAME    (1 << 14)
+-#define LOG_FLAG_DATEHOURAGO    (1 << 15)
++#define LOG_FLAG_COMPRESS       (1U << 0)
++#define LOG_FLAG_CREATE         (1U << 1)
++#define LOG_FLAG_IFEMPTY        (1U << 2)
++#define LOG_FLAG_DELAYCOMPRESS  (1U << 3)
++#define LOG_FLAG_COPYTRUNCATE   (1U << 4)
++#define LOG_FLAG_MISSINGOK      (1U << 5)
++#define LOG_FLAG_MAILFIRST      (1U << 6)
++#define LOG_FLAG_SHAREDSCRIPTS  (1U << 7)
++#define LOG_FLAG_COPY           (1U << 8)
++#define LOG_FLAG_DATEEXT        (1U << 9)
++#define LOG_FLAG_SHRED          (1U << 10)
++#define LOG_FLAG_SU             (1U << 11)
++#define LOG_FLAG_DATEYESTERDAY  (1U << 12)
++#define LOG_FLAG_OLDDIRCREATE   (1U << 13)
++#define LOG_FLAG_TMPFILENAME    (1U << 14)
++#define LOG_FLAG_DATEHOURAGO    (1U << 15)
+ 
+ #define NO_MODE ((mode_t) -1)
+ #define NO_UID  ((uid_t) -1)
+@@ -70,7 +71,7 @@ struct logInfo {
+     char *uncompress_prog;
+     char *compress_ext;
+     char *dateformat;               /* specify format for strftime (for dateext) */
+-    int flags;
++    uint32_t flags;
+     int shred_cycles;               /* if !=0, pass -n shred_cycles to GNU shred */
+     mode_t createMode;              /* if any/all of these are -1, we use the */
+     uid_t createUid;                /* attributes from the log file just rotated */
+-- 
+2.47.1
+
diff --git a/0007-logrotate-3.18.0-config-introduce-ignoreduplicates-configuration-dire.patch b/0007-logrotate-3.18.0-config-introduce-ignoreduplicates-configuration-dire.patch
new file mode 100644
index 0000000..14b627b
--- /dev/null
+++ b/0007-logrotate-3.18.0-config-introduce-ignoreduplicates-configuration-dire.patch
@@ -0,0 +1,147 @@
+From b92841ef7539cf51a5fbc1e18ec03981331e242e Mon Sep 17 00:00:00 2001
+From: Falk Werner <falk.werner@gmx.net>
+Date: Thu, 17 Nov 2022 18:20:22 +0100
+Subject: [PATCH 2/3] config: introduce `ignoreduplicates` configuration
+ directive
+
+... to allow duplicate file matches
+
+Closes: https://github.com/logrotate/logrotate/pull/473
+(cherry picked from commit 986f32af66db7248326ac647cd0b24b79da34b4d)
+---
+ config.c       | 39 ++++++++++++++++++++++++++-------------
+ logrotate.8.in |  4 ++++
+ logrotate.h    | 33 +++++++++++++++++----------------
+ 3 files changed, 47 insertions(+), 29 deletions(-)
+
+diff --git a/config.c b/config.c
+index c0fd4ff..e76fad0 100644
+--- a/config.c
++++ b/config.c
+@@ -1380,6 +1380,8 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
+                         newlog->flags |= LOG_FLAG_MISSINGOK;
+                     } else if (!strcmp(key, "nomissingok")) {
+                         newlog->flags &= ~LOG_FLAG_MISSINGOK;
++                    } else if (!strcmp(key, "ignoreduplicates")) {
++                        newlog->flags |= LOG_FLAG_IGNOREDUPLICATES;
+                     } else if (!strcmp(key, "prerotate")) {
+                         freeLogItem (pre);
+                         scriptStart = start;
+@@ -1812,6 +1814,7 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
+ 
+                         for (glob_count = 0; glob_count < globResult.gl_pathc; glob_count++) {
+                             struct logInfo *log;
++                            int add_file = 1;
+ 
+                             /* if we glob directories we can get false matches */
+                             if (!lstat(globResult.gl_pathv[glob_count], &sb) &&
+@@ -1825,24 +1828,34 @@ static int readConfigFile(const char *configFile, struct logInfo *defConfig)
+                                 for (k = 0; k < log->numFiles; k++) {
+                                     if (!strcmp(log->files[k],
+                                                 globResult.gl_pathv[glob_count])) {
+-                                        message(MESS_ERROR,
+-                                                "%s:%d duplicate log entry for %s\n",
+-                                                configFile, lineNum,
+-                                                globResult.gl_pathv[glob_count]);
+-                                        logerror = 1;
+-                                        goto duperror;
++                                        if (log->flags & LOG_FLAG_IGNOREDUPLICATES) {
++                                            add_file = 0;
++                                            message(MESS_DEBUG,
++                                                    "%s:%d ignore duplicate log entry for %s\n",
++                                                    configFile, lineNum,
++                                                    globResult.gl_pathv[glob_count]);
++                                        } else {
++                                            message(MESS_ERROR,
++                                                    "%s:%d duplicate log entry for %s\n",
++                                                    configFile, lineNum,
++                                                    globResult.gl_pathv[glob_count]);
++                                            logerror = 1;
++                                            goto duperror;
++                                        }
+                                     }
+                                 }
+                             }
+ 
+-                            newlog->files[newlog->numFiles] =
+-                                strdup(globResult.gl_pathv[glob_count]);
+-                            if (newlog->files[newlog->numFiles] == NULL) {
+-                                message_OOM();
+-                                logerror = 1;
+-                                goto duperror;
++                            if (add_file) {
++                                newlog->files[newlog->numFiles] =
++                                    strdup(globResult.gl_pathv[glob_count]);
++                                if (newlog->files[newlog->numFiles] == NULL) {
++                                    message_OOM();
++                                    logerror = 1;
++                                    goto duperror;
++                                }
++                                newlog->numFiles++;
+                             }
+-                            newlog->numFiles++;
+                         }
+ duperror:
+                         globfree(&globResult);
+diff --git a/logrotate.8.in b/logrotate.8.in
+index f0aa23f..e0a3ed8 100644
+--- a/logrotate.8.in
++++ b/logrotate.8.in
+@@ -299,6 +299,10 @@ message.  See also \fBnomissingok\fR.
+ \fBnomissingok\fR
+ If a log file does not exist, issue an error.  This is the default.
+ 
++.TP
++\fBignoreduplicates\fR
++Ignore any following matches of a log file.
++
+ .TP
+ \fBifempty\fR
+ Rotate the log file even if it is empty, overriding the \fBnotifempty\fR
+diff --git a/logrotate.h b/logrotate.h
+index 0a086ae..26e516b 100644
+--- a/logrotate.h
++++ b/logrotate.h
+@@ -11,22 +11,23 @@
+ #   include <libgen.h>
+ #endif
+ 
+-#define LOG_FLAG_COMPRESS       (1U << 0)
+-#define LOG_FLAG_CREATE         (1U << 1)
+-#define LOG_FLAG_IFEMPTY        (1U << 2)
+-#define LOG_FLAG_DELAYCOMPRESS  (1U << 3)
+-#define LOG_FLAG_COPYTRUNCATE   (1U << 4)
+-#define LOG_FLAG_MISSINGOK      (1U << 5)
+-#define LOG_FLAG_MAILFIRST      (1U << 6)
+-#define LOG_FLAG_SHAREDSCRIPTS  (1U << 7)
+-#define LOG_FLAG_COPY           (1U << 8)
+-#define LOG_FLAG_DATEEXT        (1U << 9)
+-#define LOG_FLAG_SHRED          (1U << 10)
+-#define LOG_FLAG_SU             (1U << 11)
+-#define LOG_FLAG_DATEYESTERDAY  (1U << 12)
+-#define LOG_FLAG_OLDDIRCREATE   (1U << 13)
+-#define LOG_FLAG_TMPFILENAME    (1U << 14)
+-#define LOG_FLAG_DATEHOURAGO    (1U << 15)
++#define LOG_FLAG_COMPRESS         (1U << 0)
++#define LOG_FLAG_CREATE           (1U << 1)
++#define LOG_FLAG_IFEMPTY          (1U << 2)
++#define LOG_FLAG_DELAYCOMPRESS    (1U << 3)
++#define LOG_FLAG_COPYTRUNCATE     (1U << 4)
++#define LOG_FLAG_MISSINGOK        (1U << 5)
++#define LOG_FLAG_MAILFIRST        (1U << 6)
++#define LOG_FLAG_SHAREDSCRIPTS    (1U << 7)
++#define LOG_FLAG_COPY             (1U << 8)
++#define LOG_FLAG_DATEEXT          (1U << 9)
++#define LOG_FLAG_SHRED            (1U << 10)
++#define LOG_FLAG_SU               (1U << 11)
++#define LOG_FLAG_DATEYESTERDAY    (1U << 12)
++#define LOG_FLAG_OLDDIRCREATE     (1U << 13)
++#define LOG_FLAG_TMPFILENAME      (1U << 14)
++#define LOG_FLAG_DATEHOURAGO      (1U << 15)
++#define LOG_FLAG_IGNOREDUPLICATES (1U << 17)
+ 
+ #define NO_MODE ((mode_t) -1)
+ #define NO_UID  ((uid_t) -1)
+-- 
+2.47.1
+
diff --git a/0008-logrotate-3.18.0-test-0107-cover-the-ignoreduplicates-configuration-d.patch b/0008-logrotate-3.18.0-test-0107-cover-the-ignoreduplicates-configuration-d.patch
new file mode 100644
index 0000000..1d01eda
--- /dev/null
+++ b/0008-logrotate-3.18.0-test-0107-cover-the-ignoreduplicates-configuration-d.patch
@@ -0,0 +1,68 @@
+From be64b6f0e42610be2a2b252fe30bd1bf7bf5d021 Mon Sep 17 00:00:00 2001
+From: Falk Werner <falk.werner@gmx.net>
+Date: Fri, 25 Nov 2022 18:28:03 +0100
+Subject: [PATCH 3/3] test-0107: cover the `ignoreduplicates` configuration
+ directive
+
+Closes: https://github.com/logrotate/logrotate/pull/473
+(cherry picked from commit bce6eec2c92f647940978feb12dc134a2bc20116)
+---
+ test/Makefile.am        |  3 ++-
+ test/test-0107.sh       | 15 +++++++++++++++
+ test/test-config.107.in |  8 ++++++++
+ 3 files changed, 25 insertions(+), 1 deletion(-)
+ create mode 100755 test/test-0107.sh
+ create mode 100644 test/test-config.107.in
+
+diff --git a/test/Makefile.am b/test/Makefile.am
+index f1a0062..69a5e45 100644
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -93,7 +93,8 @@ TEST_CASES = \
+ 	test-0102.sh \
+ 	test-0103.sh \
+ 	test-0104.sh \
+-	test-0105.sh
++	test-0105.sh \
++	test-0107.sh
+ 
+ EXTRA_DIST = \
+ 	compress \
+diff --git a/test/test-0107.sh b/test/test-0107.sh
+new file mode 100755
+index 0000000..5a5c37f
+--- /dev/null
++++ b/test/test-0107.sh
+@@ -0,0 +1,15 @@
++#!/bin/sh
++
++. ./test-common.sh
++
++cleanup 107
++
++# ------------------------------- Test 107 ------------------------------------
++preptest test.log 107 1
++preptest zzzz.log 107 1
++$RLR test-config.107 --force || exit 23
++
++checkoutput <<EOF
++test.log.1 0 zero
++zzzz.log.1 0 zero
++EOF
+diff --git a/test/test-config.107.in b/test/test-config.107.in
+new file mode 100644
+index 0000000..b57ec7f
+--- /dev/null
++++ b/test/test-config.107.in
+@@ -0,0 +1,8 @@
++&DIR&/test.log {
++    rotate 1
++    ignoreduplicates
++}
++
++&DIR&/*.log {
++    rotate 1
++}
+-- 
+2.47.1
+
diff --git a/logrotate.spec b/logrotate.spec
index e288874..d09f857 100644
--- a/logrotate.spec
+++ b/logrotate.spec
@@ -1,7 +1,7 @@
 Summary: Rotates, compresses, removes and mails system log files
 Name: logrotate
 Version: 3.18.0
-Release: 8%{?dist}
+Release: 9%{?dist}
 License: GPLv2+
 URL: https://github.com/logrotate/logrotate
 Source0: https://github.com/logrotate/logrotate/releases/download/%{version}/logrotate-%{version}.tar.xz
@@ -22,6 +22,11 @@ Patch:   0004-logrotate-3.18.0-CVE-2022-1348.patch
 # enforce stricter parsing of config files (#2148925)
 Patch:   0005-logrotate-3.18.0-stricter-config-parser.patch
 
+# introduce `ignoreduplicates` configuration directive (RHEL-5711)
+Patch:   0006-logrotate-3.18.0-Ensure-the-type-for-configuration-flags-is-wide-enou.patch
+Patch:   0007-logrotate-3.18.0-config-introduce-ignoreduplicates-configuration-dire.patch
+Patch:   0008-logrotate-3.18.0-test-0107-cover-the-ignoreduplicates-configuration-d.patch
+
 BuildRequires: acl
 BuildRequires: automake
 BuildRequires: gcc
@@ -122,6 +127,9 @@ fi
 %config(noreplace) %{_sysconfdir}/rwtab.d/logrotate
 
 %changelog
+* Thu Jan 02 2025 Jan Macku <jamacku@redhat.com> - 3.18.0-9
+- config: introduce `ignoreduplicates` configuration directive (#RHEL-5711)
+
 * Tue Dec 20 2022 Kamil Dudka <kdudka@redhat.com> - 3.18.0-8
 - enforce stricter parsing of config files (#2148925)