summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-02-06 19:00:22 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-02-06 19:00:22 +0000
commit005569fdda030934ce9e2a8e8439e0d3b98ebd70 (patch)
tree518f3eb1edbc19c4a934607b646eb0985002cd58
parent60153273c453dda845775fed29e3540f5c959305 (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.cpp24
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());
}