diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index 92c8dd91..3a4e0920 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -164,7 +164,13 @@ CString CWebAdminSock::Header(const CString& sTitle) { "\r\nZNC - " + sTitle.Escape_n(CString::EHTML) + "\r\n" "\r\n" "\r\n" - "\r\n" + "\r\n" "\r\n" + return "\r\n" "

" + sTitle.Escape_n(CString::EHTML) + "

" + "" + "" + "" + "" + "
 

" + sTitle.Escape_n(CString::EHTML) + "

" + GetUser().Escape_n(CString::EHTML) + "@" + GetRemoteIP().Escape_n(CString::EHTML) + "
" + "
\r\n"; if (IsAdmin()) { @@ -180,7 +186,7 @@ CString CWebAdminSock::Header(const CString& sTitle) { } CString CWebAdminSock::Footer() { - return "
" + CZNC::Get().GetTag() + "
" + CZNC::Get().GetTag().Escape_n(CString::EHTML) + "
\r\n\r\n"; } @@ -192,14 +198,18 @@ bool CWebAdminSock::OnLogin(const CString& sUser, const CString& sPass) { CUser* pUser = CZNC::Get().FindUser(GetUser()); - if (pUser && pUser->CheckPass(GetPass())) { - if (pUser->IsAdmin()) { - m_bAdmin = true; - } else { - m_pUser = pUser; - } + if (pUser) { + CString sHost = GetRemoteIP(); - return true; + if (pUser->IsHostAllowed(sHost) && pUser->CheckPass(GetPass())) { + if (pUser->IsAdmin()) { + m_bAdmin = true; + } else { + m_pUser = pUser; + } + + return true; + } } return false; @@ -684,10 +694,19 @@ bool CWebAdminSock::UserPage(CString& sPageRet, CUser* pUser) { sPageRet += "
\r\n"; } + CString sIP = GetRemoteIP(); + + sIP = sIP.Token(0, false, ".") + "." + sIP.Token(1, false, ".") + "." + sIP.Token(2, false, ".") + ".*"; + sPageRet += "Password:

\r\n" - "Confirm Password:
\r\n" - "
Allowed IPs:
\r\n" - "


\r\n" + "Confirm Password:


\r\n" + "
Allowed IPs:

\r\n"; + + if (pUser && pUser == CZNC::Get().FindUser(GetUser())) { + sPageRet += "  \r\n"; + } + + sPageRet += "



\r\n" "
IRC Information
\r\n" "
Nick:
\r\n" @@ -916,6 +935,10 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) { pNewUser->AddAllowedHost(vsArgs[a].Trim_n()); } + if (HasParam("ownip")) { + pNewUser->AddAllowedHost(GetParam("ownip")); + } + GetParam("ctcpreplies").Split("\n", vsArgs); for (a = 0; a < vsArgs.size(); a++) { CString sReply = vsArgs[a].TrimRight_n("\r");