X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands.cpp;h=a10842ab15dca0a2adf3c467f6c2829170a5acb8;hb=c80508b28be5947648f59710e6653f793a73bd76;hp=da4deff65754bf757ef133fbb6fcf4058ca6d316;hpb=bc461262685ac30a9f4629224a2d09a53190167d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands.cpp b/src/commands.cpp index da4deff65..a10842ab1 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) { @@ -199,7 +127,7 @@ bool is_uline(const char* server) return (find(Config->ulines.begin(),Config->ulines.end(),server) != Config->ulines.end()); } -int operstrcmp(char* data,char* input) +int operstrcmp(const char* data,const char* input) { int MOD_RESULT = 0; FOREACH_RESULT(I_OnOperCompare,OnOperCompare(data,input)) @@ -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("insane","hostmasks",0,insanemasks,&Config->config_f); - Config->ConfValue("insane","trigger",0,itrigger,&Config->config_f); - 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("insane","ipmasks",0,insanemasks,&Config->config_f); - Config->ConfValue("insane","trigger",0,itrigger,&Config->config_f); - 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("insane","nickmasks",0,insanemasks,&Config->config_f); - Config->ConfValue("insane","trigger",0,itrigger,&Config->config_f); - 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)) {