diff --git a/WebModules.cpp b/WebModules.cpp index 34bb0291..6f903210 100644 --- a/WebModules.cpp +++ b/WebModules.cpp @@ -533,7 +533,7 @@ void CWebSock::OnPageRequest(const CString& sURI) { } CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CString& sPageRet) { - if (GetSession()->GetIP() != GetRemoteIP()) { + if (CZNC::Get().GetProtectWebSessions() && GetSession()->GetIP() != GetRemoteIP()) { PrintErrorPage(403, "Access denied", "This session does not belong to your IP."); return PAGE_DONE; } diff --git a/modules/data/webadmin/tmpl/settings.tmpl b/modules/data/webadmin/tmpl/settings.tmpl index ff0863d6..2112f5b6 100644 --- a/modules/data/webadmin/tmpl/settings.tmpl +++ b/modules/data/webadmin/tmpl/settings.tmpl @@ -89,6 +89,12 @@
+ +
+
Protect Web Sessions:
+
+
+
MOTD:
diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index 6ef3d623..24630f81 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -971,6 +971,7 @@ public: Tmpl["ConnectDelay"] = CString(CZNC::Get().GetConnectDelay()); Tmpl["ServerThrottle"] = CString(CZNC::Get().GetServerThrottle()); Tmpl["AnonIPLimit"] = CString(CZNC::Get().GetAnonIPLimit()); + Tmpl["ProtectWebSessions"] = CString(CZNC::Get().GetProtectWebSessions()); const VCString& vsBindHosts = CZNC::Get().GetBindHosts(); for (unsigned int a = 0; a < vsBindHosts.size(); a++) { @@ -1061,6 +1062,7 @@ public: sArg = WebSock.GetParam("connectdelay"); CZNC::Get().SetConnectDelay(sArg.ToUInt()); sArg = WebSock.GetParam("serverthrottle"); CZNC::Get().SetServerThrottle(sArg.ToUInt()); sArg = WebSock.GetParam("anoniplimit"); CZNC::Get().SetAnonIPLimit(sArg.ToUInt()); + sArg = WebSock.GetParam("protectwebsessions"); CZNC::Get().SetProtectWebSessions(sArg.ToBool()); VCString vsArgs; WebSock.GetRawParam("motd").Split("\n", vsArgs); diff --git a/znc.cpp b/znc.cpp index a33b19d8..33730c67 100644 --- a/znc.cpp +++ b/znc.cpp @@ -38,6 +38,7 @@ CZNC::CZNC() { m_TimeStarted = time(NULL); m_sConnectThrottle.SetTTL(30000); m_pLockFile = NULL; + m_bProtectWebSessions = true; } CZNC::~CZNC() { @@ -452,6 +453,7 @@ bool CZNC::WriteConfig() { pFile->Write("AnonIPLimit = " + CString(m_uiAnonIPLimit) + "\n"); pFile->Write("MaxBufferSize= " + CString(m_uiMaxBufferSize) + "\n"); pFile->Write("SSLCertFile = " + CString(m_sSSLCertFile) + "\n"); + pFile->Write("ProtectWebSessions = " + CString(m_bProtectWebSessions) + "\n"); for (size_t l = 0; l < m_vpListeners.size(); l++) { CListener* pListener = m_vpListeners[l]; @@ -1148,6 +1150,8 @@ bool CZNC::DoRehash(CString& sError) m_uiAnonIPLimit = sVal.ToUInt(); if (config.FindStringEntry("maxbuffersize", sVal)) m_uiMaxBufferSize = sVal.ToUInt(); + if (config.FindStringEntry("protectwebsessions", sVal)) + m_bProtectWebSessions = sVal.ToBool(); // This has to be after SSLCertFile is handled since it uses that value const char *szListenerEntries[] = { diff --git a/znc.h b/znc.h index 403f4cee..fc56b8bd 100644 --- a/znc.h +++ b/znc.h @@ -84,6 +84,7 @@ public: void SetMaxBufferSize(unsigned int i) { m_uiMaxBufferSize = i; } void SetAnonIPLimit(unsigned int i) { m_uiAnonIPLimit = i; } void SetServerThrottle(unsigned int i) { m_sConnectThrottle.SetTTL(i*1000); } + void SetProtectWebSessions(bool b) { m_bProtectWebSessions = b; } void SetConnectDelay(unsigned int i); // !Setters @@ -111,6 +112,7 @@ public: unsigned int GetAnonIPLimit() const { return m_uiAnonIPLimit; } unsigned int GetServerThrottle() const { return m_sConnectThrottle.GetTTL() / 1000; } unsigned int GetConnectDelay() const { return m_uiConnectDelay; } + bool GetProtectWebSessions() const { return m_bProtectWebSessions; } // !Getters // Static allocator @@ -181,6 +183,7 @@ protected: unsigned long long m_uBytesWritten; CConnectUserTimer *m_pConnectUserTimer; TCacheMap m_sConnectThrottle; + bool m_bProtectWebSessions; }; #endif // !_ZNC_H