summaryrefslogtreecommitdiff
path: root/src/users.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/users.cpp')
-rw-r--r--src/users.cpp25
1 files changed, 11 insertions, 14 deletions
diff --git a/src/users.cpp b/src/users.cpp
index 85d64d462..74f70b458 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -895,20 +895,11 @@ long FindMatchingGlobal(userrec* user)
long x = 0;
for (user_hash::const_iterator a = clientlist.begin(); a != clientlist.end(); a++)
{
-#ifdef IPV6
- /* I dont think theres any faster way of matching two ipv6 addresses than memcmp
- * Let me know if you think of one.
- */
- in6_addr* s1 = &(((sockaddr_in6*)&a->second->ip)->sin6_addr);
- in6_addr* s2 = &(((sockaddr_in6*)&user->ip)->sin6_addr);
- if (!memcmp(s1->s6_addr, s2->s6_addr, sizeof(in6_addr)))
- x++;
-#else
- in_addr* s1 = &((sockaddr_in*)&a->second->ip)->sin_addr;
- in_addr* s2 = &((sockaddr_in*)&user->ip)->sin_addr;
- if (s1->s_addr == s2->s_addr)
- x++;
-#endif
+ /* We have to match ip's as strings - we don't know what protocol
+ * a remote user may be using
+ */
+ if (!strcasecmp(a->second->GetIPString(), user->GetIPString()))
+ x++;
}
return x;
}
@@ -1111,6 +1102,7 @@ void userrec::SetSockAddr(int protocol_family, const char* ip, int port)
{
switch (protocol_family)
{
+#ifdef SUPPORT_IP6LINKS
case AF_INET6:
{
sockaddr_in6* sin = (sockaddr_in6*)&this->ip;
@@ -1119,6 +1111,7 @@ void userrec::SetSockAddr(int protocol_family, const char* ip, int port)
inet_pton(AF_INET6, ip, &sin->sin6_addr);
}
break;
+#endif
case AF_INET:
{
sockaddr_in* sin = (sockaddr_in*)&this->ip;
@@ -1137,12 +1130,14 @@ int userrec::GetPort()
{
switch (this->GetProtocolFamily())
{
+#ifdef SUPPORT_IP6LINKS
case AF_INET6:
{
sockaddr_in6* sin = (sockaddr_in6*)&this->ip;
return sin->sin6_port;
}
break;
+#endif
case AF_INET:
{
sockaddr_in* sin = (sockaddr_in*)&this->ip;
@@ -1168,6 +1163,7 @@ const char* userrec::GetIPString()
switch (this->GetProtocolFamily())
{
+#ifdef SUPPORT_IP6LINKS
case AF_INET6:
{
sockaddr_in6* sin = (sockaddr_in6*)&this->ip;
@@ -1175,6 +1171,7 @@ const char* userrec::GetIPString()
return buf;
}
break;
+#endif
case AF_INET:
{
sockaddr_in* sin = (sockaddr_in*)&this->ip;