X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands.cpp;h=e4fc939ea608a528dda56dc2358bcdfb9369614d;hb=14004479dc1d471c4388f0ab7f86f869ba7f098a;hp=904b4277eaeae67a483253244f3c717bfd5e0fe7;hpb=54963bee7003f65f5412ea52133b1a00c3b0763e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands.cpp b/src/commands.cpp index 904b4277e..e4fc939ea 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -14,11 +14,9 @@ * --------------------------------------------------- */ -using namespace std; - #include "inspircd_config.h" #include "inspircd.h" -#include "inspircd_io.h" +#include "configreader.h" #include #include #include @@ -26,15 +24,8 @@ using namespace std; #include #include #include -#ifdef GCC3 -#include -#else -#include -#endif -#include #include #include -#include #include #include #include @@ -67,8 +58,8 @@ extern ServerConfig* Config; extern InspIRCd* ServerInstance; extern int MODCOUNT; -extern std::vector modules; -extern std::vector factory; +extern ModuleList modules; +extern FactoryList factory; extern time_t TIME; const long duration_m = 60; @@ -125,69 +116,6 @@ void split_chlist(userrec* user, userrec* dest, const std::string &cl) } } -/* XXX - perhaps this should be in cmd_whois? -- w00t */ -void do_whois(userrec* user, userrec* dest,unsigned long signon, unsigned long idle, char* nick) -{ - // bug found by phidjit - were able to whois an incomplete connection if it had sent a NICK or USER - if (dest->registered == 7) - { - WriteServ(user->fd,"311 %s %s %s %s * :%s",user->nick, dest->nick, dest->ident, dest->dhost, dest->fullname); - if ((user == dest) || (*user->oper)) - { - WriteServ(user->fd,"378 %s %s :is connecting from *@%s %s",user->nick, dest->nick, dest->host, inet_ntoa(dest->ip4)); - } - std::string cl = chlist(dest,user); - if (cl.length()) - { - if (cl.length() > 400) - { - split_chlist(user,dest,cl); - } - else - { - WriteServ(user->fd,"319 %s %s :%s",user->nick, dest->nick, cl.c_str()); - } - } - if (*Config->HideWhoisServer && !(*user->oper)) - { - WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, Config->HideWhoisServer, Config->Network); - } - else - { - WriteServ(user->fd,"312 %s %s %s :%s",user->nick, dest->nick, dest->server, GetServerDescription(dest->server).c_str()); - } - if (*dest->awaymsg) - { - WriteServ(user->fd,"301 %s %s :%s",user->nick, dest->nick, dest->awaymsg); - } - if (*dest->oper) - { - WriteServ(user->fd,"313 %s %s :is %s %s on %s",user->nick, dest->nick, (strchr("aeiou",*dest->oper) ? "an" : "a"),dest->oper, Config->Network); - } - if ((!signon) && (!idle)) - { - FOREACH_MOD(I_OnWhois,OnWhois(user,dest)); - } - if (!strcasecmp(user->server,dest->server)) - { - // idle time and signon line can only be sent if youre on the same server (according to RFC) - WriteServ(user->fd,"317 %s %s %d %d :seconds idle, signon time",user->nick, dest->nick, abs((dest->idle_lastmsg)-TIME), dest->signon); - } - else - { - if ((idle) || (signon)) - WriteServ(user->fd,"317 %s %s %d %d :seconds idle, signon time",user->nick, dest->nick, idle, signon); - } - WriteServ(user->fd,"318 %s %s :End of /WHOIS list.",user->nick, dest->nick); - } - else - { - WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, nick); - WriteServ(user->fd,"318 %s %s :End of /WHOIS list.",user->nick, nick); - } -} - - /* XXX - these really belong in helperfuncs perhaps -- w00t */ bool is_uline(const char* server) { @@ -275,16 +203,16 @@ long duration(const char* str) bool host_matches_everyone(const std::string &mask, userrec* user) { - char insanemasks[MAXBUF]; char buffer[MAXBUF]; char itrigger[MAXBUF]; - Config->ConfValue(Config->config_data, "insane","hostmasks", 0, insanemasks, MAXBUF); - Config->ConfValue(Config->config_data, "insane","trigger", 0, itrigger, MAXBUF); - if (*itrigger == 0) + long matches = 0; + + if (!Config->ConfValue(Config->config_data, "insane","trigger", 0, itrigger, MAXBUF)) strlcpy(itrigger,"95.5",MAXBUF); - if ((*insanemasks == 'y') || (*insanemasks == 't') || (*insanemasks == '1')) + + if (Config->ConfValueBool(Config->config_data, "insane","hostmasks", 0)) return false; - long matches = 0; + for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++) { strlcpy(buffer,u->second->ident,MAXBUF); @@ -304,20 +232,21 @@ bool host_matches_everyone(const std::string &mask, userrec* user) bool ip_matches_everyone(const std::string &ip, userrec* user) { - char insanemasks[MAXBUF]; char itrigger[MAXBUF]; - Config->ConfValue(Config->config_data, "insane","ipmasks",0,insanemasks,MAXBUF); - Config->ConfValue(Config->config_data, "insane","trigger",0,itrigger,MAXBUF); - if (*itrigger == 0) + long matches = 0; + + if (!Config->ConfValue(Config->config_data, "insane","trigger",0,itrigger,MAXBUF)) strlcpy(itrigger,"95.5",MAXBUF); - if ((*insanemasks == 'y') || (*insanemasks == 't') || (*insanemasks == '1')) + + if (Config->ConfValueBool(Config->config_data, "insane","ipmasks",0)) return false; - long matches = 0; + for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++) { if (match((char*)inet_ntoa(u->second->ip4),ip.c_str())) matches++; } + float percent = ((float)matches / (float)clientlist.size()) * 100; if (percent > (float)atof(itrigger)) { @@ -329,20 +258,21 @@ bool ip_matches_everyone(const std::string &ip, userrec* user) bool nick_matches_everyone(const std::string &nick, userrec* user) { - char insanemasks[MAXBUF]; char itrigger[MAXBUF]; - Config->ConfValue(Config->config_data, "insane","nickmasks",0,insanemasks,MAXBUF); - Config->ConfValue(Config->config_data, "insane","trigger",0,itrigger,MAXBUF); - if (*itrigger == 0) + long matches = 0; + + if (!Config->ConfValue(Config->config_data, "insane","trigger",0,itrigger,MAXBUF)) strlcpy(itrigger,"95.5",MAXBUF); - if ((*insanemasks == 'y') || (*insanemasks == 't') || (*insanemasks == '1')) + + if (Config->ConfValueBool(Config->config_data, "insane","nickmasks",0)) return false; - long matches = 0; + 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)) {