From b189be12ecd1ba9efa35daf41e7e04a9362c6a5e Mon Sep 17 00:00:00 2001 From: Jan Cholasta Date: Fri, 7 Apr 2017 07:40:19 +0200 Subject: [PATCH] dsinstance: reconnect ldap2 after DS is restarted by certmonger DS is restarted by certmonger in the restart_dirsrv script after the DS certificate is saved. This breaks the ldap2 backend and makes any operation fail with NetworkError until it is reconnected. Reconnect ldap2 after the DS certificate request is finished to fix the issue. Make sure restart_dirsrv waits for the ldapi socket so that the reconnect does not fail. https://pagure.io/freeipa/issue/6757 Reviewed-By: Martin Babinsky --- install/restart_scripts/restart_dirsrv | 2 +- ipaserver/install/dsinstance.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/install/restart_scripts/restart_dirsrv b/install/restart_scripts/restart_dirsrv index b4c9490c1..ff476cac4 100644 --- a/install/restart_scripts/restart_dirsrv +++ b/install/restart_scripts/restart_dirsrv @@ -41,7 +41,7 @@ def _main(): try: if services.knownservices.dirsrv.is_running(): - services.knownservices.dirsrv.restart(instance) + services.knownservices.dirsrv.restart(instance, ldapi=True) except Exception as e: syslog.syslog(syslog.LOG_ERR, "Cannot restart dirsrv (instance: '%s'): %s" % (instance, str(e))) diff --git a/ipaserver/install/dsinstance.py b/ipaserver/install/dsinstance.py index 79dc90e92..fb5f925de 100644 --- a/ipaserver/install/dsinstance.py +++ b/ipaserver/install/dsinstance.py @@ -837,6 +837,10 @@ class DsInstance(service.Service): finally: certmonger.modify_ca_helper('IPA', prev_helper) + # restart_dirsrv in the request above restarts DS, reconnect ldap2 + api.Backend.ldap2.disconnect() + api.Backend.ldap2.connect() + self.dercert = dsdb.get_cert_from_db(self.nickname, pem=False) dsdb.create_pin_file()