summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar special2008-09-29 08:47:01 +0000
committerGravatar special2008-09-29 08:47:01 +0000
commit5b1fc724ec00a9cee66d0abc7885161b0ce82bca (patch)
treea91c8c3caed4948596c64f45a1d35581ef620495
parentBackport r10602: potentially unsafe comparison in SSL (diff)
Replace the IP (in addition to hostname) for CGIIRC clients; fixes glines and zlines on IPs affecting cgiirc users. Thanks to Saz|Laptop
git-svn-id: http://svn.inspircd.org/repository/branches/1_1_stable@10608 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/modules/m_cgiirc.cpp33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp
index 79d4f94cc..cc06035a2 100644
--- a/src/modules/m_cgiirc.cpp
+++ b/src/modules/m_cgiirc.cpp
@@ -101,6 +101,8 @@ class CGIResolver : public Resolver
strlcpy(them->host, result.c_str(), 63);
strlcpy(them->dhost, result.c_str(), 63);
+ if (querytype)
+ them->SetSockAddr(them->GetProtocolFamily(), result.c_str(), them->GetPort());
strlcpy(them->ident, "~cgiirc", 8);
them->InvalidateCache();
}
@@ -172,6 +174,18 @@ public:
userrec::QuitUser(ServerInstance, user, reason);
return;
}
+
+ ZLine *z = ServerInstance->XLines->matches_zline(user->GetIPString());
+
+ if (z)
+ {
+ char reason[MAXBUF];
+ if (*ServerInstance->Config->MoronBanner)
+ user->WriteServ("NOTICE %s :*** %s", user->nick, ServerInstance->Config->MoronBanner);
+ snprintf(reason,MAXBUF,"Z-Lined: %s",z->reason);
+ userrec::QuitUser(ServerInstance, user, reason);
+ return;
+ }
}
}
@@ -330,18 +344,8 @@ public:
}
if(user->GetExt("cgiirc_webirc_ip", webirc_ip))
{
- bool valid=false;
user->RemoveCloneCounts();
-#ifdef IPV6
- valid = (inet_pton(AF_INET6, webirc_ip->c_str(), &((sockaddr_in6*)user->ip)->sin6_addr) > 0);
-
- if(!valid)
- valid = (inet_aton(webirc_ip->c_str(), &((sockaddr_in*)user->ip)->sin_addr));
-#else
- if (inet_aton(webirc_ip->c_str(), &((sockaddr_in*)user->ip)->sin_addr))
- valid = true;
-#endif
-
+ user->SetSockAddr(user->GetProtocolFamily(), webirc_ip->c_str(), user->GetPort());
delete webirc_ip;
user->InvalidateCache();
user->Shrink("cgiirc_webirc_ip");
@@ -434,12 +438,7 @@ public:
user->Extend("cgiirc_realhost", new std::string(user->host));
user->Extend("cgiirc_realip", new std::string(user->GetIPString()));
user->RemoveCloneCounts();
-#ifdef IPV6
- if (user->GetProtocolFamily() == AF_INET6)
- inet_pton(AF_INET6, newip, &((sockaddr_in6*)user->ip)->sin6_addr);
- else
-#endif
- inet_aton(newip, &((sockaddr_in*)user->ip)->sin_addr);
+ user->SetSockAddr(user->GetProtocolFamily(), newip, user->GetPort());
ServerInstance->AddLocalClone(user);
ServerInstance->AddGlobalClone(user);
user->CheckClass();