]> git.ipfire.org Git - ipfire.org.git/commitdiff
accounts: Fix setting SIP routing address
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 6 Mar 2019 10:32:20 +0000 (10:32 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 6 Mar 2019 10:32:20 +0000 (10:32 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/accounts.py

index 3d28b9e69baecf7c471f689769bb8ce323b7d3f0..25f37bef0dac033d56b240ac7e7e9c66cc71798e 100644 (file)
@@ -557,29 +557,42 @@ class Account(Object):
                        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