Bump version to 2.6.1-2
- Resolves: RHEL-76748: ns-slapd crashes with data directory ≥ 2 days old
This commit is contained in:
parent
1dae1a8585
commit
0c554777ab
146
0002-Issue-6489-After-log-rotation-refresh-the-FD-pointer.patch
Normal file
146
0002-Issue-6489-After-log-rotation-refresh-the-FD-pointer.patch
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
From 12f9bf81e834549db02b1243ecf769b511c9f69f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Reynolds <mreynolds@redhat.com>
|
||||||
|
Date: Fri, 31 Jan 2025 08:54:27 -0500
|
||||||
|
Subject: [PATCH] Issue 6489 - After log rotation refresh the FD pointer
|
||||||
|
|
||||||
|
Description:
|
||||||
|
|
||||||
|
When flushing a log buffer we get a FD for log prior to checking if the
|
||||||
|
log should be rotated. If the log is rotated that FD reference is now
|
||||||
|
invalid, and it needs to be refrehed before proceeding
|
||||||
|
|
||||||
|
Relates: https://github.com/389ds/389-ds-base/issues/6489
|
||||||
|
|
||||||
|
Reviewed by: tbordaz(Thanks!)
|
||||||
|
---
|
||||||
|
.../suites/logging/log_flush_rotation_test.py | 81 +++++++++++++++++++
|
||||||
|
ldap/servers/slapd/log.c | 18 +++++
|
||||||
|
2 files changed, 99 insertions(+)
|
||||||
|
create mode 100644 dirsrvtests/tests/suites/logging/log_flush_rotation_test.py
|
||||||
|
|
||||||
|
diff --git a/dirsrvtests/tests/suites/logging/log_flush_rotation_test.py b/dirsrvtests/tests/suites/logging/log_flush_rotation_test.py
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..b33a622e1
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/dirsrvtests/tests/suites/logging/log_flush_rotation_test.py
|
||||||
|
@@ -0,0 +1,81 @@
|
||||||
|
+# --- BEGIN COPYRIGHT BLOCK ---
|
||||||
|
+# Copyright (C) 2025 Red Hat, Inc.
|
||||||
|
+# All rights reserved.
|
||||||
|
+#
|
||||||
|
+# License: GPL (version 3 or any later version).
|
||||||
|
+# See LICENSE for details.
|
||||||
|
+# --- END COPYRIGHT BLOCK ---
|
||||||
|
+#
|
||||||
|
+import os
|
||||||
|
+import logging
|
||||||
|
+import time
|
||||||
|
+import pytest
|
||||||
|
+from lib389._constants import DEFAULT_SUFFIX, PW_DM
|
||||||
|
+from lib389.tasks import ImportTask
|
||||||
|
+from lib389.idm.user import UserAccounts
|
||||||
|
+from lib389.topologies import topology_st as topo
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+log = logging.getLogger(__name__)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+def test_log_flush_and_rotation_crash(topo):
|
||||||
|
+ """Make sure server does not crash whening flushing a buffer and rotating
|
||||||
|
+ the log at the same time
|
||||||
|
+
|
||||||
|
+ :id: d4b0af2f-48b2-45f5-ae8b-f06f692c3133
|
||||||
|
+ :setup: Standalone Instance
|
||||||
|
+ :steps:
|
||||||
|
+ 1. Enable all logs
|
||||||
|
+ 2. Enable log buffering for all logs
|
||||||
|
+ 3. Set rotation time unit to 1 minute
|
||||||
|
+ 4. Make sure server is still running after 1 minute
|
||||||
|
+ :expectedresults:
|
||||||
|
+ 1. Success
|
||||||
|
+ 2. Success
|
||||||
|
+ 3. Success
|
||||||
|
+ 4. Success
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ inst = topo.standalone
|
||||||
|
+
|
||||||
|
+ # Enable logging and buffering
|
||||||
|
+ inst.config.set("nsslapd-auditlog-logging-enabled", "on")
|
||||||
|
+ inst.config.set("nsslapd-accesslog-logbuffering", "on")
|
||||||
|
+ inst.config.set("nsslapd-auditlog-logbuffering", "on")
|
||||||
|
+ inst.config.set("nsslapd-errorlog-logbuffering", "on")
|
||||||
|
+ inst.config.set("nsslapd-securitylog-logbuffering", "on")
|
||||||
|
+
|
||||||
|
+ # Set rotation policy to trigger rotation asap
|
||||||
|
+ inst.config.set("nsslapd-accesslog-logrotationtimeunit", "minute")
|
||||||
|
+ inst.config.set("nsslapd-auditlog-logrotationtimeunit", "minute")
|
||||||
|
+ inst.config.set("nsslapd-errorlog-logrotationtimeunit", "minute")
|
||||||
|
+ inst.config.set("nsslapd-securitylog-logrotationtimeunit", "minute")
|
||||||
|
+
|
||||||
|
+ #
|
||||||
|
+ # Performs ops to populate all the logs
|
||||||
|
+ #
|
||||||
|
+ # Access & audit log
|
||||||
|
+ users = UserAccounts(topo.standalone, DEFAULT_SUFFIX)
|
||||||
|
+ user = users.create_test_user()
|
||||||
|
+ user.set("userPassword", PW_DM)
|
||||||
|
+ # Security log
|
||||||
|
+ user.bind(PW_DM)
|
||||||
|
+ # Error log
|
||||||
|
+ import_task = ImportTask(inst)
|
||||||
|
+ import_task.import_suffix_from_ldif(ldiffile="/not/here",
|
||||||
|
+ suffix=DEFAULT_SUFFIX)
|
||||||
|
+
|
||||||
|
+ # Wait a minute and make sure the server did not crash
|
||||||
|
+ log.info("Sleep until logs are flushed and rotated")
|
||||||
|
+ time.sleep(61)
|
||||||
|
+
|
||||||
|
+ assert inst.status()
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if __name__ == '__main__':
|
||||||
|
+ # Run isolated
|
||||||
|
+ # -s for DEBUG mode
|
||||||
|
+ CURRENT_FILE = os.path.realpath(__file__)
|
||||||
|
+ pytest.main(["-s", CURRENT_FILE])
|
||||||
|
+
|
||||||
|
diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c
|
||||||
|
index 8352f4abd..c1260a203 100644
|
||||||
|
--- a/ldap/servers/slapd/log.c
|
||||||
|
+++ b/ldap/servers/slapd/log.c
|
||||||
|
@@ -6746,6 +6746,23 @@ log_refresh_state(int32_t log_type)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+static LOGFD
|
||||||
|
+log_refresh_fd(int32_t log_type)
|
||||||
|
+{
|
||||||
|
+ switch (log_type) {
|
||||||
|
+ case SLAPD_ACCESS_LOG:
|
||||||
|
+ return loginfo.log_access_fdes;
|
||||||
|
+ case SLAPD_SECURITY_LOG:
|
||||||
|
+ return loginfo.log_security_fdes;
|
||||||
|
+ case SLAPD_AUDIT_LOG:
|
||||||
|
+ return loginfo.log_audit_fdes;
|
||||||
|
+ case SLAPD_AUDITFAIL_LOG:
|
||||||
|
+ return loginfo.log_auditfail_fdes;
|
||||||
|
+ case SLAPD_ERROR_LOG:
|
||||||
|
+ return loginfo.log_error_fdes;
|
||||||
|
+ }
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
|
||||||
|
/* this function assumes the lock is already acquired */
|
||||||
|
/* if sync_now is non-zero, data is flushed to physical storage */
|
||||||
|
@@ -6857,6 +6874,7 @@ log_flush_buffer(LogBufferInfo *lbi, int log_type, int sync_now, int locked)
|
||||||
|
rotationtime_secs);
|
||||||
|
}
|
||||||
|
log_state = log_refresh_state(log_type);
|
||||||
|
+ fd = log_refresh_fd(log_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log_state & LOGGING_NEED_TITLE) {
|
||||||
|
--
|
||||||
|
2.48.0
|
||||||
|
|
@ -47,7 +47,7 @@ ExcludeArch: i686
|
|||||||
Summary: 389 Directory Server (base)
|
Summary: 389 Directory Server (base)
|
||||||
Name: 389-ds-base
|
Name: 389-ds-base
|
||||||
Version: 2.6.1
|
Version: 2.6.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
License: GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (0BSD OR Apache-2.0 OR MIT) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR BSD-2-Clause OR MIT) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT OR Zlib) AND (Apache-2.0 OR MIT) AND (CC-BY-4.0 AND MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR CC0-1.0) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND PSF-2.0
|
License: GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (0BSD OR Apache-2.0 OR MIT) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR BSD-2-Clause OR MIT) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT OR Zlib) AND (Apache-2.0 OR MIT) AND (CC-BY-4.0 AND MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR CC0-1.0) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND PSF-2.0
|
||||||
URL: https://www.port389.org
|
URL: https://www.port389.org
|
||||||
Conflicts: selinux-policy-base < 3.9.8
|
Conflicts: selinux-policy-base < 3.9.8
|
||||||
@ -471,6 +471,7 @@ Source3: https://github.com/jemalloc/%{jemalloc_name}/releases/download
|
|||||||
Source4: 389-ds-base.sysusers
|
Source4: 389-ds-base.sysusers
|
||||||
|
|
||||||
Patch: 0001-Issue-6468-Fix-building-for-older-versions-of-Python.patch
|
Patch: 0001-Issue-6468-Fix-building-for-older-versions-of-Python.patch
|
||||||
|
Patch: 0002-Issue-6489-After-log-rotation-refresh-the-FD-pointer.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
389 Directory Server is an LDAPv3 compliant server. The base package includes
|
389 Directory Server is an LDAPv3 compliant server. The base package includes
|
||||||
@ -913,6 +914,9 @@ exit 0
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 01 2025 Viktor Ashirov <vashirov@redhat.com> - 2.6.1-2
|
||||||
|
- Resolves: RHEL-76748: ns-slapd crashes with data directory ≥ 2 days old
|
||||||
|
|
||||||
* Tue Jan 28 2025 Viktor Ashirov <vashirov@redhat.com> - 2.6.1-1
|
* Tue Jan 28 2025 Viktor Ashirov <vashirov@redhat.com> - 2.6.1-1
|
||||||
- Update to 2.6.1
|
- Update to 2.6.1
|
||||||
- Resolves: RHEL-5151 - [RFE] defer memberof nested updates
|
- Resolves: RHEL-5151 - [RFE] defer memberof nested updates
|
||||||
|
Loading…
Reference in New Issue
Block a user