diff options
-rw-r--r-- | include/protocol.h | 2 | ||||
-rw-r--r-- | modules/commands/ns_register.cpp | 11 | ||||
-rw-r--r-- | modules/protocol/bahamut.cpp | 2 | ||||
-rw-r--r-- | modules/protocol/charybdis.cpp | 15 | ||||
-rw-r--r-- | modules/protocol/hybrid.cpp | 4 | ||||
-rw-r--r-- | modules/protocol/inspircd12.cpp | 7 | ||||
-rw-r--r-- | modules/protocol/inspircd20.cpp | 2 | ||||
-rw-r--r-- | modules/protocol/ngircd.cpp | 4 | ||||
-rw-r--r-- | modules/protocol/plexus.cpp | 7 | ||||
-rw-r--r-- | modules/protocol/ratbox.cpp | 6 | ||||
-rw-r--r-- | modules/protocol/unreal.cpp | 7 | ||||
-rw-r--r-- | modules/pseudoclients/nickserv.cpp | 2 | ||||
-rw-r--r-- | src/users.cpp | 2 |
13 files changed, 29 insertions, 42 deletions
diff --git a/include/protocol.h b/include/protocol.h index f05eae6ab..9eee494ea 100644 --- a/include/protocol.h +++ b/include/protocol.h @@ -204,7 +204,7 @@ class CoreExport IRCDProto : public Service virtual void SendNumeric(int numeric, const Anope::string &dest, const char *fmt, ...); - virtual void SendLogin(User *u) = 0; + virtual void SendLogin(User *u, NickAlias *na) = 0; virtual void SendLogout(User *u) = 0; /** Send a channel creation message to the uplink. diff --git a/modules/commands/ns_register.cpp b/modules/commands/ns_register.cpp index 8020dd3f0..434e7d690 100644 --- a/modules/commands/ns_register.cpp +++ b/modules/commands/ns_register.cpp @@ -54,10 +54,13 @@ class CommandNSConfirm : public Command if (source.GetUser()) { - IRCD->SendLogin(source.GetUser()); - const NickAlias *na = NickAlias::Find(source.GetNick()); - if (!Config->GetModule("nickserv")->Get<bool>("nonicknameownership") && na != NULL && na->nc == source.GetAccount() && !na->nc->HasExt("UNCONFIRMED")) - source.GetUser()->SetMode(source.service, "REGISTERED"); + NickAlias *na = NickAlias::Find(source.GetNick()); + if (na) + { + IRCD->SendLogin(source.GetUser(), na); + if (!Config->GetModule("nickserv")->Get<bool>("nonicknameownership") && na->nc == source.GetAccount() && !na->nc->HasExt("UNCONFIRMED")) + source.GetUser()->SetMode(source.service, "REGISTERED"); + } } } else diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp index 04bcbeb10..80f4c4827 100644 --- a/modules/protocol/bahamut.cpp +++ b/modules/protocol/bahamut.cpp @@ -282,7 +282,7 @@ class BahamutIRCdProto : public IRCDProto UplinkSocket::Message() << "SJOIN " << c->creation_time << " " << c->name << " " << modes << " :"; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *) anope_override { IRCD->SendMode(Config->GetClient("NickServ"), u, "+d %d", u->signon); } diff --git a/modules/protocol/charybdis.cpp b/modules/protocol/charybdis.cpp index 3cfb5a09a..bdf6d014b 100644 --- a/modules/protocol/charybdis.cpp +++ b/modules/protocol/charybdis.cpp @@ -60,6 +60,8 @@ class CharybdisProto : public IRCDProto void SendChannel(Channel *c) anope_override { ratbox->SendChannel(c); } void SendTopic(const MessageSource &source, Channel *c) anope_override { ratbox->SendTopic(source, c); } bool IsIdentValid(const Anope::string &ident) anope_override { return ratbox->IsIdentValid(ident); } + void SendLogin(User *u, NickAlias *na) anope_override { ratbox->SendLogin(u, na); } + void SendLogout(User *u) anope_override { ratbox->SendLogout(u); } void SendSQLine(User *, const XLine *x) anope_override { @@ -113,19 +115,6 @@ class CharybdisProto : public IRCDProto UplinkSocket::Message(Me) << "EUID " << u->nick << " 1 " << u->timestamp << " " << modes << " " << u->GetIdent() << " " << u->host << " 0 " << u->GetUID() << " * * :" << u->realname; } - void SendLogin(User *u) anope_override - { - if (!u->Account()) - return; - - UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID() << " " << u->Account()->display; - } - - void SendLogout(User *u) anope_override - { - UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID(); - } - void SendForceNickChange(User *u, const Anope::string &newnick, time_t when) anope_override { UplinkSocket::Message(Me) << "ENCAP " << u->server->GetName() << " RSFNC " << u->GetUID() diff --git a/modules/protocol/hybrid.cpp b/modules/protocol/hybrid.cpp index ab5777b86..708e66849 100644 --- a/modules/protocol/hybrid.cpp +++ b/modules/protocol/hybrid.cpp @@ -211,9 +211,9 @@ class HybridProto : public IRCDProto UplinkSocket::Message(source) << "SVSMODE " << u->GetUID() << " " << u->timestamp << " " << buf; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *na) anope_override { - IRCD->SendMode(Config->GetClient("NickServ"), u, "+d %s", u->Account()->display.c_str()); + IRCD->SendMode(Config->GetClient("NickServ"), u, "+d %s", na->nc->display.c_str()); } void SendLogout(User *u) anope_override diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp index eee028d2f..45a00e400 100644 --- a/modules/protocol/inspircd12.cpp +++ b/modules/protocol/inspircd12.cpp @@ -375,12 +375,13 @@ class InspIRCd12Proto : public IRCDProto UplinkSocket::Message(source) << "SNONOTICE A :" << buf; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *na) anope_override { - if (!u->Account() || u->Account()->HasExt("UNCONFIRMED")) + /* InspIRCd uses an account to bypass chmode +R, not umode +r, so we can't send this here */ + if (na->nc->HasExt("UNCONFIRMED")) return; - UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << u->Account()->display; + UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << na->nc->display; } void SendLogout(User *u) anope_override diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 7e068e96c..6ee000f68 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -68,7 +68,7 @@ class InspIRCd20Proto : public IRCDProto void SendBOB() anope_override { insp12->SendBOB(); } void SendEOB() anope_override { insp12->SendEOB(); } void SendGlobopsInternal(const MessageSource &source, const Anope::string &buf) { insp12->SendGlobopsInternal(source, buf); } - void SendLogin(User *u) anope_override { insp12->SendLogin(u); } + void SendLogin(User *u, NickAlias *na) anope_override { insp12->SendLogin(u, na); } void SendLogout(User *u) anope_override { insp12->SendLogout(u); } void SendChannel(Channel *c) anope_override { insp12->SendChannel(c); } bool IsExtbanValid(const Anope::string &mask) anope_override { return insp12->IsExtbanValid(mask); } diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp index 70913dde2..0d7a0b3bc 100644 --- a/modules/protocol/ngircd.cpp +++ b/modules/protocol/ngircd.cpp @@ -112,9 +112,9 @@ class ngIRCdProto : public IRCDProto UplinkSocket::Message(source) << "KICK " << chan->name << " " << user->nick; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *na) anope_override { - UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << u->Account()->display; + UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << na->nc->display; } void SendLogout(User *u) anope_override diff --git a/modules/protocol/plexus.cpp b/modules/protocol/plexus.cpp index f4f8b19fd..05da5892e 100644 --- a/modules/protocol/plexus.cpp +++ b/modules/protocol/plexus.cpp @@ -144,12 +144,9 @@ class PlexusProto : public IRCDProto UplinkSocket::Message(source) << "ENCAP * SVSMODE " << u->GetUID() << " " << u->timestamp << " " << buf; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *na) anope_override { - if (!u->Account()) - return; - - UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID() << " " << u->Account()->display; + UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID() << " " << na->nc->display; } void SendLogout(User *u) anope_override diff --git a/modules/protocol/ratbox.cpp b/modules/protocol/ratbox.cpp index 7b6a9f345..0cb8a6df2 100644 --- a/modules/protocol/ratbox.cpp +++ b/modules/protocol/ratbox.cpp @@ -82,12 +82,12 @@ class RatboxProto : public IRCDProto UplinkSocket::Message(Me) << "UID " << u->nick << " 1 " << u->timestamp << " " << modes << " " << u->GetIdent() << " " << u->host << " 0 " << u->GetUID() << " :" << u->realname; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *na) anope_override { - if (!u->Account()) + if (na->nc->HasExt("UNCONFIRMED")) return; - UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID() << " " << u->Account()->display; + UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID() << " " << na->nc->display; } void SendLogout(User *u) anope_override diff --git a/modules/protocol/unreal.cpp b/modules/protocol/unreal.cpp index ce3d8c3a5..bac81a745 100644 --- a/modules/protocol/unreal.cpp +++ b/modules/protocol/unreal.cpp @@ -344,13 +344,10 @@ class UnrealIRCdProto : public IRCDProto return mask.length() >= 4 && mask[0] == '~' && mask[2] == ':'; } - void SendLogin(User *u) anope_override + void SendLogin(User *u, NickAlias *na) anope_override { - if (!u->Account()) - return; - if (Servers::Capab.count("ESVID") > 0) - IRCD->SendMode(Config->GetClient("NickServ"), u, "+d %s", u->Account()->display.c_str()); + IRCD->SendMode(Config->GetClient("NickServ"), u, "+d %s", na->nc->display.c_str()); else IRCD->SendMode(Config->GetClient("NickServ"), u, "+d %d", u->signon); } diff --git a/modules/pseudoclients/nickserv.cpp b/modules/pseudoclients/nickserv.cpp index 04ea411c4..a08681878 100644 --- a/modules/pseudoclients/nickserv.cpp +++ b/modules/pseudoclients/nickserv.cpp @@ -406,7 +406,7 @@ class NickServCore : public Module, public NickServService else { /* Reset +r and re-send account (even though it really should be set at this point) */ - IRCD->SendLogin(u); + IRCD->SendLogin(u, na); if (!Config->GetModule("nickserv")->Get<bool>("nonicknameownership") && na->nc == u->Account() && !na->nc->HasExt("UNCONFIRMED")) u->SetMode(NickServ, "REGISTERED"); Log(NickServ) << u->GetMask() << " automatically identified for group " << u->Account()->display; diff --git a/src/users.cpp b/src/users.cpp index b90da29a3..088aa5a67 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -303,7 +303,7 @@ void User::Identify(NickAlias *na) na->last_seen = Anope::CurTime; } - IRCD->SendLogin(this); + IRCD->SendLogin(this, na); this->Login(na->nc); |