From: Frank Brehm Date: Thu, 12 Nov 2020 17:03:05 +0000 (+0100) Subject: Start discovering target schema X-Git-Url: https://git.uhu-banane.de/?a=commitdiff_plain;h=85198141b1eb7425ecf3805e502a31e3145da0e0;p=pixelpark%2Fldap-migration.git Start discovering target schema --- diff --git a/etc/ldap-migration.ini.default b/etc/ldap-migration.ini.default index d56820f..baea3c7 100644 --- a/etc/ldap-migration.ini.default +++ b/etc/ldap-migration.ini.default @@ -3,7 +3,7 @@ ; host = ldap.pixelpark.com ; ssl = False ; port = 389 -; bind_dn = o=admin +; bind_dn = cn=admin ; bind_pw = ????? [target] diff --git a/lib/ldap_migration/__init__.py b/lib/ldap_migration/__init__.py index 818f54e..8806c27 100644 --- a/lib/ldap_migration/__init__.py +++ b/lib/ldap_migration/__init__.py @@ -23,14 +23,14 @@ from ldap3.core.exceptions import LDAPException # Own modules from fb_tools.colored import ColoredFormatter from fb_tools.errors import IoTimeoutError -from fb_tools.common import pp +from fb_tools.common import pp, is_sequence from fb_tools.app import BaseApplication, DirectoryOptionAction from fb_tools.config import CfgFileOptionAction from fb_tools.errors import FbAppError from .config import LDAPMigrationConfiguration -__version__ = '0.3.0' +__version__ = '0.4.0' LOG = logging.getLogger(__name__) CFG_BASENAME = 'ldap-migration.ini' @@ -337,6 +337,64 @@ class LDAPMigrationApplication(BaseApplication): LOG.info("Disconnecting from source server {!r} ...".format(self.config.src_server)) self.src_server = None + # ------------------------------------------------------------------------- + def discover_target_schema(self): + + LOG.info("Discovering target schema ...") + + first = True + + for oid in self.tgt_server.schema.object_classes.keys(): + object_class =self.tgt_server.schema.object_classes[oid] + if first: + if self.verbose > 2: + LOG.debug("iFirst ObjectClass-Object:\n" + pp(object_class.__dict__)) + first = False + if is_sequence(object_class.name): + for oc_name in object_class.name: + name_lc = oc_name.lower() + oc = { + 'single_name': oc_name, + 'name': object_class.name, + 'oid': object_class.oid, + 'description': object_class.description, + 'obsolete': object_class.obsolete, + 'superior': object_class.superior, + 'kind': object_class.kind, + 'must_contain': object_class.must_contain, + 'may_contain': object_class.may_contain, + 'extensions': object_class.extensions, + 'experimental': object_class.experimental, + 'raw_definition': object_class.raw_definition, + } + self.object_classes[name_lc] = oc + else: + name_lc = object_class.name.lower() + oc = { + 'single_name': object_class.name, + 'name': object_class.name, + 'oid': object_class.oid, + 'description': object_class.description, + 'obsolete': object_class.obsolete, + 'superior': object_class.superior, + 'kind': object_class.kind, + 'must_contain': object_class.must_contain, + 'may_contain': object_class.may_contain, + 'extensions': object_class.extensions, + 'experimental': object_class.experimental, + 'raw_definition': object_class.raw_definition, + } + + if self.verbose > 2: + if self.verbose > 3: + LOG.debug("Discovered ObjectClasses:\n" + pp(self.object_classes)) + else: + tmp_dict = {} + for oc_name in self.object_classes.keys(): + tmp_dict[oc_name] = self.object_classes[oc_name]['single_name'] + LOG.debug("Discovered ObjectClasses:\n" + pp(tmp_dict)) + + # ------------------------------------------------------------------------- def _run(self): @@ -346,6 +404,7 @@ class LDAPMigrationApplication(BaseApplication): try: self.connect_source() self.connect_target() + self.discover_target_schema() LOG.info("Sleeping ...") time.sleep(2) finally: