diff options
| author | Naram Qashat <cyberbotx@cyberbotx.com> | 2010-06-29 08:21:20 -0400 |
|---|---|---|
| committer | Naram Qashat <cyberbotx@cyberbotx.com> | 2010-06-29 08:21:20 -0400 |
| commit | de1bf10690570477f5d8cd126b30f81300c1376a (patch) | |
| tree | 4284e193477cb203b418fb44ccd8c2f69aefb252 /src/protocol/inspircd12.cpp | |
| parent | 950cfcd31e4f05d63b24fbce391a69a5f0b59dec (diff) | |
Missed OCDing over src/protocol/*, plus fixed a minor lack of braces and fixed Config to work in an out-of-source build.
Diffstat (limited to 'src/protocol/inspircd12.cpp')
| -rw-r--r-- | src/protocol/inspircd12.cpp | 299 |
1 files changed, 131 insertions, 168 deletions
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 <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> +# include <sys/socket.h> +# include <netinet/in.h> +# include <arpa/inet.h> #endif #ifdef _WIN32 -#include <winsock.h> +# include <winsock.h> 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<ChannelMode *>::iterator it = Status.begin(); it != Status.end(); ++it) - { + for (std::list<ChannelMode *>::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 <w00t@inspircd.org> * 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; } |
