Make ACLs IPv6-capable.

ACLs can now be configured to match IPv6 networks. This is only
relevant for ACLs in chan_sip for now since other channel drivers
do not support IPv6 addressing. However, once those channel drivers
are outfitted to support IPv6 addressing, the ACLs will already be
ready for IPv6 support.

https://reviewboard.asterisk.org/r/791



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@277814 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Michelson
2010-07-19 14:17:16 +00:00
parent 76d4bbacd1
commit 6fa79e8f77
10 changed files with 478 additions and 157 deletions

View File

@@ -46,11 +46,11 @@ extern "C" {
* thing public and let users play with them.
*/
struct ast_ha {
/* Host access rule */
struct in_addr netaddr;
struct in_addr netmask;
int sense;
struct ast_ha *next;
/* Host access rule */
struct ast_sockaddr addr;
struct ast_sockaddr netmask;
int sense;
struct ast_ha *next;
};
/*!
@@ -111,11 +111,11 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
* the one whose sense will be returned.
*
* \param ha The head of the list of host access rules to follow
* \param sin A sockaddr_in whose address is considered when matching rules
* \param addr An ast_sockaddr whose address is considered when matching rules
* \retval AST_SENSE_ALLOW The IP address passes our ACL
* \retval AST_SENSE_DENY The IP address fails our ACL
*/
int ast_apply_ha(struct ast_ha *ha, struct sockaddr_in *sin);
int ast_apply_ha(const struct ast_ha *ha, const struct ast_sockaddr *addr);
/*!
* \brief Get the IP address given a hostname
@@ -186,7 +186,7 @@ int ast_ouraddrfor(const struct ast_sockaddr *them, struct ast_sockaddr *us);
* \retval -1 Failure. address is filled with 0s
* \retval 0 Success
*/
int ast_lookup_iface(char *iface, struct in_addr *address);
int ast_lookup_iface(char *iface, struct ast_sockaddr *address);
/*!
* \brief Duplicate the contents of a list of host access rules

View File

@@ -55,6 +55,20 @@ struct ast_sockaddr {
socklen_t len;
};
/*!
* \brief
* Convert an IPv4-mapped IPv6 address into an IPv4 address.
*
* \warning You should rarely need this function. Only call this
* if you know what you're doing.
*
* \param addr The IPv4-mapped address to convert
* \param mapped_addr The resulting IPv4 address
* \retval 0 Unable to make the conversion
* \retval 1 Successful conversion
*/
int ast_sockaddr_ipv4_mapped(const struct ast_sockaddr *addr, struct ast_sockaddr *ast_mapped);
/*!
* \since 1.8
*