From aa2e1ee99f07cb7ab9fe55a88ce2feb7668e965e Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Wed, 24 Mar 2021 18:16:23 +0100 Subject: [PATCH] LdapServer.update_object(): add relax parameter --- LdapServer.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/LdapServer.py b/LdapServer.py index 692eef3..63a5afc 100644 --- a/LdapServer.py +++ b/LdapServer.py @@ -8,6 +8,7 @@ import dateutil.parser import dateutil.tz import ldap from ldap.controls import SimplePagedResultsControl +from ldap.controls.simple import RelaxRulesControl import ldap.modlist as modlist import pytz @@ -91,6 +92,7 @@ class LdapServer(object): # pylint: disable=useless-object-inheritance return result[dn] if dn in result else None def paged_search(self, basedn, filterstr, attrs, scope='sub', pagesize=500): + assert not self.v2, "Paged search is not available on LDAP version 2" # Initialize SimplePagedResultsControl object page_control = SimplePagedResultsControl( True, @@ -170,7 +172,8 @@ class LdapServer(object): # pylint: disable=useless-object-inheritance return False - def update_object(self, dn, old, new, ignore_attrs=None): + def update_object(self, dn, old, new, ignore_attrs=None, relax=False): + assert not relax or not self.v2, "Relax modification is not available on LDAP version 2" ldif = modlist.modifyModlist( old, new, ignore_attr_types=ignore_attrs if ignore_attrs else [] @@ -178,7 +181,10 @@ class LdapServer(object): # pylint: disable=useless-object-inheritance if ldif == []: return True try: - self.con.modify_s(dn,ldif) + if relax: + self.con.modify_ext_s(dn, ldif, serverctrls=[RelaxRulesControl()]) + else: + self.con.modify_s(dn, ldif) return True except ldap.LDAPError as e: # pylint: disable=no-member self._error("LdapServer - Error updating %s : %s\nOld : %s\nNew : %s" % (dn, e, old, new), logging.ERROR)