diff --git a/ClientCommand.cpp b/ClientCommand.cpp index b265df12..8b270173 100644 --- a/ClientCommand.cpp +++ b/ClientCommand.cpp @@ -575,10 +575,12 @@ void CClient::UserCommand(CString& sLine) { sMod = sType; sArgs = sLine.Token(2, true); sType = "default"; + // Will be set correctly later + eType = ModuleTypeUser; } if (m_pUser->DenyLoadMod()) { - PutStatus("Unable to load [" + sMod + "] Access Denied."); + PutStatus("Unable to load [" + sMod + "]: Access Denied."); return; } @@ -599,7 +601,7 @@ void CClient::UserCommand(CString& sLine) { } if (eType == ModuleTypeGlobal && !m_pUser->IsAdmin()) { - PutStatus("Unable to load global module [" + sMod + "] Access Denied."); + PutStatus("Unable to load global module [" + sMod + "]: Access Denied."); return; } @@ -607,15 +609,14 @@ void CClient::UserCommand(CString& sLine) { bool b = false; switch (eType) { - case ModuleTypeGlobal: - b = CZNC::Get().GetModules().LoadModule(sMod, sArgs, eType, NULL, sModRet); - break; - case ModuleTypeUser: - b = m_pUser->GetModules().LoadModule(sMod, sArgs, eType, m_pUser, sModRet); - break; - default: - sModRet = "Unable to load module [" + sMod + "] Unknown module type"; - + case ModuleTypeGlobal: + b = CZNC::Get().GetModules().LoadModule(sMod, sArgs, eType, NULL, sModRet); + break; + case ModuleTypeUser: + b = m_pUser->GetModules().LoadModule(sMod, sArgs, eType, m_pUser, sModRet); + break; + default: + sModRet = "Unable to load module [" + sMod + "]: Unknown module type"; } if (b) @@ -659,22 +660,21 @@ void CClient::UserCommand(CString& sLine) { } if (eType == ModuleTypeGlobal && !m_pUser->IsAdmin()) { - PutStatus("Unable to unload global module [" + sMod + "] Access Denied."); + PutStatus("Unable to unload global module [" + sMod + "]: Access Denied."); return; } CString sModRet; switch (eType) { - case ModuleTypeGlobal: - CZNC::Get().GetModules().UnloadModule(sMod, sModRet); - break; - case ModuleTypeUser: - m_pUser->GetModules().UnloadModule(sMod, sModRet); - break; - default: - sModRet = "Unable to unload module [" + sMod + "] Unknown module type"; - + case ModuleTypeGlobal: + CZNC::Get().GetModules().UnloadModule(sMod, sModRet); + break; + case ModuleTypeUser: + m_pUser->GetModules().UnloadModule(sMod, sModRet); + break; + default: + sModRet = "Unable to unload module [" + sMod + "]: Unknown module type"; } PutStatus(sModRet); @@ -698,6 +698,8 @@ void CClient::UserCommand(CString& sLine) { sMod = sType; sArgs = sLine.Token(2, true); sType = "default"; + // Will be set correctly later + eType = ModuleTypeUser; } if (sMod.empty()) { @@ -717,22 +719,21 @@ void CClient::UserCommand(CString& sLine) { } if (eType == ModuleTypeGlobal && !m_pUser->IsAdmin()) { - PutStatus("Unable to reload global module [" + sMod + "] Access Denied."); + PutStatus("Unable to reload global module [" + sMod + "]: Access Denied."); return; } CString sModRet; switch (eType) { - case ModuleTypeGlobal: - CZNC::Get().GetModules().ReloadModule(sMod, sArgs, NULL, sModRet); - break; - case ModuleTypeUser: - m_pUser->GetModules().ReloadModule(sMod, sArgs, m_pUser, sModRet); - break; - default: - sModRet = "Unable to reload module [" + sMod + "] Unknown module type"; - + case ModuleTypeGlobal: + CZNC::Get().GetModules().ReloadModule(sMod, sArgs, NULL, sModRet); + break; + case ModuleTypeUser: + m_pUser->GetModules().ReloadModule(sMod, sArgs, m_pUser, sModRet); + break; + default: + sModRet = "Unable to reload module [" + sMod + "]: Unknown module type"; } PutStatus(sModRet); diff --git a/Modules.cpp b/Modules.cpp index 89f7ff7c..c6b10efb 100644 --- a/Modules.cpp +++ b/Modules.cpp @@ -832,29 +832,30 @@ bool CModules::LoadModule(const CString& sModule, const CString& sArgs, EModuleT if (!Info.SupportsType(eType)) { dlclose(p); - sRetMsg = "Module [" + sModule + "] does not support module type."; + sRetMsg = "Module [" + sModule + "] does not support module type [" + + CModInfo::ModuleTypeToString(eType) + "]."; return false; } if (!pUser && eType == ModuleTypeUser) { dlclose(p); - sRetMsg = "Module [" + sModule + "] require a user."; + sRetMsg = "Module [" + sModule + "] requires a user."; return false; } CModule* pModule = NULL; switch (eType) { - case ModuleTypeUser: - pModule = Info.GetLoader()(p, pUser, sModule, sDataPath); - break; - case ModuleTypeGlobal: - pModule = Info.GetGlobalLoader()(p, sModule, sDataPath); - break; - default: - dlclose(p); - sRetMsg = "Unsupported module type"; - return false; + case ModuleTypeUser: + pModule = Info.GetLoader()(p, pUser, sModule, sDataPath); + break; + case ModuleTypeGlobal: + pModule = Info.GetGlobalLoader()(p, sModule, sDataPath); + break; + default: + dlclose(p); + sRetMsg = "Unsupported module type"; + return false; } pModule->SetDescription(Info.GetDescription()); diff --git a/Modules.h b/Modules.h index aa401183..fc3af6c0 100644 --- a/Modules.h +++ b/Modules.h @@ -207,6 +207,14 @@ public: return *m_seType.begin(); } + static CString ModuleTypeToString(EModuleType eType) { + switch (eType) { + case ModuleTypeGlobal: return "Global"; + case ModuleTypeUser: return "User"; + default: return "UNKNOWN"; + } + } + // Getters const CString& GetName() const { return m_sName; } const CString& GetPath() const { return m_sPath; } diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index 4bcf3df9..89a68505 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -728,12 +728,12 @@ public: l["Description"] = Info.GetDescription(); l["Wiki"] = Info.GetWikiPage(); - if (pUser && pUser->GetModules().FindModule(Info.GetName())) { - CModule *pModule = pUser->GetModules().FindModule(Info.GetName()); - if (pModule) { - l["Checked"] = "true"; - l["Args"] = pModule->GetArgs(); - } + CModule *pModule = NULL; + if (pUser) + pModule = pUser->GetModules().FindModule(Info.GetName()); + if (pModule) { + l["Checked"] = "true"; + l["Args"] = pModule->GetArgs(); } if (!spSession->IsAdmin() && pUser && pUser->DenyLoadMod()) {