From de1bf10690570477f5d8cd126b30f81300c1376a Mon Sep 17 00:00:00 2001 From: Naram Qashat Date: Tue, 29 Jun 2010 08:21:20 -0400 Subject: Missed OCDing over src/protocol/*, plus fixed a minor lack of braces and fixed Config to work in an out-of-source build. --- Config | 2 +- src/bots.cpp | 1 - src/commands.cpp | 2 + src/modulemanager.cpp | 8 +- src/protocol/bahamut.cpp | 149 ++++++++++---------- src/protocol/inspircd11.cpp | 328 +++++++++++++++++++++----------------------- src/protocol/inspircd12.cpp | 299 ++++++++++++++++++---------------------- src/protocol/inspircd20.cpp | 246 +++++++++++++++------------------ src/protocol/ratbox.cpp | 216 ++++++++++++++--------------- src/protocol/unreal32.cpp | 293 +++++++++++++++++++-------------------- 10 files changed, 723 insertions(+), 821 deletions(-) diff --git a/Config b/Config index 145f1f3e6..da5388aa5 100755 --- a/Config +++ b/Config @@ -205,7 +205,7 @@ if [ ! "$NO_INTRO" ] ; then clear ;; esac - . src/version.sh + . $SOURCE_DIR/src/version.sh if [ -d .git ] ; then VERSION=`git describe --tags` echo "#define VERSION_BUILD `echo "$VERSION" | cut -d'-' -f2`" > include/version.h diff --git a/src/bots.cpp b/src/bots.cpp index 19ef256c2..6389ac2cd 100644 --- a/src/bots.cpp +++ b/src/bots.cpp @@ -175,4 +175,3 @@ void BotInfo::Part(Channel *c, const std::string &reason) ircdproto->SendPart(this, c, !reason.empty() ? reason.c_str() : ""); c->DeleteUser(this); } - diff --git a/src/commands.cpp b/src/commands.cpp index 4eec6cd61..7396968c4 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -141,7 +141,9 @@ void mod_run_cmd(BotInfo *bi, User *u, Command *c, const ci::string &command, co ret = c->Execute(u, params); if (ret == MOD_CONT) + { FOREACH_MOD(I_OnPostCommand, OnPostCommand(u, c->service, c->name.c_str(), params)); + } } /** diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp index 9c646c4a8..884bba5a8 100644 --- a/src/modulemanager.cpp +++ b/src/modulemanager.cpp @@ -16,17 +16,13 @@ std::vector ModuleManager::EventHandlers[I_END]; void ModuleManager::LoadModuleList(std::list &ModuleList) { for (std::list::iterator it = ModuleList.begin(), it_end = ModuleList.end(); it != it_end; ++it) - { ModuleManager::LoadModule(*it, NULL); - } } void ModuleManager::LoadModuleList(std::list &ModuleList) { for (std::list::iterator it = ModuleList.begin(), it_end = ModuleList.end(); it != it_end; ++it) - { ModuleManager::LoadModule(*it, NULL); - } } /** @@ -284,7 +280,7 @@ void ModuleManager::DeleteModule(Module *m) { if (!m || !m->handle) return; - + const char *err; void (*destroy_func)(Module *m); @@ -307,7 +303,7 @@ void ModuleManager::DeleteModule(Module *m) if (dlclose(handle)) Alog() << dlerror(); } - + if (!filename.empty()) DeleteFile(filename.c_str()); } diff --git a/src/protocol/bahamut.cpp b/src/protocol/bahamut.cpp index 685dd52cd..5b84deb73 100644 --- a/src/protocol/bahamut.cpp +++ b/src/protocol/bahamut.cpp @@ -17,41 +17,41 @@ #include "modules.h" IRCDVar myIrcd[] = { - {"Bahamut 1.8.x", /* ircd name */ - "+", /* Modes used by pseudoclients */ - 2, /* Chan Max Symbols */ - "+o", /* Channel Umode used by Botserv bots */ - 1, /* SVSNICK */ - 0, /* Vhost */ - 1, /* Supports SNlines */ - 1, /* Supports SQlines */ - 1, /* Supports SZlines */ - 3, /* Number of server args */ - 0, /* Join 2 Set */ - 0, /* Join 2 Message */ - 0, /* TS Topic Forward */ - 0, /* TS Topci Backward */ - 1, /* Chan SQlines */ - 1, /* Quit on Kill */ - 1, /* SVSMODE unban */ - 0, /* Reverse */ - 0, /* vidents */ - 1, /* svshold */ - 1, /* time stamp on mode */ - 1, /* NICKIP */ - 0, /* O:LINE */ - 1, /* UMODE */ - 0, /* VHOST ON NICK */ - 0, /* Change RealName */ - 1, /* No Knock requires +i */ - 0, /* We support TOKENS */ - 0, /* TIME STAMPS are BASE64 */ - 0, /* Can remove User Channel Modes with SVSMODE */ - 0, /* Sglines are not enforced until user reconnects */ - 0, /* ts6 */ - 0, /* p10 */ - 0, /* CIDR channelbans */ - "$", /* TLD Prefix for Global */ + {"Bahamut 1.8.x", /* ircd name */ + "+", /* Modes used by pseudoclients */ + 2, /* Chan Max Symbols */ + "+o", /* Channel Umode used by Botserv bots */ + 1, /* SVSNICK */ + 0, /* Vhost */ + 1, /* Supports SNlines */ + 1, /* Supports SQlines */ + 1, /* Supports SZlines */ + 3, /* Number of server args */ + 0, /* Join 2 Set */ + 0, /* Join 2 Message */ + 0, /* TS Topic Forward */ + 0, /* TS Topci Backward */ + 1, /* Chan SQlines */ + 1, /* Quit on Kill */ + 1, /* SVSMODE unban */ + 0, /* Reverse */ + 0, /* vidents */ + 1, /* svshold */ + 1, /* time stamp on mode */ + 1, /* NICKIP */ + 0, /* O:LINE */ + 1, /* UMODE */ + 0, /* VHOST ON NICK */ + 0, /* Change RealName */ + 1, /* No Knock requires +i */ + 0, /* We support TOKENS */ + 0, /* TIME STAMPS are BASE64 */ + 0, /* Can remove User Channel Modes with SVSMODE */ + 0, /* Sglines are not enforced until user reconnects */ + 0, /* ts6 */ + 0, /* p10 */ + 0, /* CIDR channelbans */ + "$", /* TLD Prefix for Global */ 6, /* Max number of modes we can send per line */ } , @@ -85,24 +85,22 @@ void bahamut_cmd_pass(const char *pass) /* CAPAB */ void bahamut_cmd_capab() { - send_cmd(NULL, - "CAPAB SSJOIN NOQUIT BURST UNCONNECT NICKIP TSMODE TS3"); + send_cmd(NULL, "CAPAB SSJOIN NOQUIT BURST UNCONNECT NICKIP TSMODE TS3"); } /* this avoids "undefined symbol" messages of those whom try to load mods that call on this function */ void bahamut_cmd_chghost(const char *nick, const char *vhost) { - Alog(LOG_DEBUG) << "This IRCD does not support vhosting"; + Alog(LOG_DEBUG) << "This IRCD does not support vhosting"; } - - class BahamutIRCdProto : public IRCDProto { void SendModeInternal(BotInfo *source, Channel *dest, const char *buf) { - if (!buf) return; + if (!buf) + return; if (Capab.HasFlag(CAPAB_TSMODE)) send_cmd(source->nick, "MODE %s 0 %s", dest->name.c_str(), buf); else @@ -111,7 +109,8 @@ class BahamutIRCdProto : public IRCDProto void SendModeInternal(BotInfo *bi, User *u, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(bi ? bi->nick : Config.ServerName, "SVSMODE %s %ld %s", u->nick.c_str(), static_cast(u->timestamp), buf); } @@ -136,8 +135,10 @@ class BahamutIRCdProto : public IRCDProto /* SVSMODE channel modes */ void SendSVSModeChan(Channel *c, const char *mode, const char *nick) { - if (nick) send_cmd(Config.ServerName, "SVSMODE %s %s %s", c->name.c_str(), mode, nick); - else send_cmd(Config.ServerName, "SVSMODE %s %s", c->name.c_str(), mode); + if (nick) + send_cmd(Config.ServerName, "SVSMODE %s %s %s", c->name.c_str(), mode, nick); + else + send_cmd(Config.ServerName, "SVSMODE %s %s", c->name.c_str(), mode); } /* SQLINE */ @@ -210,7 +211,8 @@ class BahamutIRCdProto : public IRCDProto { // Calculate the time left before this would expire, capping it at 2 days time_t timeleft = x->Expires - time(NULL); - if (timeleft > 172800) timeleft = 172800; + if (timeleft > 172800) + timeleft = 172800; send_cmd(NULL, "AKILL %s %s %d %s %ld :%s", x->GetHost().c_str(), x->GetUser().c_str(), static_cast(timeleft), x->By.c_str(), static_cast(time(NULL)), x->Reason.c_str()); } @@ -241,14 +243,17 @@ class BahamutIRCdProto : public IRCDProto void SendNoticeChanopsInternal(BotInfo *source, Channel *dest, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(NULL, "NOTICE @%s :%s", dest->name.c_str(), buf); } void SendKickInternal(BotInfo *source, Channel *chan, User *user, const char *buf) { - if (buf) send_cmd(source->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf); - else send_cmd(source->nick, "KICK %s %s", chan->name.c_str(), user->nick.c_str()); + if (buf) + send_cmd(source->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf); + else + send_cmd(source->nick, "KICK %s %s", chan->name.c_str(), user->nick.c_str()); } void SendClientIntroduction(const std::string &nick, const std::string &user, const std::string &host, const std::string &real, const char *modes, const std::string &uid) @@ -299,10 +304,8 @@ class BahamutIRCdProto : public IRCDProto u->SetMode(bi, UMODE_REGISTERED); ircdproto->SendMode(bi, u, "+d %s", svidbuf); } - } ircd_proto; - /* EVENT: SJOIN */ int anope_event_sjoin(const char *source, int ac, const char **av) { @@ -353,11 +356,11 @@ int anope_event_sjoin(const char *source, int ac, const char **av) /* Their TS is newer than ours, our modes > theirs, unset their modes if need be */ else keep_their_modes = false; - + /* Mark the channel as syncing */ if (was_created) c->SetFlag(CH_SYNCING); - + /* If we need to keep their modes, and this SJOIN string contains modes */ if (keep_their_modes && ac >= 4) { @@ -372,9 +375,7 @@ int anope_event_sjoin(const char *source, int ac, const char **av) { User *u = finduser(source); if (!u) - { Alog(LOG_DEBUG) << "SJOIN for nonexistant user " << source << " on " << c->name; - } else { EventReturn MOD_RESULT; @@ -436,10 +437,8 @@ int anope_event_sjoin(const char *source, int ac, const char **av) /* Update their status internally on the channel * This will enforce secureops etc on the user */ - for (std::list::iterator it = Status.begin(); it != Status.end(); ++it) - { + for (std::list::iterator it = Status.begin(), it_end = Status.end(); it != it_end; ++it) c->SetModeInternal(*it, buf); - } /* Now set whatever modes this user is allowed to have on the channel */ chan_set_correct_modes(u, c, 1); @@ -494,11 +493,11 @@ int anope_event_nick(const char *source, int ac, const char **av) { User *user; - if (ac != 2) { - user = do_nick(source, av[0], av[4], av[5], av[6], av[9], - strtoul(av[2], NULL, 10), strtoul(av[8], NULL, 0), - NULL, NULL); - if (user) { + if (ac != 2) + { + user = do_nick(source, av[0], av[4], av[5], av[6], av[9], strtoul(av[2], NULL, 10), strtoul(av[8], NULL, 0), NULL, NULL); + if (user) + { /* Check to see if the user should be identified because their * services id matches the one in their nickcore */ @@ -506,10 +505,9 @@ int anope_event_nick(const char *source, int ac, const char **av) UserSetInternalModes(user, 1, &av[3]); } - } else { - do_nick(source, av[0], NULL, NULL, NULL, NULL, - strtoul(av[1], NULL, 10), 0, NULL, NULL); } + else + do_nick(source, av[0], NULL, NULL, NULL, NULL, strtoul(av[1], NULL, 10), 0, NULL, NULL); return MOD_CONT; } @@ -600,9 +598,8 @@ int anope_event_part(const char *source, int ac, const char **av) int anope_event_whois(const char *source, int ac, const char **av) { - if (source && ac >= 1) { + if (source && ac >= 1) m_whois(source, av[0]); - } return MOD_CONT; } @@ -636,11 +633,10 @@ int anope_event_mode(const char *source, int ac, const char **av) if (ac < 2) return MOD_CONT; - if (*av[0] == '#' || *av[0] == '&') { + if (*av[0] == '#' || *av[0] == '&') do_cmode(source, ac, av); - } else { + else do_umode(source, ac, av); - } return MOD_CONT; } @@ -675,9 +671,8 @@ int anope_event_join(const char *source, int ac, const char **av) /* EVENT: MOTD */ int anope_event_motd(const char *source, int ac, const char **av) { - if (!source) { + if (!source) return MOD_CONT; - } m_motd(source); return MOD_CONT; @@ -685,9 +680,8 @@ int anope_event_motd(const char *source, int ac, const char **av) int anope_event_away(const char *source, int ac, const char **av) { - if (!source) { + if (!source) return MOD_CONT; - } m_away(source, (ac ? av[0] : NULL)); return MOD_CONT; } @@ -711,9 +705,12 @@ int anope_event_burst(const char *source, int ac, const char **av) { Server *s = Server::Find(source ? source : ""); - if (!ac) { + if (!ac) + { /* for future use - start burst */ - } else { + } + else + { /* If we found a server with the given source, that one just * finished bursting. If there was no source, then our uplink * server finished bursting. -GD diff --git a/src/protocol/inspircd11.cpp b/src/protocol/inspircd11.cpp index 1b822bbf8..89b2daa32 100644 --- a/src/protocol/inspircd11.cpp +++ b/src/protocol/inspircd11.cpp @@ -7,8 +7,6 @@ * * Based on the original code of Epona by Lara. * Based on the original code of Services by Andy Church. - * - * */ /*************************************************************************/ @@ -18,13 +16,13 @@ #include "hashcomp.h" #ifndef _WIN32 -#include -#include -#include +# include +# include +# include #endif #ifdef _WIN32 -#include +# include int inet_aton(const char *name, struct in_addr *addr) { uint32 a = inet_addr(name); @@ -34,63 +32,58 @@ int inet_aton(const char *name, struct in_addr *addr) #endif IRCDVar myIrcd[] = { - {"InspIRCd 1.1", /* ircd name */ - "+I", /* Modes used by pseudoclients */ - 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ - 1, /* SVSNICK */ - 1, /* Vhost */ - 1, /* Supports SNlines */ - 1, /* Supports SQlines */ - 1, /* Supports SZlines */ - 4, /* Number of server args */ - 0, /* Join 2 Set */ - 1, /* Join 2 Message */ - 1, /* TS Topic Forward */ - 0, /* TS Topci Backward */ - 0, /* Chan SQlines */ - 0, /* Quit on Kill */ - 0, /* SVSMODE unban */ - 1, /* Reverse */ - 1, /* vidents */ - 1, /* svshold */ - 0, /* time stamp on mode */ - 0, /* NICKIP */ - 1, /* O:LINE */ - 1, /* UMODE */ - 1, /* VHOST ON NICK */ - 0, /* Change RealName */ - 1, /* No Knock requires +i */ - 0, /* We support inspircd TOKENS */ - 0, /* TIME STAMPS are BASE64 */ - 0, /* Can remove User Channel Modes with SVSMODE */ - 0, /* Sglines are not enforced until user reconnects */ - 0, /* ts6 */ - 0, /* p10 */ - 1, /* CIDR channelbans */ - "$", /* TLD Prefix for Global */ - 20, /* Max number of modes we can send per line */ + {"InspIRCd 1.1", /* ircd name */ + "+I", /* Modes used by pseudoclients */ + 5, /* Chan Max Symbols */ + "+ao", /* Channel Umode used by Botserv bots */ + 1, /* SVSNICK */ + 1, /* Vhost */ + 1, /* Supports SNlines */ + 1, /* Supports SQlines */ + 1, /* Supports SZlines */ + 4, /* Number of server args */ + 0, /* Join 2 Set */ + 1, /* Join 2 Message */ + 1, /* TS Topic Forward */ + 0, /* TS Topci Backward */ + 0, /* Chan SQlines */ + 0, /* Quit on Kill */ + 0, /* SVSMODE unban */ + 1, /* Reverse */ + 1, /* vidents */ + 1, /* svshold */ + 0, /* time stamp on mode */ + 0, /* NICKIP */ + 1, /* O:LINE */ + 1, /* UMODE */ + 1, /* VHOST ON NICK */ + 0, /* Change RealName */ + 1, /* No Knock requires +i */ + 0, /* We support inspircd TOKENS */ + 0, /* TIME STAMPS are BASE64 */ + 0, /* Can remove User Channel Modes with SVSMODE */ + 0, /* Sglines are not enforced until user reconnects */ + 0, /* ts6 */ + 0, /* p10 */ + 1, /* CIDR channelbans */ + "$", /* TLD Prefix for Global */ + 20, /* Max number of modes we can send per line */ } , {NULL} }; - -static int has_servicesmod = 0; -static int has_globopsmod = 0; -static int has_svsholdmod = 0; -static int has_chghostmod = 0; -static int has_chgidentmod = 0; -static int has_messagefloodmod = 0; -static int has_banexceptionmod = 0; -static int has_inviteexceptionmod = 0; -static int has_hidechansmod = 0; - +static bool has_servicesmod = false; +static bool has_globopsmod = false; +static bool has_svsholdmod = false; +static bool has_chghostmod = false; +static bool has_chgidentmod = false; +static bool has_hidechansmod = false; /* CHGHOST */ void inspircd_cmd_chghost(const char *nick, const char *vhost) { - if (has_chghostmod == 1) + if (has_chghostmod) { if (!nick || !vhost) return; @@ -102,9 +95,8 @@ void inspircd_cmd_chghost(const char *nick, const char *vhost) int anope_event_idle(const char *source, int ac, const char **av) { - if (ac == 1) { + if (ac == 1) send_cmd(av[0], "IDLE %s %ld 0", source, static_cast(time(NULL))); - } return MOD_CONT; } @@ -116,7 +108,6 @@ void inspircd_cmd_pass(const char *pass) strlcpy(currentpass, pass, sizeof(currentpass)); } - class InspIRCdProto : public IRCDProto { void SendAkillDel(XLine *x) @@ -137,9 +128,7 @@ class InspIRCdProto : public IRCDProto inspircd_cmd_chghost(u->nick.c_str(), u->host); if (has_chgidentmod && u->GetIdent() != u->GetVIdent()) - { inspircd_cmd_chgident(u->nick.c_str(), u->GetIdent().c_str()); - } } void SendAkill(XLine *x) @@ -173,13 +162,15 @@ class InspIRCdProto : public IRCDProto void SendModeInternal(BotInfo *source, Channel *dest, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(source ? source->nick : Config.s_OperServ, "FMODE %s %u %s", dest->name.c_str(), static_cast(dest->creation_time), buf); } void SendModeInternal(BotInfo *bi, User *u, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(bi ? bi->nick : Config.ServerName, "MODE %s %s", u->nick.c_str(), buf); } @@ -191,13 +182,16 @@ class InspIRCdProto : public IRCDProto void SendKickInternal(BotInfo *source, Channel *chan, User *user, const char *buf) { - if (buf) send_cmd(source->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf); - else send_cmd(source->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), user->nick.c_str()); + if (buf) + send_cmd(source->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), buf); + else + send_cmd(source->nick, "KICK %s %s :%s", chan->name.c_str(), user->nick.c_str(), user->nick.c_str()); } void SendNoticeChanopsInternal(BotInfo *source, Channel *dest, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(Config.ServerName, "NOTICE @%s :%s", dest->name.c_str(), buf); } @@ -228,7 +222,8 @@ class InspIRCdProto : public IRCDProto /* SQUIT */ void SendSquit(const char *servname, const char *message) { - if (!servname || !message) return; + if (!servname || !message) + return; send_cmd(Config.ServerName, "SQUIT %s :%s", servname, message); } @@ -254,14 +249,14 @@ class InspIRCdProto : public IRCDProto /* CHGIDENT */ void inspircd_cmd_chgident(const char *nick, const char *vIdent) { - if (has_chgidentmod == 1) { - if (!nick || !vIdent || !*vIdent) { + if (has_chgidentmod) + { + if (!nick || !vIdent || !*vIdent) return; - } send_cmd(Config.s_OperServ, "CHGIDENT %s %s", nick, vIdent); - } else { - ircdproto->SendGlobops(OperServ, "CHGIDENT not loaded!"); } + else + ircdproto->SendGlobops(OperServ, "CHGIDENT not loaded!"); } /* SVSHOLD - set */ @@ -323,23 +318,17 @@ class InspIRCdProto : public IRCDProto u->SetMode(NickServ, UMODE_REGISTERED); } - } ircd_proto; - - - - - int anope_event_ftopic(const char *source, int ac, const char **av) { /* :source FTOPIC channel ts setby :topic */ const char *temp; if (ac < 4) return MOD_CONT; - temp = av[1]; /* temp now holds ts */ - av[1] = av[2]; /* av[1] now holds set by */ - av[2] = temp; /* av[2] now holds ts */ + temp = av[1]; /* temp now holds ts */ + av[1] = av[2]; /* av[1] now holds set by */ + av[2] = temp; /* av[2] now holds ts */ do_topic(source, ac, av); return MOD_CONT; } @@ -349,18 +338,18 @@ int anope_event_mode(const char *source, int ac, const char **av) if (ac < 2) return MOD_CONT; - if (*av[0] == '#' || *av[0] == '&') { + if (*av[0] == '#' || *av[0] == '&') do_cmode(source, ac, av); - } else { + else + { /* InspIRCd lets opers change another users modes, we have to kludge this as it slightly breaks RFC1459 */ - if (!strcasecmp(source, av[0])) { + if (!strcasecmp(source, av[0])) do_umode(source, ac, av); - } else { + else do_umode(av[0], ac, av); - } } return MOD_CONT; } @@ -371,12 +360,14 @@ int anope_event_opertype(const char *source, int ac, const char **av) dont do this directly */ User *u; u = finduser(source); - if (u && !is_oper(u)) { + if (u && !is_oper(u)) + { const char *newav[2]; newav[0] = source; newav[1] = "+o"; return anope_event_mode(source, 2, newav); - } else + } + else return MOD_CONT; } @@ -391,28 +382,30 @@ int anope_event_fmode(const char *source, int ac, const char **av) return MOD_CONT; /* Checking the TS for validity to avoid desyncs */ - if ((c = findchan(av[0]))) { - if (c->creation_time > strtol(av[1], NULL, 10)) { + if ((c = findchan(av[0]))) + { + if (c->creation_time > strtol(av[1], NULL, 10)) /* Our TS is bigger, we should lower it */ c->creation_time = strtol(av[1], NULL, 10); - } else if (c->creation_time < strtol(av[1], NULL, 10)) { + else if (c->creation_time < strtol(av[1], NULL, 10)) /* The TS we got is bigger, we should ignore this message. */ return MOD_CONT; - } - } else { + } + else /* Got FMODE for a non-existing channel */ return MOD_CONT; - } /* TS's are equal now, so we can proceed with parsing */ n = o = 0; - while (n < ac) { - if (n != 1) { + while (n < ac) + { + if (n != 1) + { newav[o] = av[n]; - o++; + ++o; Alog(LOG_DEBUG) << "Param: " << newav[o - 1]; } - n++; + ++n; } return anope_event_mode(source, ac - 1, newav); @@ -467,7 +460,7 @@ int anope_event_fjoin(const char *source, int ac, const char **av) /* Their TS is newer than ours, our modes > theirs, unset their modes if need be */ else keep_their_modes = false; - + /* Mark the channel as syncing */ if (was_created) c->SetFlag(CH_SYNCING); @@ -512,10 +505,8 @@ int anope_event_fjoin(const char *source, int ac, const char **av) /* Update their status internally on the channel * This will enforce secureops etc on the user */ - for (std::list::iterator it = Status.begin(); it != Status.end(); ++it) - { + for (std::list::iterator it = Status.begin(), it_end = Status.end(); it != it_end; ++it) c->SetModeInternal(*it, buf); - } /* Now set whatever modes this user is allowed to have on the channel */ chan_set_correct_modes(u, c, 1); @@ -567,9 +558,8 @@ int anope_event_436(const char *source, int ac, const char **av) int anope_event_away(const char *source, int ac, const char **av) { - if (!source) { + if (!source) return MOD_CONT; - } m_away(source, (ac ? av[0] : NULL)); return MOD_CONT; } @@ -590,7 +580,8 @@ int anope_event_topic(const char *source, int ac, const char **av) if (check_topiclock(c, topic_time)) return MOD_CONT; - if (c->topic) { + if (c->topic) + { delete [] c->topic; c->topic = NULL; } @@ -602,10 +593,12 @@ int anope_event_topic(const char *source, int ac, const char **av) record_topic(av[0]); - if (ac > 1 && *av[1]) { + if (ac > 1 && *av[1]) + { FOREACH_MOD(I_OnTopicUpdated, OnTopicUpdated(c, av[1])); } - else { + else + { FOREACH_MOD(I_OnTopicUpdated, OnTopicUpdated(c, "")); } @@ -626,7 +619,7 @@ int anope_event_rsquit(const char *source, int ac, const char **av) return MOD_CONT; /* Horrible workaround to an insp bug (#) in how RSQUITs are sent - mark */ - if (ac > 1 && strcmp(Config.ServerName, av[0]) == 0) + if (ac > 1 && !strcmp(Config.ServerName, av[0])) do_squit(source, ac - 1, av + 1); else do_squit(source, ac, av); @@ -642,7 +635,6 @@ int anope_event_quit(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_kill(const char *source, int ac, const char **av) { if (ac != 2) @@ -660,7 +652,6 @@ int anope_event_kick(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_join(const char *source, int ac, const char **av) { if (ac != 2) @@ -671,9 +662,8 @@ int anope_event_join(const char *source, int ac, const char **av) int anope_event_motd(const char *source, int ac, const char **av) { - if (!source) { + if (!source) return MOD_CONT; - } m_motd(source); return MOD_CONT; @@ -776,8 +766,10 @@ int anope_event_nick(const char *source, int ac, const char **av) struct in_addr addy; uint32 *ad = reinterpret_cast(&addy); - if (ac != 1) { - if (ac == 8) { + if (ac != 1) + { + if (ac == 8) + { int ts = strtoul(av[0], NULL, 10); inet_aton(av[6], &addy); @@ -787,7 +779,8 @@ int anope_event_nick(const char *source, int ac, const char **av) source, /* server */ av[7], /* realname */ ts, htonl(*ad), av[3], NULL); - if (user) { + if (user) + { /* InspIRCd1.1 has no user mode +d so we * use nick timestamp to check for auth - Adam */ @@ -797,9 +790,9 @@ int anope_event_nick(const char *source, int ac, const char **av) user->SetCloakedHost(av[3]); } } - } else { - do_nick(source, av[0], NULL, NULL, NULL, NULL, 0, 0, NULL, NULL); } + else + do_nick(source, av[0], NULL, NULL, NULL, NULL, 0, 0, NULL, NULL); return MOD_CONT; } @@ -829,7 +822,6 @@ int anope_event_server(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_privmsg(const char *source, int ac, const char **av) { if (ac != 2) @@ -848,55 +840,40 @@ int anope_event_part(const char *source, int ac, const char **av) int anope_event_whois(const char *source, int ac, const char **av) { - if (source && ac >= 1) { + if (source && ac >= 1) m_whois(source, av[0]); - } return MOD_CONT; } int anope_event_capab(const char *source, int ac, const char **av) { - if (strcasecmp(av[0], "START") == 0) { + if (!strcasecmp(av[0], "START")) + { /* reset CAPAB */ - has_servicesmod = 0; - has_globopsmod = 0; - has_svsholdmod = 0; - has_chghostmod = 0; - has_chgidentmod = 0; - has_messagefloodmod = 0; - has_banexceptionmod = 0; - has_inviteexceptionmod = 0; - has_hidechansmod = 0; - - } else if (strcasecmp(av[0], "MODULES") == 0) { - if (strstr(av[1], "m_globops.so")) { - has_globopsmod = 1; - } - if (strstr(av[1], "m_services.so")) { - has_servicesmod = 1; - } - if (strstr(av[1], "m_svshold.so")) { - has_svsholdmod = 1; - } - if (strstr(av[1], "m_chghost.so")) { - has_chghostmod = 1; - } - if (strstr(av[1], "m_chgident.so")) { - has_chgidentmod = 1; - } - if (strstr(av[1], "m_messageflood.so")) { - has_messagefloodmod = 1; - } - if (strstr(av[1], "m_banexception.so")) { - has_banexceptionmod = 1; - } - if (strstr(av[1], "m_inviteexception.so")) { - has_inviteexceptionmod = 1; - } - if (strstr(av[1], "m_hidechans.so")) { - has_hidechansmod = 1; - } - } else if (strcasecmp(av[0], "CAPABILITIES") == 0) { + has_servicesmod = false; + has_globopsmod = false; + has_svsholdmod = false; + has_chghostmod = false; + has_chgidentmod = false; + has_hidechansmod = false; + } + else if (!strcasecmp(av[0], "MODULES")) + { + if (strstr(av[1], "m_globops.so")) + has_globopsmod = true; + if (strstr(av[1], "m_services.so")) + has_servicesmod = true; + if (strstr(av[1], "m_svshold.so")) + has_svsholdmod = true; + if (strstr(av[1], "m_chghost.so")) + has_chghostmod = true; + if (strstr(av[1], "m_chgident.so")) + has_chgidentmod = true; + if (strstr(av[1], "m_hidechans.so")) + has_hidechansmod = true; + } + else if (!strcasecmp(av[0], "CAPABILITIES")) + { spacesepstream ssep(av[1]); std::string capab; while (ssep.GetToken(capab)) @@ -908,7 +885,7 @@ int anope_event_capab(const char *source, int ac, const char **av) std::string modebuf; sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -927,7 +904,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -941,7 +918,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -960,7 +937,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -1034,7 +1011,7 @@ int anope_event_capab(const char *source, int ac, const char **av) std::string modes(capab.begin() + 8, capab.begin() + capab.find(")")); std::string chars(capab.begin() + capab.find(")") + 1, capab.end()); - for (size_t t = 0; t < modes.size(); ++t) + for (size_t t = 0, end = modes.size(); t < end; ++t) { switch (modes[t]) { @@ -1062,37 +1039,39 @@ int anope_event_capab(const char *source, int ac, const char **av) ircd->maxmodes = atoi(maxmodes.c_str()); } } - } else if (strcasecmp(av[0], "END") == 0) { - if (!has_globopsmod) { + } + else if (!strcasecmp(av[0], "END")) + { + if (!has_globopsmod) + { send_cmd(NULL, "ERROR :m_globops is not loaded. This is required by Anope"); quitmsg = "ERROR: Remote server does not have the m_globops module loaded, and this is required."; quitting = 1; return MOD_STOP; } - if (!has_servicesmod) { + if (!has_servicesmod) + { send_cmd(NULL, "ERROR :m_services is not loaded. This is required by Anope"); quitmsg = "ERROR: Remote server does not have the m_services module loaded, and this is required."; quitting = 1; return MOD_STOP; } - if (!has_hidechansmod) { + if (!has_hidechansmod) + { send_cmd(NULL, "ERROR :m_hidechans.so is not loaded. This is required by Anope"); quitmsg = "ERROR: Remote server deos not have the m_hidechans module loaded, and this is required."; quitting = 1; return MOD_STOP; } - if (!has_svsholdmod) { + if (!has_svsholdmod) ircdproto->SendGlobops(OperServ, "SVSHOLD missing, Usage disabled until module is loaded."); - } - if (!has_chghostmod) { + if (!has_chghostmod) ircdproto->SendGlobops(OperServ, "CHGHOST missing, Usage disabled until module is loaded."); - } - if (!has_chgidentmod) { + if (!has_chgidentmod) ircdproto->SendGlobops(OperServ, "CHGIDENT missing, Usage disabled until module is loaded."); - } ircd->svshold = has_svsholdmod; } - + CapabParse(ac, av); return MOD_CONT; } @@ -1103,7 +1082,6 @@ int anope_event_endburst(const char *source, int ac, const char **av) return MOD_CONT; } - void moduleAddIRCDMsgs() { Anope::AddMessage("ENDBURST", anope_event_endburst); diff --git a/src/protocol/inspircd12.cpp b/src/protocol/inspircd12.cpp index 504bdfc60..76105eba4 100644 --- a/src/protocol/inspircd12.cpp +++ b/src/protocol/inspircd12.cpp @@ -7,8 +7,6 @@ * * Based on the original code of Epona by Lara. * Based on the original code of Services by Andy Church. - * - * */ /*************************************************************************/ @@ -18,13 +16,13 @@ #include "hashcomp.h" #ifndef _WIN32 -#include -#include -#include +# include +# include +# include #endif #ifdef _WIN32 -#include +# include int inet_aton(const char *name, struct in_addr *addr) { uint32 a = inet_addr(name); @@ -34,65 +32,61 @@ int inet_aton(const char *name, struct in_addr *addr) #endif IRCDVar myIrcd[] = { - {"InspIRCd 1.2", /* ircd name */ - "+I", /* Modes used by pseudoclients */ - 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ - 1, /* SVSNICK */ - 1, /* Vhost */ - 0, /* Supports SNlines */ - 1, /* Supports SQlines */ - 1, /* Supports SZlines */ - 4, /* Number of server args */ - 0, /* Join 2 Set */ - 0, /* Join 2 Message */ - 1, /* TS Topic Forward */ - 0, /* TS Topci Backward */ - 0, /* Chan SQlines */ - 0, /* Quit on Kill */ - 0, /* SVSMODE unban */ - 1, /* Reverse */ - 1, /* vidents */ - 1, /* svshold */ - 0, /* time stamp on mode */ - 0, /* NICKIP */ - 0, /* O:LINE */ - 1, /* UMODE */ - 1, /* VHOST ON NICK */ - 0, /* Change RealName */ - 1, /* No Knock requires +i */ - 0, /* We support inspircd TOKENS */ - 0, /* TIME STAMPS are BASE64 */ - 0, /* Can remove User Channel Modes with SVSMODE */ - 0, /* Sglines are not enforced until user reconnects */ - 1, /* ts6 */ - 0, /* p10 */ - 1, /* CIDR channelbans */ - "$", /* TLD Prefix for Global */ - 20, /* Max number of modes we can send per line */ + {"InspIRCd 1.2", /* ircd name */ + "+I", /* Modes used by pseudoclients */ + 5, /* Chan Max Symbols */ + "+ao", /* Channel Umode used by Botserv bots */ + 1, /* SVSNICK */ + 1, /* Vhost */ + 0, /* Supports SNlines */ + 1, /* Supports SQlines */ + 1, /* Supports SZlines */ + 4, /* Number of server args */ + 0, /* Join 2 Set */ + 0, /* Join 2 Message */ + 1, /* TS Topic Forward */ + 0, /* TS Topci Backward */ + 0, /* Chan SQlines */ + 0, /* Quit on Kill */ + 0, /* SVSMODE unban */ + 1, /* Reverse */ + 1, /* vidents */ + 1, /* svshold */ + 0, /* time stamp on mode */ + 0, /* NICKIP */ + 0, /* O:LINE */ + 1, /* UMODE */ + 1, /* VHOST ON NICK */ + 0, /* Change RealName */ + 1, /* No Knock requires +i */ + 0, /* We support inspircd TOKENS */ + 0, /* TIME STAMPS are BASE64 */ + 0, /* Can remove User Channel Modes with SVSMODE */ + 0, /* Sglines are not enforced until user reconnects */ + 1, /* ts6 */ + 0, /* p10 */ + 1, /* CIDR channelbans */ + "$", /* TLD Prefix for Global */ + 20, /* Max number of modes we can send per line */ } , {NULL} }; -static int has_servicesmod = 0; -static int has_globopsmod = 0; -static int has_svsholdmod = 0; -static int has_chghostmod = 0; -static int has_chgidentmod = 0; -static int has_messagefloodmod = 0; -static int has_banexceptionmod = 0; -static int has_inviteexceptionmod = 0; -static int has_hidechansmod = 0; +static bool has_servicesmod = false; +static bool has_globopsmod = false; +static bool has_svsholdmod = false; +static bool has_chghostmod = false; +static bool has_chgidentmod = false; +static bool has_hidechansmod = false; /* Previously introduced user during burst */ static User *prev_u_intro = NULL; - /* CHGHOST */ void inspircd_cmd_chghost(const char *nick, const char *vhost) { - if (has_chghostmod != 1) + if (!has_chghostmod) { ircdproto->SendGlobops(OperServ, "CHGHOST not loaded!"); return; @@ -120,7 +114,6 @@ void inspircd_cmd_pass(const char *pass) strlcpy(currentpass, pass, sizeof(currentpass)); } - class InspIRCdProto : public IRCDProto { void SendAkillDel(XLine *x) @@ -142,9 +135,7 @@ class InspIRCdProto : public IRCDProto inspircd_cmd_chghost(u->nick.c_str(), u->host); if (has_chgidentmod && u->GetIdent() != u->GetVIdent()) - { inspircd_cmd_chgident(u->nick.c_str(), u->GetIdent().c_str()); - } } void SendAkill(XLine *x) @@ -184,7 +175,8 @@ class InspIRCdProto : public IRCDProto void SendModeInternal(BotInfo *bi, User *u, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(bi ? bi->GetUID() : TS6SID, "MODE %s %s", u->GetUID().c_str(), buf); } @@ -258,10 +250,8 @@ class InspIRCdProto : public IRCDProto /* CHGIDENT */ void inspircd_cmd_chgident(const char *nick, const char *vIdent) { - if (has_chgidentmod == 0) - { + if (!has_chgidentmod) ircdproto->SendGlobops(OperServ, "CHGIDENT not loaded!"); - } else { BotInfo *bi = OperServ; @@ -360,23 +350,17 @@ class InspIRCdProto : public IRCDProto u->SetMode(NickServ, UMODE_REGISTERED); } - } ircd_proto; - - - - - int anope_event_ftopic(const char *source, int ac, const char **av) { /* :source FTOPIC channel ts setby :topic */ const char *temp; if (ac < 4) return MOD_CONT; - temp = av[1]; /* temp now holds ts */ - av[1] = av[2]; /* av[1] now holds set by */ - av[2] = temp; /* av[2] now holds ts */ + temp = av[1]; /* temp now holds ts */ + av[1] = av[2]; /* av[1] now holds set by */ + av[2] = temp; /* av[2] now holds ts */ do_topic(source, ac, av); return MOD_CONT; } @@ -384,9 +368,7 @@ int anope_event_ftopic(const char *source, int ac, const char **av) int anope_event_mode(const char *source, int ac, const char **av) { if (*av[0] == '#' || *av[0] == '&') - { do_cmode(source, ac, av); - } else { /* InspIRCd lets opers change another @@ -397,7 +379,7 @@ int anope_event_mode(const char *source, int ac, const char **av) User *u2 = finduser(av[0]); // This can happen with server-origin modes. - if (u == NULL) + if (!u) u = u2; // if it's still null, drop it like fire. @@ -417,12 +399,14 @@ int anope_event_opertype(const char *source, int ac, const char **av) dont do this directly */ User *u; u = finduser(source); - if (u && !is_oper(u)) { + if (u && !is_oper(u)) + { const char *newav[2]; newav[0] = source; newav[1] = "+o"; return anope_event_mode(source, 2, newav); - } else + } + else return MOD_CONT; } @@ -437,28 +421,30 @@ int anope_event_fmode(const char *source, int ac, const char **av) return MOD_CONT; /* Checking the TS for validity to avoid desyncs */ - if ((c = findchan(av[0]))) { - if (c->creation_time > strtol(av[1], NULL, 10)) { + if ((c = findchan(av[0]))) + { + if (c->creation_time > strtol(av[1], NULL, 10)) /* Our TS is bigger, we should lower it */ c->creation_time = strtol(av[1], NULL, 10); - } else if (c->creation_time < strtol(av[1], NULL, 10)) { + else if (c->creation_time < strtol(av[1], NULL, 10)) /* The TS we got is bigger, we should ignore this message. */ return MOD_CONT; - } - } else { + } + else /* Got FMODE for a non-existing channel */ return MOD_CONT; - } /* TS's are equal now, so we can proceed with parsing */ n = o = 0; - while (n < ac) { - if (n != 1) { + while (n < ac) + { + if (n != 1) + { newav[o] = av[n]; - o++; + ++o; Alog(LOG_DEBUG) << "Param: " << newav[o - 1]; } - n++; + ++n; } return anope_event_mode(source, ac - 1, newav); @@ -521,11 +507,11 @@ int anope_event_fjoin(const char *source, int ac, const char **av) /* Their TS is newer than ours, our modes > theirs, unset their modes if need be */ else keep_their_modes = false; - + /* Mark the channel as syncing */ if (was_created) c->SetFlag(CH_SYNCING); - + /* If we need to keep their modes, and this FJOIN string contains modes */ if (keep_their_modes && ac >= 4) { @@ -572,10 +558,8 @@ int anope_event_fjoin(const char *source, int ac, const char **av) /* Update their status internally on the channel * This will enforce secureops etc on the user */ - for (std::list::iterator it = Status.begin(); it != Status.end(); ++it) - { + for (std::list::iterator it = Status.begin(), it_end = Status.end(); it != it_end; ++it) c->SetModeInternal(*it, buf); - } /* Now set whatever modes this user is allowed to have on the channel */ chan_set_correct_modes(u, c, 1); @@ -603,7 +587,7 @@ int anope_event_fjoin(const char *source, int ac, const char **av) * and destroy the channel soon */ } - + return MOD_CONT; } @@ -659,7 +643,8 @@ int anope_event_topic(const char *source, int ac, const char **av) if (check_topiclock(c, topic_time)) return MOD_CONT; - if (c->topic) { + if (c->topic) + { delete [] c->topic; c->topic = NULL; } @@ -671,10 +656,12 @@ int anope_event_topic(const char *source, int ac, const char **av) record_topic(av[0]); - if (ac > 1 && *av[1]) { + if (ac > 1 && *av[1]) + { FOREACH_MOD(I_OnTopicUpdated, OnTopicUpdated(c, av[0])); } - else { + else + { FOREACH_MOD(I_OnTopicUpdated, OnTopicUpdated(c, "")); } @@ -692,9 +679,7 @@ int anope_event_rsquit(const char *source, int ac, const char **av) /* On InspIRCd we must send a SQUIT when we recieve RSQUIT for a server we have juped */ Server *s = Server::Find(av[0]); if (s && s->HasFlag(SERVER_JUPED)) - { send_cmd(TS6SID, "SQUIT %s :%s", s->GetSID().c_str(), ac > 1 ? av[1] : ""); - } do_squit(source, ac, av); @@ -707,7 +692,6 @@ int anope_event_quit(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_kill(const char *source, int ac, const char **av) { User *u = finduser(av[0]); @@ -722,7 +706,6 @@ int anope_event_kick(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_join(const char *source, int ac, const char **av) { do_join(source, ac, av); @@ -810,14 +793,12 @@ int anope_event_sethost(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_nick(const char *source, int ac, const char **av) { do_nick(source, av[0], NULL, NULL, NULL, NULL, 0, 0, NULL, NULL); return MOD_CONT; } - /* * [Nov 03 22:09:58.176252 2009] debug: Received: :964 UID 964AAAAAC 1225746297 w00t2 localhost testnet.user w00t 127.0.0.1 1225746302 +iosw +ACGJKLNOQcdfgjklnoqtx :Robin Burchell * 0: uid @@ -830,7 +811,7 @@ int anope_event_nick(const char *source, int ac, const char **av) * 7: signon * 8+: modes and params -- IMPORTANT, some modes (e.g. +s) may have parameters. So don't assume a fixed position of realname! * last: realname -*/ + */ int anope_event_uid(const char *source, int ac, const char **av) { @@ -866,13 +847,9 @@ int anope_event_uid(const char *source, int ac, const char **av) UserSetInternalModes(user, 1, &av[8]); user->SetCloakedHost(av[4]); if (!user->server->IsSynced()) - { prev_u_intro = user; - } else - { validate_user(user); - } } return MOD_CONT; @@ -907,7 +884,6 @@ int anope_event_server(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_privmsg(const char *source, int ac, const char **av) { if (!finduser(source)) @@ -949,50 +925,35 @@ int anope_event_metadata(const char *source, int ac, const char **av) int anope_event_capab(const char *source, int ac, const char **av) { - if (strcasecmp(av[0], "START") == 0) { + if (!strcasecmp(av[0], "START")) + { /* reset CAPAB */ - has_servicesmod = 0; - has_globopsmod = 0; - has_svsholdmod = 0; - has_chghostmod = 0; - has_chgidentmod = 0; - has_messagefloodmod = 0; - has_banexceptionmod = 0; - has_inviteexceptionmod = 0; - has_hidechansmod = 0; - - } else if (strcasecmp(av[0], "MODULES") == 0) { - if (strstr(av[1], "m_globops.so")) { - has_globopsmod = 1; - } - if (strstr(av[1], "m_services_account.so")) { - has_servicesmod = 1; - } - if (strstr(av[1], "m_svshold.so")) { - has_svsholdmod = 1; - } - if (strstr(av[1], "m_chghost.so")) { - has_chghostmod = 1; - } - if (strstr(av[1], "m_chgident.so")) { - has_chgidentmod = 1; - } - if (strstr(av[1], "m_messageflood.so")) { - has_messagefloodmod = 1; - } - if (strstr(av[1], "m_banexception.so")) { - has_banexceptionmod = 1; - } - if (strstr(av[1], "m_inviteexception.so")) { - has_inviteexceptionmod = 1; - } - if (strstr(av[1], "m_hidechans.so")) { - has_hidechansmod = 1; - } - if (strstr(av[1], "m_servprotect.so")) { + has_servicesmod = false; + has_globopsmod = false; + has_svsholdmod = false; + has_chghostmod = false; + has_chgidentmod = false; + has_hidechansmod = false; + } + else if (!strcasecmp(av[0], "MODULES")) + { + if (strstr(av[1], "m_globops.so")) + has_globopsmod = true; + if (strstr(av[1], "m_services_account.so")) + has_servicesmod = true; + if (strstr(av[1], "m_svshold.so")) + has_svsholdmod = true; + if (strstr(av[1], "m_chghost.so")) + has_chghostmod = true; + if (strstr(av[1], "m_chgident.so")) + has_chgidentmod = true; + if (strstr(av[1], "m_hidechans.so")) + has_hidechansmod = true; + if (strstr(av[1], "m_servprotect.so")) ircd->pseudoclient_mode = "+Ik"; - } - } else if (strcasecmp(av[0], "CAPABILITIES") == 0) { + } + else if (!strcasecmp(av[0], "CAPABILITIES")) + { spacesepstream ssep(av[1]); std::string capab; while (ssep.GetToken(capab)) @@ -1004,7 +965,7 @@ int anope_event_capab(const char *source, int ac, const char **av) std::string modebuf; sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -1031,7 +992,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -1044,7 +1005,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -1072,7 +1033,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -1161,7 +1122,7 @@ int anope_event_capab(const char *source, int ac, const char **av) while (sep.GetToken(modebuf)) { - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { switch (modebuf[t]) { @@ -1229,8 +1190,8 @@ int anope_event_capab(const char *source, int ac, const char **av) { std::string modes(capab.begin() + 8, capab.begin() + capab.find(")")); std::string chars(capab.begin() + capab.find(")") + 1, capab.end()); - - for (size_t t = 0; t < modes.size(); ++t) + + for (size_t t = 0, end = modes.size(); t < end; ++t) { switch (modes[t]) { @@ -1258,34 +1219,36 @@ int anope_event_capab(const char *source, int ac, const char **av) ircd->maxmodes = atoi(maxmodes.c_str()); } } - } else if (strcasecmp(av[0], "END") == 0) { - if (!has_globopsmod) { + } + else if (!strcasecmp(av[0], "END")) + { + if (!has_globopsmod) + { send_cmd(NULL, "ERROR :m_globops is not loaded. This is required by Anope"); quitmsg = "Remote server does not have the m_globops module loaded, and this is required."; quitting = 1; return MOD_STOP; } - if (!has_servicesmod) { + if (!has_servicesmod) + { send_cmd(NULL, "ERROR :m_services_account.so is not loaded. This is required by Anope"); quitmsg = "ERROR: Remote server does not have the m_services_account module loaded, and this is required."; quitting = 1; return MOD_STOP; } - if (!has_hidechansmod) { + if (!has_hidechansmod) + { send_cmd(NULL, "ERROR :m_hidechans.so is not loaded. This is required by Anope"); quitmsg = "ERROR: Remote server does not have the m_hidechans module loaded, and this is required."; quitting = 1; return MOD_STOP; } - if (!has_svsholdmod) { + if (!has_svsholdmod) ircdproto->SendGlobops(OperServ, "SVSHOLD missing, Usage disabled until module is loaded."); - } - if (!has_chghostmod) { + if (!has_chghostmod) ircdproto->SendGlobops(OperServ, "CHGHOST missing, Usage disabled until module is loaded."); - } - if (!has_chgidentmod) { + if (!has_chgidentmod) ircdproto->SendGlobops(OperServ, "CHGIDENT missing, Usage disabled until module is loaded."); - } ircd->svshold = has_svsholdmod; } @@ -1301,14 +1264,13 @@ int anope_event_endburst(const char *source, int ac, const char **av) Server *s = Server::Find(source ? source : ""); if (!s) - { throw new CoreException("Got ENDBURST without a source"); - } /* Check if the previously introduced user was Id'd for the nickgroup of the nick he s currently using. * If not, validate the user. ~ Viper*/ prev_u_intro = NULL; - if (u) na = findnick(u->nick); + if (u) + na = findnick(u->nick); if (u && !u->server->IsSynced() && (!na || na->nc != u->Account())) { validate_user(u); @@ -1363,7 +1325,8 @@ void moduleAddIRCDMsgs() bool ChannelModeFlood::IsValid(const std::string &value) { char *dp, *end; - if (!value.empty() && value[0] != ':' && strtoul((value[0] == '*' ? value.c_str() + 1 : value.c_str()), &dp, 10) > 0 && *dp == ':' && *(++dp) && strtoul(dp, &end, 10) > 0 && !*end) return 1; + if (!value.empty() && value[0] != ':' && strtoul((value[0] == '*' ? value.c_str() + 1 : value.c_str()), &dp, 10) > 0 && *dp == ':' && *(++dp) && strtoul(dp, &end, 10) > 0 && !*end) + return 1; else return 0; } diff --git a/src/protocol/inspircd20.cpp b/src/protocol/inspircd20.cpp index 9b1d57789..48c0d6d4b 100644 --- a/src/protocol/inspircd20.cpp +++ b/src/protocol/inspircd20.cpp @@ -7,8 +7,6 @@ * * Based on the original code of Epona by Lara. * Based on the original code of Services by Andy Church. - * - * */ /*************************************************************************/ @@ -18,13 +16,13 @@ #include "hashcomp.h" #ifndef _WIN32 -#include -#include -#include +# include +# include +# include #endif #ifdef _WIN32 -#include +# include int inet_aton(const char *name, struct in_addr *addr) { uint32 a = inet_addr(name); @@ -34,51 +32,51 @@ int inet_aton(const char *name, struct in_addr *addr) #endif IRCDVar myIrcd[] = { - {"InspIRCd 2.0", /* ircd name */ - "+I", /* Modes used by pseudoclients */ - 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ - 1, /* SVSNICK */ - 1, /* Vhost */ - 0, /* Supports SNlines */ - 1, /* Supports SQlines */ - 1, /* Supports SZlines */ - 4, /* Number of server args */ - 0, /* Join 2 Set */ - 0, /* Join 2 Message */ - 1, /* TS Topic Forward */ - 0, /* TS Topci Backward */ - 0, /* Chan SQlines */ - 0, /* Quit on Kill */ - 0, /* SVSMODE unban */ - 1, /* Reverse */ - 1, /* vidents */ - 1, /* svshold */ - 0, /* time stamp on mode */ - 0, /* NICKIP */ - 0, /* O:LINE */ - 1, /* UMODE */ - 1, /* VHOST ON NICK */ - 0, /* Change RealName */ - 1, /* No Knock requires +i */ - 0, /* We support inspircd TOKENS */ - 0, /* TIME STAMPS are BASE64 */ - 0, /* Can remove User Channel Modes with SVSMODE */ - 0, /* Sglines are not enforced until user reconnects */ - 1, /* ts6 */ - 0, /* p10 */ - 1, /* CIDR channelbans */ - "$", /* TLD Prefix for Global */ - 20, /* Max number of modes we can send per line */ + {"InspIRCd 2.0", /* ircd name */ + "+I", /* Modes used by pseudoclients */ + 5, /* Chan Max Symbols */ + "+ao", /* Channel Umode used by Botserv bots */ + 1, /* SVSNICK */ + 1, /* Vhost */ + 0, /* Supports SNlines */ + 1, /* Supports SQlines */ + 1, /* Supports SZlines */ + 4, /* Number of server args */ + 0, /* Join 2 Set */ + 0, /* Join 2 Message */ + 1, /* TS Topic Forward */ + 0, /* TS Topci Backward */ + 0, /* Chan SQlines */ + 0, /* Quit on Kill */ + 0, /* SVSMODE unban */ + 1, /* Reverse */ + 1, /* vidents */ + 1, /* svshold */ + 0, /* time stamp on mode */ + 0, /* NICKIP */ + 0, /* O:LINE */ + 1, /* UMODE */ + 1, /* VHOST ON NICK */ + 0, /* Change RealName */ + 1, /* No Knock requires +i */ + 0, /* We support inspircd TOKENS */ + 0, /* TIME STAMPS are BASE64 */ + 0, /* Can remove User Channel Modes with SVSMODE */ + 0, /* Sglines are not enforced until user reconnects */ + 1, /* ts6 */ + 0, /* p10 */ + 1, /* CIDR channelbans */ + "$", /* TLD Prefix for Global */ + 20, /* Max number of modes we can send per line */ } , {NULL} }; -static int has_servicesmod = 0; -static int has_svsholdmod = 0; -static int has_chghostmod = 0; -static int has_chgidentmod = 0; +static bool has_servicesmod = false; +static bool has_svsholdmod = false; +static bool has_chghostmod = false; +static bool has_chgidentmod = false; /* Previously introduced user during burst */ static User *prev_u_intro = NULL; @@ -86,7 +84,7 @@ static User *prev_u_intro = NULL; /* CHGHOST */ void inspircd_cmd_chghost(const char *nick, const char *vhost) { - if (has_chghostmod != 1) + if (!has_chghostmod) { ircdproto->SendGlobops(OperServ, "CHGHOST not loaded!"); return; @@ -114,7 +112,6 @@ void inspircd_cmd_pass(const char *pass) strlcpy(currentpass, pass, sizeof(currentpass)); } - class InspIRCdProto : public IRCDProto { void SendAkillDel(XLine *x) @@ -136,9 +133,7 @@ class InspIRCdProto : public IRCDProto inspircd_cmd_chghost(u->nick.c_str(), u->host); if (has_chgidentmod && u->GetIdent() != u->GetVIdent()) - { inspircd_cmd_chgident(u->nick.c_str(), u->GetIdent().c_str()); - } } void SendAkill(XLine *x) @@ -178,7 +173,8 @@ class InspIRCdProto : public IRCDProto void SendModeInternal(BotInfo *bi, User *u, const char *buf) { - if (!buf) return; + if (!buf) + return; send_cmd(bi ? bi->GetUID() : TS6SID, "MODE %s %s", u->GetUID().c_str(), buf); } @@ -255,10 +251,8 @@ class InspIRCdProto : public IRCDProto /* CHGIDENT */ void inspircd_cmd_chgident(const char *nick, const char *vIdent) { - if (has_chgidentmod == 0) - { + if (!has_chgidentmod) ircdproto->SendGlobops(OperServ, "CHGIDENT not loaded!"); - } else { BotInfo *bi = OperServ; @@ -354,23 +348,17 @@ class InspIRCdProto : public IRCDProto u->SetMode(NickServ, UMODE_REGISTERED); } - } ircd_proto; - - - - - int anope_event_ftopic(const char *source, int ac, const char **av) { /* :source FTOPIC channel ts setby :topic */ const char *temp; if (ac < 4) return MOD_CONT; - temp = av[1]; /* temp now holds ts */ - av[1] = av[2]; /* av[1] now holds set by */ - av[2] = temp; /* av[2] now holds ts */ + temp = av[1]; /* temp now holds ts */ + av[1] = av[2]; /* av[1] now holds set by */ + av[2] = temp; /* av[2] now holds ts */ do_topic(source, ac, av); return MOD_CONT; } @@ -378,9 +366,7 @@ int anope_event_ftopic(const char *source, int ac, const char **av) int anope_event_mode(const char *source, int ac, const char **av) { if (*av[0] == '#' || *av[0] == '&') - { do_cmode(source, ac, av); - } else { /* InspIRCd lets opers change another @@ -391,7 +377,7 @@ int anope_event_mode(const char *source, int ac, const char **av) User *u2 = finduser(av[0]); // This can happen with server-origin modes. - if (u == NULL) + if (!u) u = u2; // if it's still null, drop it like fire. @@ -411,12 +397,14 @@ int anope_event_opertype(const char *source, int ac, const char **av) dont do this directly */ User *u; u = finduser(source); - if (u && !is_oper(u)) { + if (u && !is_oper(u)) + { const char *newav[2]; newav[0] = source; newav[1] = "+o"; return anope_event_mode(source, 2, newav); - } else + } + else return MOD_CONT; } @@ -431,28 +419,30 @@ int anope_event_fmode(const char *source, int ac, const char **av) return MOD_CONT; /* Checking the TS for validity to avoid desyncs */ - if ((c = findchan(av[0]))) { - if (c->creation_time > strtol(av[1], NULL, 10)) { + if ((c = findchan(av[0]))) + { + if (c->creation_time > strtol(av[1], NULL, 10)) /* Our TS is bigger, we should lower it */ c->creation_time = strtol(av[1], NULL, 10); - } else if (c->creation_time < strtol(av[1], NULL, 10)) { + else if (c->creation_time < strtol(av[1], NULL, 10)) /* The TS we got is bigger, we should ignore this message. */ return MOD_CONT; - } - } else { + } + else /* Got FMODE for a non-existing channel */ return MOD_CONT; - } /* TS's are equal now, so we can proceed with parsing */ n = o = 0; - while (n < ac) { - if (n != 1) { + while (n < ac) + { + if (n != 1) + { newav[o] = av[n]; - o++; + ++o; Alog(LOG_DEBUG) << "Param: " << newav[o - 1]; } - n++; + ++n; } return anope_event_mode(source, ac - 1, newav); @@ -515,11 +505,11 @@ int anope_event_fjoin(const char *source, int ac, const char **av) /* Their TS is newer than ours, our modes > theirs, unset their modes if need be */ else keep_their_modes = false; - + /* Mark the channel as syncing */ if (was_created) c->SetFlag(CH_SYNCING); - + /* If we need to keep their modes, and this FJOIN string contains modes */ if (keep_their_modes && ac >= 4) { @@ -566,10 +556,8 @@ int anope_event_fjoin(const char *source, int ac, const char **av) /* Update their status internally on the channel * This will enforce secureops etc on the user */ - for (std::list::iterator it = Status.begin(); it != Status.end(); ++it) - { + for (std::list::iterator it = Status.begin(), it_end = Status.end(); it != it_end; ++it) c->SetModeInternal(*it, buf); - } /* Now set whatever modes this user is allowed to have on the channel */ chan_set_correct_modes(u, c, 1); @@ -597,7 +585,7 @@ int anope_event_fjoin(const char *source, int ac, const char **av) * and destroy the channel soon */ } - + return MOD_CONT; } @@ -653,7 +641,8 @@ int anope_event_topic(const char *source, int ac, const char **av) if (check_topiclock(c, topic_time)) return MOD_CONT; - if (c->topic) { + if (c->topic) + { delete [] c->topic; c->topic = NULL; } @@ -665,10 +654,12 @@ int anope_event_topic(const char *source, int ac, const char **av) record_topic(av[0]); - if (ac > 1 && *av[1]) { + if (ac > 1 && *av[1]) + { FOREACH_MOD(I_OnTopicUpdated, OnTopicUpdated(c, av[0])); } - else { + else + { FOREACH_MOD(I_OnTopicUpdated, OnTopicUpdated(c, "")); } @@ -686,9 +677,7 @@ int anope_event_rsquit(const char *source, int ac, const char **av) /* On InspIRCd we must send a SQUIT when we recieve RSQUIT for a server we have juped */ Server *s = Server::Find(av[0]); if (s && s->HasFlag(SERVER_JUPED)) - { send_cmd(TS6SID, "SQUIT %s :%s", s->GetSID().c_str(), ac > 1 ? av[1] : ""); - } do_squit(source, ac, av); @@ -701,7 +690,6 @@ int anope_event_quit(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_kill(const char *source, int ac, const char **av) { User *u = finduser(av[0]); @@ -716,7 +704,6 @@ int anope_event_kick(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_join(const char *source, int ac, const char **av) { do_join(source, ac, av); @@ -803,14 +790,12 @@ int anope_event_sethost(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_nick(const char *source, int ac, const char **av) { do_nick(source, av[0], NULL, NULL, NULL, NULL, 0, 0, NULL, NULL); return MOD_CONT; } - /* * [Nov 03 22:09:58.176252 2009] debug: Received: :964 UID 964AAAAAC 1225746297 w00t2 localhost testnet.user w00t 127.0.0.1 1225746302 +iosw +ACGJKLNOQcdfgjklnoqtx :Robin Burchell * 0: uid @@ -823,7 +808,7 @@ int anope_event_nick(const char *source, int ac, const char **av) * 7: signon * 8+: modes and params -- IMPORTANT, some modes (e.g. +s) may have parameters. So don't assume a fixed position of realname! * last: realname -*/ + */ int anope_event_uid(const char *source, int ac, const char **av) { @@ -838,7 +823,8 @@ int anope_event_uid(const char *source, int ac, const char **av) * If not, validate the user. ~ Viper*/ user = prev_u_intro; prev_u_intro = NULL; - if (user) na = findnick(user->nick); + if (user) + na = findnick(user->nick); if (user && !user->server->IsSynced() && (!na || na->nc != user->Account())) { validate_user(user); @@ -859,13 +845,9 @@ int anope_event_uid(const char *source, int ac, const char **av) UserSetInternalModes(user, 1, &av[8]); user->SetCloakedHost(av[4]); if (!user->server->IsSynced()) - { prev_u_intro = user; - } else - { validate_user(user); - } } return MOD_CONT; @@ -900,7 +882,6 @@ int anope_event_server(const char *source, int ac, const char **av) return MOD_CONT; } - int anope_event_privmsg(const char *source, int ac, const char **av) { if (!finduser(source)) @@ -942,7 +923,7 @@ int anope_event_metadata(const char *source, int ac, const char **av) int anope_event_capab(const char *source, int ac, const char **av) { - if (strcasecmp(av[0], "START") == 0) + if (!strcasecmp(av[0], "START")) { if (ac < 2 || atoi(av[1]) < 1202) { @@ -953,12 +934,12 @@ int anope_event_capab(const char *source, int ac, const char **av) } /* reset CAPAB */ - has_servicesmod = 0; - has_svsholdmod = 0; - has_chghostmod = 0; - has_chgidentmod = 0; + has_servicesmod = false; + has_svsholdmod = false; + has_chghostmod = false; + has_chgidentmod = false; } - else if (strcasecmp(av[0], "CHANMODES") == 0) + else if (!strcasecmp(av[0], "CHANMODES")) { spacesepstream ssep(av[1]); std::string capab; @@ -1065,14 +1046,14 @@ int anope_event_capab(const char *source, int ac, const char **av) cm = new ChannelMode(CMODE_TOPIC, "CMODE_TOPIC", modechar[0]); else if (modename == "voice") cm = new ChannelModeStatus(CMODE_VOICE, "CMODE_VOICE", modechar[1], modechar[0]); - + if (cm) ModeManager::AddChannelMode(cm); else Alog() << "Unrecognized mode string in CAPAB CHANMODES: " << capab; } } - else if (strcasecmp(av[0], "USERMODES") == 0) + else if (!strcasecmp(av[0], "USERMODES")) { spacesepstream ssep(av[1]); std::string capab; @@ -1126,18 +1107,16 @@ int anope_event_capab(const char *source, int ac, const char **av) Alog() << "Unrecognized mode string in CAPAB USERMODES: " << capab; } } - else if (strcasecmp(av[0], "MODULES") == 0) + else if (!strcasecmp(av[0], "MODULES")) { spacesepstream ssep(av[1]); std::string module; while (ssep.GetToken(module)) - { if (module == "m_svshold.so") - has_svsholdmod = 1; - } + has_svsholdmod = true; } - else if (strcasecmp(av[0], "MODSUPPORT") == 0) + else if (!strcasecmp(av[0], "MODSUPPORT")) { spacesepstream ssep(av[1]); std::string module; @@ -1145,16 +1124,16 @@ int anope_event_capab(const char *source, int ac, const char **av) while (ssep.GetToken(module)) { if (module == "m_services_account.so") - has_servicesmod = 1; + has_servicesmod = true; else if (module == "m_chghost.so") - has_chghostmod = 1; + has_chghostmod = true; else if (module == "m_chgident.so") - has_chgidentmod = 1; + has_chgidentmod = true; else if (module == "m_servprotect.so") ircd->pseudoclient_mode = "+Ik"; } } - else if (strcasecmp(av[0], "CAPABILITIES") == 0) + else if (!strcasecmp(av[0], "CAPABILITIES")) { spacesepstream ssep(av[1]); std::string capab; @@ -1167,7 +1146,7 @@ int anope_event_capab(const char *source, int ac, const char **av) std::string modebuf; sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); ++t) + for (size_t t = 0, end = modebuf.size(); t < end; ++t) { if (ModeManager::FindChannelModeByChar(modebuf[t])) continue; @@ -1176,7 +1155,7 @@ int anope_event_capab(const char *source, int ac, const char **av) } sep.GetToken(modebuf); - for (size_t t = 0; t < modebuf.size(); +