Source code for univention.connector.ad.proxyAddresses
#!/usr/bin/python3
#
# Univention AD Connector
# Mapping functions for proxyAddresses
#
# SPDX-FileCopyrightText: 2016-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
from logging import getLogger
from univention.logging import Structured
log = Structured(getLogger("LDAP").getChild(__name__))
[docs]
def valid_mailaddress(val):
# invalid is: <transport>:<address> iff <transport>.lower() != smtp
if not val:
return
if isinstance(val, bytes):
if b':' not in val:
return val
else:
if val.lower().startswith(b'smtp:'):
return val
else:
if ':' not in val:
return val
else:
if val.lower().startswith('smtp:'):
return val
[docs]
def equal(values1, values2):
"""
This is called in these two ways:
1. in sync_from_ucs: values1 are mapped ucs and values2 are con
2. in __set_values: values1 are ucs and values2 are mapped con
"""
log.trace("proxyAddesses: values1: %r", values1)
log.trace("proxyAddesses: values2: %r", values2)
values_normalized = []
for values in (values1, values2):
if not isinstance(values, list | tuple):
values = [values]
values_normalized.append(
[v for v in map(valid_mailaddress, values) if v],
)
return set(values_normalized[0]) == set(values_normalized[1])
[docs]
def to_proxyAddresses(s4connector, key, object):
new_con_values = []
ucs_values = object['attributes'].get('mailPrimaryAddress', [])
mailPrimaryAddress = ucs_values[0] if ucs_values else None
if mailPrimaryAddress:
new_con_value = b'SMTP:' + mailPrimaryAddress
new_con_values.append(new_con_value)
for v in object['attributes'].get('mailAlternativeAddress', []):
if v == mailPrimaryAddress:
continue
new_con_value = b'smtp:' + v
new_con_values.append(new_con_value)
return new_con_values
[docs]
def to_mailPrimaryAddress(s4connector, key, object):
for value in object['attributes'].get('proxyAddresses', []):
if value.startswith(b'SMTP:'):
return [value[5:]]
return []
[docs]
def to_mailAlternativeAddress(s4connector, key, object):
new_ucs_values = []
for value in object['attributes'].get('proxyAddresses', []):
if value.startswith(b'smtp:'):
new_ucs_values.append(value[5:])
return new_ucs_values