summaryrefslogtreecommitdiff
path: root/src/modules/m_cgiirc.cpp
diff options
context:
space:
mode:
authorGravatar w00t2008-10-28 23:47:33 +0000
committerGravatar w00t2008-10-28 23:47:33 +0000
commit15013ecd173c7bdbd404c13fbbf5a594a9b04878 (patch)
tree2ff29a6483e7576b72a1612e601d3f979c860eda /src/modules/m_cgiirc.cpp
parentBackport: Watch visibility test was working the wrong way. Patch from Darom. (diff)
Fix a low risk race condition which could result in crashes, spotted by Szymek - big thanks! :)
git-svn-id: http://svn.inspircd.org/repository/branches/1_1_stable@10747 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_cgiirc.cpp')
-rw-r--r--src/modules/m_cgiirc.cpp39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp
index cc06035a2..927acd6d4 100644
--- a/src/modules/m_cgiirc.cpp
+++ b/src/modules/m_cgiirc.cpp
@@ -351,8 +351,18 @@ public:
user->Shrink("cgiirc_webirc_ip");
ServerInstance->AddLocalClone(user);
ServerInstance->AddGlobalClone(user);
- user->CheckClass();
Recheck(user);
+
+ ConnectClass *i = user->GetClass();
+ if (!i)
+ {
+ userrec::QuitUser(ServerInstance, user, "Access denied by configuration");
+ return;
+ }
+ else
+ {
+ user->CheckClass(i);
+ }
}
}
@@ -379,7 +389,6 @@ public:
#endif
ServerInstance->AddLocalClone(user);
ServerInstance->AddGlobalClone(user);
- user->CheckClass();
if (valid)
{
@@ -409,6 +418,17 @@ public:
/*if(NotifyOpers)
ServerInstance->WriteOpers("*** Connecting user %s detected as using CGI:IRC (%s), changing real host to %s from PASS", user->nick, user->host, user->password);*/
+ ConnectClass *i = user->GetClass();
+ if (!i)
+ {
+ userrec::QuitUser(ServerInstance, user, "Access denied by configuration");
+ return false;
+ }
+ else
+ {
+ user->CheckClass(i);
+ }
+
return true;
}
@@ -441,7 +461,6 @@ public:
user->SetSockAddr(user->GetProtocolFamily(), newip, user->GetPort());
ServerInstance->AddLocalClone(user);
ServerInstance->AddGlobalClone(user);
- user->CheckClass();
try
{
strlcpy(user->host, newip, 16);
@@ -462,9 +481,17 @@ public:
if(NotifyOpers)
ServerInstance->WriteOpers("*** Connecting user %s detected as using CGI:IRC (%s), but i could not resolve their hostname!", user->nick, user->host);
}
- /*strlcpy(user->host, newip, 16);
- strlcpy(user->dhost, newip, 16);
- strlcpy(user->ident, "~cgiirc", 8);*/
+
+ ConnectClass *i = user->GetClass();
+ if (!i)
+ {
+ userrec::QuitUser(ServerInstance, user, "Access denied by configuration");
+ return true;
+ }
+ else
+ {
+ user->CheckClass(i);
+ }
return true;
}