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):

Reply via email to