diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index e515a765..92c8dd91 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -85,7 +85,7 @@ public: } virtual Csock* GetSockObj(const CString& sHost, unsigned short uPort); - bool IsAdmin() const { return m_bAdmin; } + bool IsAdmin(bool bAllowUserAdmin = true) const { return m_bAdmin; } private: protected: @@ -193,7 +193,12 @@ bool CWebAdminSock::OnLogin(const CString& sUser, const CString& sPass) { CUser* pUser = CZNC::Get().FindUser(GetUser()); if (pUser && pUser->CheckPass(GetPass())) { - m_pUser = pUser; + if (pUser->IsAdmin()) { + m_bAdmin = true; + } else { + m_pUser = pUser; + } + return true; } @@ -807,6 +812,10 @@ bool CWebAdminSock::UserPage(CString& sPageRet, CUser* pUser) { sPageRet += "DenyLoadMod()) ? " CHECKED" : "") + ">  \r\n"; } + if (IsAdmin()) { + sPageRet += "IsAdmin()) ? " CHECKED" : "") + CString((pUser && pUser == CZNC::Get().FindUser(GetUser())) ? " DISABLED" : "") + ">  \r\n"; + } + sPageRet += "

" "
CTCP Replies:
" "
\r\n" @@ -973,6 +982,12 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) { pNewUser->SetDenyLoadMod(pUser->DenyLoadMod()); } + if (pUser && pUser != CZNC::Get().FindUser(GetUser())) { + pNewUser->SetAdmin(GetParam("isadmin").ToBool()); + } else { + pNewUser->SetAdmin(pUser->IsAdmin()); + } + GetParamValues("channel", vsArgs); for (a = 0; a < vsArgs.size(); a++) { const CString& sChan = vsArgs[a];