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)
|
||||
Name: 389-ds-base
|
||||
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
|
||||
URL: https://www.port389.org
|
||||
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
|
||||
|
||||
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
|
||||
389 Directory Server is an LDAPv3 compliant server. The base package includes
|
||||
@ -913,6 +914,9 @@ exit 0
|
||||
%endif
|
||||
|
||||
%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
|
||||
- Update to 2.6.1
|
||||
- Resolves: RHEL-5151 - [RFE] defer memberof nested updates
|
||||
|
Loading…
Reference in New Issue
Block a user