summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command_parse.cpp12
-rw-r--r--src/modules.cpp4
-rw-r--r--src/modules/m_spanningtree.cpp6
3 files changed, 12 insertions, 10 deletions
diff --git a/src/command_parse.cpp b/src/command_parse.cpp
index 18915b819..77fef66d7 100644
--- a/src/command_parse.cpp
+++ b/src/command_parse.cpp
@@ -288,7 +288,7 @@ bool CommandParser::IsValidCommand(std::string &commandname, int pcnt, userrec *
// calls a handler function for a command
-void CommandParser::CallHandler(std::string &commandname,char **parameters, int pcnt, userrec *user)
+bool CommandParser::CallHandler(std::string &commandname,char **parameters, int pcnt, userrec *user)
{
nspace::hash_map<std::string,command_t*>::iterator n = cmdlist.find(commandname);
@@ -300,23 +300,21 @@ void CommandParser::CallHandler(std::string &commandname,char **parameters, int
{
if (n->second->flags_needed)
{
- if ((user->HasPermission(commandname)) || (is_uline(user->server)))
+ if ((user->HasPermission(commandname)) || (!IS_LOCAL(user)))
{
n->second->Handle(parameters,pcnt,user);
- }
- else
- {
- if (!IS_LOCAL(user))
- WriteOpers("*** \2WARNING\2: Command '%s' not allowed for oper '%s', dropped.",commandname.c_str(),user->nick);
+ return true;
}
}
else
{
n->second->Handle(parameters,pcnt,user);
+ return true;
}
}
}
}
+ return false;
}
int CommandParser::ProcessParameters(char **command_p,char *parameters)
diff --git a/src/modules.cpp b/src/modules.cpp
index 9b6a0d826..64a61c1b0 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -486,9 +486,9 @@ bool Server::IsUlined(std::string server)
return is_uline(server.c_str());
}
-void Server::CallCommandHandler(std::string commandname, char** parameters, int pcnt, userrec* user)
+bool Server::CallCommandHandler(std::string commandname, char** parameters, int pcnt, userrec* user)
{
- ServerInstance->Parser->CallHandler(commandname,parameters,pcnt,user);
+ return ServerInstance->Parser->CallHandler(commandname,parameters,pcnt,user);
}
bool Server::IsValidModuleCommand(std::string commandname, int pcnt, userrec* user)
diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp
index b33e28af8..f927ac044 100644
--- a/src/modules/m_spanningtree.cpp
+++ b/src/modules/m_spanningtree.cpp
@@ -2513,7 +2513,11 @@ class TreeSocket : public InspSocket
{
strparams[q] = (char*)params[q].c_str();
}
- Srv->CallCommandHandler(command.c_str(), strparams, params.size(), who);
+ if (!Srv->CallCommandHandler(command.c_str(), strparams, params.size(), who))
+ {
+ this->WriteLine("ERROR :Unrecognised command -- possibly loaded mismatched modules");
+ return false;
+ }
}
else
{