From 289e520e0c73d00410d356141a6827bd4bc6078c Mon Sep 17 00:00:00 2001 From: brain Date: Thu, 8 Feb 2007 20:31:35 +0000 Subject: Check for ::ffff:x.x.x.x ips in user resolver, and if we see one initiate an ipv4 PTR lookup rather than ipv6 git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6550 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/users.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/users.cpp') diff --git a/src/users.cpp b/src/users.cpp index 8183760f7..7d653e52f 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -141,7 +141,14 @@ void userrec::StartDNSLookup() try { bool cached; - res_reverse = new UserResolver(this->ServerInstance, this, this->GetIPString(), this->GetProtocolFamily() == AF_INET ? DNS_QUERY_PTR4 : DNS_QUERY_PTR6, cached); + const char* ip = this->GetIPString(); + + /* Special case for 4in6 (Have i mentioned i HATE 4in6?) */ + if (!strncmp(ip, "0::ffff:", 8)) + res_reverse = new UserResolver(this->ServerInstance, this, ip + 8, DNS_QUERY_PTR4, cached); + else + res_reverse = new UserResolver(this->ServerInstance, this, ip, this->GetProtocolFamily() == AF_INET ? DNS_QUERY_PTR4 : DNS_QUERY_PTR6, cached); + this->ServerInstance->AddResolver(res_reverse, cached); } catch (CoreException& e) @@ -173,7 +180,7 @@ void UserResolver::OnLookupComplete(const std::string &result, unsigned int ttl, { /* IPV6 forward lookup (with possibility of 4in6) */ 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); + bound_user->res_forward = new UserResolver(this->ServerInstance, this->bound_user, result, (!strncmp(ip, "0::ffff:", 8) ? DNS_QUERY_A : DNS_QUERY_AAAA), cached); } else { -- cgit v1.3.1-10-gc9f91