From f5d7ffe41a59876c983b177ee28342b00bfd21f4 Mon Sep 17 00:00:00 2001 From: psychon Date: Fri, 11 Sep 2009 12:46:40 +0000 Subject: [PATCH] webadmin: Be able to add new admin users with shell module loaded webadmin loaded a user's modules before it set its admin flag - fix this by changing the order. webadmin failed at setting a new user's admin flag. This is fixed too. Thanks to DarthGandalf for reporting this. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1625 726aef4b-f618-498e-8847-2d620e286838 --- modules/webadmin.cpp | 78 +++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index 9eada04d..fb2ee907 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -1070,43 +1070,6 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) { pNewUser->AddCTCPReply(sReply.Token(0).Trim_n(), sReply.Token(1, true).Trim_n()); } - if (IsAdmin() || (pUser && !pUser->DenyLoadMod())) { - GetParamValues("loadmod", vsArgs); - - for (a = 0; a < vsArgs.size(); a++) { - CString sModRet; - CString sModName = vsArgs[a].TrimRight_n("\r"); - - if (!sModName.empty()) { - CString sArgs = GetParam("modargs_" + sModName); - - try { - if (!pNewUser->GetModules().LoadModule(sModName, sArgs, pNewUser, sModRet, (pUser != NULL))) { - DEBUG("Unable to load module [" << sModName << "] [" << sModRet << "]"); - } - } catch (...) { - DEBUG("Unable to load module [" << sModName << "] [" << sArgs << "]"); - } - } - } - } else if (pUser) { - CModules& Modules = pUser->GetModules(); - - for (a = 0; a < Modules.size(); a++) { - CString sModName = Modules[a]->GetModName(); - CString sArgs = Modules[a]->GetArgs(); - CString sModRet; - - try { - if (!pNewUser->GetModules().LoadModule(sModName, sArgs, pNewUser, sModRet, (pUser != NULL))) { - DEBUG("Unable to load module [" << sModName << "] [" << sModRet << "]"); - } - } catch (...) { - DEBUG("Unable to load module [" << sModName << "]"); - } - } - } - sArg = GetParam("nick"); if (!sArg.empty()) { pNewUser->SetNick(sArg); } sArg = GetParam("altnick"); if (!sArg.empty()) { pNewUser->SetAltNick(sArg); } sArg = GetParam("statusprefix"); if (!sArg.empty()) { pNewUser->SetStatusPrefix(sArg); } @@ -1144,7 +1107,9 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) { pNewUser->SetDenySetVHost(pUser->DenySetVHost()); } - if (pUser && pUser != CZNC::Get().FindUser(GetUser())) { + // If pUser is not NULL, we are editing an existing user. + // Users must not be able to change their own admin flag. + if (pUser != CZNC::Get().FindUser(GetUser())) { pNewUser->SetAdmin(GetParam("isadmin").ToBool()); } else if (pUser) { pNewUser->SetAdmin(pUser->IsAdmin()); @@ -1156,6 +1121,43 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) { pNewUser->AddChan(sChan.TrimRight_n("\r"), GetParam("save_" + sChan).ToBool()); } + if (IsAdmin() || (pUser && !pUser->DenyLoadMod())) { + GetParamValues("loadmod", vsArgs); + + for (a = 0; a < vsArgs.size(); a++) { + CString sModRet; + CString sModName = vsArgs[a].TrimRight_n("\r"); + + if (!sModName.empty()) { + CString sArgs = GetParam("modargs_" + sModName); + + try { + if (!pNewUser->GetModules().LoadModule(sModName, sArgs, pNewUser, sModRet, (pUser != NULL))) { + DEBUG("Unable to load module [" << sModName << "] [" << sModRet << "]"); + } + } catch (...) { + DEBUG("Unable to load module [" << sModName << "] [" << sArgs << "]"); + } + } + } + } else if (pUser) { + CModules& Modules = pUser->GetModules(); + + for (a = 0; a < Modules.size(); a++) { + CString sModName = Modules[a]->GetModName(); + CString sArgs = Modules[a]->GetArgs(); + CString sModRet; + + try { + if (!pNewUser->GetModules().LoadModule(sModName, sArgs, pNewUser, sModRet, (pUser != NULL))) { + DEBUG("Unable to load module [" << sModName << "] [" << sModRet << "]"); + } + } catch (...) { + DEBUG("Unable to load module [" << sModName << "]"); + } + } + } + return pNewUser; }