forwarded 1008355 https://github.com/python-ldap/python-ldap/issues/422 tags +patch thanks
Hi, On Sun, Apr 24, 2022 at 01:21:33PM +0200, Michael Banck wrote: > This error comes from python3-ldap's slaptest: > > |$ python3 > |Python 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0] on linux > |Type "help", "copyright", "credits" or "license" for more information. > |>>> import slapdtest > |>>> server = slapdtest.SlapdObject() > |>>> server.start() > |Traceback (most recent call last): > | File "<stdin>", line 1, in <module> > | File "/usr/lib/python3/dist-packages/slapdtest/_slapdtest.py", line 445, > in start > | self._start_slapd() > | File "/usr/lib/python3/dist-packages/slapdtest/_slapdtest.py", line 420, > in _start_slapd > | raise RuntimeError("slapd exited before opening port") > |RuntimeError: slapd exited before opening port > |>>> > > Not sure what the actual problem is, When I add debugging (using "slapd_args.extend(['-d', '-1'])" unconditionally around line 409), I get |>>> import slapdtest |>>> server = slapdtest.SlapdObject() |>>> server.start() |starting slapd: %r /usr/sbin/slapd -f /build/django-auth-ldap-3.0.0/python-ldap-test-45785/slapd.conf -F /build/django-auth-ldap-3.0.0/python-ldap-test-45785 -h ldap://127.0.0.1:45785/ ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-45785%2Fldapi -d -1 |62654543.29b9109c 0x7f121ed57980 @(#) $OpenLDAP: slapd 2.5.11+dfsg-1 (Mar 12 2022 03:38:02) $ | Debian OpenLDAP Maintainers <pkg-openldap-de...@lists.alioth.debian.org> |62654544.008b742b 0x7f121ed57980 daemon_init: ldap://127.0.0.1:45785/ ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-45785%2Fldapi |62654544.008cb95c 0x7f121ed57980 daemon_init: listen on ldap://127.0.0.1:45785/ |62654544.008ccf75 0x7f121ed57980 daemon_init: listen on ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-45785%2Fldapi |62654544.008ce019 0x7f121ed57980 daemon_init: 2 listeners to open... |62654544.008cf2ec 0x7f121ed57980 ldap_url_parse_ext(ldap://127.0.0.1:45785/) |62654544.008d759a 0x7f121ed57980 daemon: listener initialized ldap://127.0.0.1:45785/ |62654544.008d8a56 0x7f121ed57980 ldap_url_parse_ext(ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-45785%2Fldapi) |62654544.008e74f4 0x7f121ed57980 daemon: listener initialized ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-45785%2Fldapi |62654544.008e85df 0x7f121ed57980 daemon_init: 2 listeners opened |62654544.0099667a 0x7f121ed57980 slapd init: initiated server. |62654544.009b64a3 0x7f121ed57980 slap_sasl_init: initialized! |62654544.00b255c4 0x7f121ed57980 backend_startup_one: starting "cn=config" |62654544.00b36ec4 0x7f121ed57980 config_setup_ldif: expected directory /build/django-auth-ldap-3.0.0/python-ldap-test-45785 to be empty! |62654544.00b440d5 0x7f121ed57980 slapd destroy: freeing system resources. |62654544.00b6056e 0x7f121ed57980 slapd stopped. |62654544.00b6821b 0x7f121ed57980 connections_destroy: nothing to destroy. |Traceback (most recent call last): | File "<stdin>", line 1, in <module> | File "/usr/lib/python3/dist-packages/slapdtest/_slapdtest.py", line 447, in start | self._start_slapd() | File "/usr/lib/python3/dist-packages/slapdtest/_slapdtest.py", line 422, in _start_slapd | raise RuntimeError("slapd exited before opening port") |RuntimeError: slapd exited before opening port The error seems to be |config_setup_ldif: expected directory /build/django-auth-ldap-3.0.0/python-ldap-test-45785 to be empty! which is open upstream item at https://github.com/python-ldap/python-ldap/issues/422 If I apply the mentioned (and attached patch), slapd starts up fine: |>>> import slapdtest |>>> server = slapdtest.SlapdObject() |>>> server.start() |starting slapd: %r /usr/sbin/slapd -f /build/django-auth-ldap-3.0.0/python-ldap-test-49837/slapd.conf -F /build/django-auth-ldap-3.0.0/python-ldap-test-49837/slapd.d -h ldap://127.0.0.1:49837/ ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-49837%2Fldapi -d 0 |>>> and django-auth-ldap's tests pass: |I: pybuild base:239: PYTHONPATH=. python3.9 /usr/bin/django-admin test --settings tests.settings |Creating test database for alias 'default'... |System check identified no issues (0 silenced). |starting slapd: %r /usr/sbin/slapd -f /build/django-auth-ldap-3.0.0/python-ldap-test-33057/slapd.conf -F /build/django-auth-ldap-3.0.0/python-ldap-test-33057/slapd.d -h ldap://127.0.0.1:33057/ ldapi://%2Fbuild%2Fdjango-auth-ldap-3.0.0%2Fpython-ldap-test-33057%2Fldapi -d 0 |........................................................................................ |---------------------------------------------------------------------- |Ran 88 tests in 3.494s | |OK Michael
diff --git a/Lib/slapdtest/_slapdtest.py b/Lib/slapdtest/_slapdtest.py index afd5304..a7a5c63 100644 --- a/Lib/slapdtest/_slapdtest.py +++ b/Lib/slapdtest/_slapdtest.py @@ -190,6 +190,7 @@ class SlapdObject(object): local_host = LOCALHOST testrunsubdirs = ( 'schema', + 'slapd.d', ) openldap_schema_files = ( 'core.schema', @@ -220,6 +221,7 @@ class SlapdObject(object): self.server_id = self._port % 4096 self.testrundir = os.path.join(self.TMPDIR, 'python-ldap-test-%d' % self._port) self._schema_prefix = os.path.join(self.testrundir, 'schema') + self._slapd_d = os.path.join(self.testrundir, 'slapd.d') self._slapd_conf = os.path.join(self.testrundir, 'slapd.conf') self._db_directory = os.path.join(self.testrundir, "openldap-data") self.ldap_uri = "ldap://%s:%d/" % (self.local_host, self._port) @@ -418,7 +420,7 @@ class SlapdObject(object): slapd_args = [ self.PATH_SLAPD, '-f', self._slapd_conf, - '-F', self.testrundir, + '-F', self._slapd_d, '-h', ' '.join(urls), ] if self._log.isEnabledFor(logging.DEBUG):