X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommand_parse.cpp;h=f842ee49e1f81f7bccfacddb5c7d680564b3465f;hb=6bc3d71946b339a5a10ca621b029fe8a5b180d68;hp=d2b40806d3aa044574cd267990d24731b9e9d86d;hpb=c36a1534cf034fd9b5aae9718d9e3f6bb9eb820b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/command_parse.cpp b/src/command_parse.cpp index d2b40806d..f842ee49e 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -1,13 +1,10 @@ -/* +------------------------------------+ + /* +------------------------------------+ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. - * E-mail: - * - * + * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits * - * Written by Craig Edwards, Craig McLure, and others. * This program is free but copyrighted software; see * the file COPYING for details. * @@ -37,10 +34,10 @@ bool InspIRCd::ULine(const char* server) return (find(Config->ulines.begin(),Config->ulines.end(),server) != Config->ulines.end()); } -int InspIRCd::OperPassCompare(const char* data,const char* input) +int InspIRCd::OperPassCompare(const char* data,const char* input, int tagnumber) { int MOD_RESULT = 0; - FOREACH_RESULT_I(this,I_OnOperCompare,OnOperCompare(data,input)) + FOREACH_RESULT_I(this,I_OnOperCompare,OnOperCompare(data, input, tagnumber)) Log(DEBUG,"OperPassCompare: %d",MOD_RESULT); if (MOD_RESULT == 1) return 0; @@ -109,89 +106,6 @@ long InspIRCd::Duration(const char* str) return total; } -/* All other ircds when doing this check usually just look for a string of *@* or *. We're smarter than that, though. */ - -bool InspIRCd::HostMatchesEveryone(const std::string &mask, userrec* user) -{ - char buffer[MAXBUF]; - char itrigger[MAXBUF]; - long matches = 0; - - if (!Config->ConfValue(Config->config_data, "insane","trigger", 0, itrigger, MAXBUF)) - strlcpy(itrigger,"95.5",MAXBUF); - - if (Config->ConfValueBool(Config->config_data, "insane","hostmasks", 0)) - return false; - - for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++) - { - strlcpy(buffer,u->second->ident,MAXBUF); - charlcat(buffer,'@',MAXBUF); - strlcat(buffer,u->second->host,MAXBUF); - if (match(buffer,mask.c_str())) - matches++; - } - float percent = ((float)matches / (float)clientlist.size()) * 100; - if (percent > (float)atof(itrigger)) - { - WriteOpers("*** \2WARNING\2: %s tried to set a G/K/E line mask of %s, which covers %.2f%% of the network!",user->nick,mask.c_str(),percent); - return true; - } - return false; -} - -bool InspIRCd::IPMatchesEveryone(const std::string &ip, userrec* user) -{ - char itrigger[MAXBUF]; - long matches = 0; - - if (!Config->ConfValue(Config->config_data, "insane","trigger",0,itrigger,MAXBUF)) - strlcpy(itrigger,"95.5",MAXBUF); - - if (Config->ConfValueBool(Config->config_data, "insane","ipmasks",0)) - return false; - - for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++) - { - if (match(u->second->GetIPString(),ip.c_str(),true)) - matches++; - } - - float percent = ((float)matches / (float)clientlist.size()) * 100; - if (percent > (float)atof(itrigger)) - { - WriteOpers("*** \2WARNING\2: %s tried to set a Z line mask of %s, which covers %.2f%% of the network!",user->nick,ip.c_str(),percent); - return true; - } - return false; -} - -bool InspIRCd::NickMatchesEveryone(const std::string &nick, userrec* user) -{ - char itrigger[MAXBUF]; - long matches = 0; - - if (!Config->ConfValue(Config->config_data, "insane","trigger",0,itrigger,MAXBUF)) - strlcpy(itrigger,"95.5",MAXBUF); - - if (Config->ConfValueBool(Config->config_data, "insane","nickmasks",0)) - return false; - - for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++) - { - if (match(u->second->nick,nick.c_str())) - matches++; - } - - float percent = ((float)matches / (float)clientlist.size()) * 100; - if (percent > (float)atof(itrigger)) - { - WriteOpers("*** \2WARNING\2: %s tried to set a Q line mask of %s, which covers %.2f%% of the network!",user->nick,nick.c_str(),percent); - return true; - } - return false; -} - /* LoopCall is used to call a command classes handler repeatedly based on the contents of a comma seperated list. * There are two overriden versions of this method, one of which takes two potential lists and the other takes one. * We need a version which takes two potential lists for JOIN, because a JOIN may contain two lists of items at once, @@ -455,28 +369,33 @@ void CommandParser::ProcessCommand(userrec *user, std::string &cmd) bool CommandParser::RemoveCommands(const char* source) { - bool go_again = true; - - while (go_again) + nspace::hash_map::iterator i,safei; + for (i = cmdlist.begin(); i != cmdlist.end(); i++) { - go_again = false; - - for (nspace::hash_map::iterator i = cmdlist.begin(); i != cmdlist.end(); i++) + safei = i; + safei++; + if (safei != cmdlist.end()) { - command_t* x = i->second; - if (x->source == std::string(source)) - { - ServerInstance->Log(DEBUG,"removecommands(%s) Removing dependent command: %s",x->source.c_str(),x->command.c_str()); - cmdlist.erase(i); - go_again = true; - break; - } + RemoveCommand(safei, source); } } - + safei = cmdlist.begin(); + if (safei != cmdlist.end()) + { + RemoveCommand(safei, source); + } return true; } +void CommandParser::RemoveCommand(nspace::hash_map::iterator safei, const char* source) +{ + command_t* x = safei->second; + if (x->source == std::string(source)) + { + cmdlist.erase(safei); + } +} + void CommandParser::ProcessBuffer(std::string &buffer,userrec *user) { std::string::size_type a; @@ -503,7 +422,7 @@ bool CommandParser::CreateCommand(command_t *f, void* so_handle) if (RFCCommands.find(f->command) == RFCCommands.end()) { RFCCommands[f->command] = so_handle; - ServerInstance->Log(DEFAULT,"Monitoring RFC-specified reloadable command at %8x",so_handle); + ServerInstance->Log(DEBUG,"Monitoring RFC-specified reloadable command at %8x",so_handle); } else { @@ -516,7 +435,7 @@ bool CommandParser::CreateCommand(command_t *f, void* so_handle) if (cmdlist.find(f->command) == cmdlist.end()) { cmdlist[f->command] = f; - ServerInstance->Log(DEBUG,"Added command %s (%lu parameters)",f->command.c_str(),(unsigned long)f->min_params); + ServerInstance->Log(DEBUG,"Added command %s (%d parameters)", f->command.c_str(), f->min_params); return true; } else return false; @@ -581,6 +500,7 @@ CmdResult cmd_reload::Handle(const char** parameters, int pcnt, userrec *user) if (ServerInstance->Parser->ReloadCommand(parameters[0])) { user->WriteServ("NOTICE %s :*** Successfully reloaded command '%s'", user->nick, parameters[0]); + ServerInstance->WriteOpers("*** RELOAD: %s reloaded the '%s' command.", user->nick, parameters[0]); return CMD_SUCCESS; } else