summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2008-04-10 23:35:35 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2008-04-10 23:35:35 +0000
commite6de2ea580f3fa25dbe8bdd2ed8267e18144b315 (patch)
treebfb2cef565bd68f8d64a8d5a6567ec3a88a31c72
parent20b26ef72a4b2ead2fe23931240098ed10f64a70 (diff)
Provide an optional param translate4in6 to User::GetIPString() and default it to true. This hides the 0::ffff: on all info about an ipv6 user connecting over ipv4, making glines on them and bans etc work better.
Certain parts such as dns lookup need to set this to false to determine wether to use ipv4 or ipv6 reverse lookup. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9454 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/users.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/users.cpp b/src/users.cpp
index 43bf64f1c..cdacdc5c2 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -98,7 +98,7 @@ void User::StartDNSLookup()
try
{
bool cached;
- const char* sip = this->GetIPString();
+ const char* sip = this->GetIPString(false);
/* Special case for 4in6 (Have i mentioned i HATE 4in6?) */
if (!strncmp(sip, "0::ffff:", 8))
@@ -1072,7 +1072,7 @@ int User::GetProtocolFamily()
* XXX the duplication here is horrid..
* do we really need two methods doing essentially the same thing?
*/
-const char* User::GetIPString()
+const char* User::GetIPString(bool translate4in6)
{
static char buf[1024];
@@ -1096,6 +1096,12 @@ const char* User::GetIPString()
{
strlcpy(&temp[1], buf, sizeof(temp) - 1);
*temp = '0';
+ if (translate4in6 && !strncmp(temp, "0::ffff:", 8))
+ {
+ this->cachedip = temp + 8;
+ return temp + 8;
+ }
+
this->cachedip = temp;
return temp;
}