From 913a3c8ded6b1b802a4a36ef559e401e414ede58 Mon Sep 17 00:00:00 2001 From: psychon Date: Fri, 14 Jan 2011 20:22:43 +0000 Subject: [PATCH] Limit the number of web sessions per IP to 5 git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@2263 726aef4b-f618-498e-8847-2d620e286838 --- WebModules.cpp | 7 +++++++ WebModules.h | 1 + 2 files changed, 8 insertions(+) diff --git a/WebModules.cpp b/WebModules.cpp index a66530dc..19332565 100644 --- a/WebModules.cpp +++ b/WebModules.cpp @@ -19,6 +19,8 @@ CWebSessionMap CWebSock::m_mspSessions(24 * 60 * 60 * 1000); static std::multimap mIPSessions; typedef std::multimap::iterator mIPSessionsIterator; +const unsigned int CWebSock::m_uiMaxSessions = 5; + CWebSession::~CWebSession() { // Find our entry in mIPSessions pair p = @@ -689,6 +691,11 @@ CSmartPtr CWebSock::GetSession() { return *pSession; } + if (mIPSessions.count(GetRemoteIP()) > m_uiMaxSessions) { + mIPSessionsIterator it = mIPSessions.find(GetRemoteIP()); + mIPSessions.erase(it); + } + CString sSessionID; do { sSessionID = CString::RandomString(32); diff --git a/WebModules.h b/WebModules.h index 0ecc3394..d115b8a0 100644 --- a/WebModules.h +++ b/WebModules.h @@ -172,6 +172,7 @@ private: CSmartPtr m_spSession; static CWebSessionMap m_mspSessions; + static const unsigned int m_uiMaxSessions; }; #endif // !_WEBMODULES_H