Skip to content

Commit

Permalink
permissions: exported allow_address_group() to kemi framework
Browse files Browse the repository at this point in the history
  • Loading branch information
miconda committed Jul 12, 2018
1 parent e7734e6 commit 48524f0
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 21 deletions.
48 changes: 27 additions & 21 deletions src/modules/permissions/address.c
Expand Up @@ -565,54 +565,60 @@ int allow_source_address_group(struct sip_msg* _msg, char* _str1, char* _str2)
* subnet table in any group. If yes, returns that group. If not returns -1.
* Port value 0 in cached address and group table matches any port.
*/
int allow_address_group(struct sip_msg* _msg, char* _addr, char* _port)
int ki_allow_address_group(sip_msg_t* _msg, str* _addr, int _port)
{
int group = -1;

unsigned int port;
str ips;
ip_addr_t *ipa;

if (_addr==NULL
|| (fixup_get_svalue(_msg, (gparam_p)_addr, &ips) < 0)) {
LM_ERR("cannot get value of address pvar\n");
return -1;
}
if (_port==NULL
|| (fixup_get_ivalue(_msg, (gparam_p)_port, (int*)&port) < 0)) {
LM_ERR("cannot get value of port pvar\n");
return -1;
}

ipa=strtoipX(&ips);
ipa=strtoipX(_addr);

if ( ipa ) {
LM_DBG("looking for <%.*s, %u> in address table\n",
ips.len, ips.s, port);
_addr->len, _addr->s, (unsigned int)_port);
if(addr_hash_table) {
group = find_group_in_addr_hash_table(*addr_hash_table,
ipa, port);
ipa, (unsigned int)_port);
LM_DBG("Found address 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);
_addr->len, _addr->s, _port);
group = find_group_in_subnet_table(*subnet_table,
ipa, port);
ipa, (unsigned int)_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);
_addr->len, _addr->s, (unsigned int)_port);
if(domain_list_table) {
group = find_group_in_domain_name_table(*domain_list_table,
&ips, port);
_addr, (unsigned int)_port);
LM_DBG("Found a match of domain_name in group <%d>\n", group);
}
}

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

int allow_address_group(struct sip_msg* _msg, char* _addr, char* _port)
{
int port;
str ips;

if (_addr==NULL
|| (fixup_get_svalue(_msg, (gparam_p)_addr, &ips) < 0)) {
LM_ERR("cannot get value of address pvar\n");
return -1;
}
if (_port==NULL
|| (fixup_get_ivalue(_msg, (gparam_p)_port, &port) < 0)) {
LM_ERR("cannot get value of port pvar\n");
return -1;
}

return ki_allow_address_group(_msg, &ips, port);
}
2 changes: 2 additions & 0 deletions src/modules/permissions/address.h
Expand Up @@ -97,4 +97,6 @@ int ki_allow_source_address_group(sip_msg_t* _msg);
*/
int allow_address_group(struct sip_msg* _msg, char* _addr, char* _port);

int ki_allow_address_group(sip_msg_t* _msg, str* _addr, int _port);

#endif /* ADDRESS_H */
5 changes: 5 additions & 0 deletions src/modules/permissions/permissions.c
Expand Up @@ -1041,6 +1041,11 @@ static sr_kemi_t sr_kemi_permissions_exports[] = {
{ SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE,
SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
},
{ str_init("permissions"), str_init("allow_address_group"),
SR_KEMIP_INT, ki_allow_address_group,
{ SR_KEMIP_STR, SR_KEMIP_INT, SR_KEMIP_NONE,
SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
},

{ {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
};
Expand Down

0 comments on commit 48524f0

Please sign in to comment.