From 79cce555bcf5a881fa4ce3276d26346d11935125 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 6 Mar 2019 10:32:20 +0000 Subject: [PATCH] accounts: Fix setting SIP routing address Signed-off-by: Michael Tremer --- src/backend/accounts.py | 49 ++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/backend/accounts.py b/src/backend/accounts.py index 3d28b9e6..25f37bef 100644 --- a/src/backend/accounts.py +++ b/src/backend/accounts.py @@ -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 -- 2.47.3