From 10f703537afb1cd92e08c9c9656566614a6abe35 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Sun, 27 Apr 2025 16:10:09 +0200 Subject: [PATCH] Catch already exist errors --- main.py | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index e1b0173..31f0686 100755 --- a/main.py +++ b/main.py @@ -144,43 +144,49 @@ def main(): prefix = f'{{{idx}}}' schema_dn = f"cn={prefix}{args.schema_name},{base_dn}" + # Add/update AttributeTypes # Add/update AttributeTypes for atdef in args.attribute_type: + encoded = atdef.encode() try: - result = conn.search_s(schema_dn, ldap.SCOPE_BASE, attrlist=['olcAttributeTypes']) + result = conn.search_s(schema_dn, ldap.SCOPE_BASE, + attrlist=['olcAttributeTypes']) existing = result[0][1].get('olcAttributeTypes', []) - encoded = atdef.encode() if encoded in existing: - print(f"â„šī¸ AttributeType already present: {atdef}") + print(f"â„šī¸ AttributeType already exists, replacing: {atdef}") + # Replace the existing value + conn.modify_s(schema_dn, [ + (ldap.MOD_REPLACE, 'olcAttributeTypes', [encoded]) + ]) + print(f"🔄 Replaced AttributeType: {atdef}") else: - conn.modify_s(schema_dn, [(ldap.MOD_ADD, 'olcAttributeTypes', [encoded])]) + conn.modify_s(schema_dn, [ + (ldap.MOD_ADD, 'olcAttributeTypes', [encoded]) + ]) print(f"➕ Added AttributeType: {atdef}") except ldap.LDAPError as e: - info = getattr(e, 'info', '') or str(e) - if 'Duplicate attributeType' in info: - print(f"â„šī¸ Duplicate AttributeType skipped: {atdef}") - else: - print(f"❌ Error adding AttributeType '{atdef}': {e}", file=sys.stderr) - sys.exit(1) + print(f"❌ LDAP error for AttributeType '{atdef}': {e}", file=sys.stderr) # Add/update ObjectClasses for ocdef in args.object_class: + encoded = ocdef.encode() try: - result = conn.search_s(schema_dn, ldap.SCOPE_BASE, attrlist=['olcObjectClasses']) + result = conn.search_s(schema_dn, ldap.SCOPE_BASE, + attrlist=['olcObjectClasses']) existing = result[0][1].get('olcObjectClasses', []) - encoded = ocdef.encode() if encoded in existing: - print(f"â„šī¸ ObjectClass already present: {ocdef}") + print(f"â„šī¸ ObjectClass already exists, replacing: {ocdef}") + conn.modify_s(schema_dn, [ + (ldap.MOD_REPLACE, 'olcObjectClasses', [encoded]) + ]) + print(f"🔄 Replaced ObjectClass: {ocdef}") else: - conn.modify_s(schema_dn, [(ldap.MOD_ADD, 'olcObjectClasses', [encoded])]) + conn.modify_s(schema_dn, [ + (ldap.MOD_ADD, 'olcObjectClasses', [encoded]) + ]) print(f"➕ Added ObjectClass: {ocdef}") except ldap.LDAPError as e: - info = getattr(e, 'info', '') or str(e) - if 'Duplicate objectClass' in info: - print(f"â„šī¸ Duplicate ObjectClass skipped: {ocdef}") - else: - print(f"❌ Error adding ObjectClass '{ocdef}': {e}", file=sys.stderr) - sys.exit(1) + print(f"❌ LDAP error for ObjectClass '{ocdef}': {e}", file=sys.stderr) conn.unbind_s()