Compare commits
No commits in common. "c8-stream-1.4" and "a9" have entirely different histories.
c8-stream-
...
a9
|
@ -1,3 +1,2 @@
|
|||
99591fa118addaa5e8eef3445092d0b2d12758ba SOURCES/389-ds-base-1.4.3.37.tar.bz2
|
||||
deb3cdc888660e573fe4be992398f35393c2d1d3 SOURCES/vendor-1.4.3.37-1.tar.gz
|
||||
09d78ce7b3e2f3d5d28c889cabd56720a573ade3 SOURCES/389-ds-base-2.3.6.tar.bz2
|
||||
1c8f2d0dfbf39fa8cd86363bf3314351ab21f8d4 SOURCES/jemalloc-5.3.0.tar.bz2
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
SOURCES/389-ds-base-1.4.3.37.tar.bz2
|
||||
SOURCES/vendor-1.4.3.37-1.tar.gz
|
||||
SOURCES/389-ds-base-2.3.6.tar.bz2
|
||||
SOURCES/jemalloc-5.3.0.tar.bz2
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
From d9784b09531b19f6541602a31cfd49c9878ef2ca Mon Sep 17 00:00:00 2001
|
||||
From: Simon Pichugin <spichugi@redhat.com>
|
||||
Date: Thu, 31 Aug 2023 11:19:05 -0700
|
||||
Subject: [PATCH] Issue 5848 - Fix condition and add a CI test (#5916)
|
||||
|
||||
Description: Add a "positive" test for the issue and fix the condition
|
||||
to make sure that 65535 and no --replica-id are correctly accepted.
|
||||
|
||||
Related: https://github.com/389ds/389-ds-base/issues/5848
|
||||
|
||||
Reviewed by: @mreynolds389 @tbordaz (Thanks!)
|
||||
---
|
||||
dirsrvtests/tests/suites/clu/dsconf_test.py | 34 ++++++++++++++++++++-
|
||||
src/lib389/lib389/cli_conf/replication.py | 23 ++++++++------
|
||||
2 files changed, 47 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dirsrvtests/tests/suites/clu/dsconf_test.py b/dirsrvtests/tests/suites/clu/dsconf_test.py
|
||||
index eb3c426c7..4f7da0b58 100644
|
||||
--- a/dirsrvtests/tests/suites/clu/dsconf_test.py
|
||||
+++ b/dirsrvtests/tests/suites/clu/dsconf_test.py
|
||||
@@ -99,7 +99,7 @@ def test_dsconf_with_ldaps(topology_st, enable_config, config_type):
|
||||
|
||||
|
||||
@pytest.mark.parametrize('instance_role', ('consumer', 'hub'))
|
||||
-def test_check_replica_id_rejected (instance_role):
|
||||
+def test_check_replica_id_rejected_hub_consumer(instance_role):
|
||||
"""Test dsconf CLI does not accept replica-id parameter for comsumer and hubs
|
||||
|
||||
:id: 274b47f8-111a-11ee-8321-98fa9ba19b65
|
||||
@@ -129,3 +129,35 @@ def test_check_replica_id_rejected (instance_role):
|
||||
log.info(f'output message : {msg}')
|
||||
assert "Replication successfully enabled for" not in msg, f"Test Failed: --replica-id option is accepted....It shouldn't for {instance_role}"
|
||||
log.info(f"Test PASSED: --replica-id option is NOT accepted for {instance_role}.")
|
||||
+
|
||||
+
|
||||
+@pytest.mark.parametrize('instance_role, replica_id',
|
||||
+ [('consumer', None), ('hub', None), ('consumer', "65535"), ('hub', "65535")])
|
||||
+def test_check_replica_id_accepted_hub_consumer(topology_st, instance_role, replica_id):
|
||||
+ """Test dsconf CLI accepts 65535 replica-id parameter for comsumer and hubs
|
||||
+
|
||||
+ :id: e0a1a1e6-11c1-40e6-92fe-cb550fb2170d
|
||||
+ :parametrized: yes
|
||||
+ :customerscenario: True
|
||||
+ :setup: Create DS instance
|
||||
+ :steps:
|
||||
+ 1. Create ldap instance
|
||||
+ 2. Use dsconf cli to create replica and don't specify replica id for a consumer or hub
|
||||
+ 3. Use dsconf cli to create replica and specify replica id for a consumer or hub
|
||||
+ :expectedresults:
|
||||
+ 1. Success
|
||||
+ 2. Success
|
||||
+ 3. Success
|
||||
+ """
|
||||
+ print("DN_DM {}".format(DN_DM))
|
||||
+ cmdline = ['/usr/sbin/dsconf', 'standalone1', '-D', DN_DM, '-w', 'password', 'replication', 'enable', '--suffix', DEFAULT_SUFFIX, '--role', instance_role]
|
||||
+ if replica_id is not None:
|
||||
+ cmdline.append(f'--replica-id={replica_id}')
|
||||
+ log.info(f'Command used : {cmdline}')
|
||||
+ proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE)
|
||||
+
|
||||
+ msg = proc.communicate()
|
||||
+ msg = msg[0].decode('utf-8')
|
||||
+ log.info(f'output message : {msg}')
|
||||
+ assert "Replication successfully enabled for" in msg
|
||||
+ log.info(f"Test PASSED: --replica-id option is accepted for {instance_role}.")
|
||||
diff --git a/src/lib389/lib389/cli_conf/replication.py b/src/lib389/lib389/cli_conf/replication.py
|
||||
index a75774ca0..2e2803ced 100644
|
||||
--- a/src/lib389/lib389/cli_conf/replication.py
|
||||
+++ b/src/lib389/lib389/cli_conf/replication.py
|
||||
@@ -154,6 +154,17 @@ def enable_replication(inst, basedn, log, args):
|
||||
# error - unknown type
|
||||
raise ValueError(f"Unknown replication role ({role}), you must use \"supplier\", \"hub\", or \"consumer\"")
|
||||
|
||||
+ if args.replica_id is not None:
|
||||
+ # is it a number?
|
||||
+ try:
|
||||
+ rid_num = int(rid)
|
||||
+ except ValueError:
|
||||
+ raise ValueError("--replica-id expects a number between 1 and 65535")
|
||||
+
|
||||
+ # Is it in range?
|
||||
+ if rid_num < 1 or rid_num > 65535:
|
||||
+ raise ValueError("--replica-id expects a number between 1 and 65535")
|
||||
+
|
||||
# Start the propeties and update them as needed
|
||||
repl_properties = {
|
||||
'cn': 'replica',
|
||||
@@ -170,15 +181,9 @@ def enable_replication(inst, basedn, log, args):
|
||||
# Error, supplier needs a rid TODO
|
||||
raise ValueError('You must specify the replica ID (--replica-id) when enabling a \"supplier\" replica')
|
||||
|
||||
- # is it a number?
|
||||
- try:
|
||||
- rid_num = int(rid)
|
||||
- except ValueError:
|
||||
- raise ValueError("--replica-id expects a number between 1 and 65534")
|
||||
-
|
||||
# Is it in range?
|
||||
if rid_num < 1 or rid_num > 65534:
|
||||
- raise ValueError("--replica-id expects a number between 1 and 65534")
|
||||
+ raise ValueError("--replica-id expects a number between 1 and 65534 for supplier role")
|
||||
|
||||
# rid is good add it to the props
|
||||
repl_properties['nsDS5ReplicaId'] = args.replica_id
|
||||
@@ -186,9 +191,9 @@ def enable_replication(inst, basedn, log, args):
|
||||
# Validate consumer and hub settings
|
||||
elif role == "consumer" or role == "hub":
|
||||
# Check Replica ID
|
||||
- if args.replica_id is not None or args.replica_id != 65535:
|
||||
+ if args.replica_id is not None and rid_num != 65535:
|
||||
# Error, Replica ID cannot be specified for consumer and hub roles
|
||||
- raise ValueError('Replica ID cannot be specified for consumer and hub roles')
|
||||
+ raise ValueError('Replica ID other than 65535 cannot be specified for consumer and hub roles')
|
||||
|
||||
# Bind DN or Bind DN Group?
|
||||
if args.bind_group_dn:
|
||||
--
|
||||
2.41.0
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
From b2194c95f9d02965b2ad3d0dcf333e74881347d0 Mon Sep 17 00:00:00 2001
|
||||
From: James Chapman <jachapma@redhat.com>
|
||||
Date: Thu, 31 Aug 2023 14:05:31 +0000
|
||||
Subject: [PATCH] Issue 5909 - Multi listener hang with 20k connections (#5917)
|
||||
|
||||
Bug Description: A fix for connection sub-table to freelist mapping results
|
||||
in an uninitialised head of the sub-table linked list.
|
||||
|
||||
Fix Description: During connection table creation, initialise all elements but
|
||||
skip the list head during the mapping phase.
|
||||
|
||||
Fixes: https//github.com/389ds/389-ds-base/issues/5909
|
||||
|
||||
Reviewed by: @progier389 @tbordaz (Thank you)
|
||||
---
|
||||
ldap/servers/slapd/conntable.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/ldap/servers/slapd/conntable.c b/ldap/servers/slapd/conntable.c
|
||||
index b1c66cf421..11e997432b 100644
|
||||
--- a/ldap/servers/slapd/conntable.c
|
||||
+++ b/ldap/servers/slapd/conntable.c
|
||||
@@ -172,9 +172,9 @@ connection_table_new(int table_size)
|
||||
/* all connections start out invalid */
|
||||
ct->fd[ct_list][i].fd = SLAPD_INVALID_SOCKET;
|
||||
|
||||
- /* The connection table has a double linked list running through it.
|
||||
+ /* The connection sub-tables have a double linked list running through them.
|
||||
* This is used to find out which connections should be looked at
|
||||
- * in the poll loop. Slot 0 in the table is always the head of
|
||||
+ * in the poll loop. Slot 0 in each sub-table is always the head of
|
||||
* the linked list. Each slot has a c_next and c_prev which are
|
||||
* pointers back into the array of connection slots. */
|
||||
ct->c[ct_list][i].c_next = NULL;
|
||||
@@ -196,8 +196,10 @@ connection_table_new(int table_size)
|
||||
/* Ready to rock, mark as such. */
|
||||
ct->c[ct_list][i].c_state = CONN_STATE_INIT;
|
||||
|
||||
- /* Map multiple ct lists to a single freelist. */
|
||||
- ct->c_freelist[free_idx++] = &(ct->c[ct_list][i]);
|
||||
+ /* Map multiple ct lists to a single freelist, but skip slot 0 of each list. */
|
||||
+ if (i != 0) {
|
||||
+ ct->c_freelist[free_idx++] = &(ct->c[ct_list][i]);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,626 @@
|
|||
From 26716f0edefe4690d9fd9143d07156e01321020c Mon Sep 17 00:00:00 2001
|
||||
From: progier389 <progier@redhat.com>
|
||||
Date: Thu, 28 Sep 2023 12:15:25 +0200
|
||||
Subject: [PATCH] issue 5924 - ASAN server build crash when looping
|
||||
opening/closing connections (#5926)
|
||||
|
||||
* issue 5924 - ASAN server build crash when looping opening/closing connections
|
||||
Issue: Got a crash due to:
|
||||
1. Failure to get a connection slot because connection freelist is misshandled.
|
||||
2. A confusion between listening and acceptedfd descriptor leaded to
|
||||
close the listening descriptor while handing the error.
|
||||
|
||||
Solution:
|
||||
Rename clearly the file descriptor variables
|
||||
Close the accepted file descriptor in error handler
|
||||
Rewrite the freelist management so that first connection chosen is the last released one.
|
||||
(Code is simpler, this fix the end of list issue, and it avoid to spread the open connection over too much memory)
|
||||
|
||||
Issue: #5924
|
||||
|
||||
Reviewed by: @Firstyear, @vashirov, @droideck (Thanks !)
|
||||
|
||||
(cherry picked from commit 02d333251419ff3c4d0384595e9fe7ded5bcd8fc)
|
||||
---
|
||||
dirsrvtests/tests/suites/basic/basic_test.py | 287 +++++++++++++++++++
|
||||
ldap/servers/slapd/conntable.c | 100 +++----
|
||||
ldap/servers/slapd/daemon.c | 35 ++-
|
||||
ldap/servers/slapd/fe.h | 1 -
|
||||
4 files changed, 351 insertions(+), 72 deletions(-)
|
||||
|
||||
diff --git a/dirsrvtests/tests/suites/basic/basic_test.py b/dirsrvtests/tests/suites/basic/basic_test.py
|
||||
index fac0f7371e..f4525e1848 100644
|
||||
--- a/dirsrvtests/tests/suites/basic/basic_test.py
|
||||
+++ b/dirsrvtests/tests/suites/basic/basic_test.py
|
||||
@@ -28,7 +28,15 @@
|
||||
from lib389.backend import Backends
|
||||
from lib389.idm.domain import Domain
|
||||
from lib389.nss_ssl import NssSsl
|
||||
+from lib389._constants import *
|
||||
+from lib389 import DirSrv
|
||||
+from lib389.instance.setup import SetupDs
|
||||
+from lib389.instance.options import General2Base, Slapd2Base
|
||||
import os
|
||||
+import random
|
||||
+import ldap
|
||||
+import time
|
||||
+import subprocess
|
||||
|
||||
|
||||
pytestmark = pytest.mark.tier0
|
||||
@@ -36,6 +44,7 @@
|
||||
default_paths = Paths()
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
+DEBUGGING = os.getenv("DEBUGGING", default=False)
|
||||
|
||||
# Globals
|
||||
USER1_DN = 'uid=user1,' + DEFAULT_SUFFIX
|
||||
@@ -51,6 +60,190 @@
|
||||
'vendorName',
|
||||
'vendorVersion')
|
||||
|
||||
+# This MAX_FDS value left about 22 connections available with bdb
|
||||
+# (should have more connections with lmdb)
|
||||
+MAX_FDS = 150
|
||||
+
|
||||
+
|
||||
+
|
||||
+default_paths = Paths()
|
||||
+
|
||||
+
|
||||
+
|
||||
+log = logging.getLogger(__name__)
|
||||
+DEBUGGING = os.getenv("DEBUGGING", default=False)
|
||||
+
|
||||
+
|
||||
+class CustomSetup():
|
||||
+ DEFAULT_GENERAL = { 'config_version': 2,
|
||||
+ 'full_machine_name': 'localhost.localdomain',
|
||||
+ 'strict_host_checking': False,
|
||||
+ # Not setting 'systemd' because it is not used.
|
||||
+ # (that is the global default.inf setting that matters)
|
||||
+ }
|
||||
+ DEFAULT_SLAPD = { 'root_password': PW_DM,
|
||||
+ 'defaults': INSTALL_LATEST_CONFIG,
|
||||
+ }
|
||||
+ DEFAULT_BACKENDS = [ {
|
||||
+ 'cn': 'userroot',
|
||||
+ 'nsslapd-suffix': DEFAULT_SUFFIX,
|
||||
+ 'sample_entries': 'yes',
|
||||
+ BACKEND_SAMPLE_ENTRIES: INSTALL_LATEST_CONFIG,
|
||||
+ }, ]
|
||||
+
|
||||
+ WRAPPER_FORMAT = '''#!/bin/sh
|
||||
+{wrapper_options}
|
||||
+exec {nsslapd} -D {cfgdir} -i {pidfile}
|
||||
+'''
|
||||
+
|
||||
+
|
||||
+ class CustomDirSrv(DirSrv):
|
||||
+ def __init__(self, verbose=False, external_log=log):
|
||||
+ super().__init__(verbose=verbose, external_log=external_log)
|
||||
+ self.wrapper = None # placeholder for the wrapper file name
|
||||
+
|
||||
+ def _reset_systemd(self):
|
||||
+ self.systemd_override = False
|
||||
+
|
||||
+ def status(self):
|
||||
+ self._reset_systemd()
|
||||
+ return super().status()
|
||||
+
|
||||
+ def start(self, timeout=120, *args):
|
||||
+ if self.status():
|
||||
+ return
|
||||
+ tmp_env = os.environ
|
||||
+ # Unset PYTHONPATH to avoid mixing old CLI tools and new lib389
|
||||
+ if "PYTHONPATH" in tmp_env:
|
||||
+ del tmp_env["PYTHONPATH"]
|
||||
+ try:
|
||||
+ subprocess.check_call([
|
||||
+ '/usr/bin/sh',
|
||||
+ self.wrapper
|
||||
+ ], env=tmp_env, stderr=subprocess.STDOUT)
|
||||
+ except subprocess.CalledProcessError as e:
|
||||
+ log.fatal("%s failed! Error (%s) %s" % (self.wrapper, e.returncode, e.output))
|
||||
+ raise e from None
|
||||
+ for count in range(timeout):
|
||||
+ if self.status():
|
||||
+ return
|
||||
+ time.sleep(1)
|
||||
+ raise TimeoutException('Failed to start ns-slpad')
|
||||
+
|
||||
+ def stop(self, timeout=120):
|
||||
+ self._reset_systemd()
|
||||
+ super().stop(timeout=timeout)
|
||||
+
|
||||
+
|
||||
+ def _search_be(belist, beinfo):
|
||||
+ for be in belist:
|
||||
+ if be['cn'] == beinfo['cn']:
|
||||
+ return be
|
||||
+ return None
|
||||
+
|
||||
+ def __init__(self, serverid, general=None, slapd=None, backends=None, log=log):
|
||||
+ verbose = log.level > logging.DEBUG
|
||||
+ self.log = log
|
||||
+ self.serverid = serverid
|
||||
+ self.verbose = verbose
|
||||
+ self.wrapper = f'/tmp/ds_{serverid}_wrapper.sh'
|
||||
+ if serverid.startswith('slapd-'):
|
||||
+ self.instname = server.id
|
||||
+ else:
|
||||
+ self.instname = 'slapd-'+serverid
|
||||
+ self.ldapi = None
|
||||
+ self.pid_file = None
|
||||
+ self.inst = None
|
||||
+
|
||||
+ # Lets prepare the options
|
||||
+ general_options = General2Base(log)
|
||||
+ for d in (CustomSetup.DEFAULT_GENERAL, general):
|
||||
+ if d:
|
||||
+ for key,val in d.items():
|
||||
+ general_options.set(key,val)
|
||||
+ log.debug('[general]: %s' % general_options._options)
|
||||
+ self.general = general_options
|
||||
+
|
||||
+ slapd_options = Slapd2Base(self.log)
|
||||
+ slapd_options.set('instance_name', serverid)
|
||||
+ for d in (CustomSetup.DEFAULT_SLAPD, slapd):
|
||||
+ if d:
|
||||
+ for key,val in d.items():
|
||||
+ slapd_options.set(key,val)
|
||||
+ log.debug('[slapd]: %s' % slapd_options._options)
|
||||
+ self.slapd = slapd_options
|
||||
+
|
||||
+ backend_options = []
|
||||
+ for backend_list in (CustomSetup.DEFAULT_BACKENDS, backends):
|
||||
+ if not backend_list:
|
||||
+ continue
|
||||
+ for backend in backend_list:
|
||||
+ target_be = CustomSetup._search_be(backend_options, backend)
|
||||
+ if not target_be:
|
||||
+ target_be = {}
|
||||
+ backend_options.append(target_be)
|
||||
+ for key,val in backend.items():
|
||||
+ target_be[key] = val
|
||||
+ log.debug('[backends]: %s' % backend_options)
|
||||
+ self.backends = backend_options
|
||||
+
|
||||
+ def _to_dirsrv_args(self):
|
||||
+ args = {}
|
||||
+ slapd = self.slapd.collect()
|
||||
+ general = self.general.collect()
|
||||
+ args["SER_HOST"] = general['full_machine_name']
|
||||
+ args["SER_PORT"] = slapd['port']
|
||||
+ args["SER_SECURE_PORT"] = slapd['secure_port']
|
||||
+ args["SER_SERVERID_PROP"] = self.serverid
|
||||
+ return args
|
||||
+
|
||||
+ def create_instance(self):
|
||||
+ sds = SetupDs(verbose=self.verbose, dryrun=False, log=self.log)
|
||||
+ self.general.verify()
|
||||
+ general = self.general.collect()
|
||||
+ self.slapd.verify()
|
||||
+ slapd = self.slapd.collect()
|
||||
+ sds.create_from_args(general, slapd, self.backends, None)
|
||||
+ self.ldapi = get_ldapurl_from_serverid(self.serverid)[0]
|
||||
+ args = self._to_dirsrv_args()
|
||||
+ log.debug('DirSrv.allocate args = %s' % str(args))
|
||||
+ log.debug('ldapi = %s' % str(self.ldapi))
|
||||
+ root_dn = slapd['root_dn']
|
||||
+ root_password = slapd['root_password']
|
||||
+ inst = DirSrv(verbose=self.verbose, external_log=self.log)
|
||||
+ inst.local_simple_allocate(self.serverid, ldapuri=self.ldapi, binddn=root_dn, password=root_password)
|
||||
+ self.pid_file = inst.pid_file()
|
||||
+ # inst.setup_ldapi()
|
||||
+ log.debug('DirSrv = %s' % str(inst.__dict__))
|
||||
+ inst.open()
|
||||
+ inst.stop()
|
||||
+ inst = CustomSetup.CustomDirSrv(verbose=self.verbose, external_log=self.log)
|
||||
+ inst.local_simple_allocate(self.serverid, ldapuri=self.ldapi, binddn=root_dn, password=root_password)
|
||||
+ self.inst = inst
|
||||
+ return inst
|
||||
+
|
||||
+ def create_wrapper(self, maxfds=None):
|
||||
+ self.inst.wrapper = self.wrapper
|
||||
+ slapd = self.slapd.collect()
|
||||
+ sbin_dir = slapd['sbin_dir']
|
||||
+ config_dir = slapd['config_dir']
|
||||
+ fmtvalues = {
|
||||
+ 'nsslapd': f'{sbin_dir}/ns-slapd',
|
||||
+ 'cfgdir': config_dir.format(instance_name=self.instname),
|
||||
+ 'pidfile': self.pid_file,
|
||||
+ 'wrapper_options': ''
|
||||
+ }
|
||||
+ if maxfds:
|
||||
+ fmtvalues['wrapper_options']=f'ulimit -n {maxfds}\nulimit -H -n {maxfds}'
|
||||
+ with open(self.wrapper, 'w') as f:
|
||||
+ f.write(CustomSetup.WRAPPER_FORMAT.format(**fmtvalues))
|
||||
+
|
||||
+ def cleanup(self):
|
||||
+ self.inst.stop()
|
||||
+ self.inst.delete()
|
||||
+ if os.path.exists(self.wrapper):
|
||||
+ os.remove(self.wrapper)
|
||||
+
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def _reset_attr(request, topology_st):
|
||||
@@ -2222,6 +2415,100 @@ def test_dscreate_with_different_rdn(dscreate_test_rdn_value):
|
||||
assert True
|
||||
|
||||
|
||||
+@pytest.fixture(scope="module")
|
||||
+def dscreate_custom_instance(request):
|
||||
+ topo = CustomSetup('custom')
|
||||
+
|
||||
+ def fin():
|
||||
+ topo.cleanup()
|
||||
+
|
||||
+ request.addfinalizer(fin)
|
||||
+ topo.create_instance()
|
||||
+ # Return CustomSetup object associated with
|
||||
+ # a stopped instance named "custom"
|
||||
+ return topo
|
||||
+
|
||||
+ obj.create_wrapper(maxfds=150)
|
||||
+ log.info("Starting wrapper")
|
||||
+ inst.start()
|
||||
+ log.info("Server is started.")
|
||||
+ log.info("Open connection")
|
||||
+ inst.open()
|
||||
+
|
||||
+
|
||||
+@pytest.fixture(scope="module", params=set(range(1,5)))
|
||||
+def dscreate_with_numlistener(request, dscreate_custom_instance):
|
||||
+ numlisteners = request.param
|
||||
+ dscreate_custom_instance.create_wrapper(maxfds=MAX_FDS)
|
||||
+ inst = dscreate_custom_instance.inst
|
||||
+ inst.stop()
|
||||
+ dse_ldif = DSEldif(inst)
|
||||
+ dse_ldif.replace('cn=config', 'nsslapd-numlisteners', str(numlisteners))
|
||||
+ inst.start()
|
||||
+ inst.open()
|
||||
+ return inst
|
||||
+
|
||||
+
|
||||
+@pytest.mark.skipif(ds_is_older('2.2.0.0'),
|
||||
+ reason="This test is only required with multiple listener support.")
|
||||
+def test_conn_limits(dscreate_with_numlistener):
|
||||
+ """Check the connections limits for various number of listeners.
|
||||
+
|
||||
+ :id: 7be2eb5c-4d8f-11ee-ae3d-482ae39447e5
|
||||
+ :parametrized: yes
|
||||
+ :setup: Setup an instance then set nsslapd-numlisteners and maximum file descriptors
|
||||
+ :steps:
|
||||
+ 1. Loops on:
|
||||
+ Open new connection and perform search until timeout expires
|
||||
+ 2. Close one of the previously open connections
|
||||
+ 3. Loops MAX_FDS times on:
|
||||
+ - opening a new connection
|
||||
+ - perform a search
|
||||
+ - close the connection
|
||||
+ 4. Close all open connections
|
||||
+ 5. Remove the instance
|
||||
+ :expectedresults:
|
||||
+ 1. Should get a timeout (because the server has no more any connections)
|
||||
+ 2. Should success
|
||||
+ 3. Should success (otherwise issue #5924 has probably been hit)
|
||||
+ 4. Should success
|
||||
+ 5. Should success
|
||||
+ """
|
||||
+ inst = dscreate_with_numlistener
|
||||
+
|
||||
+ conns = []
|
||||
+ timeout_occured = False
|
||||
+ for i in range(MAX_FDS):
|
||||
+ try:
|
||||
+ ldc = ldap.initialize(f'ldap://localhost:{inst.port}')
|
||||
+ ldc.set_option(ldap.OPT_TIMEOUT, 5)
|
||||
+ ldc.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, "(uid=demo)")
|
||||
+ conns.append(ldc)
|
||||
+ except ldap.TIMEOUT:
|
||||
+ timeout_occured = True
|
||||
+ break
|
||||
+ # Should not be able to open MAX_FDS connections (some file descriptor are
|
||||
+ # reserved (for example for the listening socket )
|
||||
+ assert timeout_occured
|
||||
+
|
||||
+ conn = random.choice(conns)
|
||||
+ conn.unbind()
|
||||
+ conns.remove(conn)
|
||||
+
|
||||
+ # Should loop enough time so trigger issue #5924 if it is not fixed.
|
||||
+ for i in range(MAX_FDS):
|
||||
+ ldc = ldap.initialize(f'ldap://localhost:{inst.port}')
|
||||
+ # Set a timeout long enough so that the test fails if server is unresponsive
|
||||
+ ldc.set_option(ldap.OPT_TIMEOUT, 60)
|
||||
+ ldc.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, "(uid=demo)")
|
||||
+ ldc.unbind()
|
||||
+
|
||||
+ # Close all open connections
|
||||
+ for c in conns:
|
||||
+ c.unbind()
|
||||
+
|
||||
+ # Step 6 is done in teardown phase by dscreate_instance finalizer
|
||||
+
|
||||
if __name__ == '__main__':
|
||||
# Run isolated
|
||||
# -s for DEBUG mode
|
||||
diff --git a/ldap/servers/slapd/conntable.c b/ldap/servers/slapd/conntable.c
|
||||
index 11e997432b..1ca60e0e5f 100644
|
||||
--- a/ldap/servers/slapd/conntable.c
|
||||
+++ b/ldap/servers/slapd/conntable.c
|
||||
@@ -48,69 +48,59 @@
|
||||
* under the connection table lock. This should move the allocation algorithm from O(n) worst case
|
||||
* to O(1) worst case as we always recieve and empty slot *or* ct full. It also reduces lock/atomic
|
||||
* contention on the CPU to improve things.
|
||||
+ * Lastly a change was done: Instead of having a sliding windows that tend to get a never used
|
||||
+ * slot for each new connection, it nows reuse last freed one. That has several benefits:
|
||||
+ * - Fix a bug because the last free list slots may not be alloced.
|
||||
+ * - Avoid to grow the memory footprint when there is no much load
|
||||
+ * - Simplify the code (as only a single is needed. )
|
||||
*
|
||||
- * The freelist is a ringbuffer of pointers to the connection table. On a small scale it looks like:
|
||||
+ * The freelist is a stack of pointers to the connection table.
|
||||
+ * It is NULL terminated. On a small scale it looks like:
|
||||
*
|
||||
* |--------------------------------------------|
|
||||
- * | slot 1 | slot 2 | slot 3 | slot 4 | slot 5 |
|
||||
- * | _ ptr | _ ptr | _ ptr | _ ptr | _ ptr |
|
||||
+ * | slot 0 | slot 1 | slot 2 | slot 3 | slot 4 |
|
||||
+ * | _ ptr | _ ptr | _ ptr | _ ptr | NULL |
|
||||
* |--------------------------------------------|
|
||||
- * ^ ^- conn_next
|
||||
- * |
|
||||
- * \-- conn_free
|
||||
+ * ^- conn_next
|
||||
*
|
||||
- * As we allocate, we shift conn_next through the list, yielding the ptr that was stored (and
|
||||
- * setting it to NULL as we proceed)
|
||||
+ * To allocate, we pop one of the stored connection ptr out of the stack (yield the ptr, set
|
||||
+ * its slot to NULL then increase conn_next)
|
||||
*
|
||||
* |--------------------------------------------|
|
||||
- * | slot 1 | slot 2 | slot 3 | slot 4 | slot 5 |
|
||||
- * | _NULL | _NULL | _ ptr | _ ptr | _ ptr |
|
||||
+ * | slot 0 | slot 1 | slot 2 | slot 3 | slot 4 |
|
||||
+ * | _NULL | _NULL | _ ptr | _ ptr | NULL |
|
||||
* |--------------------------------------------|
|
||||
- * ^ ^- conn_next
|
||||
- * |
|
||||
- * \-- conn_free
|
||||
+ * ^- conn_next
|
||||
*
|
||||
- * When a connection is "freed" we return it to conn_free, which is then also slid up.
|
||||
+ * When a connection is "freed" we push it back in the stack after decreasing conn_next
|
||||
*
|
||||
* |--------------------------------------------|
|
||||
- * | slot 1 | slot 2 | slot 3 | slot 4 | slot 5 |
|
||||
- * | _ ptr | _NULL | _ ptr | _ ptr | _ ptr |
|
||||
+ * | slot 0 | slot 1 | slot 2 | slot 3 | slot 4 |
|
||||
+ * | _NULL | _ ptr | _ ptr | _ ptr | NULL |
|
||||
* |--------------------------------------------|
|
||||
- * ^ ^- conn_next
|
||||
- * |
|
||||
- * \-- conn_free
|
||||
+ * ^- conn_next
|
||||
*
|
||||
- * If all connections are exhausted, conn_next will == conn_next, as conn_next must have proceeded
|
||||
- * to the end of the ring, and then wrapped back allocating all previous until we meet with conn_free.
|
||||
+ * If all connections are exhausted, freelist[conn_next] is NULL
|
||||
*
|
||||
* |--------------------------------------------|
|
||||
- * | slot 1 | slot 2 | slot 3 | slot 4 | slot 5 |
|
||||
+ * | slot 0 | slot 1 | slot 2 | slot 3 | slot 4 |
|
||||
* | _NULL | _NULL | _NULL | _NULL | _NULL |
|
||||
* |--------------------------------------------|
|
||||
- * ^ ^- conn_next
|
||||
- * |
|
||||
- * \-- conn_free
|
||||
+ * ^- conn_next
|
||||
*
|
||||
* This means allocations of conns will keep failing until a connection is returned.
|
||||
*
|
||||
* |--------------------------------------------|
|
||||
- * | slot 1 | slot 2 | slot 3 | slot 4 | slot 5 |
|
||||
- * | _NULL | _ ptr | _NULL | _NULL | _NULL |
|
||||
+ * | slot 0 | slot 1 | slot 2 | slot 3 | slot 4 |
|
||||
+ * | _NULL | _NULL | _NULL | _ ptr | NULL |
|
||||
* |--------------------------------------------|
|
||||
- * ^- conn_next ^
|
||||
- * |
|
||||
- * \-- conn_free
|
||||
+ * ^- conn_next
|
||||
*
|
||||
* And now conn_next can begin to allocate again.
|
||||
*
|
||||
*
|
||||
* -- invariants
|
||||
- * * when conn_free is slid back to meet conn_next, there can be no situation where another
|
||||
- * connection is returned, as none must allocated -if they were allocated, conn_free would have
|
||||
- * moved_along.
|
||||
- * * the ring buffer must be as large as conntable.
|
||||
- * * We do not check conn_next == conn_free (that's the starting state), but we check if the
|
||||
- * slot at conn_next is NULL, which must imply that conn_free has nothing to return.
|
||||
+ * * the stack must be as large as conntable.
|
||||
* * connection_table_move_connection_out_of_active_list is the only function able to return a
|
||||
* connection to the freelist, as it is the function that is called when the event system has
|
||||
* determined all IO's are complete, or unable to complete. This function is what prepares the
|
||||
@@ -136,11 +126,9 @@ connection_table_new(int table_size)
|
||||
ct->c = (Connection **)slapi_ch_calloc(1, ct->size * sizeof(Connection *));
|
||||
ct->fd = (struct POLL_STRUCT **)slapi_ch_calloc(1, ct->list_num * sizeof(struct POLL_STRUCT*));
|
||||
ct->table_mutex = PR_NewLock();
|
||||
- /* Allocate the freelist */
|
||||
- ct->c_freelist = (Connection **)slapi_ch_calloc(1, ct->size * sizeof(Connection *));
|
||||
- /* NEVER use slot 0, this is a list pointer */
|
||||
- ct->conn_next_offset = 1;
|
||||
- ct->conn_free_offset = 1;
|
||||
+ /* Allocate the freelist (a slot for each connection plus another slot for the final NULL pointer) */
|
||||
+ ct->c_freelist = (Connection **)slapi_ch_calloc(1, (ct->size+1) * sizeof(Connection *));
|
||||
+ ct->conn_next_offset = 0;
|
||||
|
||||
slapi_log_err(SLAPI_LOG_INFO, "connection_table_new", "Number of connection sub-tables %d, each containing %d slots.\n",
|
||||
ct->list_num, ct->list_size);
|
||||
@@ -273,22 +261,22 @@ connection_table_get_connection(Connection_Table *ct, int sd)
|
||||
{
|
||||
PR_Lock(ct->table_mutex);
|
||||
|
||||
- PR_ASSERT(ct->conn_next_offset != 0);
|
||||
Connection *c = ct->c_freelist[ct->conn_next_offset];
|
||||
if (c != NULL) {
|
||||
/* We allocated it, so now NULL the slot and move forward. */
|
||||
- ct->c_freelist[ct->conn_next_offset] = NULL;
|
||||
- /* Handle overflow. */
|
||||
- ct->conn_next_offset = (ct->conn_next_offset + 1) % ct->size;
|
||||
- if (ct->conn_next_offset == 0) {
|
||||
- /* Never use slot 0 */
|
||||
- ct->conn_next_offset += 1;
|
||||
- }
|
||||
+ PR_ASSERT(ct->conn_next_offset>=0 && ct->conn_next_offset<ct->size);
|
||||
+ ct->c_freelist[ct->conn_next_offset++] = NULL;
|
||||
PR_Unlock(ct->table_mutex);
|
||||
} else {
|
||||
/* couldn't find a Connection, table must be full */
|
||||
- slapi_log_err(SLAPI_LOG_CONNS, "connection_table_get_connection", "Max open connections reached\n");
|
||||
PR_Unlock(ct->table_mutex);
|
||||
+ static time_t last_err_msg_time = 0;
|
||||
+ time_t curtime = slapi_current_utc_time();
|
||||
+ /* Logs the message only once per seconds */
|
||||
+ if (curtime != last_err_msg_time) {
|
||||
+ slapi_log_err(SLAPI_LOG_ERR, "connection_table_get_connection", "Max open connections reached\n");
|
||||
+ last_err_msg_time = curtime;
|
||||
+ }
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -461,14 +449,10 @@ connection_table_move_connection_out_of_active_list(Connection_Table *ct, Connec
|
||||
|
||||
/* Finally, place the connection back into the freelist for use */
|
||||
PR_ASSERT(c->c_refcnt == 0);
|
||||
- PR_ASSERT(ct->conn_free_offset != 0);
|
||||
- PR_ASSERT(ct->c_freelist[ct->conn_free_offset] == NULL);
|
||||
- ct->c_freelist[ct->conn_free_offset] = c;
|
||||
- ct->conn_free_offset = (ct->conn_free_offset + 1) % ct->size;
|
||||
- if (ct->conn_free_offset == 0) {
|
||||
- /* Never use slot 0 */
|
||||
- ct->conn_free_offset += 1;
|
||||
- }
|
||||
+ PR_ASSERT(ct->conn_next_offset != 0);
|
||||
+ ct->conn_next_offset--;
|
||||
+ PR_ASSERT(ct->c_freelist[ct->conn_next_offset] == NULL);
|
||||
+ ct->c_freelist[ct->conn_next_offset] = c;
|
||||
|
||||
PR_Unlock(ct->table_mutex);
|
||||
|
||||
diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c
|
||||
index e8b979acaf..10aabed6d3 100644
|
||||
--- a/ldap/servers/slapd/daemon.c
|
||||
+++ b/ldap/servers/slapd/daemon.c
|
||||
@@ -135,19 +135,25 @@ get_pid_file(void)
|
||||
}
|
||||
|
||||
static int
|
||||
-accept_and_configure(int s __attribute__((unused)), PRFileDesc *pr_acceptfd, PRNetAddr *pr_netaddr, int addrlen __attribute__((unused)), int secure, int local, PRFileDesc **pr_clonefd)
|
||||
+accept_and_configure(int s __attribute__((unused)), PRFileDesc *listenfd, PRNetAddr *pr_netaddr, int addrlen __attribute__((unused)), int secure, int local, PRFileDesc **pr_accepted_fd)
|
||||
{
|
||||
int ns = 0;
|
||||
PRIntervalTime pr_timeout = PR_MillisecondsToInterval(slapd_accept_wakeup_timer);
|
||||
|
||||
- (*pr_clonefd) = PR_Accept(pr_acceptfd, pr_netaddr, pr_timeout);
|
||||
- if (!(*pr_clonefd)) {
|
||||
+ (*pr_accepted_fd) = PR_Accept(listenfd, pr_netaddr, pr_timeout);
|
||||
+ if (!(*pr_accepted_fd)) {
|
||||
PRErrorCode prerr = PR_GetError();
|
||||
- slapi_log_err(SLAPI_LOG_ERR, "accept_and_configure", "PR_Accept() failed, " SLAPI_COMPONENT_NAME_NSPR " error %d (%s)\n",
|
||||
- prerr, slapd_pr_strerror(prerr));
|
||||
+ static time_t last_err_msg_time = 0;
|
||||
+ time_t curtime = slapi_current_utc_time();
|
||||
+ /* Logs the message only once per seconds */
|
||||
+ if (curtime != last_err_msg_time) {
|
||||
+ slapi_log_err(SLAPI_LOG_ERR, "accept_and_configure", "PR_Accept() failed, " SLAPI_COMPONENT_NAME_NSPR " error %d (%s)\n",
|
||||
+ prerr, slapd_pr_strerror(prerr));
|
||||
+ last_err_msg_time = curtime;
|
||||
+ }
|
||||
return (SLAPD_INVALID_SOCKET);
|
||||
}
|
||||
- ns = configure_pr_socket(pr_clonefd, secure, local);
|
||||
+ ns = configure_pr_socket(pr_accepted_fd, secure, local);
|
||||
|
||||
return ns;
|
||||
}
|
||||
@@ -155,7 +161,7 @@ accept_and_configure(int s __attribute__((unused)), PRFileDesc *pr_acceptfd, PRN
|
||||
/*
|
||||
* This is the shiny new re-born daemon function, without all the hair
|
||||
*/
|
||||
-static int handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, int secure, int local, Connection **newconn);
|
||||
+static int handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *listenfd, int secure, int local, Connection **newconn);
|
||||
static void handle_pr_read_ready(Connection_Table *ct, int list_id, PRIntn num_poll);
|
||||
static int clear_signal(struct POLL_STRUCT *fds, int list_id);
|
||||
static void unfurl_banners(Connection_Table *ct, daemon_ports_t *ports, PRFileDesc **n_tcps, PRFileDesc **s_tcps, PRFileDesc **i_unix);
|
||||
@@ -831,6 +837,7 @@ accept_thread(void *vports)
|
||||
}
|
||||
/* Need a sleep delay here. */
|
||||
PR_Sleep(pr_timeout);
|
||||
+ last_accept_new_connections = accept_new_connections;
|
||||
continue;
|
||||
} else {
|
||||
/* Log that we are now listening again */
|
||||
@@ -1846,28 +1853,30 @@ handle_closed_connection(Connection *conn)
|
||||
* this function returns the connection table list the new connection is in
|
||||
*/
|
||||
static int
|
||||
-handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, int secure, int local, Connection **newconn)
|
||||
+handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *listenfd, int secure, int local, Connection **newconn)
|
||||
{
|
||||
int ns = 0;
|
||||
Connection *conn = NULL;
|
||||
/* struct sockaddr_in from;*/
|
||||
PRNetAddr from = {{0}};
|
||||
- PRFileDesc *pr_clonefd = NULL;
|
||||
+ PRFileDesc *pr_accepted_fd = NULL;
|
||||
slapdFrontendConfig_t *fecfg = getFrontendConfig();
|
||||
ber_len_t maxbersize;
|
||||
|
||||
if (newconn) {
|
||||
*newconn = NULL;
|
||||
}
|
||||
- if ((ns = accept_and_configure(tcps, pr_acceptfd, &from,
|
||||
- sizeof(from), secure, local, &pr_clonefd)) == SLAPD_INVALID_SOCKET) {
|
||||
+ if ((ns = accept_and_configure(tcps, listenfd, &from,
|
||||
+ sizeof(from), secure, local, &pr_accepted_fd)) == SLAPD_INVALID_SOCKET) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* get a new Connection from the Connection Table */
|
||||
conn = connection_table_get_connection(ct, ns);
|
||||
if (conn == NULL) {
|
||||
- PR_Close(pr_acceptfd);
|
||||
+ if (pr_accepted_fd) {
|
||||
+ PR_Close(pr_accepted_fd);
|
||||
+ }
|
||||
return -1;
|
||||
}
|
||||
pthread_mutex_lock(&(conn->c_mutex));
|
||||
@@ -1879,7 +1888,7 @@ handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, i
|
||||
conn->c_idletimeout = fecfg->idletimeout;
|
||||
conn->c_idletimeout_handle = idletimeout_reslimit_handle;
|
||||
conn->c_sd = ns;
|
||||
- conn->c_prfd = pr_clonefd;
|
||||
+ conn->c_prfd = pr_accepted_fd;
|
||||
conn->c_flags &= ~CONN_FLAG_CLOSING;
|
||||
|
||||
/* Set per connection static config */
|
||||
diff --git a/ldap/servers/slapd/fe.h b/ldap/servers/slapd/fe.h
|
||||
index 64c6645e7b..95dfeeb89b 100644
|
||||
--- a/ldap/servers/slapd/fe.h
|
||||
+++ b/ldap/servers/slapd/fe.h
|
||||
@@ -88,7 +88,6 @@ struct connection_table
|
||||
/* An array of free connections awaiting allocation. */;
|
||||
Connection **c_freelist;
|
||||
size_t conn_next_offset;
|
||||
- size_t conn_free_offset;
|
||||
struct POLL_STRUCT **fd;
|
||||
PRLock *table_mutex;
|
||||
};
|
|
@ -0,0 +1,385 @@
|
|||
From dc091325814d9ac74d238c7e14cac8b9112b3271 Mon Sep 17 00:00:00 2001
|
||||
From: progier389 <progier@redhat.com>
|
||||
Date: Fri, 17 Nov 2023 14:41:51 +0100
|
||||
Subject: [PATCH] Issue 5984 - Crash when paged result search are abandoned
|
||||
(#5985)
|
||||
|
||||
* Issue 5984 - Crash when paged result search are abandoned
|
||||
|
||||
Problem:
|
||||
Fix #4551 has changed the lock that protects the paged result data
|
||||
within a connection. But the abandon operation attempts to free
|
||||
the paged search result with the connection lock.
|
||||
This leads to race condition and double free causing an heap
|
||||
corruption and a SIGSEGV.
|
||||
|
||||
Solution:
|
||||
- Get a copy of the operation data that needs to be logged.
|
||||
- Unlock the connection mutex (to avoid deadlock risk)
|
||||
- Free the paged result while holding the paged result lock.
|
||||
|
||||
Issue: 5984
|
||||
|
||||
Reviewed by: @tbordaz (Thanks!)
|
||||
|
||||
(cherry picked from commit 06bd0862956672eb76276cab5c1dd906fe5a7eec)
|
||||
---
|
||||
.../paged_results/paged_results_test.py | 107 ++++++++++++++++--
|
||||
ldap/servers/slapd/abandon.c | 23 ++--
|
||||
ldap/servers/slapd/opshared.c | 4 +-
|
||||
ldap/servers/slapd/pagedresults.c | 8 +-
|
||||
ldap/servers/slapd/proto-slap.h | 2 +-
|
||||
src/lib389/lib389/__init__.py | 27 ++++-
|
||||
6 files changed, 150 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/dirsrvtests/tests/suites/paged_results/paged_results_test.py b/dirsrvtests/tests/suites/paged_results/paged_results_test.py
|
||||
index d490c4af20..cdafa834ab 100644
|
||||
--- a/dirsrvtests/tests/suites/paged_results/paged_results_test.py
|
||||
+++ b/dirsrvtests/tests/suites/paged_results/paged_results_test.py
|
||||
@@ -7,7 +7,8 @@
|
||||
# --- END COPYRIGHT BLOCK ---
|
||||
#
|
||||
import socket
|
||||
-from random import sample
|
||||
+from random import sample, randrange
|
||||
+
|
||||
import pytest
|
||||
from ldap.controls import SimplePagedResultsControl, GetEffectiveRightsControl
|
||||
from lib389.tasks import *
|
||||
@@ -16,6 +17,10 @@
|
||||
from lib389._constants import DN_LDBM, DN_DM, DEFAULT_SUFFIX
|
||||
from lib389._controls import SSSRequestControl
|
||||
from lib389.idm.user import UserAccount, UserAccounts
|
||||
+from lib389.cli_base import FakeArgs
|
||||
+from lib389.config import LDBMConfig
|
||||
+from lib389.dbgen import dbgen_users
|
||||
+
|
||||
from lib389.idm.organization import Organization
|
||||
from lib389.idm.organizationalunit import OrganizationalUnit
|
||||
from lib389.backend import Backends
|
||||
@@ -42,11 +47,56 @@
|
||||
NEW_BACKEND_2 = 'child_base'
|
||||
|
||||
OLD_HOSTNAME = socket.gethostname()
|
||||
-socket.sethostname('localhost')
|
||||
+if os.getuid() == 0:
|
||||
+ socket.sethostname('localhost')
|
||||
HOSTNAME = socket.gethostname()
|
||||
IP_ADDRESS = socket.gethostbyname(HOSTNAME)
|
||||
OLD_IP_ADDRESS = socket.gethostbyname(OLD_HOSTNAME)
|
||||
|
||||
+
|
||||
+@pytest.fixture(scope="module")
|
||||
+def create_40k_users(topology_st, request):
|
||||
+ inst = topology_st.standalone
|
||||
+
|
||||
+ # Prepare return value
|
||||
+ retval = FakeArgs()
|
||||
+ retval.inst = inst
|
||||
+ retval.bename = '40k'
|
||||
+ retval.suffix = f'o={retval.bename}'
|
||||
+ retval.ldif_file = f'{inst.get_ldif_dir()}/{retval.bename}.ldif'
|
||||
+
|
||||
+ # Create new backend
|
||||
+ bes = Backends(inst)
|
||||
+ be_1 = bes.create(properties={
|
||||
+ 'cn': retval.bename,
|
||||
+ 'nsslapd-suffix': retval.suffix,
|
||||
+ })
|
||||
+
|
||||
+ # Set paged search lookthrough limit
|
||||
+ ldbmconfig = LDBMConfig(inst)
|
||||
+ ldbmconfig.replace('nsslapd-pagedlookthroughlimit', b'100000')
|
||||
+
|
||||
+ # Create ldif and import it.
|
||||
+ dbgen_users(inst, 40000, retval.ldif_file, retval.suffix)
|
||||
+ # tasks = Tasks(inst)
|
||||
+ # args = {TASK_WAIT: True}
|
||||
+ # tasks.importLDIF(retval.suffix, None, retval.ldif_file, args)
|
||||
+ inst.stop()
|
||||
+ assert inst.ldif2db(retval.bename, None, None, None, retval.ldif_file, None)
|
||||
+ inst.start()
|
||||
+
|
||||
+ # And set an aci allowing anonymous read
|
||||
+ log.info('Adding ACI to allow our test user to search')
|
||||
+ ACI_TARGET = '(targetattr != "userPassword || aci")'
|
||||
+ ACI_ALLOW = '(version 3.0; acl "Enable anonymous access";allow (read, search, compare)'
|
||||
+ ACI_SUBJECT = '(userdn = "ldap:///anyone");)'
|
||||
+ ACI_BODY = ACI_TARGET + ACI_ALLOW + ACI_SUBJECT
|
||||
+ o_1 = Organization(inst, retval.suffix)
|
||||
+ o_1.set('aci', ACI_BODY)
|
||||
+
|
||||
+ return retval
|
||||
+
|
||||
+
|
||||
@pytest.fixture(scope="module")
|
||||
def create_user(topology_st, request):
|
||||
"""User for binding operation"""
|
||||
@@ -71,8 +121,10 @@ def create_user(topology_st, request):
|
||||
|
||||
def fin():
|
||||
log.info('Deleting user simplepaged_test')
|
||||
- user.delete()
|
||||
- socket.sethostname(OLD_HOSTNAME)
|
||||
+ if not DEBUGGING:
|
||||
+ user.delete()
|
||||
+ if os.getuid() == 0:
|
||||
+ socket.sethostname(OLD_HOSTNAME)
|
||||
|
||||
request.addfinalizer(fin)
|
||||
|
||||
@@ -175,7 +227,7 @@ def change_conf_attr(topology_st, suffix, attr_name, attr_value):
|
||||
return attr_value_bck
|
||||
|
||||
|
||||
-def paged_search(conn, suffix, controls, search_flt, searchreq_attrlist):
|
||||
+def paged_search(conn, suffix, controls, search_flt, searchreq_attrlist, abandon_rate=0):
|
||||
"""Search at the DEFAULT_SUFFIX with ldap.SCOPE_SUBTREE
|
||||
using Simple Paged Control(should the first item in the
|
||||
list controls.
|
||||
@@ -195,9 +247,16 @@ def paged_search(conn, suffix, controls, search_flt, searchreq_attrlist):
|
||||
req_pr_ctrl.size,
|
||||
str(controls)))
|
||||
msgid = conn.search_ext(suffix, ldap.SCOPE_SUBTREE, search_flt, searchreq_attrlist, serverctrls=controls)
|
||||
+ log.info('Getting page %d' % (pages,))
|
||||
while True:
|
||||
- log.info('Getting page %d' % (pages,))
|
||||
- rtype, rdata, rmsgid, rctrls = conn.result3(msgid)
|
||||
+ try:
|
||||
+ rtype, rdata, rmsgid, rctrls = conn.result3(msgid, timeout=0.001)
|
||||
+ except ldap.TIMEOUT:
|
||||
+ if pages > 0 and abandon_rate>0 and randrange(100)<abandon_rate:
|
||||
+ conn.abandon(msgid)
|
||||
+ log.info('Paged result search is abandonned.')
|
||||
+ return all_results
|
||||
+ continue
|
||||
log.debug('Data: {}'.format(rdata))
|
||||
all_results.extend(rdata)
|
||||
pages += 1
|
||||
@@ -217,6 +276,7 @@ def paged_search(conn, suffix, controls, search_flt, searchreq_attrlist):
|
||||
break # No more pages available
|
||||
else:
|
||||
break
|
||||
+ log.info('Getting page %d' % (pages,))
|
||||
|
||||
assert not pctrls[0].cookie
|
||||
return all_results
|
||||
@@ -1191,6 +1251,39 @@ def test_maxsimplepaged_per_conn_failure(topology_st, create_user, conf_attr_val
|
||||
del_users(users_list)
|
||||
change_conf_attr(topology_st, DN_CONFIG, 'nsslapd-maxsimplepaged-per-conn', max_per_con_bck)
|
||||
|
||||
+
|
||||
+def test_search_stress_abandon(create_40k_users, create_user):
|
||||
+ """Verify that search with a simple paged results control
|
||||
+ returns all entries it should without errors.
|
||||
+
|
||||
+ :id: e154b24a-83d6-11ee-90d1-482ae39447e5
|
||||
+ :customerscenario: True
|
||||
+ :feature: Simple paged results
|
||||
+ :setup: Standalone instance, test user for binding,
|
||||
+ 40K users in a second backend
|
||||
+ :steps:
|
||||
+ 1. Bind as test user
|
||||
+ 2. Loops a number of times doing:
|
||||
+ - search through added users with a simple paged control
|
||||
+ - randomly abandoning the search after a few ms.
|
||||
+ :expectedresults:
|
||||
+ 1. Bind should be successful
|
||||
+ 2. The loop should complete successfully.
|
||||
+ """
|
||||
+
|
||||
+ abandon_rate = 10
|
||||
+ page_size = 500
|
||||
+ nbloops = 1000
|
||||
+ search_flt = r'(uid=*)'
|
||||
+ searchreq_attrlist = ['dn', 'sn']
|
||||
+ log.info('Set user bind %s ' % create_user)
|
||||
+ conn = create_user.bind(TEST_USER_PWD)
|
||||
+ for idx in range(nbloops):
|
||||
+ req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='')
|
||||
+ # If the issue #5984 is not fixed the server crashs and the paged search fails with ldap.SERVER_DOWN exception
|
||||
+ paged_search(conn, create_40k_users.suffix, [req_ctrl], search_flt, searchreq_attrlist, abandon_rate=abandon_rate)
|
||||
+
|
||||
+
|
||||
if __name__ == '__main__':
|
||||
# Run isolated
|
||||
# -s for DEBUG mode
|
||||
diff --git a/ldap/servers/slapd/abandon.c b/ldap/servers/slapd/abandon.c
|
||||
index 26a2e7bf83..964d28836f 100644
|
||||
--- a/ldap/servers/slapd/abandon.c
|
||||
+++ b/ldap/servers/slapd/abandon.c
|
||||
@@ -38,6 +38,12 @@ do_abandon(Slapi_PBlock *pb)
|
||||
Connection *pb_conn = NULL;
|
||||
Operation *pb_op = NULL;
|
||||
Operation *o;
|
||||
+ /* Keep a copy of some data because o may vanish once conn is unlocked */
|
||||
+ struct {
|
||||
+ struct timespec hr_time_end;
|
||||
+ int nentries;
|
||||
+ int opid;
|
||||
+ } o_copy;
|
||||
|
||||
slapi_pblock_get(pb, SLAPI_OPERATION, &pb_op);
|
||||
slapi_pblock_get(pb, SLAPI_CONNECTION, &pb_conn);
|
||||
@@ -90,8 +96,12 @@ do_abandon(Slapi_PBlock *pb)
|
||||
|
||||
pthread_mutex_lock(&(pb_conn->c_mutex));
|
||||
for (o = pb_conn->c_ops; o != NULL; o = o->o_next) {
|
||||
- if (o->o_msgid == id && o != pb_op)
|
||||
+ if (o->o_msgid == id && o != pb_op) {
|
||||
+ slapi_operation_time_elapsed(o, &o_copy.hr_time_end);
|
||||
+ o_copy.nentries = o->o_results.r.r_search.nentries;
|
||||
+ o_copy.opid = o->o_opid;
|
||||
break;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (o != NULL) {
|
||||
@@ -130,7 +140,8 @@ do_abandon(Slapi_PBlock *pb)
|
||||
slapi_log_err(SLAPI_LOG_TRACE, "do_abandon", "op not found\n");
|
||||
}
|
||||
|
||||
- if (0 == pagedresults_free_one_msgid_nolock(pb_conn, id)) {
|
||||
+ pthread_mutex_unlock(&(pb_conn->c_mutex));
|
||||
+ if (0 == pagedresults_free_one_msgid(pb_conn, id, pageresult_lock_get_addr(pb_conn))) {
|
||||
slapi_log_access(LDAP_DEBUG_STATS, "conn=%" PRIu64
|
||||
" op=%d ABANDON targetop=Simple Paged Results msgid=%d\n",
|
||||
pb_conn->c_connid, pb_op->o_opid, id);
|
||||
@@ -143,15 +154,11 @@ do_abandon(Slapi_PBlock *pb)
|
||||
" targetop=SUPPRESSED-BY-PLUGIN msgid=%d\n",
|
||||
pb_conn->c_connid, pb_op->o_opid, id);
|
||||
} else {
|
||||
- struct timespec o_hr_time_end;
|
||||
- slapi_operation_time_elapsed(o, &o_hr_time_end);
|
||||
slapi_log_access(LDAP_DEBUG_STATS, "conn=%" PRIu64 " op=%d ABANDON"
|
||||
" targetop=%d msgid=%d nentries=%d etime=%" PRId64 ".%010" PRId64 "\n",
|
||||
- pb_conn->c_connid, pb_op->o_opid, o->o_opid, id,
|
||||
- o->o_results.r.r_search.nentries, (int64_t)o_hr_time_end.tv_sec, (int64_t)o_hr_time_end.tv_nsec);
|
||||
+ pb_conn->c_connid, pb_op->o_opid, o_copy.opid, id,
|
||||
+ o_copy.nentries, (int64_t)o_copy.hr_time_end.tv_sec, (int64_t)o_copy.hr_time_end.tv_nsec);
|
||||
}
|
||||
-
|
||||
- pthread_mutex_unlock(&(pb_conn->c_mutex));
|
||||
/*
|
||||
* Wake up the persistent searches, so they
|
||||
* can notice if they've been abandoned.
|
||||
diff --git a/ldap/servers/slapd/opshared.c b/ldap/servers/slapd/opshared.c
|
||||
index a842d4249f..f77043afa9 100644
|
||||
--- a/ldap/servers/slapd/opshared.c
|
||||
+++ b/ldap/servers/slapd/opshared.c
|
||||
@@ -921,9 +921,7 @@ op_shared_search(Slapi_PBlock *pb, int send_result)
|
||||
next_be = NULL; /* to break the loop */
|
||||
if (operation->o_status & SLAPI_OP_STATUS_ABANDONED) {
|
||||
/* It turned out this search was abandoned. */
|
||||
- pthread_mutex_lock(pagedresults_mutex);
|
||||
- pagedresults_free_one_msgid_nolock(pb_conn, operation->o_msgid);
|
||||
- pthread_mutex_unlock(pagedresults_mutex);
|
||||
+ pagedresults_free_one_msgid(pb_conn, operation->o_msgid, pagedresults_mutex);
|
||||
/* paged-results-request was abandoned; making an empty cookie. */
|
||||
pagedresults_set_response_control(pb, 0, estimate, -1, pr_idx);
|
||||
send_ldap_result(pb, 0, NULL, "Simple Paged Results Search abandoned", 0, NULL);
|
||||
diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c
|
||||
index fc15f6bec9..9959c927e0 100644
|
||||
--- a/ldap/servers/slapd/pagedresults.c
|
||||
+++ b/ldap/servers/slapd/pagedresults.c
|
||||
@@ -34,6 +34,10 @@ pageresult_lock_cleanup()
|
||||
slapi_ch_free((void**)&lock_hash);
|
||||
}
|
||||
|
||||
+/* Beware to the lock order with c_mutex:
|
||||
+ * c_mutex is sometime locked while holding pageresult_lock
|
||||
+ * ==> Do not lock pageresult_lock when holing c_mutex
|
||||
+ */
|
||||
pthread_mutex_t *
|
||||
pageresult_lock_get_addr(Connection *conn)
|
||||
{
|
||||
@@ -350,7 +354,7 @@ pagedresults_free_one(Connection *conn, Operation *op, int index)
|
||||
* Used for abandoning - pageresult_lock_get_addr(conn) is already locked in do_abandone.
|
||||
*/
|
||||
int
|
||||
-pagedresults_free_one_msgid_nolock(Connection *conn, ber_int_t msgid)
|
||||
+pagedresults_free_one_msgid(Connection *conn, ber_int_t msgid, pthread_mutex_t *mutex)
|
||||
{
|
||||
int rc = -1;
|
||||
int i;
|
||||
@@ -361,6 +365,7 @@ pagedresults_free_one_msgid_nolock(Connection *conn, ber_int_t msgid)
|
||||
} else {
|
||||
slapi_log_err(SLAPI_LOG_TRACE,
|
||||
"pagedresults_free_one_msgid_nolock", "=> msgid=%d\n", msgid);
|
||||
+ pthread_mutex_lock(mutex);
|
||||
for (i = 0; i < conn->c_pagedresults.prl_maxlen; i++) {
|
||||
if (conn->c_pagedresults.prl_list[i].pr_msgid == msgid) {
|
||||
PagedResults *prp = conn->c_pagedresults.prl_list + i;
|
||||
@@ -375,6 +380,7 @@ pagedresults_free_one_msgid_nolock(Connection *conn, ber_int_t msgid)
|
||||
break;
|
||||
}
|
||||
}
|
||||
+ pthread_mutex_unlock(mutex);
|
||||
slapi_log_err(SLAPI_LOG_TRACE,
|
||||
"pagedresults_free_one_msgid_nolock", "<= %d\n", rc);
|
||||
}
|
||||
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
|
||||
index c7389fe2ec..e8adbc254b 100644
|
||||
--- a/ldap/servers/slapd/proto-slap.h
|
||||
+++ b/ldap/servers/slapd/proto-slap.h
|
||||
@@ -1614,7 +1614,7 @@ int pagedresults_is_timedout_nolock(Connection *conn);
|
||||
int pagedresults_reset_timedout_nolock(Connection *conn);
|
||||
int pagedresults_in_use_nolock(Connection *conn);
|
||||
int pagedresults_free_one(Connection *conn, Operation *op, int index);
|
||||
-int pagedresults_free_one_msgid_nolock(Connection *conn, ber_int_t msgid);
|
||||
+int pagedresults_free_one_msgid(Connection *conn, ber_int_t msgid, pthread_mutex_t *mutex);
|
||||
int op_is_pagedresults(Operation *op);
|
||||
int pagedresults_cleanup_all(Connection *conn, int needlock);
|
||||
void op_set_pagedresults(Operation *op);
|
||||
diff --git a/src/lib389/lib389/__init__.py b/src/lib389/lib389/__init__.py
|
||||
index 7590ec4424..6a941dbe75 100644
|
||||
--- a/src/lib389/lib389/__init__.py
|
||||
+++ b/src/lib389/lib389/__init__.py
|
||||
@@ -1048,6 +1048,24 @@ def close(self):
|
||||
|
||||
self.state = DIRSRV_STATE_OFFLINE
|
||||
|
||||
+ def dump_errorlog(self):
|
||||
+ '''
|
||||
+ Its logs all errors messages within the error log that occured
|
||||
+ after the last startup.
|
||||
+ '''
|
||||
+ if os.path.isfile(self.errlog):
|
||||
+ lines = []
|
||||
+ with open(self.errlog, 'r') as file:
|
||||
+ for line in file:
|
||||
+ if "starting up" in line:
|
||||
+ lines = []
|
||||
+ for key in ( 'DEBUG', 'INFO', 'NOTICE', 'WARN' ):
|
||||
+ if key in line:
|
||||
+ lines.append(line)
|
||||
+ break
|
||||
+ for line in lines:
|
||||
+ self.log.error(line)
|
||||
+
|
||||
def start(self, timeout=120, post_open=True):
|
||||
'''
|
||||
It starts an instance and rebind it. Its final state after rebind
|
||||
@@ -1071,7 +1089,13 @@ def start(self, timeout=120, post_open=True):
|
||||
if self.with_systemd():
|
||||
self.log.debug("systemd status -> True")
|
||||
# Do systemd things here ...
|
||||
- subprocess.check_output(["systemctl", "start", "dirsrv@%s" % self.serverid], stderr=subprocess.STDOUT)
|
||||
+ try:
|
||||
+ subprocess.check_output(["systemctl", "start", "dirsrv@%s" % self.serverid], stderr=subprocess.STDOUT)
|
||||
+ except subprocess.CalledProcessError as e:
|
||||
+ self.dump_errorlog()
|
||||
+ self.log.error('Failed to start dirsrv@%s: "%s"' % (self.serverid, e.output.decode()))
|
||||
+ self.log.error(e)
|
||||
+ raise ValueError('Failed to start DS')
|
||||
else:
|
||||
self.log.debug("systemd status -> False")
|
||||
# Start the process.
|
||||
@@ -1095,6 +1119,7 @@ def start(self, timeout=120, post_open=True):
|
||||
self.log.debug("DEBUG: starting with %s" % cmd)
|
||||
output = subprocess.check_output(*cmd, env=env, stderr=subprocess.STDOUT)
|
||||
except subprocess.CalledProcessError as e:
|
||||
+ self.dump_errorlog()
|
||||
self.log.error('Failed to start ns-slapd: "%s"' % e.output.decode())
|
||||
self.log.error(e)
|
||||
raise ValueError('Failed to start DS')
|
|
@ -0,0 +1,76 @@
|
|||
From 4883a69dcf2764146bbe54c5432752b79f8d1a1e Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Rogier <progier@redhat.com>
|
||||
Date: Mon, 20 Nov 2023 16:17:39 +0100
|
||||
Subject: [PATCH] Issue 5984 - Crash when paged result search are abandoned -
|
||||
fix2
|
||||
|
||||
---
|
||||
ldap/servers/slapd/abandon.c | 2 +-
|
||||
src/lib389/lib389/__init__.py | 27 +--------------------------
|
||||
2 files changed, 2 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/ldap/servers/slapd/abandon.c b/ldap/servers/slapd/abandon.c
|
||||
index 964d28836f..2dd1ee3205 100644
|
||||
--- a/ldap/servers/slapd/abandon.c
|
||||
+++ b/ldap/servers/slapd/abandon.c
|
||||
@@ -43,7 +43,7 @@ do_abandon(Slapi_PBlock *pb)
|
||||
struct timespec hr_time_end;
|
||||
int nentries;
|
||||
int opid;
|
||||
- } o_copy;
|
||||
+ } o_copy;
|
||||
|
||||
slapi_pblock_get(pb, SLAPI_OPERATION, &pb_op);
|
||||
slapi_pblock_get(pb, SLAPI_CONNECTION, &pb_conn);
|
||||
diff --git a/src/lib389/lib389/__init__.py b/src/lib389/lib389/__init__.py
|
||||
index 6a941dbe75..7590ec4424 100644
|
||||
--- a/src/lib389/lib389/__init__.py
|
||||
+++ b/src/lib389/lib389/__init__.py
|
||||
@@ -1048,24 +1048,6 @@ class DirSrv(SimpleLDAPObject, object):
|
||||
|
||||
self.state = DIRSRV_STATE_OFFLINE
|
||||
|
||||
- def dump_errorlog(self):
|
||||
- '''
|
||||
- Its logs all errors messages within the error log that occured
|
||||
- after the last startup.
|
||||
- '''
|
||||
- if os.path.isfile(self.errlog):
|
||||
- lines = []
|
||||
- with open(self.errlog, 'r') as file:
|
||||
- for line in file:
|
||||
- if "starting up" in line:
|
||||
- lines = []
|
||||
- for key in ( 'DEBUG', 'INFO', 'NOTICE', 'WARN' ):
|
||||
- if key in line:
|
||||
- lines.append(line)
|
||||
- break
|
||||
- for line in lines:
|
||||
- self.log.error(line)
|
||||
-
|
||||
def start(self, timeout=120, post_open=True):
|
||||
'''
|
||||
It starts an instance and rebind it. Its final state after rebind
|
||||
@@ -1089,13 +1071,7 @@ class DirSrv(SimpleLDAPObject, object):
|
||||
if self.with_systemd():
|
||||
self.log.debug("systemd status -> True")
|
||||
# Do systemd things here ...
|
||||
- try:
|
||||
- subprocess.check_output(["systemctl", "start", "dirsrv@%s" % self.serverid], stderr=subprocess.STDOUT)
|
||||
- except subprocess.CalledProcessError as e:
|
||||
- self.dump_errorlog()
|
||||
- self.log.error('Failed to start dirsrv@%s: "%s"' % (self.serverid, e.output.decode()))
|
||||
- self.log.error(e)
|
||||
- raise ValueError('Failed to start DS')
|
||||
+ subprocess.check_output(["systemctl", "start", "dirsrv@%s" % self.serverid], stderr=subprocess.STDOUT)
|
||||
else:
|
||||
self.log.debug("systemd status -> False")
|
||||
# Start the process.
|
||||
@@ -1119,7 +1095,6 @@ class DirSrv(SimpleLDAPObject, object):
|
||||
self.log.debug("DEBUG: starting with %s" % cmd)
|
||||
output = subprocess.check_output(*cmd, env=env, stderr=subprocess.STDOUT)
|
||||
except subprocess.CalledProcessError as e:
|
||||
- self.dump_errorlog()
|
||||
self.log.error('Failed to start ns-slapd: "%s"' % e.output.decode())
|
||||
self.log.error(e)
|
||||
raise ValueError('Failed to start DS')
|
|
@ -1,946 +0,0 @@
|
|||
|
||||
%global pkgname dirsrv
|
||||
%global srcname 389-ds-base
|
||||
|
||||
# Exclude i686 bit arches
|
||||
ExcludeArch: i686
|
||||
|
||||
# for a pre-release, define the prerel field e.g. .a1 .rc2 - comment out for official release
|
||||
# also remove the space between % and global - this space is needed because
|
||||
# fedpkg verrel stupidly ignores comment lines
|
||||
#% global prerel .rc3
|
||||
# also need the relprefix field for a pre-release e.g. .0 - also comment out for official release
|
||||
#% global relprefix 0.
|
||||
|
||||
# If perl-Socket-2.000 or newer is available, set 0 to use_Socket6.
|
||||
%global use_Socket6 0
|
||||
|
||||
%global use_asan 0
|
||||
%global use_rust 1
|
||||
%global use_legacy 1
|
||||
%global bundle_jemalloc 1
|
||||
%if %{use_asan}
|
||||
%global bundle_jemalloc 0
|
||||
%endif
|
||||
|
||||
%if %{bundle_jemalloc}
|
||||
%global jemalloc_name jemalloc
|
||||
%global jemalloc_ver 5.3.0
|
||||
%global __provides_exclude ^libjemalloc\\.so.*$
|
||||
%endif
|
||||
|
||||
# Use Clang instead of GCC
|
||||
%global use_clang 0
|
||||
|
||||
# fedora 15 and later uses tmpfiles.d
|
||||
# otherwise, comment this out
|
||||
%{!?with_tmpfiles_d: %global with_tmpfiles_d %{_sysconfdir}/tmpfiles.d}
|
||||
|
||||
# systemd support
|
||||
%global groupname %{pkgname}.target
|
||||
|
||||
# set PIE flag
|
||||
%global _hardened_build 1
|
||||
|
||||
# Filter argparse-manpage from autogenerated package Requires
|
||||
%global __requires_exclude ^python.*argparse-manpage
|
||||
|
||||
Summary: 389 Directory Server (base)
|
||||
Name: 389-ds-base
|
||||
Version: 1.4.3.37
|
||||
Release: %{?relprefix}1%{?prerel}%{?dist}
|
||||
License: GPLv3+ and (ASL 2.0 or MIT)
|
||||
URL: https://www.port389.org
|
||||
Group: System Environment/Daemons
|
||||
Conflicts: selinux-policy-base < 3.9.8
|
||||
Conflicts: freeipa-server < 4.0.3
|
||||
Obsoletes: %{name} <= 1.4.0.9
|
||||
Provides: ldif2ldbm >= 0
|
||||
|
||||
##### Bundled cargo crates list - START #####
|
||||
Provides: bundled(crate(addr2line)) = 0.20.0
|
||||
Provides: bundled(crate(adler)) = 1.0.2
|
||||
Provides: bundled(crate(ahash)) = 0.7.6
|
||||
Provides: bundled(crate(ansi_term)) = 0.12.1
|
||||
Provides: bundled(crate(atty)) = 0.2.14
|
||||
Provides: bundled(crate(autocfg)) = 1.1.0
|
||||
Provides: bundled(crate(backtrace)) = 0.3.68
|
||||
Provides: bundled(crate(base64)) = 0.13.1
|
||||
Provides: bundled(crate(bitflags)) = 1.3.2
|
||||
Provides: bundled(crate(byteorder)) = 1.4.3
|
||||
Provides: bundled(crate(cbindgen)) = 0.9.1
|
||||
Provides: bundled(crate(cc)) = 1.0.79
|
||||
Provides: bundled(crate(cfg-if)) = 1.0.0
|
||||
Provides: bundled(crate(clap)) = 2.34.0
|
||||
Provides: bundled(crate(concread)) = 0.2.21
|
||||
Provides: bundled(crate(crossbeam)) = 0.8.2
|
||||
Provides: bundled(crate(crossbeam-channel)) = 0.5.8
|
||||
Provides: bundled(crate(crossbeam-deque)) = 0.8.3
|
||||
Provides: bundled(crate(crossbeam-epoch)) = 0.9.15
|
||||
Provides: bundled(crate(crossbeam-queue)) = 0.3.8
|
||||
Provides: bundled(crate(crossbeam-utils)) = 0.8.16
|
||||
Provides: bundled(crate(entryuuid)) = 0.1.0
|
||||
Provides: bundled(crate(entryuuid_syntax)) = 0.1.0
|
||||
Provides: bundled(crate(errno)) = 0.3.1
|
||||
Provides: bundled(crate(errno-dragonfly)) = 0.1.2
|
||||
Provides: bundled(crate(fastrand)) = 1.9.0
|
||||
Provides: bundled(crate(fernet)) = 0.1.4
|
||||
Provides: bundled(crate(foreign-types)) = 0.3.2
|
||||
Provides: bundled(crate(foreign-types-shared)) = 0.1.1
|
||||
Provides: bundled(crate(getrandom)) = 0.2.10
|
||||
Provides: bundled(crate(gimli)) = 0.27.3
|
||||
Provides: bundled(crate(hashbrown)) = 0.12.3
|
||||
Provides: bundled(crate(hermit-abi)) = 0.1.19
|
||||
Provides: bundled(crate(hermit-abi)) = 0.3.2
|
||||
Provides: bundled(crate(instant)) = 0.1.12
|
||||
Provides: bundled(crate(io-lifetimes)) = 1.0.11
|
||||
Provides: bundled(crate(itoa)) = 1.0.8
|
||||
Provides: bundled(crate(jobserver)) = 0.1.26
|
||||
Provides: bundled(crate(libc)) = 0.2.147
|
||||
Provides: bundled(crate(librnsslapd)) = 0.1.0
|
||||
Provides: bundled(crate(librslapd)) = 0.1.0
|
||||
Provides: bundled(crate(linux-raw-sys)) = 0.3.8
|
||||
Provides: bundled(crate(lock_api)) = 0.4.10
|
||||
Provides: bundled(crate(log)) = 0.4.19
|
||||
Provides: bundled(crate(lru)) = 0.7.8
|
||||
Provides: bundled(crate(memchr)) = 2.5.0
|
||||
Provides: bundled(crate(memoffset)) = 0.9.0
|
||||
Provides: bundled(crate(miniz_oxide)) = 0.7.1
|
||||
Provides: bundled(crate(object)) = 0.31.1
|
||||
Provides: bundled(crate(once_cell)) = 1.18.0
|
||||
Provides: bundled(crate(openssl)) = 0.10.55
|
||||
Provides: bundled(crate(openssl-macros)) = 0.1.1
|
||||
Provides: bundled(crate(openssl-sys)) = 0.9.90
|
||||
Provides: bundled(crate(parking_lot)) = 0.11.2
|
||||
Provides: bundled(crate(parking_lot_core)) = 0.8.6
|
||||
Provides: bundled(crate(paste)) = 0.1.18
|
||||
Provides: bundled(crate(paste-impl)) = 0.1.18
|
||||
Provides: bundled(crate(pin-project-lite)) = 0.2.10
|
||||
Provides: bundled(crate(pkg-config)) = 0.3.27
|
||||
Provides: bundled(crate(ppv-lite86)) = 0.2.17
|
||||
Provides: bundled(crate(proc-macro-hack)) = 0.5.20+deprecated
|
||||
Provides: bundled(crate(proc-macro2)) = 1.0.64
|
||||
Provides: bundled(crate(pwdchan)) = 0.1.0
|
||||
Provides: bundled(crate(quote)) = 1.0.29
|
||||
Provides: bundled(crate(rand)) = 0.8.5
|
||||
Provides: bundled(crate(rand_chacha)) = 0.3.1
|
||||
Provides: bundled(crate(rand_core)) = 0.6.4
|
||||
Provides: bundled(crate(redox_syscall)) = 0.2.16
|
||||
Provides: bundled(crate(redox_syscall)) = 0.3.5
|
||||
Provides: bundled(crate(rsds)) = 0.1.0
|
||||
Provides: bundled(crate(rustc-demangle)) = 0.1.23
|
||||
Provides: bundled(crate(rustix)) = 0.37.23
|
||||
Provides: bundled(crate(ryu)) = 1.0.14
|
||||
Provides: bundled(crate(scopeguard)) = 1.1.0
|
||||
Provides: bundled(crate(serde)) = 1.0.171
|
||||
Provides: bundled(crate(serde_derive)) = 1.0.171
|
||||
Provides: bundled(crate(serde_json)) = 1.0.100
|
||||
Provides: bundled(crate(slapd)) = 0.1.0
|
||||
Provides: bundled(crate(slapi_r_plugin)) = 0.1.0
|
||||
Provides: bundled(crate(smallvec)) = 1.11.0
|
||||
Provides: bundled(crate(strsim)) = 0.8.0
|
||||
Provides: bundled(crate(syn)) = 1.0.109
|
||||
Provides: bundled(crate(syn)) = 2.0.25
|
||||
Provides: bundled(crate(tempfile)) = 3.6.0
|
||||
Provides: bundled(crate(textwrap)) = 0.11.0
|
||||
Provides: bundled(crate(tokio)) = 1.29.1
|
||||
Provides: bundled(crate(tokio-macros)) = 2.1.0
|
||||
Provides: bundled(crate(toml)) = 0.5.11
|
||||
Provides: bundled(crate(unicode-ident)) = 1.0.10
|
||||
Provides: bundled(crate(unicode-width)) = 0.1.10
|
||||
Provides: bundled(crate(uuid)) = 0.8.2
|
||||
Provides: bundled(crate(vcpkg)) = 0.2.15
|
||||
Provides: bundled(crate(vec_map)) = 0.8.2
|
||||
Provides: bundled(crate(version_check)) = 0.9.4
|
||||
Provides: bundled(crate(wasi)) = 0.11.0+wasi_snapshot_preview1
|
||||
Provides: bundled(crate(winapi)) = 0.3.9
|
||||
Provides: bundled(crate(winapi-i686-pc-windows-gnu)) = 0.4.0
|
||||
Provides: bundled(crate(winapi-x86_64-pc-windows-gnu)) = 0.4.0
|
||||
Provides: bundled(crate(windows-sys)) = 0.48.0
|
||||
Provides: bundled(crate(windows-targets)) = 0.48.1
|
||||
Provides: bundled(crate(windows_aarch64_gnullvm)) = 0.48.0
|
||||
Provides: bundled(crate(windows_aarch64_msvc)) = 0.48.0
|
||||
Provides: bundled(crate(windows_i686_gnu)) = 0.48.0
|
||||
Provides: bundled(crate(windows_i686_msvc)) = 0.48.0
|
||||
Provides: bundled(crate(windows_x86_64_gnu)) = 0.48.0
|
||||
Provides: bundled(crate(windows_x86_64_gnullvm)) = 0.48.0
|
||||
Provides: bundled(crate(windows_x86_64_msvc)) = 0.48.0
|
||||
Provides: bundled(crate(zeroize)) = 1.6.0
|
||||
Provides: bundled(crate(zeroize_derive)) = 1.4.2
|
||||
##### Bundled cargo crates list - END #####
|
||||
|
||||
BuildRequires: nspr-devel >= 4.32
|
||||
BuildRequires: nss-devel >= 3.67.0-7
|
||||
BuildRequires: perl-generators
|
||||
BuildRequires: openldap-devel
|
||||
BuildRequires: libdb-devel
|
||||
BuildRequires: cyrus-sasl-devel
|
||||
BuildRequires: icu
|
||||
BuildRequires: libicu-devel
|
||||
BuildRequires: pcre-devel
|
||||
BuildRequires: cracklib-devel
|
||||
%if %{use_clang}
|
||||
BuildRequires: libatomic
|
||||
BuildRequires: clang
|
||||
%else
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
%endif
|
||||
# The following are needed to build the snmp ldap-agent
|
||||
BuildRequires: net-snmp-devel
|
||||
BuildRequires: lm_sensors-devel
|
||||
BuildRequires: bzip2-devel
|
||||
BuildRequires: zlib-devel
|
||||
BuildRequires: openssl-devel
|
||||
# the following is for the pam passthru auth plug-in
|
||||
BuildRequires: pam-devel
|
||||
BuildRequires: systemd-units
|
||||
BuildRequires: systemd-devel
|
||||
%if %{use_asan}
|
||||
BuildRequires: libasan
|
||||
%endif
|
||||
# If rust is enabled
|
||||
%if %{use_rust}
|
||||
BuildRequires: cargo
|
||||
BuildRequires: rust
|
||||
%endif
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
BuildRequires: pkgconfig(krb5)
|
||||
|
||||
# Needed to support regeneration of the autotool artifacts.
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: automake
|
||||
BuildRequires: libtool
|
||||
# For our documentation
|
||||
BuildRequires: doxygen
|
||||
# For tests!
|
||||
BuildRequires: libcmocka-devel
|
||||
BuildRequires: libevent-devel
|
||||
# For lib389 and related components
|
||||
BuildRequires: python%{python3_pkgversion}
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: python%{python3_pkgversion}-setuptools
|
||||
BuildRequires: python%{python3_pkgversion}-ldap
|
||||
BuildRequires: python%{python3_pkgversion}-six
|
||||
BuildRequires: python%{python3_pkgversion}-pyasn1
|
||||
BuildRequires: python%{python3_pkgversion}-pyasn1-modules
|
||||
BuildRequires: python%{python3_pkgversion}-dateutil
|
||||
BuildRequires: python%{python3_pkgversion}-argcomplete
|
||||
BuildRequires: python%{python3_pkgversion}-argparse-manpage
|
||||
BuildRequires: python%{python3_pkgversion}-policycoreutils
|
||||
BuildRequires: python%{python3_pkgversion}-libselinux
|
||||
BuildRequires: python%{python3_pkgversion}-cryptography
|
||||
|
||||
# For cockpit
|
||||
BuildRequires: rsync
|
||||
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: python%{python3_pkgversion}-lib389 = %{version}-%{release}
|
||||
|
||||
# this is needed for using semanage from our setup scripts
|
||||
Requires: policycoreutils-python-utils
|
||||
Requires: /usr/sbin/semanage
|
||||
Requires: libsemanage-python%{python3_pkgversion}
|
||||
|
||||
Requires: selinux-policy >= 3.14.1-29
|
||||
|
||||
# the following are needed for some of our scripts
|
||||
Requires: openldap-clients
|
||||
Requires: openssl-perl
|
||||
Requires: python%{python3_pkgversion}-ldap
|
||||
|
||||
# this is needed to setup SSL if you are not using the
|
||||
# administration server package
|
||||
Requires: nss-tools
|
||||
Requires: nspr >= 4.32
|
||||
Requires: nss >= 3.67.0-7
|
||||
|
||||
# these are not found by the auto-dependency method
|
||||
# they are required to support the mandatory LDAP SASL mechs
|
||||
Requires: cyrus-sasl-gssapi
|
||||
Requires: cyrus-sasl-md5
|
||||
Requires: cyrus-sasl-plain
|
||||
|
||||
# this is needed for verify-db.pl
|
||||
Requires: libdb-utils
|
||||
|
||||
# Needed for password dictionary checks
|
||||
Requires: cracklib-dicts
|
||||
|
||||
# This picks up libperl.so as a Requires, so we add this versioned one
|
||||
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
|
||||
Requires: perl-Errno >= 1.23-360
|
||||
|
||||
# Needed by logconv.pl
|
||||
Requires: perl-DB_File
|
||||
Requires: perl-Archive-Tar
|
||||
|
||||
# Needed for password dictionary checks
|
||||
Requires: cracklib-dicts
|
||||
|
||||
# Picks up our systemd deps.
|
||||
%{?systemd_requires}
|
||||
|
||||
Obsoletes: %{name} <= 1.3.5.4
|
||||
|
||||
Source0: https://releases.pagure.org/389-ds-base/%{name}-%{version}.tar.bz2
|
||||
# 389-ds-git.sh should be used to generate the source tarball from git
|
||||
Source1: %{name}-git.sh
|
||||
Source2: %{name}-devel.README
|
||||
%if %{bundle_jemalloc}
|
||||
Source3: https://github.com/jemalloc/%{jemalloc_name}/releases/download/%{jemalloc_ver}/%{jemalloc_name}-%{jemalloc_ver}.tar.bz2
|
||||
%endif
|
||||
%if %{use_rust}
|
||||
Source4: vendor-%{version}-1.tar.gz
|
||||
Source5: Cargo-%{version}-1.lock
|
||||
%endif
|
||||
|
||||
%description
|
||||
389 Directory Server is an LDAPv3 compliant server. The base package includes
|
||||
the LDAP server and command line utilities for server administration.
|
||||
%if %{use_asan}
|
||||
WARNING! This build is linked to Address Sanitisation libraries. This probably
|
||||
isn't what you want. Please contact support immediately.
|
||||
Please see http://seclists.org/oss-sec/2016/q1/363 for more information.
|
||||
%endif
|
||||
|
||||
%package libs
|
||||
Summary: Core libraries for 389 Directory Server
|
||||
Group: System Environment/Daemons
|
||||
BuildRequires: nspr-devel >= 4.32
|
||||
BuildRequires: nss-devel >= 3.67.0-7
|
||||
BuildRequires: openldap-devel
|
||||
BuildRequires: libdb-devel
|
||||
BuildRequires: cyrus-sasl-devel
|
||||
BuildRequires: libicu-devel
|
||||
BuildRequires: pcre-devel
|
||||
BuildRequires: libtalloc-devel
|
||||
BuildRequires: libevent-devel
|
||||
BuildRequires: libtevent-devel
|
||||
Requires: krb5-libs
|
||||
Requires: libevent
|
||||
BuildRequires: systemd-devel
|
||||
Provides: svrcore = 4.1.4
|
||||
Conflicts: svrcore
|
||||
Obsoletes: svrcore <= 4.1.3
|
||||
|
||||
%description libs
|
||||
Core libraries for the 389 Directory Server base package. These libraries
|
||||
are used by the main package and the -devel package. This allows the -devel
|
||||
package to be installed with just the -libs package and without the main package.
|
||||
|
||||
%if %{use_legacy}
|
||||
%package legacy-tools
|
||||
Summary: Legacy utilities for 389 Directory Server
|
||||
Group: System Environment/Daemons
|
||||
Obsoletes: %{name} <= 1.4.0.9
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
# for setup-ds.pl to support ipv6
|
||||
%if %{use_Socket6}
|
||||
Requires: perl-Socket6
|
||||
%else
|
||||
Requires: perl-Socket
|
||||
%endif
|
||||
Requires: perl-NetAddr-IP
|
||||
# use_openldap assumes perl-Mozilla-LDAP is built with openldap support
|
||||
Requires: perl-Mozilla-LDAP
|
||||
# for setup-ds.pl
|
||||
Requires: bind-utils
|
||||
%global __provides_exclude_from %{_libdir}/%{pkgname}/perl
|
||||
%global __requires_exclude perl\\((DSCreate|DSMigration|DSUpdate|DSUtil|Dialog|DialogManager|FileConn|Inf|Migration|Resource|Setup|SetupLog)
|
||||
%{?perl_default_filter}
|
||||
|
||||
%description legacy-tools
|
||||
Legacy (and deprecated) utilities for 389 Directory Server. This includes
|
||||
the old account management and task scripts. These are deprecated in favour of
|
||||
the dscreate, dsctl, dsconf and dsidm tools.
|
||||
%endif
|
||||
|
||||
%package devel
|
||||
Summary: Development libraries for 389 Directory Server
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: pkgconfig
|
||||
Requires: nspr-devel >= 4.32
|
||||
Requires: nss-devel >= 3.67.0-7
|
||||
Requires: openldap-devel
|
||||
Requires: libtalloc
|
||||
Requires: libevent
|
||||
Requires: libtevent
|
||||
Requires: systemd-libs
|
||||
Provides: svrcore-devel = 4.1.4
|
||||
Conflicts: svrcore-devel
|
||||
Obsoletes: svrcore-devel <= 4.1.3
|
||||
|
||||
%description devel
|
||||
Development Libraries and headers for the 389 Directory Server base package.
|
||||
|
||||
%package snmp
|
||||
Summary: SNMP Agent for 389 Directory Server
|
||||
Group: System Environment/Daemons
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
Obsoletes: %{name} <= 1.4.0.0
|
||||
|
||||
%description snmp
|
||||
SNMP Agent for the 389 Directory Server base package.
|
||||
|
||||
%package -n python%{python3_pkgversion}-lib389
|
||||
Summary: A library for accessing, testing, and configuring the 389 Directory Server
|
||||
BuildArch: noarch
|
||||
Group: Development/Libraries
|
||||
Requires: 389-ds-base
|
||||
Requires: openssl
|
||||
Requires: iproute
|
||||
Requires: platform-python
|
||||
Recommends: bash-completion
|
||||
Requires: python%{python3_pkgversion}-ldap
|
||||
Requires: python%{python3_pkgversion}-six
|
||||
Requires: python%{python3_pkgversion}-pyasn1
|
||||
Requires: python%{python3_pkgversion}-pyasn1-modules
|
||||
Requires: python%{python3_pkgversion}-dateutil
|
||||
Requires: python%{python3_pkgversion}-argcomplete
|
||||
Requires: python%{python3_pkgversion}-libselinux
|
||||
Requires: python%{python3_pkgversion}-setuptools
|
||||
Requires: python%{python3_pkgversion}-distro
|
||||
Requires: python%{python3_pkgversion}-cryptography
|
||||
%{?python_provide:%python_provide python%{python3_pkgversion}-lib389}
|
||||
|
||||
%description -n python%{python3_pkgversion}-lib389
|
||||
This module contains tools and libraries for accessing, testing,
|
||||
and configuring the 389 Directory Server.
|
||||
|
||||
%package -n cockpit-389-ds
|
||||
Summary: Cockpit UI Plugin for configuring and administering the 389 Directory Server
|
||||
BuildArch: noarch
|
||||
Requires: cockpit
|
||||
Requires: platform-python
|
||||
Requires: python%{python3_pkgversion}-lib389
|
||||
|
||||
%description -n cockpit-389-ds
|
||||
A cockpit UI Plugin for configuring and administering the 389 Directory Server
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -v -n %{name}-%{version}%{?prerel}
|
||||
%if %{use_rust}
|
||||
tar xvzf %{SOURCE4}
|
||||
cp %{SOURCE5} src/Cargo.lock
|
||||
%endif
|
||||
%if %{bundle_jemalloc}
|
||||
%setup -q -n %{name}-%{version}%{?prerel} -T -D -b 3
|
||||
%endif
|
||||
cp %{SOURCE2} README.devel
|
||||
|
||||
%build
|
||||
|
||||
OPENLDAP_FLAG="--with-openldap"
|
||||
%{?with_tmpfiles_d: TMPFILES_FLAG="--with-tmpfiles-d=%{with_tmpfiles_d}"}
|
||||
# hack hack hack https://bugzilla.redhat.com/show_bug.cgi?id=833529
|
||||
NSSARGS="--with-nss-lib=%{_libdir} --with-nss-inc=%{_includedir}/nss3"
|
||||
|
||||
%if %{use_asan}
|
||||
ASAN_FLAGS="--enable-asan --enable-debug"
|
||||
%endif
|
||||
|
||||
%if %{use_rust}
|
||||
RUST_FLAGS="--enable-rust --enable-rust-offline"
|
||||
%endif
|
||||
|
||||
%if %{use_legacy}
|
||||
LEGACY_FLAGS="--enable-legacy --enable-perl"
|
||||
%else
|
||||
LEGACY_FLAGS="--disable-legacy --disable-perl"
|
||||
%endif
|
||||
|
||||
%if %{use_clang}
|
||||
export CC=clang
|
||||
export CXX=clang++
|
||||
CLANG_FLAGS="--enable-clang"
|
||||
%endif
|
||||
|
||||
%if %{bundle_jemalloc}
|
||||
# Override page size, bz #1545539
|
||||
# 4K
|
||||
%ifarch %ix86 %arm x86_64 s390x
|
||||
%define lg_page --with-lg-page=12
|
||||
%endif
|
||||
|
||||
# 64K
|
||||
%ifarch ppc64 ppc64le aarch64
|
||||
%define lg_page --with-lg-page=16
|
||||
%endif
|
||||
|
||||
# Override huge page size on aarch64
|
||||
# 2M instead of 512M
|
||||
%ifarch aarch64
|
||||
%define lg_hugepage --with-lg-hugepage=21
|
||||
%endif
|
||||
|
||||
# Build jemalloc
|
||||
pushd ../%{jemalloc_name}-%{jemalloc_ver}
|
||||
%configure \
|
||||
--libdir=%{_libdir}/%{pkgname}/lib \
|
||||
--bindir=%{_libdir}/%{pkgname}/bin \
|
||||
--enable-prof
|
||||
make %{?_smp_mflags}
|
||||
popd
|
||||
%endif
|
||||
|
||||
|
||||
# Enforce strict linking
|
||||
%define _strict_symbol_defs_build 1
|
||||
|
||||
# Rebuild the autotool artifacts now.
|
||||
autoreconf -fiv
|
||||
|
||||
%configure --enable-autobind --with-selinux $OPENLDAP_FLAG $TMPFILES_FLAG \
|
||||
--with-systemd \
|
||||
--with-systemdsystemunitdir=%{_unitdir} \
|
||||
--with-systemdsystemconfdir=%{_sysconfdir}/systemd/system \
|
||||
--with-systemdgroupname=%{groupname} \
|
||||
--libexecdir=%{_libexecdir}/%{pkgname} \
|
||||
$NSSARGS $ASAN_FLAGS $RUST_FLAGS $LEGACY_FLAGS $CLANG_FLAGS \
|
||||
--enable-cmocka
|
||||
|
||||
# lib389
|
||||
pushd ./src/lib389
|
||||
%py3_build
|
||||
popd
|
||||
# argparse-manpage dynamic man pages have hardcoded man v1 in header,
|
||||
# need to change it to v8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dsconf.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dsctl.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dsidm.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dscreate.8
|
||||
|
||||
# Generate symbolic info for debuggers
|
||||
export XCFLAGS=$RPM_OPT_FLAGS
|
||||
|
||||
#make %{?_smp_mflags}
|
||||
make
|
||||
|
||||
%install
|
||||
|
||||
mkdir -p %{buildroot}%{_datadir}/gdb/auto-load%{_sbindir}
|
||||
mkdir -p %{buildroot}%{_datadir}/cockpit
|
||||
make DESTDIR="$RPM_BUILD_ROOT" install
|
||||
|
||||
# Cockpit file list
|
||||
find %{buildroot}%{_datadir}/cockpit/389-console -type d | sed -e "s@%{buildroot}@@" | sed -e 's/^/\%dir /' > cockpit.list
|
||||
find %{buildroot}%{_datadir}/cockpit/389-console -type f | sed -e "s@%{buildroot}@@" >> cockpit.list
|
||||
|
||||
# Copy in our docs from doxygen.
|
||||
cp -r %{_builddir}/%{name}-%{version}%{?prerel}/man/man3 $RPM_BUILD_ROOT/%{_mandir}/man3
|
||||
|
||||
# lib389
|
||||
pushd src/lib389
|
||||
%py3_install
|
||||
popd
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT/var/log/%{pkgname}
|
||||
mkdir -p $RPM_BUILD_ROOT/var/lib/%{pkgname}
|
||||
mkdir -p $RPM_BUILD_ROOT/var/3lock/%{pkgname}
|
||||
|
||||
# for systemd
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/%{groupname}.wants
|
||||
|
||||
#remove libtool archives and static libs
|
||||
find %{buildroot} -type f -name "*.la" -delete
|
||||
find %{buildroot} -type f -name "*.a" -delete
|
||||
|
||||
%if %{use_legacy}
|
||||
# make sure perl scripts have a proper shebang
|
||||
sed -i -e 's|#{{PERL-EXEC}}|#!/usr/bin/perl|' $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/script-templates/template-*.pl
|
||||
%endif
|
||||
|
||||
%if %{bundle_jemalloc}
|
||||
pushd ../%{jemalloc_name}-%{jemalloc_ver}
|
||||
make DESTDIR="$RPM_BUILD_ROOT" install_lib install_bin
|
||||
cp -pa COPYING ../%{name}-%{version}%{?prerel}/COPYING.jemalloc
|
||||
cp -pa README ../%{name}-%{version}%{?prerel}/README.jemalloc
|
||||
popd
|
||||
%endif
|
||||
|
||||
%check
|
||||
# This checks the code, if it fails it prints why, then re-raises the fail to shortcircuit the rpm build.
|
||||
if ! make DESTDIR="$RPM_BUILD_ROOT" check; then cat ./test-suite.log && false; fi
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%post
|
||||
if [ -n "$DEBUGPOSTTRANS" ] ; then
|
||||
output=$DEBUGPOSTTRANS
|
||||
output2=${DEBUGPOSTTRANS}.upgrade
|
||||
else
|
||||
output=/dev/null
|
||||
output2=/dev/null
|
||||
fi
|
||||
|
||||
# reload to pick up any changes to systemd files
|
||||
/bin/systemctl daemon-reload >$output 2>&1 || :
|
||||
|
||||
# https://fedoraproject.org/wiki/Packaging:UsersAndGroups#Soft_static_allocation
|
||||
# Soft static allocation for UID and GID
|
||||
USERNAME="dirsrv"
|
||||
ALLOCATED_UID=389
|
||||
GROUPNAME="dirsrv"
|
||||
ALLOCATED_GID=389
|
||||
HOMEDIR="/usr/share/dirsrv"
|
||||
|
||||
getent group $GROUPNAME >/dev/null || /usr/sbin/groupadd -f -g $ALLOCATED_GID -r $GROUPNAME
|
||||
if ! getent passwd $USERNAME >/dev/null ; then
|
||||
if ! getent passwd $ALLOCATED_UID >/dev/null ; then
|
||||
/usr/sbin/useradd -r -u $ALLOCATED_UID -g $GROUPNAME -d $HOMEDIR -s /sbin/nologin -c "user for 389-ds-base" $USERNAME
|
||||
else
|
||||
/usr/sbin/useradd -r -g $GROUPNAME -d $HOMEDIR -s /sbin/nologin -c "user for 389-ds-base" $USERNAME
|
||||
fi
|
||||
fi
|
||||
|
||||
# Reload our sysctl before we restart (if we can)
|
||||
sysctl --system &> $output; true
|
||||
|
||||
%preun
|
||||
if [ $1 -eq 0 ]; then # Final removal
|
||||
# remove instance specific service files/links
|
||||
rm -rf %{_sysconfdir}/systemd/system/%{groupname}.wants/* > /dev/null 2>&1 || :
|
||||
fi
|
||||
|
||||
%postun
|
||||
if [ $1 = 0 ]; then # Final removal
|
||||
rm -rf /var/run/%{pkgname}
|
||||
fi
|
||||
|
||||
%post snmp
|
||||
%systemd_post %{pkgname}-snmp.service
|
||||
|
||||
%preun snmp
|
||||
%systemd_preun %{pkgname}-snmp.service %{groupname}
|
||||
|
||||
%postun snmp
|
||||
%systemd_postun_with_restart %{pkgname}-snmp.service
|
||||
|
||||
%if %{use_legacy}
|
||||
%post legacy-tools
|
||||
|
||||
# START UPGRADE SCRIPT
|
||||
|
||||
if [ -n "$DEBUGPOSTTRANS" ] ; then
|
||||
output=$DEBUGPOSTTRANS
|
||||
output2=${DEBUGPOSTTRANS}.upgrade
|
||||
else
|
||||
output=/dev/null
|
||||
output2=/dev/null
|
||||
fi
|
||||
|
||||
# find all instances
|
||||
instances="" # instances that require a restart after upgrade
|
||||
ninst=0 # number of instances found in total
|
||||
|
||||
echo looking for instances in %{_sysconfdir}/%{pkgname} > $output 2>&1 || :
|
||||
instbase="%{_sysconfdir}/%{pkgname}"
|
||||
for dir in $instbase/slapd-* ; do
|
||||
echo dir = $dir >> $output 2>&1 || :
|
||||
if [ ! -d "$dir" ] ; then continue ; fi
|
||||
case "$dir" in *.removed) continue ;; esac
|
||||
basename=`basename $dir`
|
||||
inst="%{pkgname}@`echo $basename | sed -e 's/slapd-//g'`"
|
||||
echo found instance $inst - getting status >> $output 2>&1 || :
|
||||
if /bin/systemctl -q is-active $inst ; then
|
||||
echo instance $inst is running >> $output 2>&1 || :
|
||||
instances="$instances $inst"
|
||||
else
|
||||
echo instance $inst is not running >> $output 2>&1 || :
|
||||
fi
|
||||
ninst=`expr $ninst + 1`
|
||||
done
|
||||
if [ $ninst -eq 0 ] ; then
|
||||
echo no instances to upgrade >> $output 2>&1 || :
|
||||
exit 0 # have no instances to upgrade - just skip the rest
|
||||
fi
|
||||
# shutdown all instances
|
||||
echo shutting down all instances . . . >> $output 2>&1 || :
|
||||
for inst in $instances ; do
|
||||
echo stopping instance $inst >> $output 2>&1 || :
|
||||
/bin/systemctl stop $inst >> $output 2>&1 || :
|
||||
done
|
||||
echo remove pid files . . . >> $output 2>&1 || :
|
||||
/bin/rm -f /var/run/%{pkgname}*.pid /var/run/%{pkgname}*.startpid
|
||||
# do the upgrade
|
||||
echo upgrading instances . . . >> $output 2>&1 || :
|
||||
DEBUGPOSTSETUPOPT=`/usr/bin/echo $DEBUGPOSTSETUP | /usr/bin/sed -e "s/[^d]//g"`
|
||||
if [ -n "$DEBUGPOSTSETUPOPT" ] ; then
|
||||
%{_sbindir}/setup-ds.pl -$DEBUGPOSTSETUPOPT -u -s General.UpdateMode=offline >> $output 2>&1 || :
|
||||
else
|
||||
%{_sbindir}/setup-ds.pl -u -s General.UpdateMode=offline >> $output 2>&1 || :
|
||||
fi
|
||||
|
||||
# restart instances that require it
|
||||
for inst in $instances ; do
|
||||
echo restarting instance $inst >> $output 2>&1 || :
|
||||
/bin/systemctl start $inst >> $output 2>&1 || :
|
||||
done
|
||||
#END UPGRADE
|
||||
%endif
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
%files
|
||||
%if %{bundle_jemalloc}
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.jemalloc
|
||||
%license COPYING.jemalloc
|
||||
%else
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl
|
||||
%endif
|
||||
%dir %{_sysconfdir}/%{pkgname}
|
||||
%dir %{_sysconfdir}/%{pkgname}/schema
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/schema/*.ldif
|
||||
%dir %{_sysconfdir}/%{pkgname}/config
|
||||
%dir %{_sysconfdir}/systemd/system/%{groupname}.wants
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/slapd-collations.conf
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/certmap.conf
|
||||
%{_datadir}/%{pkgname}
|
||||
%{_datadir}/gdb/auto-load/*
|
||||
%{_unitdir}
|
||||
%{_bindir}/dbscan
|
||||
%{_mandir}/man1/dbscan.1.gz
|
||||
%{_bindir}/ds-replcheck
|
||||
%{_mandir}/man1/ds-replcheck.1.gz
|
||||
%{_bindir}/ds-logpipe.py
|
||||
%{_mandir}/man1/ds-logpipe.py.1.gz
|
||||
%{_bindir}/ldclt
|
||||
%{_mandir}/man1/ldclt.1.gz
|
||||
%{_sbindir}/ldif2ldap
|
||||
%{_mandir}/man8/ldif2ldap.8.gz
|
||||
%{_bindir}/logconv.pl
|
||||
%{_mandir}/man1/logconv.pl.1.gz
|
||||
%{_bindir}/pwdhash
|
||||
%{_mandir}/man1/pwdhash.1.gz
|
||||
%{_bindir}/readnsstate
|
||||
%{_mandir}/man1/readnsstate.1.gz
|
||||
# Remove for now: %caps(CAP_NET_BIND_SERVICE=pe) {_sbindir}/ns-slapd
|
||||
%{_sbindir}/ns-slapd
|
||||
%{_mandir}/man8/ns-slapd.8.gz
|
||||
%{_libexecdir}/%{pkgname}/ds_systemd_ask_password_acl
|
||||
%{_libexecdir}/%{pkgname}/ds_selinux_restorecon.sh
|
||||
%{_mandir}/man5/99user.ldif.5.gz
|
||||
%{_mandir}/man5/certmap.conf.5.gz
|
||||
%{_mandir}/man5/slapd-collations.conf.5.gz
|
||||
%{_mandir}/man5/dirsrv.5.gz
|
||||
%{_mandir}/man5/dirsrv.systemd.5.gz
|
||||
%{_libdir}/%{pkgname}/python
|
||||
%dir %{_libdir}/%{pkgname}/plugins
|
||||
%{_libdir}/%{pkgname}/plugins/*.so
|
||||
# This has to be hardcoded to /lib - $libdir changes between lib/lib64, but
|
||||
# sysctl.d is always in /lib.
|
||||
%{_prefix}/lib/sysctl.d/*
|
||||
%dir %{_localstatedir}/lib/%{pkgname}
|
||||
%dir %{_localstatedir}/log/%{pkgname}
|
||||
%ghost %dir %{_localstatedir}/lock/%{pkgname}
|
||||
%exclude %{_sbindir}/ldap-agent*
|
||||
%exclude %{_mandir}/man1/ldap-agent.1.gz
|
||||
%exclude %{_unitdir}/%{pkgname}-snmp.service
|
||||
%if %{bundle_jemalloc}
|
||||
%{_libdir}/%{pkgname}/lib/
|
||||
%{_libdir}/%{pkgname}/bin/
|
||||
%exclude %{_libdir}/%{pkgname}/bin/jemalloc-config
|
||||
%exclude %{_libdir}/%{pkgname}/bin/jemalloc.sh
|
||||
%exclude %{_libdir}/%{pkgname}/lib/libjemalloc.a
|
||||
%exclude %{_libdir}/%{pkgname}/lib/libjemalloc.so
|
||||
%exclude %{_libdir}/%{pkgname}/lib/libjemalloc_pic.a
|
||||
%exclude %{_libdir}/%{pkgname}/lib/pkgconfig
|
||||
%endif
|
||||
|
||||
%files devel
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%{_mandir}/man3/*
|
||||
%{_includedir}/svrcore.h
|
||||
%{_includedir}/%{pkgname}
|
||||
%{_libdir}/libsvrcore.so
|
||||
%{_libdir}/%{pkgname}/libslapd.so
|
||||
%{_libdir}/%{pkgname}/libns-dshttpd.so
|
||||
%{_libdir}/%{pkgname}/libsds.so
|
||||
%{_libdir}/%{pkgname}/libldaputil.so
|
||||
%{_libdir}/pkgconfig/svrcore.pc
|
||||
%{_libdir}/pkgconfig/dirsrv.pc
|
||||
%{_libdir}/pkgconfig/libsds.pc
|
||||
|
||||
%files libs
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%dir %{_libdir}/%{pkgname}
|
||||
%{_libdir}/libsvrcore.so.*
|
||||
%{_libdir}/%{pkgname}/libslapd.so.*
|
||||
%{_libdir}/%{pkgname}/libns-dshttpd-*.so
|
||||
%{_libdir}/%{pkgname}/libsds.so.*
|
||||
%{_libdir}/%{pkgname}/libldaputil.so.*
|
||||
%{_libdir}/%{pkgname}/librewriters.so*
|
||||
%if %{bundle_jemalloc}
|
||||
%{_libdir}/%{pkgname}/lib/libjemalloc.so.2
|
||||
%endif
|
||||
|
||||
%if %{use_legacy}
|
||||
%files legacy-tools
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%{_bindir}/infadd
|
||||
%{_mandir}/man1/infadd.1.gz
|
||||
%{_bindir}/ldif
|
||||
%{_mandir}/man1/ldif.1.gz
|
||||
%{_bindir}/migratecred
|
||||
%{_mandir}/man1/migratecred.1.gz
|
||||
%{_bindir}/mmldif
|
||||
%{_mandir}/man1/mmldif.1.gz
|
||||
%{_bindir}/rsearch
|
||||
%{_mandir}/man1/rsearch.1.gz
|
||||
%{_libexecdir}/%{pkgname}/ds_selinux_enabled
|
||||
%{_libexecdir}/%{pkgname}/ds_selinux_port_query
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/template-initconfig
|
||||
%{_mandir}/man5/template-initconfig.5.gz
|
||||
%{_datadir}/%{pkgname}/properties/*.res
|
||||
%{_datadir}/%{pkgname}/script-templates
|
||||
%{_datadir}/%{pkgname}/updates
|
||||
%{_sbindir}/ldif2ldap
|
||||
%{_mandir}/man8/ldif2ldap.8.gz
|
||||
%{_sbindir}/bak2db
|
||||
%{_mandir}/man8/bak2db.8.gz
|
||||
%{_sbindir}/db2bak
|
||||
%{_mandir}/man8/db2bak.8.gz
|
||||
%{_sbindir}/db2index
|
||||
%{_mandir}/man8/db2index.8.gz
|
||||
%{_sbindir}/db2ldif
|
||||
%{_mandir}/man8/db2ldif.8.gz
|
||||
%{_sbindir}/dbverify
|
||||
%{_mandir}/man8/dbverify.8.gz
|
||||
%{_sbindir}/ldif2db
|
||||
%{_mandir}/man8/ldif2db.8.gz
|
||||
%{_sbindir}/restart-dirsrv
|
||||
%{_mandir}/man8/restart-dirsrv.8.gz
|
||||
%{_sbindir}/start-dirsrv
|
||||
%{_mandir}/man8/start-dirsrv.8.gz
|
||||
%{_sbindir}/status-dirsrv
|
||||
%{_mandir}/man8/status-dirsrv.8.gz
|
||||
%{_sbindir}/stop-dirsrv
|
||||
%{_mandir}/man8/stop-dirsrv.8.gz
|
||||
%{_sbindir}/upgradedb
|
||||
%{_mandir}/man8/upgradedb.8.gz
|
||||
%{_sbindir}/vlvindex
|
||||
%{_mandir}/man8/vlvindex.8.gz
|
||||
%{_sbindir}/monitor
|
||||
%{_mandir}/man8/monitor.8.gz
|
||||
%{_sbindir}/dbmon.sh
|
||||
%{_mandir}/man8/dbmon.sh.8.gz
|
||||
%{_sbindir}/dn2rdn
|
||||
%{_mandir}/man8/dn2rdn.8.gz
|
||||
%{_sbindir}/restoreconfig
|
||||
%{_mandir}/man8/restoreconfig.8.gz
|
||||
%{_sbindir}/saveconfig
|
||||
%{_mandir}/man8/saveconfig.8.gz
|
||||
%{_sbindir}/suffix2instance
|
||||
%{_mandir}/man8/suffix2instance.8.gz
|
||||
%{_sbindir}/upgradednformat
|
||||
%{_mandir}/man8/upgradednformat.8.gz
|
||||
%{_mandir}/man1/dbgen.pl.1.gz
|
||||
%{_bindir}/repl-monitor
|
||||
%{_mandir}/man1/repl-monitor.1.gz
|
||||
%{_bindir}/repl-monitor.pl
|
||||
%{_mandir}/man1/repl-monitor.pl.1.gz
|
||||
%{_bindir}/cl-dump
|
||||
%{_mandir}/man1/cl-dump.1.gz
|
||||
%{_bindir}/cl-dump.pl
|
||||
%{_mandir}/man1/cl-dump.pl.1.gz
|
||||
%{_bindir}/dbgen.pl
|
||||
%{_mandir}/man8/bak2db.pl.8.gz
|
||||
%{_sbindir}/bak2db.pl
|
||||
%{_sbindir}/cleanallruv.pl
|
||||
%{_mandir}/man8/cleanallruv.pl.8.gz
|
||||
%{_sbindir}/db2bak.pl
|
||||
%{_mandir}/man8/db2bak.pl.8.gz
|
||||
%{_sbindir}/db2index.pl
|
||||
%{_mandir}/man8/db2index.pl.8.gz
|
||||
%{_sbindir}/db2ldif.pl
|
||||
%{_mandir}/man8/db2ldif.pl.8.gz
|
||||
%{_sbindir}/fixup-linkedattrs.pl
|
||||
%{_mandir}/man8/fixup-linkedattrs.pl.8.gz
|
||||
%{_sbindir}/fixup-memberof.pl
|
||||
%{_mandir}/man8/fixup-memberof.pl.8.gz
|
||||
%{_sbindir}/ldif2db.pl
|
||||
%{_mandir}/man8/ldif2db.pl.8.gz
|
||||
%{_sbindir}/migrate-ds.pl
|
||||
%{_mandir}/man8/migrate-ds.pl.8.gz
|
||||
%{_sbindir}/ns-accountstatus.pl
|
||||
%{_mandir}/man8/ns-accountstatus.pl.8.gz
|
||||
%{_sbindir}/ns-activate.pl
|
||||
%{_mandir}/man8/ns-activate.pl.8.gz
|
||||
%{_sbindir}/ns-inactivate.pl
|
||||
%{_mandir}/man8/ns-inactivate.pl.8.gz
|
||||
%{_sbindir}/ns-newpwpolicy.pl
|
||||
%{_mandir}/man8/ns-newpwpolicy.pl.8.gz
|
||||
%{_sbindir}/remove-ds.pl
|
||||
%{_mandir}/man8/remove-ds.pl.8.gz
|
||||
%{_sbindir}/schema-reload.pl
|
||||
%{_mandir}/man8/schema-reload.pl.8.gz
|
||||
%{_sbindir}/setup-ds.pl
|
||||
%{_mandir}/man8/setup-ds.pl.8.gz
|
||||
%{_sbindir}/syntax-validate.pl
|
||||
%{_mandir}/man8/syntax-validate.pl.8.gz
|
||||
%{_sbindir}/usn-tombstone-cleanup.pl
|
||||
%{_mandir}/man8/usn-tombstone-cleanup.pl.8.gz
|
||||
%{_sbindir}/verify-db.pl
|
||||
%{_mandir}/man8/verify-db.pl.8.gz
|
||||
%{_libdir}/%{pkgname}/perl
|
||||
%endif
|
||||
|
||||
%files snmp
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/ldap-agent.conf
|
||||
%{_sbindir}/ldap-agent*
|
||||
%{_mandir}/man1/ldap-agent.1.gz
|
||||
%{_unitdir}/%{pkgname}-snmp.service
|
||||
|
||||
%files -n python%{python3_pkgversion}-lib389
|
||||
%doc LICENSE LICENSE.GPLv3+
|
||||
%{python3_sitelib}/lib389*
|
||||
%{_sbindir}/dsconf
|
||||
%{_mandir}/man8/dsconf.8.gz
|
||||
%{_sbindir}/dscreate
|
||||
%{_mandir}/man8/dscreate.8.gz
|
||||
%{_sbindir}/dsctl
|
||||
%{_mandir}/man8/dsctl.8.gz
|
||||
%{_sbindir}/dsidm
|
||||
%{_mandir}/man8/dsidm.8.gz
|
||||
%{_libexecdir}/%{pkgname}/dscontainer
|
||||
|
||||
%files -n cockpit-389-ds -f cockpit.list
|
||||
%{_datarootdir}/metainfo/389-console/org.port389.cockpit_console.metainfo.xml
|
||||
%doc README.md
|
||||
|
||||
%changelog
|
||||
* Wed Aug 16 2023 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.37-1
|
||||
- Bump versionto 1.4.3.37-1
|
||||
- Resolves: rhbz#2224505 - Paged search impacts performance
|
||||
- Resolves: rhbz#2220890 - healthcheck tool needs to be updates for new default password storage scheme
|
||||
- Resolves: rhbz#2218235 - python3-lib389: Python tarfile extraction needs change to avoid a warning
|
||||
- Resolves: rhbz#2210491 - dtablesize being set to soft maxfiledescriptor limit causing massive slowdown in large enviroments.
|
||||
- Resolves: rhbz#2149967 - SELinux labeling for dirsrv files seen during ipa install/uninstall should be moved to DEBUG
|
||||
|
||||
* Tue Jul 11 2023 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.36-2
|
||||
- Bump version to 1.4.3.36-2
|
||||
- Resolves: rhbz#2220890 - healthcheck tool needs to be updates for new default password storage scheme
|
||||
|
||||
* Wed Jun 14 2023 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.36-1
|
||||
- Bump version to 1.4.3.36-1
|
||||
- Resolves: rhbz#2188628 - Rebase 389-ds-base in RHEL 8.9 to 1.4.3.36
|
||||
|
||||
* Mon May 22 2023 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.35-1
|
||||
- Bump version to 1.4.3.35-1
|
||||
- Resolves: rhbz#2188628 - Rebase 389-ds-base in RHEL 8.9 to 1.4.3.35
|
||||
|
||||
* Tue Nov 15 2022 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.32-1
|
||||
- Bump version to 1.4.3.32-1
|
||||
- Resolves: Bug 2098138 - broken nsslapd-subtree-rename-switch option in rhds11
|
||||
- Resolves: Bug 2119063 - entryuuid fixup tasks fails because entryUUID is not mutable
|
||||
- Resolves: Bug 2136610 - [RFE] Add 'cn' attribute to IPA audit logs
|
||||
- Resolves: Bug 2142638 - pam mutex lock causing high etimes, affecting red hat internal sso
|
||||
- Resolves: Bug 2096795 - [RFE] Support ECDSA private keys for TLS
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#Type Name ID GECOS Home directory Shell
|
||||
g dirsrv 389
|
||||
u dirsrv 389:389 "user for 389-ds-base" /usr/share/dirsrv/ /sbin/nologin
|
|
@ -1,965 +0,0 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||
|
||||
[[package]]
|
||||
name = "ahash"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"once_cell",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.68"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||
|
||||
[[package]]
|
||||
name = "cbindgen"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9daec6140ab4dcd38c3dd57e580b59a621172a526ac79f1527af760a55afeafd"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"log",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"syn 1.0.109",
|
||||
"tempfile",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.82"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
|
||||
dependencies = [
|
||||
"jobserver",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "2.34.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
|
||||
dependencies = [
|
||||
"ansi_term",
|
||||
"atty",
|
||||
"bitflags 1.3.2",
|
||||
"strsim",
|
||||
"textwrap",
|
||||
"unicode-width",
|
||||
"vec_map",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "concread"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dcc9816f5ac93ebd51c37f7f9a6bf2b40dfcd42978ad2aea5d542016e9244cf6"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"crossbeam",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
"lru",
|
||||
"parking_lot",
|
||||
"rand",
|
||||
"smallvec",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-channel",
|
||||
"crossbeam-deque",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-queue",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-channel"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
"memoffset",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-queue"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "entryuuid"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"paste",
|
||||
"slapi_r_plugin",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "entryuuid_syntax"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"paste",
|
||||
"slapi_r_plugin",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
|
||||
dependencies = [
|
||||
"errno-dragonfly",
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno-dragonfly"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
|
||||
|
||||
[[package]]
|
||||
name = "fernet"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93804560e638370a8be6d59ce71ed803e55e230abdbf42598e666b41adda9b1f"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"byteorder",
|
||||
"getrandom",
|
||||
"openssl",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
|
||||
dependencies = [
|
||||
"foreign-types-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.27.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.12.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "instant"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
||||
|
||||
[[package]]
|
||||
name = "jobserver"
|
||||
version = "0.1.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.147"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
|
||||
|
||||
[[package]]
|
||||
name = "librnsslapd"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cbindgen",
|
||||
"libc",
|
||||
"slapd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "librslapd"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cbindgen",
|
||||
"concread",
|
||||
"libc",
|
||||
"slapd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
version = "0.7.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a"
|
||||
dependencies = [
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.31.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.56"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"cfg-if",
|
||||
"foreign-types",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"openssl-macros",
|
||||
"openssl-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-macros"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.91"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
|
||||
dependencies = [
|
||||
"instant",
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"instant",
|
||||
"libc",
|
||||
"redox_syscall 0.2.16",
|
||||
"smallvec",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
|
||||
dependencies = [
|
||||
"paste-impl",
|
||||
"proc-macro-hack",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste-impl"
|
||||
version = "0.1.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
|
||||
dependencies = [
|
||||
"proc-macro-hack",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c516611246607d0c04186886dbb3a754368ef82c79e9827a802c6d836dd111c"
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-hack"
|
||||
version = "0.5.20+deprecated"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pwdchan"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"cc",
|
||||
"libc",
|
||||
"openssl",
|
||||
"paste",
|
||||
"slapi_r_plugin",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rsds"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.38.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399"
|
||||
dependencies = [
|
||||
"bitflags 2.3.3",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.183"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.183"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.104"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slapd"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"fernet",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slapi_r_plugin"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"paste",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"fastrand",
|
||||
"redox_syscall 0.3.5",
|
||||
"rustix",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "textwrap"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||
dependencies = [
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.29.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"backtrace",
|
||||
"pin-project-lite",
|
||||
"tokio-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "vec_map"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
"windows_x86_64_msvc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
||||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
|
||||
dependencies = [
|
||||
"zeroize_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize_derive"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.28",
|
||||
]
|
|
@ -5,19 +5,11 @@
|
|||
# Exclude i686 bit arches
|
||||
ExcludeArch: i686
|
||||
|
||||
# for a pre-release, define the prerel field e.g. .a1 .rc2 - comment out for official release
|
||||
# also remove the space between % and global - this space is needed because
|
||||
# fedpkg verrel stupidly ignores comment lines
|
||||
#% global prerel .rc3
|
||||
# also need the relprefix field for a pre-release e.g. .0 - also comment out for official release
|
||||
#% global relprefix 0.
|
||||
|
||||
# If perl-Socket-2.000 or newer is available, set 0 to use_Socket6.
|
||||
%global use_Socket6 0
|
||||
|
||||
%global use_asan 0
|
||||
%global use_rust 1
|
||||
%global use_legacy 1
|
||||
%global bundle_jemalloc 1
|
||||
%if %{use_asan}
|
||||
%global bundle_jemalloc 0
|
||||
|
@ -32,6 +24,9 @@ ExcludeArch: i686
|
|||
# Use Clang instead of GCC
|
||||
%global use_clang 0
|
||||
|
||||
# Build cockpit plugin
|
||||
%global use_cockpit 0
|
||||
|
||||
# fedora 15 and later uses tmpfiles.d
|
||||
# otherwise, comment this out
|
||||
%{!?with_tmpfiles_d: %global with_tmpfiles_d %{_sysconfdir}/tmpfiles.d}
|
||||
|
@ -45,100 +40,111 @@ ExcludeArch: i686
|
|||
# Filter argparse-manpage from autogenerated package Requires
|
||||
%global __requires_exclude ^python.*argparse-manpage
|
||||
|
||||
# Force to require nss version greater or equal as the version available at the build time
|
||||
# See bz1986327
|
||||
%define dirsrv_requires_ge() %(LC_ALL="C" echo '%*' | xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not")
|
||||
|
||||
Summary: 389 Directory Server (base)
|
||||
Name: 389-ds-base
|
||||
Version: 1.4.3.35
|
||||
Release: %{?relprefix}1%{?prerel}%{?dist}
|
||||
License: GPLv3+ and ASL 2.0 and MIT
|
||||
Version: 2.3.6
|
||||
Release: 5%{?dist}.alma.1
|
||||
License: GPLv3+ and MIT and ASL 2.0
|
||||
URL: https://www.port389.org
|
||||
Group: System Environment/Daemons
|
||||
Conflicts: selinux-policy-base < 3.9.8
|
||||
Conflicts: freeipa-server < 4.0.3
|
||||
Obsoletes: %{name} <= 1.4.0.9
|
||||
Obsoletes: %{name}-legacy-tools < 1.4.4.6
|
||||
Obsoletes: %{name}-legacy-tools-debuginfo < 1.4.4.6
|
||||
Provides: ldif2ldbm >= 0
|
||||
|
||||
##### Bundled cargo crates list - START #####
|
||||
Provides: bundled(crate(addr2line)) = 0.20.0
|
||||
Provides: bundled(crate(adler)) = 1.0.2
|
||||
Provides: bundled(crate(ahash)) = 0.7.6
|
||||
Provides: bundled(crate(ansi_term)) = 0.12.1
|
||||
Provides: bundled(crate(atty)) = 0.2.14
|
||||
Provides: bundled(crate(autocfg)) = 1.1.0
|
||||
Provides: bundled(crate(backtrace)) = 0.3.68
|
||||
Provides: bundled(crate(base64)) = 0.13.1
|
||||
Provides: bundled(crate(bitflags)) = 1.3.2
|
||||
Provides: bundled(crate(bitflags)) = 2.3.3
|
||||
Provides: bundled(crate(byteorder)) = 1.4.3
|
||||
Provides: bundled(crate(cbindgen)) = 0.9.1
|
||||
Provides: bundled(crate(cc)) = 1.0.79
|
||||
Provides: bundled(crate(cc)) = 1.0.82
|
||||
Provides: bundled(crate(cfg-if)) = 1.0.0
|
||||
Provides: bundled(crate(clap)) = 2.34.0
|
||||
Provides: bundled(crate(concread)) = 0.2.21
|
||||
Provides: bundled(crate(crossbeam)) = 0.8.2
|
||||
Provides: bundled(crate(crossbeam-channel)) = 0.5.8
|
||||
Provides: bundled(crate(crossbeam-deque)) = 0.8.3
|
||||
Provides: bundled(crate(crossbeam-epoch)) = 0.9.14
|
||||
Provides: bundled(crate(crossbeam-epoch)) = 0.9.15
|
||||
Provides: bundled(crate(crossbeam-queue)) = 0.3.8
|
||||
Provides: bundled(crate(crossbeam-utils)) = 0.8.15
|
||||
Provides: bundled(crate(crossbeam-utils)) = 0.8.16
|
||||
Provides: bundled(crate(entryuuid)) = 0.1.0
|
||||
Provides: bundled(crate(entryuuid_syntax)) = 0.1.0
|
||||
Provides: bundled(crate(errno)) = 0.3.1
|
||||
Provides: bundled(crate(errno)) = 0.3.2
|
||||
Provides: bundled(crate(errno-dragonfly)) = 0.1.2
|
||||
Provides: bundled(crate(fastrand)) = 1.9.0
|
||||
Provides: bundled(crate(fastrand)) = 2.0.0
|
||||
Provides: bundled(crate(fernet)) = 0.1.4
|
||||
Provides: bundled(crate(foreign-types)) = 0.3.2
|
||||
Provides: bundled(crate(foreign-types-shared)) = 0.1.1
|
||||
Provides: bundled(crate(getrandom)) = 0.2.9
|
||||
Provides: bundled(crate(getrandom)) = 0.2.10
|
||||
Provides: bundled(crate(gimli)) = 0.27.3
|
||||
Provides: bundled(crate(hashbrown)) = 0.12.3
|
||||
Provides: bundled(crate(hermit-abi)) = 0.1.19
|
||||
Provides: bundled(crate(hermit-abi)) = 0.3.1
|
||||
Provides: bundled(crate(instant)) = 0.1.12
|
||||
Provides: bundled(crate(io-lifetimes)) = 1.0.10
|
||||
Provides: bundled(crate(itoa)) = 1.0.6
|
||||
Provides: bundled(crate(itoa)) = 1.0.9
|
||||
Provides: bundled(crate(jobserver)) = 0.1.26
|
||||
Provides: bundled(crate(libc)) = 0.2.144
|
||||
Provides: bundled(crate(libc)) = 0.2.147
|
||||
Provides: bundled(crate(librnsslapd)) = 0.1.0
|
||||
Provides: bundled(crate(librslapd)) = 0.1.0
|
||||
Provides: bundled(crate(linux-raw-sys)) = 0.3.8
|
||||
Provides: bundled(crate(lock_api)) = 0.4.9
|
||||
Provides: bundled(crate(log)) = 0.4.17
|
||||
Provides: bundled(crate(linux-raw-sys)) = 0.4.5
|
||||
Provides: bundled(crate(lock_api)) = 0.4.10
|
||||
Provides: bundled(crate(log)) = 0.4.19
|
||||
Provides: bundled(crate(lru)) = 0.7.8
|
||||
Provides: bundled(crate(memoffset)) = 0.8.0
|
||||
Provides: bundled(crate(once_cell)) = 1.17.1
|
||||
Provides: bundled(crate(openssl)) = 0.10.52
|
||||
Provides: bundled(crate(memchr)) = 2.5.0
|
||||
Provides: bundled(crate(memoffset)) = 0.9.0
|
||||
Provides: bundled(crate(miniz_oxide)) = 0.7.1
|
||||
Provides: bundled(crate(object)) = 0.31.1
|
||||
Provides: bundled(crate(once_cell)) = 1.18.0
|
||||
Provides: bundled(crate(openssl)) = 0.10.56
|
||||
Provides: bundled(crate(openssl-macros)) = 0.1.1
|
||||
Provides: bundled(crate(openssl-sys)) = 0.9.87
|
||||
Provides: bundled(crate(openssl-sys)) = 0.9.91
|
||||
Provides: bundled(crate(parking_lot)) = 0.11.2
|
||||
Provides: bundled(crate(parking_lot_core)) = 0.8.6
|
||||
Provides: bundled(crate(paste)) = 0.1.18
|
||||
Provides: bundled(crate(paste-impl)) = 0.1.18
|
||||
Provides: bundled(crate(pin-project-lite)) = 0.2.9
|
||||
Provides: bundled(crate(pin-project-lite)) = 0.2.11
|
||||
Provides: bundled(crate(pkg-config)) = 0.3.27
|
||||
Provides: bundled(crate(ppv-lite86)) = 0.2.17
|
||||
Provides: bundled(crate(proc-macro-hack)) = 0.5.20+deprecated
|
||||
Provides: bundled(crate(proc-macro2)) = 1.0.58
|
||||
Provides: bundled(crate(proc-macro2)) = 1.0.66
|
||||
Provides: bundled(crate(pwdchan)) = 0.1.0
|
||||
Provides: bundled(crate(quote)) = 1.0.27
|
||||
Provides: bundled(crate(quote)) = 1.0.32
|
||||
Provides: bundled(crate(rand)) = 0.8.5
|
||||
Provides: bundled(crate(rand_chacha)) = 0.3.1
|
||||
Provides: bundled(crate(rand_core)) = 0.6.4
|
||||
Provides: bundled(crate(redox_syscall)) = 0.2.16
|
||||
Provides: bundled(crate(redox_syscall)) = 0.3.5
|
||||
Provides: bundled(crate(rsds)) = 0.1.0
|
||||
Provides: bundled(crate(rustix)) = 0.37.19
|
||||
Provides: bundled(crate(ryu)) = 1.0.13
|
||||
Provides: bundled(crate(scopeguard)) = 1.1.0
|
||||
Provides: bundled(crate(serde)) = 1.0.163
|
||||
Provides: bundled(crate(serde_derive)) = 1.0.163
|
||||
Provides: bundled(crate(serde_json)) = 1.0.96
|
||||
Provides: bundled(crate(rustc-demangle)) = 0.1.23
|
||||
Provides: bundled(crate(rustix)) = 0.38.7
|
||||
Provides: bundled(crate(ryu)) = 1.0.15
|
||||
Provides: bundled(crate(scopeguard)) = 1.2.0
|
||||
Provides: bundled(crate(serde)) = 1.0.183
|
||||
Provides: bundled(crate(serde_derive)) = 1.0.183
|
||||
Provides: bundled(crate(serde_json)) = 1.0.104
|
||||
Provides: bundled(crate(slapd)) = 0.1.0
|
||||
Provides: bundled(crate(slapi_r_plugin)) = 0.1.0
|
||||
Provides: bundled(crate(smallvec)) = 1.10.0
|
||||
Provides: bundled(crate(smallvec)) = 1.11.0
|
||||
Provides: bundled(crate(strsim)) = 0.8.0
|
||||
Provides: bundled(crate(syn)) = 1.0.109
|
||||
Provides: bundled(crate(syn)) = 2.0.16
|
||||
Provides: bundled(crate(tempfile)) = 3.5.0
|
||||
Provides: bundled(crate(syn)) = 2.0.28
|
||||
Provides: bundled(crate(tempfile)) = 3.7.1
|
||||
Provides: bundled(crate(textwrap)) = 0.11.0
|
||||
Provides: bundled(crate(tokio)) = 1.28.1
|
||||
Provides: bundled(crate(tokio)) = 1.29.1
|
||||
Provides: bundled(crate(tokio-macros)) = 2.1.0
|
||||
Provides: bundled(crate(toml)) = 0.5.11
|
||||
Provides: bundled(crate(unicode-ident)) = 1.0.8
|
||||
Provides: bundled(crate(unicode-ident)) = 1.0.11
|
||||
Provides: bundled(crate(unicode-width)) = 0.1.10
|
||||
Provides: bundled(crate(uuid)) = 0.8.2
|
||||
Provides: bundled(crate(vcpkg)) = 0.2.15
|
||||
|
@ -148,23 +154,14 @@ Provides: bundled(crate(wasi)) = 0.11.0+wasi_snapshot_preview1
|
|||
Provides: bundled(crate(winapi)) = 0.3.9
|
||||
Provides: bundled(crate(winapi-i686-pc-windows-gnu)) = 0.4.0
|
||||
Provides: bundled(crate(winapi-x86_64-pc-windows-gnu)) = 0.4.0
|
||||
Provides: bundled(crate(windows-sys)) = 0.45.0
|
||||
Provides: bundled(crate(windows-sys)) = 0.48.0
|
||||
Provides: bundled(crate(windows-targets)) = 0.42.2
|
||||
Provides: bundled(crate(windows-targets)) = 0.48.0
|
||||
Provides: bundled(crate(windows_aarch64_gnullvm)) = 0.42.2
|
||||
Provides: bundled(crate(windows-targets)) = 0.48.1
|
||||
Provides: bundled(crate(windows_aarch64_gnullvm)) = 0.48.0
|
||||
Provides: bundled(crate(windows_aarch64_msvc)) = 0.42.2
|
||||
Provides: bundled(crate(windows_aarch64_msvc)) = 0.48.0
|
||||
Provides: bundled(crate(windows_i686_gnu)) = 0.42.2
|
||||
Provides: bundled(crate(windows_i686_gnu)) = 0.48.0
|
||||
Provides: bundled(crate(windows_i686_msvc)) = 0.42.2
|
||||
Provides: bundled(crate(windows_i686_msvc)) = 0.48.0
|
||||
Provides: bundled(crate(windows_x86_64_gnu)) = 0.42.2
|
||||
Provides: bundled(crate(windows_x86_64_gnu)) = 0.48.0
|
||||
Provides: bundled(crate(windows_x86_64_gnullvm)) = 0.42.2
|
||||
Provides: bundled(crate(windows_x86_64_gnullvm)) = 0.48.0
|
||||
Provides: bundled(crate(windows_x86_64_msvc)) = 0.42.2
|
||||
Provides: bundled(crate(windows_x86_64_msvc)) = 0.48.0
|
||||
Provides: bundled(crate(zeroize)) = 1.6.0
|
||||
Provides: bundled(crate(zeroize_derive)) = 1.4.2
|
||||
|
@ -172,14 +169,16 @@ Provides: bundled(crate(zeroize_derive)) = 1.4.2
|
|||
|
||||
BuildRequires: nspr-devel >= 4.32
|
||||
BuildRequires: nss-devel >= 3.67.0-7
|
||||
BuildRequires: perl-generators
|
||||
|
||||
BuildRequires: openldap-devel
|
||||
BuildRequires: lmdb-devel
|
||||
BuildRequires: libdb-devel
|
||||
BuildRequires: cyrus-sasl-devel
|
||||
BuildRequires: icu
|
||||
BuildRequires: libicu-devel
|
||||
BuildRequires: pcre-devel
|
||||
BuildRequires: cracklib-devel
|
||||
BuildRequires: json-c-devel
|
||||
%if %{use_clang}
|
||||
BuildRequires: libatomic
|
||||
BuildRequires: clang
|
||||
|
@ -197,6 +196,8 @@ BuildRequires: openssl-devel
|
|||
BuildRequires: pam-devel
|
||||
BuildRequires: systemd-units
|
||||
BuildRequires: systemd-devel
|
||||
BuildRequires: systemd-rpm-macros
|
||||
%{?sysusers_requires_compat}
|
||||
%if %{use_asan}
|
||||
BuildRequires: libasan
|
||||
%endif
|
||||
|
@ -219,7 +220,6 @@ BuildRequires: doxygen
|
|||
BuildRequires: libcmocka-devel
|
||||
BuildRequires: libevent-devel
|
||||
# For lib389 and related components
|
||||
BuildRequires: python%{python3_pkgversion}
|
||||
BuildRequires: python%{python3_pkgversion}-devel
|
||||
BuildRequires: python%{python3_pkgversion}-setuptools
|
||||
BuildRequires: python%{python3_pkgversion}-ldap
|
||||
|
@ -229,33 +229,39 @@ BuildRequires: python%{python3_pkgversion}-pyasn1-modules
|
|||
BuildRequires: python%{python3_pkgversion}-dateutil
|
||||
BuildRequires: python%{python3_pkgversion}-argcomplete
|
||||
BuildRequires: python%{python3_pkgversion}-argparse-manpage
|
||||
BuildRequires: python%{python3_pkgversion}-policycoreutils
|
||||
BuildRequires: python%{python3_pkgversion}-libselinux
|
||||
BuildRequires: python%{python3_pkgversion}-policycoreutils
|
||||
BuildRequires: python%{python3_pkgversion}-cryptography
|
||||
|
||||
# For cockpit
|
||||
%if %{use_cockpit}
|
||||
BuildRequires: rsync
|
||||
%endif
|
||||
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: python%{python3_pkgversion}-lib389 = %{version}-%{release}
|
||||
Requires: lmdb-libs
|
||||
|
||||
# this is needed for using semanage from our setup scripts
|
||||
Requires: policycoreutils-python-utils
|
||||
Requires: /usr/sbin/semanage
|
||||
Requires: libsemanage-python%{python3_pkgversion}
|
||||
|
||||
Requires: selinux-policy >= 3.14.1-29
|
||||
|
||||
# the following are needed for some of our scripts
|
||||
Requires: openldap-clients
|
||||
Requires: openssl-perl
|
||||
Requires: /usr/bin/c_rehash
|
||||
Requires: python%{python3_pkgversion}-ldap
|
||||
Requires: acl
|
||||
Requires: zlib
|
||||
Requires: json-c
|
||||
|
||||
# this is needed to setup SSL if you are not using the
|
||||
# administration server package
|
||||
Requires: nss-tools
|
||||
Requires: nspr >= 4.32
|
||||
Requires: nss >= 3.67.0-7
|
||||
Requires: nss-tools
|
||||
%dirsrv_requires_ge nss
|
||||
|
||||
# these are not found by the auto-dependency method
|
||||
# they are required to support the mandatory LDAP SASL mechs
|
||||
|
@ -269,16 +275,11 @@ Requires: libdb-utils
|
|||
# Needed for password dictionary checks
|
||||
Requires: cracklib-dicts
|
||||
|
||||
# This picks up libperl.so as a Requires, so we add this versioned one
|
||||
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
|
||||
Requires: perl-Errno >= 1.23-360
|
||||
|
||||
# Needed by logconv.pl
|
||||
Requires: perl-DB_File
|
||||
Requires: perl-Archive-Tar
|
||||
|
||||
# Needed for password dictionary checks
|
||||
Requires: cracklib-dicts
|
||||
Requires: perl-debugger
|
||||
Requires: perl-sigtrap
|
||||
|
||||
# Picks up our systemd deps.
|
||||
%{?systemd_requires}
|
||||
|
@ -292,10 +293,19 @@ Source2: %{name}-devel.README
|
|||
%if %{bundle_jemalloc}
|
||||
Source3: https://github.com/jemalloc/%{jemalloc_name}/releases/download/%{jemalloc_ver}/%{jemalloc_name}-%{jemalloc_ver}.tar.bz2
|
||||
%endif
|
||||
%if %{use_rust}
|
||||
Source4: vendor-%{version}-1.tar.gz
|
||||
Source5: Cargo-%{version}.lock
|
||||
%endif
|
||||
Source4: 389-ds-base.sysusers
|
||||
|
||||
Patch1: 0001-Issue-5848-Fix-condition-and-add-a-CI-test-5916.patch
|
||||
|
||||
# Patches were taken from:
|
||||
# https://github.com/389ds/389-ds-base/commit/b2194c95f9d02965b2ad3d0dcf333e74881347d0
|
||||
Patch2: 0002-Issue-5909-Multi-listener-hang-with-20k-connections.patch
|
||||
# https://github.com/389ds/389-ds-base/commit/26716f0edefe4690d9fd9143d07156e01321020c
|
||||
Patch3: 0003-Issue-5924-ASAN-server-build-crash-when-looping.patch
|
||||
# https://github.com/389ds/389-ds-base/commit/dc091325814d9ac74d238c7e14cac8b9112b3271
|
||||
Patch4: 0004-Issue-5984-Crash-when-paged-result-search-are-abandoned.patch
|
||||
# https://github.com/389ds/389-ds-base/pull/5987/commits/4883a69dcf2764146bbe54c5432752b79f8d1a1e
|
||||
Patch5: 0005-Issue-5984-Crash-when-paged-result-search-are-abandoned-fix2.patch
|
||||
|
||||
%description
|
||||
389 Directory Server is an LDAPv3 compliant server. The base package includes
|
||||
|
@ -308,9 +318,8 @@ Please see http://seclists.org/oss-sec/2016/q1/363 for more information.
|
|||
|
||||
%package libs
|
||||
Summary: Core libraries for 389 Directory Server
|
||||
Group: System Environment/Daemons
|
||||
BuildRequires: nspr-devel >= 4.32
|
||||
BuildRequires: nss-devel >= 3.67.0-7
|
||||
BuildRequires: nspr >= 4.32
|
||||
BuildRequires: nss >= 3.67.0-7
|
||||
BuildRequires: openldap-devel
|
||||
BuildRequires: libdb-devel
|
||||
BuildRequires: cyrus-sasl-devel
|
||||
|
@ -322,6 +331,7 @@ BuildRequires: libtevent-devel
|
|||
Requires: krb5-libs
|
||||
Requires: libevent
|
||||
BuildRequires: systemd-devel
|
||||
BuildRequires: make
|
||||
Provides: svrcore = 4.1.4
|
||||
Conflicts: svrcore
|
||||
Obsoletes: svrcore <= 4.1.3
|
||||
|
@ -331,40 +341,12 @@ Core libraries for the 389 Directory Server base package. These libraries
|
|||
are used by the main package and the -devel package. This allows the -devel
|
||||
package to be installed with just the -libs package and without the main package.
|
||||
|
||||
%if %{use_legacy}
|
||||
%package legacy-tools
|
||||
Summary: Legacy utilities for 389 Directory Server
|
||||
Group: System Environment/Daemons
|
||||
Obsoletes: %{name} <= 1.4.0.9
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
# for setup-ds.pl to support ipv6
|
||||
%if %{use_Socket6}
|
||||
Requires: perl-Socket6
|
||||
%else
|
||||
Requires: perl-Socket
|
||||
%endif
|
||||
Requires: perl-NetAddr-IP
|
||||
# use_openldap assumes perl-Mozilla-LDAP is built with openldap support
|
||||
Requires: perl-Mozilla-LDAP
|
||||
# for setup-ds.pl
|
||||
Requires: bind-utils
|
||||
%global __provides_exclude_from %{_libdir}/%{pkgname}/perl
|
||||
%global __requires_exclude perl\\((DSCreate|DSMigration|DSUpdate|DSUtil|Dialog|DialogManager|FileConn|Inf|Migration|Resource|Setup|SetupLog)
|
||||
%{?perl_default_filter}
|
||||
|
||||
%description legacy-tools
|
||||
Legacy (and deprecated) utilities for 389 Directory Server. This includes
|
||||
the old account management and task scripts. These are deprecated in favour of
|
||||
the dscreate, dsctl, dsconf and dsidm tools.
|
||||
%endif
|
||||
|
||||
%package devel
|
||||
Summary: Development libraries for 389 Directory Server
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}-libs = %{version}-%{release}
|
||||
Requires: pkgconfig
|
||||
Requires: nspr-devel >= 4.32
|
||||
Requires: nss-devel >= 3.67.0-7
|
||||
Requires: nspr-devel
|
||||
Requires: nss-devel >= 3.34
|
||||
Requires: openldap-devel
|
||||
Requires: libtalloc
|
||||
Requires: libevent
|
||||
|
@ -379,7 +361,6 @@ Development Libraries and headers for the 389 Directory Server base package.
|
|||
|
||||
%package snmp
|
||||
Summary: SNMP Agent for 389 Directory Server
|
||||
Group: System Environment/Daemons
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
Obsoletes: %{name} <= 1.4.0.0
|
||||
|
@ -390,12 +371,12 @@ SNMP Agent for the 389 Directory Server base package.
|
|||
%package -n python%{python3_pkgversion}-lib389
|
||||
Summary: A library for accessing, testing, and configuring the 389 Directory Server
|
||||
BuildArch: noarch
|
||||
Group: Development/Libraries
|
||||
Requires: 389-ds-base
|
||||
Requires: openssl
|
||||
Requires: iproute
|
||||
Requires: platform-python
|
||||
Requires: 389-ds-base
|
||||
Recommends: bash-completion
|
||||
Requires: python%{python3_pkgversion}
|
||||
Requires: python%{python3_pkgversion}-distro
|
||||
Requires: python%{python3_pkgversion}-ldap
|
||||
Requires: python%{python3_pkgversion}-six
|
||||
Requires: python%{python3_pkgversion}-pyasn1
|
||||
|
@ -404,7 +385,6 @@ Requires: python%{python3_pkgversion}-dateutil
|
|||
Requires: python%{python3_pkgversion}-argcomplete
|
||||
Requires: python%{python3_pkgversion}-libselinux
|
||||
Requires: python%{python3_pkgversion}-setuptools
|
||||
Requires: python%{python3_pkgversion}-distro
|
||||
Requires: python%{python3_pkgversion}-cryptography
|
||||
%{?python_provide:%python_provide python%{python3_pkgversion}-lib389}
|
||||
|
||||
|
@ -412,27 +392,34 @@ Requires: python%{python3_pkgversion}-cryptography
|
|||
This module contains tools and libraries for accessing, testing,
|
||||
and configuring the 389 Directory Server.
|
||||
|
||||
%if %{use_cockpit}
|
||||
%package -n cockpit-389-ds
|
||||
Summary: Cockpit UI Plugin for configuring and administering the 389 Directory Server
|
||||
BuildArch: noarch
|
||||
Requires: cockpit
|
||||
Requires: platform-python
|
||||
Requires: 389-ds-base
|
||||
Requires: python%{python3_pkgversion}
|
||||
Requires: python%{python3_pkgversion}-lib389
|
||||
|
||||
%description -n cockpit-389-ds
|
||||
A cockpit UI Plugin for configuring and administering the 389 Directory Server
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -v -n %{name}-%{version}%{?prerel}
|
||||
%if %{use_rust}
|
||||
tar xvzf %{SOURCE4}
|
||||
cp %{SOURCE5} src/Cargo.lock
|
||||
%endif
|
||||
|
||||
%autosetup -p1 -v -n %{name}-%{version}
|
||||
%if %{bundle_jemalloc}
|
||||
%setup -q -n %{name}-%{version}%{?prerel} -T -D -b 3
|
||||
%setup -q -n %{name}-%{version} -T -D -b 3
|
||||
%endif
|
||||
|
||||
cp %{SOURCE2} README.devel
|
||||
|
||||
# The configure macro will modify some autoconf-related files, which upsets
|
||||
# cargo when it tries to verify checksums in those files. If we just truncate
|
||||
# that file list, cargo won't have anything to complain about.
|
||||
find vendor -name .cargo-checksum.json \
|
||||
-exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
|
||||
|
||||
%build
|
||||
|
||||
OPENLDAP_FLAG="--with-openldap"
|
||||
|
@ -448,10 +435,8 @@ ASAN_FLAGS="--enable-asan --enable-debug"
|
|||
RUST_FLAGS="--enable-rust --enable-rust-offline"
|
||||
%endif
|
||||
|
||||
%if %{use_legacy}
|
||||
LEGACY_FLAGS="--enable-legacy --enable-perl"
|
||||
%else
|
||||
LEGACY_FLAGS="--disable-legacy --disable-perl"
|
||||
%if !%{use_cockpit}
|
||||
COCKPIT_FLAGS="--disable-cockpit"
|
||||
%endif
|
||||
|
||||
%if %{use_clang}
|
||||
|
@ -488,21 +473,21 @@ make %{?_smp_mflags}
|
|||
popd
|
||||
%endif
|
||||
|
||||
|
||||
# Enforce strict linking
|
||||
%define _strict_symbol_defs_build 1
|
||||
%define _ld_strict_symbol_defs 1
|
||||
|
||||
# Rebuild the autotool artifacts now.
|
||||
autoreconf -fiv
|
||||
|
||||
%configure --enable-autobind --with-selinux $OPENLDAP_FLAG $TMPFILES_FLAG \
|
||||
%configure --enable-autobind --with-selinux $TMPFILES_FLAG \
|
||||
--with-systemd \
|
||||
--with-systemdsystemunitdir=%{_unitdir} \
|
||||
--with-systemdsystemconfdir=%{_sysconfdir}/systemd/system \
|
||||
--with-systemdgroupname=%{groupname} \
|
||||
--libexecdir=%{_libexecdir}/%{pkgname} \
|
||||
$NSSARGS $ASAN_FLAGS $RUST_FLAGS $LEGACY_FLAGS $CLANG_FLAGS \
|
||||
--enable-cmocka
|
||||
$NSSARGS $ASAN_FLAGS $RUST_FLAGS $CLANG_FLAGS $COCKPIT_FLAGS \
|
||||
--enable-cmocka --enable-new-dtags --with-libldap-r=no
|
||||
|
||||
|
||||
# lib389
|
||||
pushd ./src/lib389
|
||||
|
@ -510,10 +495,10 @@ pushd ./src/lib389
|
|||
popd
|
||||
# argparse-manpage dynamic man pages have hardcoded man v1 in header,
|
||||
# need to change it to v8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dsconf.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dsctl.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dsidm.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}%{?prerel}/src/lib389/man/dscreate.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}/src/lib389/man/dsconf.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}/src/lib389/man/dsctl.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}/src/lib389/man/dsidm.8
|
||||
sed -i "1s/\"1\"/\"8\"/" %{_builddir}/%{name}-%{version}/src/lib389/man/dscreate.8
|
||||
|
||||
# Generate symbolic info for debuggers
|
||||
export XCFLAGS=$RPM_OPT_FLAGS
|
||||
|
@ -524,15 +509,18 @@ make
|
|||
%install
|
||||
|
||||
mkdir -p %{buildroot}%{_datadir}/gdb/auto-load%{_sbindir}
|
||||
%if %{use_cockpit}
|
||||
mkdir -p %{buildroot}%{_datadir}/cockpit
|
||||
%endif
|
||||
make DESTDIR="$RPM_BUILD_ROOT" install
|
||||
|
||||
# Cockpit file list
|
||||
%if %{use_cockpit}
|
||||
find %{buildroot}%{_datadir}/cockpit/389-console -type d | sed -e "s@%{buildroot}@@" | sed -e 's/^/\%dir /' > cockpit.list
|
||||
find %{buildroot}%{_datadir}/cockpit/389-console -type f | sed -e "s@%{buildroot}@@" >> cockpit.list
|
||||
%endif
|
||||
|
||||
# Copy in our docs from doxygen.
|
||||
cp -r %{_builddir}/%{name}-%{version}%{?prerel}/man/man3 $RPM_BUILD_ROOT/%{_mandir}/man3
|
||||
cp -r %{_builddir}/%{name}-%{version}/man/man3 $RPM_BUILD_ROOT/%{_mandir}/man3
|
||||
|
||||
# lib389
|
||||
pushd src/lib389
|
||||
|
@ -541,25 +529,25 @@ popd
|
|||
|
||||
mkdir -p $RPM_BUILD_ROOT/var/log/%{pkgname}
|
||||
mkdir -p $RPM_BUILD_ROOT/var/lib/%{pkgname}
|
||||
mkdir -p $RPM_BUILD_ROOT/var/3lock/%{pkgname}
|
||||
mkdir -p $RPM_BUILD_ROOT/var/lock/%{pkgname}
|
||||
|
||||
# for systemd
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/%{groupname}.wants
|
||||
install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_sysusersdir}/389-ds-base.conf
|
||||
|
||||
# remove libtool archives and static libs
|
||||
find %{buildroot} -type f -name "*.la" -delete
|
||||
find %{buildroot} -type f -name "*.a" -delete
|
||||
|
||||
%if %{use_legacy}
|
||||
# make sure perl scripts have a proper shebang
|
||||
sed -i -e 's|#{{PERL-EXEC}}|#!/usr/bin/perl|' $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/script-templates/template-*.pl
|
||||
%endif
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/%{pkgname}/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/%{pkgname}/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/%{pkgname}/plugins/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/%{pkgname}/plugins/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libsvrcore.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libsvrcore.la
|
||||
|
||||
%if %{bundle_jemalloc}
|
||||
pushd ../%{jemalloc_name}-%{jemalloc_ver}
|
||||
make DESTDIR="$RPM_BUILD_ROOT" install_lib install_bin
|
||||
cp -pa COPYING ../%{name}-%{version}%{?prerel}/COPYING.jemalloc
|
||||
cp -pa README ../%{name}-%{version}%{?prerel}/README.jemalloc
|
||||
cp -pa COPYING ../%{name}-%{version}/COPYING.jemalloc
|
||||
cp -pa README ../%{name}-%{version}/README.jemalloc
|
||||
popd
|
||||
%endif
|
||||
|
||||
|
@ -567,9 +555,6 @@ popd
|
|||
# This checks the code, if it fails it prints why, then re-raises the fail to shortcircuit the rpm build.
|
||||
if ! make DESTDIR="$RPM_BUILD_ROOT" check; then cat ./test-suite.log && false; fi
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%post
|
||||
if [ -n "$DEBUGPOSTTRANS" ] ; then
|
||||
output=$DEBUGPOSTTRANS
|
||||
|
@ -578,30 +563,52 @@ else
|
|||
output=/dev/null
|
||||
output2=/dev/null
|
||||
fi
|
||||
|
||||
# reload to pick up any changes to systemd files
|
||||
/bin/systemctl daemon-reload >$output 2>&1 || :
|
||||
|
||||
# https://fedoraproject.org/wiki/Packaging:UsersAndGroups#Soft_static_allocation
|
||||
# Soft static allocation for UID and GID
|
||||
USERNAME="dirsrv"
|
||||
ALLOCATED_UID=389
|
||||
GROUPNAME="dirsrv"
|
||||
ALLOCATED_GID=389
|
||||
HOMEDIR="/usr/share/dirsrv"
|
||||
|
||||
getent group $GROUPNAME >/dev/null || /usr/sbin/groupadd -f -g $ALLOCATED_GID -r $GROUPNAME
|
||||
if ! getent passwd $USERNAME >/dev/null ; then
|
||||
if ! getent passwd $ALLOCATED_UID >/dev/null ; then
|
||||
/usr/sbin/useradd -r -u $ALLOCATED_UID -g $GROUPNAME -d $HOMEDIR -s /sbin/nologin -c "user for 389-ds-base" $USERNAME
|
||||
else
|
||||
/usr/sbin/useradd -r -g $GROUPNAME -d $HOMEDIR -s /sbin/nologin -c "user for 389-ds-base" $USERNAME
|
||||
fi
|
||||
fi
|
||||
# sysusers.d format https://fedoraproject.org/wiki/Changes/Adopting_sysusers.d_format
|
||||
%sysusers_create_compat %{SOURCE4}
|
||||
|
||||
# Reload our sysctl before we restart (if we can)
|
||||
sysctl --system &> $output; true
|
||||
|
||||
# Gather the running instances so we can restart them
|
||||
instbase="%{_sysconfdir}/%{pkgname}"
|
||||
ninst=0
|
||||
for dir in $instbase/slapd-* ; do
|
||||
echo dir = $dir >> $output 2>&1 || :
|
||||
if [ ! -d "$dir" ] ; then continue ; fi
|
||||
case "$dir" in *.removed) continue ;; esac
|
||||
basename=`basename $dir`
|
||||
inst="%{pkgname}@`echo $basename | sed -e 's/slapd-//g'`"
|
||||
echo found instance $inst - getting status >> $output 2>&1 || :
|
||||
if /bin/systemctl -q is-active $inst ; then
|
||||
echo instance $inst is running >> $output 2>&1 || :
|
||||
instances="$instances $inst"
|
||||
else
|
||||
echo instance $inst is not running >> $output 2>&1 || :
|
||||
fi
|
||||
ninst=`expr $ninst + 1`
|
||||
done
|
||||
if [ $ninst -eq 0 ] ; then
|
||||
echo no instances to upgrade >> $output 2>&1 || :
|
||||
exit 0 # have no instances to upgrade - just skip the rest
|
||||
else
|
||||
# restart running instances
|
||||
echo shutting down all instances . . . >> $output 2>&1 || :
|
||||
for inst in $instances ; do
|
||||
echo stopping instance $inst >> $output 2>&1 || :
|
||||
/bin/systemctl stop $inst >> $output 2>&1 || :
|
||||
done
|
||||
for inst in $instances ; do
|
||||
echo starting instance $inst >> $output 2>&1 || :
|
||||
/bin/systemctl start $inst >> $output 2>&1 || :
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
%preun
|
||||
if [ $1 -eq 0 ]; then # Final removal
|
||||
# remove instance specific service files/links
|
||||
|
@ -622,72 +629,8 @@ fi
|
|||
%postun snmp
|
||||
%systemd_postun_with_restart %{pkgname}-snmp.service
|
||||
|
||||
%if %{use_legacy}
|
||||
%post legacy-tools
|
||||
|
||||
# START UPGRADE SCRIPT
|
||||
|
||||
if [ -n "$DEBUGPOSTTRANS" ] ; then
|
||||
output=$DEBUGPOSTTRANS
|
||||
output2=${DEBUGPOSTTRANS}.upgrade
|
||||
else
|
||||
output=/dev/null
|
||||
output2=/dev/null
|
||||
fi
|
||||
|
||||
# find all instances
|
||||
instances="" # instances that require a restart after upgrade
|
||||
ninst=0 # number of instances found in total
|
||||
|
||||
echo looking for instances in %{_sysconfdir}/%{pkgname} > $output 2>&1 || :
|
||||
instbase="%{_sysconfdir}/%{pkgname}"
|
||||
for dir in $instbase/slapd-* ; do
|
||||
echo dir = $dir >> $output 2>&1 || :
|
||||
if [ ! -d "$dir" ] ; then continue ; fi
|
||||
case "$dir" in *.removed) continue ;; esac
|
||||
basename=`basename $dir`
|
||||
inst="%{pkgname}@`echo $basename | sed -e 's/slapd-//g'`"
|
||||
echo found instance $inst - getting status >> $output 2>&1 || :
|
||||
if /bin/systemctl -q is-active $inst ; then
|
||||
echo instance $inst is running >> $output 2>&1 || :
|
||||
instances="$instances $inst"
|
||||
else
|
||||
echo instance $inst is not running >> $output 2>&1 || :
|
||||
fi
|
||||
ninst=`expr $ninst + 1`
|
||||
done
|
||||
if [ $ninst -eq 0 ] ; then
|
||||
echo no instances to upgrade >> $output 2>&1 || :
|
||||
exit 0 # have no instances to upgrade - just skip the rest
|
||||
fi
|
||||
# shutdown all instances
|
||||
echo shutting down all instances . . . >> $output 2>&1 || :
|
||||
for inst in $instances ; do
|
||||
echo stopping instance $inst >> $output 2>&1 || :
|
||||
/bin/systemctl stop $inst >> $output 2>&1 || :
|
||||
done
|
||||
echo remove pid files . . . >> $output 2>&1 || :
|
||||
/bin/rm -f /var/run/%{pkgname}*.pid /var/run/%{pkgname}*.startpid
|
||||
# do the upgrade
|
||||
echo upgrading instances . . . >> $output 2>&1 || :
|
||||
DEBUGPOSTSETUPOPT=`/usr/bin/echo $DEBUGPOSTSETUP | /usr/bin/sed -e "s/[^d]//g"`
|
||||
if [ -n "$DEBUGPOSTSETUPOPT" ] ; then
|
||||
%{_sbindir}/setup-ds.pl -$DEBUGPOSTSETUPOPT -u -s General.UpdateMode=offline >> $output 2>&1 || :
|
||||
else
|
||||
%{_sbindir}/setup-ds.pl -u -s General.UpdateMode=offline >> $output 2>&1 || :
|
||||
fi
|
||||
|
||||
# restart instances that require it
|
||||
for inst in $instances ; do
|
||||
echo restarting instance $inst >> $output 2>&1 || :
|
||||
/bin/systemctl start $inst >> $output 2>&1 || :
|
||||
done
|
||||
#END UPGRADE
|
||||
%endif
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
%files
|
||||
%if %{bundle_jemalloc}
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.jemalloc
|
||||
|
@ -700,6 +643,7 @@ exit 0
|
|||
%config(noreplace)%{_sysconfdir}/%{pkgname}/schema/*.ldif
|
||||
%dir %{_sysconfdir}/%{pkgname}/config
|
||||
%dir %{_sysconfdir}/systemd/system/%{groupname}.wants
|
||||
%{_sysusersdir}/389-ds-base.conf
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/slapd-collations.conf
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/certmap.conf
|
||||
%{_datadir}/%{pkgname}
|
||||
|
@ -713,17 +657,15 @@ exit 0
|
|||
%{_mandir}/man1/ds-logpipe.py.1.gz
|
||||
%{_bindir}/ldclt
|
||||
%{_mandir}/man1/ldclt.1.gz
|
||||
%{_sbindir}/ldif2ldap
|
||||
%{_mandir}/man8/ldif2ldap.8.gz
|
||||
%{_bindir}/logconv.pl
|
||||
%{_mandir}/man1/logconv.pl.1.gz
|
||||
%{_bindir}/pwdhash
|
||||
%{_mandir}/man1/pwdhash.1.gz
|
||||
%{_bindir}/readnsstate
|
||||
%{_mandir}/man1/readnsstate.1.gz
|
||||
# Remove for now: %caps(CAP_NET_BIND_SERVICE=pe) {_sbindir}/ns-slapd
|
||||
#%caps(CAP_NET_BIND_SERVICE=pe) {_sbindir}/ns-slapd
|
||||
%{_sbindir}/ns-slapd
|
||||
%{_mandir}/man8/ns-slapd.8.gz
|
||||
%{_sbindir}/openldap_to_ds
|
||||
%{_mandir}/man8/openldap_to_ds.8.gz
|
||||
%{_libexecdir}/%{pkgname}/ds_systemd_ask_password_acl
|
||||
%{_libexecdir}/%{pkgname}/ds_selinux_restorecon.sh
|
||||
%{_mandir}/man5/99user.ldif.5.gz
|
||||
|
@ -762,136 +704,22 @@ exit 0
|
|||
%{_libdir}/libsvrcore.so
|
||||
%{_libdir}/%{pkgname}/libslapd.so
|
||||
%{_libdir}/%{pkgname}/libns-dshttpd.so
|
||||
%{_libdir}/%{pkgname}/libsds.so
|
||||
%{_libdir}/%{pkgname}/libldaputil.so
|
||||
%{_libdir}/pkgconfig/svrcore.pc
|
||||
%{_libdir}/pkgconfig/dirsrv.pc
|
||||
%{_libdir}/pkgconfig/libsds.pc
|
||||
|
||||
%files libs
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%dir %{_libdir}/%{pkgname}
|
||||
%{_libdir}/libsvrcore.so.*
|
||||
%{_libdir}/%{pkgname}/libslapd.so.*
|
||||
%{_libdir}/%{pkgname}/libns-dshttpd-*.so
|
||||
%{_libdir}/%{pkgname}/libsds.so.*
|
||||
%{_libdir}/%{pkgname}/libns-dshttpd.so.*
|
||||
%{_libdir}/%{pkgname}/libldaputil.so.*
|
||||
%{_libdir}/%{pkgname}/librewriters.so*
|
||||
%if %{bundle_jemalloc}
|
||||
%{_libdir}/%{pkgname}/lib/libjemalloc.so.2
|
||||
%endif
|
||||
|
||||
%if %{use_legacy}
|
||||
%files legacy-tools
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%{_bindir}/infadd
|
||||
%{_mandir}/man1/infadd.1.gz
|
||||
%{_bindir}/ldif
|
||||
%{_mandir}/man1/ldif.1.gz
|
||||
%{_bindir}/migratecred
|
||||
%{_mandir}/man1/migratecred.1.gz
|
||||
%{_bindir}/mmldif
|
||||
%{_mandir}/man1/mmldif.1.gz
|
||||
%{_bindir}/rsearch
|
||||
%{_mandir}/man1/rsearch.1.gz
|
||||
%{_libexecdir}/%{pkgname}/ds_selinux_enabled
|
||||
%{_libexecdir}/%{pkgname}/ds_selinux_port_query
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/template-initconfig
|
||||
%{_mandir}/man5/template-initconfig.5.gz
|
||||
%{_datadir}/%{pkgname}/properties/*.res
|
||||
%{_datadir}/%{pkgname}/script-templates
|
||||
%{_datadir}/%{pkgname}/updates
|
||||
%{_sbindir}/ldif2ldap
|
||||
%{_mandir}/man8/ldif2ldap.8.gz
|
||||
%{_sbindir}/bak2db
|
||||
%{_mandir}/man8/bak2db.8.gz
|
||||
%{_sbindir}/db2bak
|
||||
%{_mandir}/man8/db2bak.8.gz
|
||||
%{_sbindir}/db2index
|
||||
%{_mandir}/man8/db2index.8.gz
|
||||
%{_sbindir}/db2ldif
|
||||
%{_mandir}/man8/db2ldif.8.gz
|
||||
%{_sbindir}/dbverify
|
||||
%{_mandir}/man8/dbverify.8.gz
|
||||
%{_sbindir}/ldif2db
|
||||
%{_mandir}/man8/ldif2db.8.gz
|
||||
%{_sbindir}/restart-dirsrv
|
||||
%{_mandir}/man8/restart-dirsrv.8.gz
|
||||
%{_sbindir}/start-dirsrv
|
||||
%{_mandir}/man8/start-dirsrv.8.gz
|
||||
%{_sbindir}/status-dirsrv
|
||||
%{_mandir}/man8/status-dirsrv.8.gz
|
||||
%{_sbindir}/stop-dirsrv
|
||||
%{_mandir}/man8/stop-dirsrv.8.gz
|
||||
%{_sbindir}/upgradedb
|
||||
%{_mandir}/man8/upgradedb.8.gz
|
||||
%{_sbindir}/vlvindex
|
||||
%{_mandir}/man8/vlvindex.8.gz
|
||||
%{_sbindir}/monitor
|
||||
%{_mandir}/man8/monitor.8.gz
|
||||
%{_sbindir}/dbmon.sh
|
||||
%{_mandir}/man8/dbmon.sh.8.gz
|
||||
%{_sbindir}/dn2rdn
|
||||
%{_mandir}/man8/dn2rdn.8.gz
|
||||
%{_sbindir}/restoreconfig
|
||||
%{_mandir}/man8/restoreconfig.8.gz
|
||||
%{_sbindir}/saveconfig
|
||||
%{_mandir}/man8/saveconfig.8.gz
|
||||
%{_sbindir}/suffix2instance
|
||||
%{_mandir}/man8/suffix2instance.8.gz
|
||||
%{_sbindir}/upgradednformat
|
||||
%{_mandir}/man8/upgradednformat.8.gz
|
||||
%{_mandir}/man1/dbgen.pl.1.gz
|
||||
%{_bindir}/repl-monitor
|
||||
%{_mandir}/man1/repl-monitor.1.gz
|
||||
%{_bindir}/repl-monitor.pl
|
||||
%{_mandir}/man1/repl-monitor.pl.1.gz
|
||||
%{_bindir}/cl-dump
|
||||
%{_mandir}/man1/cl-dump.1.gz
|
||||
%{_bindir}/cl-dump.pl
|
||||
%{_mandir}/man1/cl-dump.pl.1.gz
|
||||
%{_bindir}/dbgen.pl
|
||||
%{_mandir}/man8/bak2db.pl.8.gz
|
||||
%{_sbindir}/bak2db.pl
|
||||
%{_sbindir}/cleanallruv.pl
|
||||
%{_mandir}/man8/cleanallruv.pl.8.gz
|
||||
%{_sbindir}/db2bak.pl
|
||||
%{_mandir}/man8/db2bak.pl.8.gz
|
||||
%{_sbindir}/db2index.pl
|
||||
%{_mandir}/man8/db2index.pl.8.gz
|
||||
%{_sbindir}/db2ldif.pl
|
||||
%{_mandir}/man8/db2ldif.pl.8.gz
|
||||
%{_sbindir}/fixup-linkedattrs.pl
|
||||
%{_mandir}/man8/fixup-linkedattrs.pl.8.gz
|
||||
%{_sbindir}/fixup-memberof.pl
|
||||
%{_mandir}/man8/fixup-memberof.pl.8.gz
|
||||
%{_sbindir}/ldif2db.pl
|
||||
%{_mandir}/man8/ldif2db.pl.8.gz
|
||||
%{_sbindir}/migrate-ds.pl
|
||||
%{_mandir}/man8/migrate-ds.pl.8.gz
|
||||
%{_sbindir}/ns-accountstatus.pl
|
||||
%{_mandir}/man8/ns-accountstatus.pl.8.gz
|
||||
%{_sbindir}/ns-activate.pl
|
||||
%{_mandir}/man8/ns-activate.pl.8.gz
|
||||
%{_sbindir}/ns-inactivate.pl
|
||||
%{_mandir}/man8/ns-inactivate.pl.8.gz
|
||||
%{_sbindir}/ns-newpwpolicy.pl
|
||||
%{_mandir}/man8/ns-newpwpolicy.pl.8.gz
|
||||
%{_sbindir}/remove-ds.pl
|
||||
%{_mandir}/man8/remove-ds.pl.8.gz
|
||||
%{_sbindir}/schema-reload.pl
|
||||
%{_mandir}/man8/schema-reload.pl.8.gz
|
||||
%{_sbindir}/setup-ds.pl
|
||||
%{_mandir}/man8/setup-ds.pl.8.gz
|
||||
%{_sbindir}/syntax-validate.pl
|
||||
%{_mandir}/man8/syntax-validate.pl.8.gz
|
||||
%{_sbindir}/usn-tombstone-cleanup.pl
|
||||
%{_mandir}/man8/usn-tombstone-cleanup.pl.8.gz
|
||||
%{_sbindir}/verify-db.pl
|
||||
%{_mandir}/man8/verify-db.pl.8.gz
|
||||
%{_libdir}/%{pkgname}/perl
|
||||
%endif
|
||||
|
||||
%files snmp
|
||||
%doc LICENSE LICENSE.GPLv3+ LICENSE.openssl README.devel
|
||||
%config(noreplace)%{_sysconfdir}/%{pkgname}/config/ldap-agent.conf
|
||||
|
@ -912,20 +740,73 @@ exit 0
|
|||
%{_mandir}/man8/dsidm.8.gz
|
||||
%{_libexecdir}/%{pkgname}/dscontainer
|
||||
|
||||
%if %{use_cockpit}
|
||||
%files -n cockpit-389-ds -f cockpit.list
|
||||
%{_datarootdir}/metainfo/389-console/org.port389.cockpit_console.metainfo.xml
|
||||
%doc README.md
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon May 22 2023 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.35-1
|
||||
- Bump version to 1.4.3.35-1
|
||||
- Resolves: rhbz#2188628 - Rebase 389-ds-base in RHEL 8.9 to 1.4.3.25
|
||||
* Thu Jan 25 2024 Eduard Abdullin <eabdullin@almalinux.org> - 2.3.6-5.alma.1
|
||||
- Bump version to 2.3.6-5
|
||||
- Issue 5909 - Multi listener hang with 20k connections (#5917)
|
||||
- issue 5924 - ASAN server build crash when looping
|
||||
- Issue 5984 - Crash when paged result search are abandoned
|
||||
(#5985)
|
||||
|
||||
* Tue Nov 15 2022 Mark Reynolds <mreynolds@redhat.com> - 1.4.3.32-1
|
||||
- Bump version to 1.4.3.32-1
|
||||
- Resolves: Bug 2098138 - broken nsslapd-subtree-rename-switch option in rhds11
|
||||
- Resolves: Bug 2119063 - entryuuid fixup tasks fails because entryUUID is not mutable
|
||||
- Resolves: Bug 2136610 - [RFE] Add 'cn' attribute to IPA audit logs
|
||||
- Resolves: Bug 2142638 - pam mutex lock causing high etimes, affecting red hat internal sso
|
||||
- Resolves: Bug 2096795 - [RFE] Support ECDSA private keys for TLS
|
||||
* Thu Sep 7 2023 Simon Pichugin <spichugi@redhat.com> - 2.3.6-3
|
||||
- Bump version to 2.3.6-3
|
||||
- Resolves: rhbz#2236163 - Regression: replication can't be enabled for consumer or hub role
|
||||
|
||||
* Tue Aug 8 2023 Mark Reynolds <mreynolds@redhat.com> - 2.3.6-2
|
||||
- Bump version to 2.3.6-2
|
||||
- Resolves: rhbz#2225532 - 389-ds-base FTBFS with rust-1.71.0
|
||||
- Resolves: rhbz#2218209 - useradd: invalid user ID '389:389': installing 389-ds-base in container fails to create the dirsrv user
|
||||
- Resolves: rhbz#2207691 - python3-lib389: Python tarfile extraction needs change to avoid a warning
|
||||
- Resolves: rhbz#2179278 - dirsrv failed to start after reboot because "dirsrv" did not have access on /run/dirsrv
|
||||
|
||||
* Mon Jul 24 2023 Mark Reynolds <mreynolds@redhat.com> - 2.3.4-3
|
||||
- Bump version to 2.3.4-3
|
||||
- Resolves: rhbz#2189954 - RFE Improve reponse time to filters containing 'nsrole'
|
||||
- Resolves: rhbz#2189946 - RFE support of slapi_memberof for plugins/core server
|
||||
- Resolves: rhbz#1974242 - Paged search impacts performance
|
||||
|
||||
* Fri May 19 2023 Mark Reynolds <mreynolds@redhat.com> - 2.3.4-2
|
||||
- Bump version to 2.3.4-2
|
||||
- Resolves: rhbz#2188627 - Fix license
|
||||
|
||||
* Thu May 18 2023 Mark Reynolds <mreynolds@redhat.com> - 2.3.4-1
|
||||
- Bump version to 2.3.4-1
|
||||
- Resolves: rhbz#2188627 - Rebase 389-ds-base-2.3 in RHEL 9.3
|
||||
|
||||
* Wed Mar 08 2023 Simon Pichugin <spichugi@redhat.com> - 2.2.4-4
|
||||
- Resolves: rhbz#2095366 - [RFE] 389-ds-base systemd-sysusers
|
||||
|
||||
* Tue Dec 13 2022 Mark Reynolds <mreynolds@redhat.com> - 2.2.4-3
|
||||
- Bump version to 2.2.4-3
|
||||
- Resolves: rhbz#2142636 - pam mutex lock causing high etimes, affecting red hat internal sso
|
||||
- Resolves: rhbz#2093981 - RFE - Create Security Audit Log
|
||||
- Resolves: rhbz#2132697 - [RFE] 389ds: run as non-root
|
||||
- Resolves: rhbz#2124660 - Retro changelog trimming uses maxage incorrectly
|
||||
- Resolves: rhbz#2114039 - Current pbkdf2 hardcoded parameters are no longer secure
|
||||
- Resolves: rhbz#2112998 - performance search rate: checking if an entry is a referral is expensive
|
||||
- Resolves: rhbz#2112361 - Supplier should do periodic update to avoid slow replication when a new direct update happen
|
||||
- Resolves: rhbz#2109891 - Migrate 389 to pcre2
|
||||
|
||||
|
||||
* Mon Dec 12 2022 Mark Reynolds <mreynolds@redhat.com> - 2.2.4-2
|
||||
- Bump version to 2.2.4-2
|
||||
- Resolves: Bug 1859271 - RFE - Extend log of operations statistics in access log
|
||||
- Resolves: Bug 2093981 - RFE - Create Security Audit Log
|
||||
- Resolves: Bug 2109891 - Migrate 389 to pcre2
|
||||
- Resolves: Bug 2112361 - Supplier should do periodic update to avoid slow replication when a new direct update happen
|
||||
- Resolves: Bug 2112998 - performance search rate: checking if an entry is a referral is expensive
|
||||
- Resolves: Bug 2114039 - Current pbkdf2 hardcoded parameters are no longer secure
|
||||
- Resolves: Bug 2124660 - Retro changelog trimming uses maxage incorrectly
|
||||
- Resolves: Bug 2132697 - RFE - run as non-root
|
||||
- Resolves: Bug 2142636 - pam mutex lock causing high etimes, affecting red hat internal sso
|
||||
|
||||
* Fri Nov 11 2022 Mark Reynolds <mreynolds@redhat.com> - 2.2.4-1
|
||||
- Bump version to 2.2.4-1
|
||||
- Resolves: Bug 1132524 - [RFE] Compression of log files
|
||||
|
||||
|
|
Loading…
Reference in New Issue