]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 279784 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Tue, 27 Jul 2010 15:15:22 +0000 (15:15 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 27 Jul 2010 15:15:22 +0000 (15:15 +0000)
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/branches/1.8@279785 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 1829bc37581df8ab723c04ffb451f84601dd68e9..4dd27f8a0329528320bcdbdf49db853d51e76cd2 100644 (file)
@@ -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) {