Catch already exist errors

This commit is contained in:
2025-04-27 16:10:09 +02:00
parent c0d3cb112e
commit 10f703537a

50
main.py
View File

@@ -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:
try:
result = conn.search_s(schema_dn, ldap.SCOPE_BASE, attrlist=['olcAttributeTypes'])
existing = result[0][1].get('olcAttributeTypes', [])
encoded = atdef.encode()
try:
result = conn.search_s(schema_dn, ldap.SCOPE_BASE,
attrlist=['olcAttributeTypes'])
existing = result[0][1].get('olcAttributeTypes', [])
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:
try:
result = conn.search_s(schema_dn, ldap.SCOPE_BASE, attrlist=['olcObjectClasses'])
existing = result[0][1].get('olcObjectClasses', [])
encoded = ocdef.encode()
try:
result = conn.search_s(schema_dn, ldap.SCOPE_BASE,
attrlist=['olcObjectClasses'])
existing = result[0][1].get('olcObjectClasses', [])
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()