def install_schemas(setup_path, names, lp, creds, reporter): """Install the OpenChange-specific schemas in the SAM LDAP database. :param setup_path: Path to the setup directory. :param names: provision names object. :param lp: Loadparm context :param creds: Credentials Context :param reporter: A progress reporter instance (subclass of AbstractProgressReporter) """ session_info = system_session() lp.set("dsdb:schema update allowed", "yes") # Step 1. Extending the prefixmap attribute of the schema DN record names = guess_names_from_smbconf(lp, None, None) samdb = SamDB(url=get_ldb_url(lp, creds, names), session_info=session_info, credentials=creds, lp=lp) reporter.reportNextStep("Register Exchange OIDs") try: schemadn = str(names.schemadn) current = samdb.search(expression="objectClass=classSchema", base=schemadn, scope=SCOPE_BASE) schema_ldif = "" prefixmap_data = "" for ent in current: schema_ldif += samdb.write_ldif(ent, ldb.CHANGETYPE_NONE) prefixmap_data = open(setup_path("AD/prefixMap.txt"), 'r').read() prefixmap_data = b64encode(prefixmap_data) # We don't actually add this ldif, just parse it prefixmap_ldif = "dn: %s\nprefixMap:: %s\n\n" % (schemadn, prefixmap_data) dsdb._dsdb_set_schema_from_ldif(samdb, prefixmap_ldif, schema_ldif, schemadn) except RuntimeError as err: print ("[!] error while provisioning the prefixMap: %s" % str(err)) except LdbError as err: print ("[!] error while provisioning the prefixMap: %s" % str(err)) try: provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_attributes.ldif", "Add Exchange attributes to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_auxiliary_class.ldif", "Add Exchange auxiliary classes to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_objectCategory.ldif", "Add Exchange objectCategory to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_container.ldif", "Add Exchange containers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_subcontainer.ldif", "Add Exchange *sub* containers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_sub_CfgProtocol.ldif", "Add Exchange CfgProtocol subcontainers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_sub_mailGateway.ldif", "Add Exchange mailGateway subcontainers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema.ldif", "Add Exchange classes to Samba schema") modify_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_possSuperior.ldif", "Add possSuperior attributes to Exchange classes") modify_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_modify.ldif", "Extend existing Samba classes and attributes") except LdbError, ldb_error: print ("[!] error while provisioning the Exchange" " schema classes (%d): %s" % ldb_error.args)
def install_schemas(setup_path, names, lp, creds, reporter): """Install the OpenChange-specific schemas in the SAM LDAP database. :param setup_path: Path to the setup directory. :param names: provision names object. :param lp: Loadparm context :param creds: Credentials Context :param reporter: A progress reporter instance (subclass of AbstractProgressReporter) """ session_info = system_session() lp.set("dsdb:schema update allowed", "yes") # Step 1. Extending the prefixmap attribute of the schema DN record samdb = SamDB(url=get_ldb_url(lp, creds, names), session_info=session_info, credentials=creds, lp=lp) reporter.reportNextStep("Register Exchange OIDs") try: schemadn = str(names.schemadn) current = samdb.search(expression="objectClass=classSchema", base=schemadn, scope=SCOPE_BASE) schema_ldif = "" prefixmap_data = "" for ent in current: schema_ldif += samdb.write_ldif(ent, ldb.CHANGETYPE_NONE) prefixmap_data = open(setup_path("AD/prefixMap.txt"), 'r').read() prefixmap_data = b64encode(prefixmap_data) # We don't actually add this ldif, just parse it prefixmap_ldif = "dn: %s\nprefixMap:: %s\n\n" % (schemadn, prefixmap_data) prefixmap_ldif += "dn:\nchangetype: modify\nreplace: schemaupdatenow\nschemaupdatenow: 1\n\n" dsdb._dsdb_set_schema_from_ldif(samdb, prefixmap_ldif, schema_ldif, schemadn) except RuntimeError as err: print ("[!] error while provisioning the prefixMap: %s" % str(err)) except LdbError as err: print ("[!] error while provisioning the prefixMap: %s" % str(err)) try: provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_attributes.ldif", "Add Exchange attributes to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_auxiliary_class.ldif", "Add Exchange auxiliary classes to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_objectCategory.ldif", "Add Exchange objectCategory to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_container.ldif", "Add Exchange containers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_subcontainer.ldif", "Add Exchange *sub* containers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_sub_CfgProtocol.ldif", "Add Exchange CfgProtocol subcontainers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_sub_mailGateway.ldif", "Add Exchange mailGateway subcontainers to Samba schema") provision_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema.ldif", "Add Exchange classes to Samba schema") modify_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_possSuperior.ldif", "Add possSuperior attributes to Exchange classes") modify_schema(setup_path, names, lp, creds, reporter, "AD/oc_provision_schema_modify.ldif", "Extend existing Samba classes and attributes") except LdbError, ldb_error: print ("[!] error while provisioning the Exchange" " schema classes (%d): %s" % ldb_error.args)
def set_from_ldif(self, pf, df, dn): dsdb._dsdb_set_schema_from_ldif(self.ldb, pf, df, dn)
def install_schemas(setup_path, names, lp, creds, reporter): """Install the OpenChange-specific schemas in the SAM LDAP database. :param setup_path: Path to the setup directory. :param names: provision names object. :param lp: Loadparm context :param creds: Credentials Context :param reporter: A progress reporter instance (subclass of AbstractProgressReporter) """ lp.set("dsdb:schema update allowed", "yes") sam_db = get_schema_master_samdb(names, lp, creds) # Step 1. Extending the prefixmap attribute of the schema DN record reporter.reportNextStep("Register Exchange OIDs") try: schemadn = str(names.schemadn) current = sam_db.search(expression="objectClass=classSchema", base=schemadn, scope=SCOPE_BASE) schema_ldif = "" prefixmap_data = "" for ent in current: schema_ldif += sam_db.write_ldif(ent, ldb.CHANGETYPE_NONE) prefixmap_data = open(setup_path("AD/prefixMap.txt"), 'r').read() prefixmap_data = b64encode(prefixmap_data) # We don't actually add this ldif, just parse it prefixmap_ldif = "dn: %s\nprefixMap:: %s\n\n" % (schemadn, prefixmap_data) prefixmap_ldif += "dn:\nchangetype: modify\nreplace: schemaupdatenow\nschemaupdatenow: 1\n\n" dsdb._dsdb_set_schema_from_ldif(sam_db, prefixmap_ldif, schema_ldif, schemadn) except RuntimeError as err: print ("[!] error while provisioning the prefixMap: %s" % str(err)) except LdbError as err: print ("[!] error while provisioning the prefixMap: %s" % str(err)) schemas = [{'path': 'AD/oc_provision_schema_attributes.ldif', 'description': 'Add Exchange attributes to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema_auxiliary_class.ldif', 'description': 'Add Exchange auxiliary classes to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema_objectCategory.ldif', 'description': 'Add Exchange objectCategory to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema_container.ldif', 'description': 'Add Exchange containers to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema_subcontainer.ldif', 'description': 'Add Exchange *sub* containers to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema_sub_CfgProtocol.ldif', 'description': 'Add Exchange CfgProtocol subcontainers to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema_sub_mailGateway.ldif', 'description': 'Add Exchange mailGateway subcontainers to Samba schema', 'modify_mode': False}, {'path': 'AD/oc_provision_schema.ldif', 'description': 'Add Exchange classes to Samba schema', 'modify_mode': False}, # modify schemas {'path': 'AD/oc_provision_schema_possSuperior.ldif', 'description': 'Add possSuperior attributes to Exchange classes', 'modify_mode': True}, {'path': 'AD/oc_provision_schema_modify.ldif', 'description': 'Extend existing Samba classes and attributes', 'modify_mode': True}] for schema in schemas: try: provision_schema(sam_db, setup_path, names, reporter, schema['path'], schema['description'], schema['modify_mode']) except LdbError, ldb_error: print ("[!] error while provisioning the Exchange" " schema classes (%d): %s" % ldb_error.args) raise