mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-20 00:30:20 +00:00
Stop sending IPv6 link-local scope-ids in SIP messages
The idea behind the patch listed below was used, but in a more targeted manner.
There are now address stringification functions for addresses that are meant to
be sent to a remote party. Link-local scope-ids only make sense on the machine
from which they originate and so are stripped in the new functions.
There is also a host sanitization function added to chan_sip which is used
for when peer and dialog tohost fields or sip_registry hostnames are used to
craft a SIP message.
Also added are some basic unit tests for netsock2 address parsing.
(closes issue ASTERISK-17711)
Reported by: ch_djalel
Patches:
asterisk-1.8.3.2-ipv6_ll_scope.patch uploaded by ch_djalel (license 1251)
Review: https://reviewboard.asterisk.org/r/1278/
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@324484 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -95,7 +95,14 @@ char *ast_sockaddr_stringify_fmt(const struct ast_sockaddr *sa, int format)
|
||||
return "";
|
||||
}
|
||||
|
||||
switch (format) {
|
||||
if ((format & AST_SOCKADDR_STR_REMOTE) == AST_SOCKADDR_STR_REMOTE) {
|
||||
char *p;
|
||||
if (ast_sockaddr_is_ipv6_link_local(sa) && (p = strchr(host, '%'))) {
|
||||
*p = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
switch ((format & AST_SOCKADDR_STR_FORMAT_MASK)) {
|
||||
case AST_SOCKADDR_STR_DEFAULT:
|
||||
ast_str_set(&str, 0, sa_tmp->ss.ss_family == AF_INET6 ?
|
||||
"[%s]:%s" : "%s:%s", host, port);
|
||||
@@ -392,6 +399,12 @@ int ast_sockaddr_is_ipv4_mapped(const struct ast_sockaddr *addr)
|
||||
return addr->len && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr);
|
||||
}
|
||||
|
||||
int ast_sockaddr_is_ipv6_link_local(const struct ast_sockaddr *addr)
|
||||
{
|
||||
const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&addr->ss;
|
||||
return ast_sockaddr_is_ipv6(addr) && IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr);
|
||||
}
|
||||
|
||||
int ast_sockaddr_is_ipv6(const struct ast_sockaddr *addr)
|
||||
{
|
||||
return addr->ss.ss_family == AF_INET6 &&
|
||||
|
||||
Reference in New Issue
Block a user