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
This commit is contained in:
psychon
2009-09-11 12:46:40 +00:00
parent 79212882e3
commit f5d7ffe41a

View File

@@ -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;
}