diff options
-rw-r--r-- | src/users.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/users.cpp b/src/users.cpp index c3e52c80d..3d92de99a 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -141,7 +141,7 @@ void userrec::StartDNSLookup() try { bool cached; - res_reverse = new UserResolver(this->ServerInstance, this, this->GetIPString(), DNS_QUERY_REVERSE, cached); + res_reverse = new UserResolver(this->ServerInstance, this, this->GetIPString(), this->GetProtocolFamily() == AF_INET ? DNS_QUERY_PTR4 : DNS_QUERY_PTR6, cached); this->ServerInstance->AddResolver(res_reverse, cached); } catch (CoreException& e) @@ -169,9 +169,19 @@ void UserResolver::OnLookupComplete(const std::string &result, unsigned int ttl, { bool cached; #ifdef IPV6 - const char *ip = this->bound_user->GetIPString(); - bound_user->res_forward = new UserResolver(this->ServerInstance, this->bound_user, result, (strstr(ip,"0::ffff:") == ip ? DNS_QUERY_A : DNS_QUERY_AAAA), cached); + if (this->bound_user->GetProtocolFamily() == AF_INET6) + { + /* IPV6 forward lookup (with possibility of 4in6) */ + char* ip = this->bound_user->GetIPString(); + bound_user->res_forward = new UserResolver(this->ServerInstance, this->bound_user, result, (strstr(ip,"0::ffff:") == ip ? DNS_QUERY_A : DNS_QUERY_AAAA), cached); + } + else + { + /* IPV4 lookup (mixed protocol mode) */ + bound_user->res_forward = new UserResolver(this->ServerInstance, this->bound_user, result, DNS_QUERY_A, cached); + } #else + /* IPV4 lookup (ipv4 only mode) */ bound_user->res_forward = new UserResolver(this->ServerInstance, this->bound_user, result, DNS_QUERY_A, cached); #endif this->ServerInstance->AddResolver(bound_user->res_forward, cached); |