res_pjsip: Fix prune_on_boot to remove only contacts for the host.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 15 Aug 2017 16:14:20 +0000 (11:14 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 15 Aug 2017 16:22:54 +0000 (11:22 -0500)
* Check that the contact's reg_server matches the host's name before
deleting any prune_on_boot contacts.  We don't want to delete reliable
transport contacts made with other servers if the ps_contacts database
table is shared with other servers.

Thanks to Ross Beer for pointing out that the original prune logic would
delete reliable transport contacts from other servers.

ASTERISK-27147

Change-Id: I8e439d0d1c266ffdfd7b73d1e5e466180a689bd0

res/res_pjsip/location.c

index 557aeb6..2273273 100644 (file)
@@ -460,7 +460,10 @@ static int prune_boot_contacts_cb(void *obj, void *arg, int flags)
 {
        struct ast_sip_contact *contact = obj;
 
-       if (contact->prune_on_boot) {
+       if (contact->prune_on_boot
+               && !strcmp(contact->reg_server, ast_config_AST_SYSTEM_NAME ?: "")) {
+               ast_verb(3, "Removed contact '%s' from AOR '%s' due to system boot\n",
+                       contact->uri, contact->aor);
                ast_sip_location_delete_contact(contact);
        }