From 7140873bd8bbcf869e4bf5fe3b3320fcd51fac7b Mon Sep 17 00:00:00 2001 From: prozacx Date: Sun, 10 May 2009 09:50:37 +0000 Subject: [PATCH] Auto-detect globalness in the re/un/loadmod commands using GetModInfo() git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1505 726aef4b-f618-498e-8847-2d620e286838 --- ClientCommand.cpp | 98 ++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 48 deletions(-) diff --git a/ClientCommand.cpp b/ClientCommand.cpp index 11ba4885..af555dc4 100644 --- a/ClientCommand.cpp +++ b/ClientCommand.cpp @@ -539,7 +539,7 @@ void CClient::UserCommand(const CString& sLine) { CModules& Modules = m_pUser->GetModules(); if (!Modules.size()) { - PutStatus("You have no modules loaded."); + PutStatus("Your user has no modules loaded."); } else { PutStatus("User modules:"); CTable Table; @@ -617,30 +617,31 @@ void CClient::UserCommand(const CString& sLine) { } else if (sCommand.Equals("LOADMOD") || sCommand.Equals("LOADMODULE")) { CString sMod; CString sArgs; - bool bGlobal = false; - if (sLine.Token(1).Equals("-global")) { - sMod = sLine.Token(2); - - if (!m_pUser->IsAdmin()) { - PutStatus("Unable to load global module [" + sMod + "] Access Denied."); - return; - } - - sArgs = sLine.Token(3, true); - bGlobal = true; - } else { - sMod = sLine.Token(1); - sArgs = sLine.Token(2, true); - } + sMod = sLine.Token(1); + sArgs = sLine.Token(2, true); if (m_pUser->DenyLoadMod()) { PutStatus("Unable to load [" + sMod + "] Access Denied."); return; } -#ifdef _MODULES + if (sMod.empty()) { - PutStatus("Usage: LoadMod [-global] [args]"); + PutStatus("Usage: LoadMod [args]"); + return; + } + +#ifdef _MODULES + CModInfo ModInfo; + if (!CZNC::Get().GetModules().GetModInfo(ModInfo, sMod)) { + PutStatus("Unable to find modinfo [" + sMod + "]"); + return; + } + + bool bGlobal = ModInfo.IsGlobal(); + + if (bGlobal && !m_pUser->IsAdmin()) { + PutStatus("Unable to load global module [" + sMod + "] Access Denied."); return; } @@ -665,27 +666,28 @@ void CClient::UserCommand(const CString& sLine) { return; } else if (sCommand.Equals("UNLOADMOD") || sCommand.Equals("UNLOADMODULE")) { CString sMod; - bool bGlobal = false; - - if (sLine.Token(1).Equals("-global")) { - sMod = sLine.Token(2); - - if (!m_pUser->IsAdmin()) { - PutStatus("Unable to unload global module [" + sMod + "] Access Denied."); - return; - } - - bGlobal = true; - } else - sMod = sLine.Token(1); + sMod = sLine.Token(1); if (m_pUser->DenyLoadMod()) { PutStatus("Unable to unload [" + sMod + "] Access Denied."); return; } #ifdef _MODULES + CModInfo ModInfo; + if (!CZNC::Get().GetModules().GetModInfo(ModInfo, sMod)) { + PutStatus("Unable to find modinfo for [" + sMod + "]"); + return; + } + + bool bGlobal = ModInfo.IsGlobal(); + + if (bGlobal && !m_pUser->IsAdmin()) { + PutStatus("Unable to unload global module [" + sMod + "] Access Denied."); + return; + } + if (sMod.empty()) { - PutStatus("Usage: UnloadMod [-global] "); + PutStatus("Usage: UnloadMod "); return; } @@ -705,30 +707,30 @@ void CClient::UserCommand(const CString& sLine) { } else if (sCommand.Equals("RELOADMOD") || sCommand.Equals("RELOADMODULE")) { CString sMod; CString sArgs; - bool bGlobal = false; - if (sLine.Token(1).Equals("-global")) { - sMod = sLine.Token(2); - - if (!m_pUser->IsAdmin()) { - PutStatus("Unable to reload global module [" + sMod + "] Access Denied."); - return; - } - - sArgs = sLine.Token(3, true); - bGlobal = true; - } else { - sMod = sLine.Token(1); - sArgs = sLine.Token(2, true); - } + sMod = sLine.Token(1); + sArgs = sLine.Token(2, true); if (m_pUser->DenyLoadMod()) { PutStatus("Unable to reload [" + sMod + "] Access Denied."); return; } #ifdef _MODULES + CModInfo ModInfo; + if (!CZNC::Get().GetModules().GetModInfo(ModInfo, sMod)) { + PutStatus("Unable to find modinfo for [" + sMod + "]"); + return; + } + + bool bGlobal = ModInfo.IsGlobal(); + + if (bGlobal && !m_pUser->IsAdmin()) { + PutStatus("Unable to reload global module [" + sMod + "] Access Denied."); + return; + } + if (sMod.empty()) { - PutStatus("Usage: ReloadMod [-global] [args]"); + PutStatus("Usage: ReloadMod [args]"); return; }