Skip to content

Commit

Permalink
permissions: check if hash tables exist for address config functions
Browse files Browse the repository at this point in the history
- reported by Olle E. Johansson, GH#248

(cherry picked from commit 6fcd35b)
(cherry picked from commit 64028d6)
(cherry picked from commit 0cd5280)
  • Loading branch information
miconda committed Dec 18, 2015
1 parent 36b8b61 commit eaeb67d
Showing 1 changed file with 51 additions and 32 deletions.
83 changes: 51 additions & 32 deletions modules/permissions/address.c
Expand Up @@ -480,13 +480,21 @@ int allow_address(struct sip_msg* _msg, char* _addr_group, char* _addr_sp,
}

if ( ipa ) {
if (match_addr_hash_table(*addr_hash_table, addr_group, ipa, port) == 1)
if (addr_hash_table
&& match_addr_hash_table(*addr_hash_table, addr_group,
ipa, port) == 1) {
return 1;
else
return match_subnet_table(*subnet_table, addr_group, ipa, port);
} else {
if(subnet_table) {
return match_subnet_table(*subnet_table, addr_group, ipa, port);
}
}
} else {
return match_domain_name_table(*domain_list_table, addr_group, &ips, port);
if(domain_list_table) {
return match_domain_name_table(*domain_list_table, addr_group, &ips, port);
}
}
return -1;
}


Expand All @@ -507,14 +515,17 @@ int allow_source_address(struct sip_msg* _msg, char* _addr_group, char* _str2)
LM_DBG("looking for <%u, %x, %u>\n",
addr_group, _msg->rcv.src_ip.u.addr32[0], _msg->rcv.src_port);

if (match_addr_hash_table(*addr_hash_table, addr_group,
&_msg->rcv.src_ip,
_msg->rcv.src_port) == 1)
if (addr_hash_table && match_addr_hash_table(*addr_hash_table, addr_group,
&_msg->rcv.src_ip, _msg->rcv.src_port) == 1) {
return 1;
else
return match_subnet_table(*subnet_table, addr_group,
} else {
if(subnet_table) {
return match_subnet_table(*subnet_table, addr_group,
&_msg->rcv.src_ip,
_msg->rcv.src_port);
}
}
return -1;
}


Expand All @@ -525,22 +536,24 @@ int allow_source_address(struct sip_msg* _msg, char* _addr_group, char* _str2)
*/
int allow_source_address_group(struct sip_msg* _msg, char* _str1, char* _str2)
{
int group;
int group = -1;

LM_DBG("looking for <%x, %u> in address table\n",
_msg->rcv.src_ip.u.addr32[0], _msg->rcv.src_port);
group = find_group_in_addr_hash_table(*addr_hash_table,
&_msg->rcv.src_ip,
_msg->rcv.src_port);
LM_DBG("Found <%d>\n", group);
if(addr_hash_table) {
group = find_group_in_addr_hash_table(*addr_hash_table,
&_msg->rcv.src_ip, _msg->rcv.src_port);
LM_DBG("Found <%d>\n", group);

if (group != -1) return group;
if (group != -1) return group;
}

LM_DBG("looking for <%x, %u> in subnet table\n",
_msg->rcv.src_ip.u.addr32[0], _msg->rcv.src_port);
group = find_group_in_subnet_table(*subnet_table,
&_msg->rcv.src_ip,
_msg->rcv.src_port);
if(subnet_table) {
group = find_group_in_subnet_table(*subnet_table,
&_msg->rcv.src_ip, _msg->rcv.src_port);
}
LM_DBG("Found <%d>\n", group);
return group;

Expand All @@ -553,7 +566,7 @@ int allow_source_address_group(struct sip_msg* _msg, char* _str1, char* _str2)
*/
int allow_address_group(struct sip_msg* _msg, char* _addr, char* _port)
{
int group;
int group = -1;

unsigned int port;
str ips;
Expand All @@ -575,24 +588,30 @@ int allow_address_group(struct sip_msg* _msg, char* _addr, char* _port)
if ( ipa ) {
LM_DBG("looking for <%.*s, %u> in address table\n",
ips.len, ips.s, port);
group = find_group_in_addr_hash_table(*addr_hash_table,
ipa, port);
LM_DBG("Found address in group <%d>\n", group);

if (group != -1) return group;
if(addr_hash_table) {
group = find_group_in_addr_hash_table(*addr_hash_table,
ipa, port);
LM_DBG("Found address in group <%d>\n", group);

LM_DBG("looking for <%.*s, %u> in subnet table\n",
ips.len, ips.s, port);
group = find_group_in_subnet_table(*subnet_table,
ipa, port);
LM_DBG("Found a match of subnet in group <%d>\n", group);
if (group != -1) return group;
}
if(subnet_table) {
LM_DBG("looking for <%.*s, %u> in subnet table\n",
ips.len, ips.s, port);
group = find_group_in_subnet_table(*subnet_table,
ipa, port);
LM_DBG("Found a match of subnet in group <%d>\n", group);
}
} else {
LM_DBG("looking for <%.*s, %u> in domain_name table\n",
ips.len, ips.s, port);
group = find_group_in_domain_name_table(*domain_list_table,
&ips, port);
LM_DBG("Found a match of domain_name in group <%d>\n", group);
if(domain_list_table) {
group = find_group_in_domain_name_table(*domain_list_table,
&ips, port);
LM_DBG("Found a match of domain_name in group <%d>\n", group);
}
}

LM_DBG("Found <%d>\n", group);
return group;
}

0 comments on commit eaeb67d

Please sign in to comment.