return
if address:
- modlist = [
- # This is no longer a SIP user any more
- (ldap.MOD_DELETE, "objectClass", b"sipUser"),
- (ldap.MOD_DELETE, "sipAuthenticationUser", None),
- (ldap.MOD_DELETE, "sipPassword", None),
-
- (ldap.MOD_ADD, "objectClass", b"sipRoutingObject"),
- (ldap.MOD_ADD, "sipLocalAddress", self.sip_id.encode()),
- (ldap.MOD_ADD, "sipRoutingAddress", address.encode()),
- ]
+ # This is no longer a SIP user any more
+ try:
+ self._modify([
+ (ldap.MOD_DELETE, "objectClass", b"sipUser"),
+ (ldap.MOD_DELETE, "sipAuthenticationUser", None),
+ (ldap.MOD_DELETE, "sipPassword", None),
+ ])
+ except ldap.NO_SUCH_ATTRIBUTE:
+ pass
+
+ # Set new routing object
+ try:
+ self._modify([
+ (ldap.MOD_ADD, "objectClass", b"sipRoutingObject"),
+ (ldap.MOD_ADD, "sipLocalAddress", self.sip_id.encode()),
+ (ldap.MOD_ADD, "sipRoutingAddress", address.encode()),
+ ])
+
+ # If this is a change, we cannot add this again
+ except ldap.TYPE_OR_VALUE_EXISTS:
+ self._set_string("sipRoutingAddress", address)
else:
- modlist = [
- (ldap.MOD_DELETE, "objectClass", b"sipRoutingObject"),
- (ldap.MOD_DELETE, "sipLocalAddress", None),
- (ldap.MOD_DELETE, "sipRoutingAddress", None),
+ try:
+ self._modify([
+ (ldap.MOD_DELETE, "objectClass", b"sipRoutingObject"),
+ (ldap.MOD_DELETE, "sipLocalAddress", None),
+ (ldap.MOD_DELETE, "sipRoutingAddress", None),
+ ])
+ except ldap.NO_SUCH_ATTRIBUTE:
+ pass
+ self._modify([
(ldap.MOD_ADD, "objectClass", b"sipUser"),
(ldap.MOD_ADD, "sipAuthenticationUser", self.sip_id.encode()),
(ldap.MOD_ADD, "sipPassword", self._generate_sip_password().encode()),
- ]
-
- # Run modification
- self._modify(modlist)
+ ])
# XXX Cache is invalid here