From 805082efd4c9c3e528b28f118978a3c83c562dcc Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Tue, 27 Jul 2010 15:16:45 +0000 Subject: [PATCH] Merged revisions 279785 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r279785 | mmichelson | 2010-07-27 10:15:22 -0500 (Tue, 27 Jul 2010) | 20 lines Merged revisions 279784 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ........ r279784 | mmichelson | 2010-07-27 10:13:24 -0500 (Tue, 27 Jul 2010) | 14 lines Fix bad behavior of dynamic_exclude_static option in sip.conf. We were attempting to create a contactdeny rule based on the peer's IP address before the peer's IP address had been set. By moving the processing further down in the function, we can ensure stuff works as we expect for it to. (closes issue #17717) Reported by: mmichelson Patches: 17717.patch uploaded by mmichelson (license 60) Tested by: DennisD ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@279786 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 1829bc3758..4dd27f8a03 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -25596,14 +25596,6 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str unref_peer(peer, "removing register expire ref")); peer->host_dynamic = FALSE; srvlookup = v->value; - if (global_dynamic_exclude_static) { - int err = 0; - sip_cfg.contact_ha = ast_append_ha("deny", ast_sockaddr_stringify(&peer->addr), - sip_cfg.contact_ha, &err); - if (err) { - ast_log(LOG_ERROR, "Bad ACL entry in configuration line %d : %s\n", v->lineno, v->value); - } - } } } else if (!strcasecmp(v->name, "defaultip")) { if (!ast_strlen_zero(v->value) && ast_get_ip(&peer->defaddr, v->value)) { @@ -25950,6 +25942,15 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str ast_string_field_set(peer, tohost, peer->dnsmgr ? srvlookup : ast_sockaddr_stringify_host(&peer->addr)); + + if (global_dynamic_exclude_static) { + int err = 0; + sip_cfg.contact_ha = ast_append_ha("deny", ast_sockaddr_stringify_addr(&peer->addr), + sip_cfg.contact_ha, &err); + if (err) { + ast_log(LOG_ERROR, "Bad ACL entry in configuration line %d : %s\n", v->lineno, v->value); + } + } } if (port && !realtime && peer->host_dynamic) {