diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-02-06 19:00:22 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-02-06 19:00:22 +0000 |
commit | 005569fdda030934ce9e2a8e8439e0d3b98ebd70 (patch) | |
tree | 518f3eb1edbc19c4a934607b646eb0985002cd58 | |
parent | 60153273c453dda845775fed29e3540f5c959305 (diff) |
Fix to work with mixed protocol environment
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6524 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | src/modules/m_cloaking.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp index 707085b14..cbff25593 100644 --- a/src/modules/m_cloaking.cpp +++ b/src/modules/m_cloaking.cpp @@ -98,16 +98,26 @@ class CloakUser : public ModeHandler * Their ISP shouldnt go to town on subdomains, or they shouldnt have a kiddie * vhost. */ - - if ((insp_aton(dest->host,&testaddr) < 1) && (hostcloak.length() <= 64)) - { - // if they have a hostname, make something appropriate +#ifdef IPV6 + in6_addr testaddr; + if ((dest->GetProtocolFamily() == AF_INET6) && (insp_pton(AF_INET6,dest->host,&testaddr) < 1) && (hostcloak.length() <= 64)) + /* Invalid ipv6 address, and ipv6 user (resolved host) */ + b = hostcloak; + else if ((dest->GetProtocolFamily() == AF_INET6) && (inet_aton(dest->host,&testaddr) < 1) && (hostcloak.length() <= 64)) + /* Invalid ipv4 address, and ipv4 user (resolved host) */ b = hostcloak; - } else - { + /* Valid ipv6 or ipv4 address (not resolved) ipv4 or ipv6 user */ b = ((b.find(':') == std::string::npos) ? Cloak4(dest->host) : Cloak6(dest->host)); - } +#else + if ((inet_aton(dest->host,&testaddr) < 1) && (hostcloak.length() <= 64)) + /* Invalid ipv4 address, and ipv4 user (resolved host) */ + b = hostcloak; + else + /* Valid ipv4 address (not resolved) ipv4 user */ + b = Cloak4(dest->host); +#endif + dest->ChangeDisplayedHost(b.c_str()); } |