From 15013ecd173c7bdbd404c13fbbf5a594a9b04878 Mon Sep 17 00:00:00 2001 From: w00t Date: Tue, 28 Oct 2008 23:47:33 +0000 Subject: 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 --- src/modules/m_cgiirc.cpp | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) (limited to 'src/modules/m_cgiirc.cpp') 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; } -- cgit v1.3.1-10-gc9f91