mirror of
https://github.com/znc/znc.git
synced 2026-05-03 12:02:30 +02:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user