diff options
author | Volker RĂ¼melin <vr_strongswan@t-online.de> | 2013-04-21 15:10:39 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-05-16 11:03:37 +0200 |
commit | f8298b9f986784a0d4c92c5c4dc5179a0b1d826c (patch) | |
tree | ff9b9f56957f6024ee782a05d69569653350cb60 /src | |
parent | 21bade294bbd31aafc64f485f40afe2c5b6d87c2 (diff) | |
download | strongswan-f8298b9f986784a0d4c92c5c4dc5179a0b1d826c.tar.bz2 strongswan-f8298b9f986784a0d4c92c5c4dc5179a0b1d826c.tar.xz |
host-resolver: don't try to resolve a plain v4 address to an IPv6 address
Suppress 'Address family for hostname not supported' errors if a IPv6
client connects in a mixed IPv4/IPv6 environment.
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/networking/host_resolver.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/libstrongswan/networking/host_resolver.c b/src/libstrongswan/networking/host_resolver.c index 5e244f114..99a17d17c 100644 --- a/src/libstrongswan/networking/host_resolver.c +++ b/src/libstrongswan/networking/host_resolver.c @@ -233,10 +233,24 @@ METHOD(host_resolver_t, resolve, host_t*, .family = family, }; host_t *result; + struct in_addr addr; - if (family == AF_INET && strchr(name, ':')) - { /* do not try to convert v6 addresses for v4 family */ - return NULL; + switch (family) + { + case AF_INET: + /* do not try to convert v6 addresses for v4 family */ + if (strchr(name, ':')) + { + return NULL; + } + break; + case AF_INET6: + /* do not try to convert v4 addresses for v6 family */ + if (inet_pton(AF_INET, name, &addr) == 1) + { + return NULL; + } + break; } this->mutex->lock(this->mutex); if (this->disabled) |