diff options
Diffstat (limited to 'include/modules')
-rw-r--r-- | include/modules/chanserv.h | 48 | ||||
-rw-r--r-- | include/modules/nickserv.h | 3 | ||||
-rw-r--r-- | include/modules/os_session.h | 2 |
3 files changed, 48 insertions, 5 deletions
diff --git a/include/modules/chanserv.h b/include/modules/chanserv.h index 9170ea2d2..c5e677407 100644 --- a/include/modules/chanserv.h +++ b/include/modules/chanserv.h @@ -365,6 +365,10 @@ namespace ChanServ /* Represents one entry of an access list on a channel. */ class CoreExport ChanAccess : public Serializable { + Anope::string mask; + /* account this access entry is for, if any */ + Serialize::Reference<NickServ::Account> nc; + public: typedef std::multimap<const ChanAccess *, const ChanAccess *> Set; /* shows the 'path' taken to determine if an access entry matches a user @@ -377,9 +381,6 @@ namespace ChanServ AccessProvider *provider; /* Channel this access entry is on */ Serialize::Reference<Channel> ci; - /* account this access entry is for, if any */ - Serialize::Reference<NickServ::Account> nc; - Anope::string mask; Anope::string creator; time_t last_seen; time_t created; @@ -391,6 +392,47 @@ namespace ChanServ service->Destruct(this); } + void SetMask(const Anope::string &mask, Channel *c) + { + if (nc != NULL) + nc->RemoveChannelReference(this->ci); + else if (!this->mask.empty()) + { + Channel *targc = ChanServ::Find(this->mask); + if (targc) + targc->RemoveChannelReference(this->ci->name); + } + + ci = c; + this->mask.clear(); + nc = NULL; + + const NickServ::Nick *na = NickServ::FindNick(mask); + if (na != NULL) + { + nc = na->nc; + nc->AddChannelReference(ci); + } + else + { + this->mask = mask; + + Channel *targci = ChanServ::Find(mask); + if (targci != NULL) + targci->AddChannelReference(ci->name); + } + } + + const Anope::string &Mask() const + { + if (nc) + return nc->display; + else + return mask; + } + + NickServ::Account *GetAccount() const { return nc; } + void Serialize(Serialize::Data &data) const override { service->Serialize(this, data); diff --git a/include/modules/nickserv.h b/include/modules/nickserv.h index a55786ffb..0430276fe 100644 --- a/include/modules/nickserv.h +++ b/include/modules/nickserv.h @@ -82,8 +82,9 @@ namespace NickServ /** Called when a nick is registered * @param user The user registering the nick, of any * @param The nick + * @param password The password of the nick */ - virtual void OnNickRegister(User *user, Nick *na) anope_abstract; + virtual void OnNickRegister(User *user, Nick *na, const Anope::string &password) anope_abstract; }; static EventHandlersReference<NickRegister> OnNickRegister("OnNickRegister"); diff --git a/include/modules/os_session.h b/include/modules/os_session.h index 54be44545..89b063104 100644 --- a/include/modules/os_session.h +++ b/include/modules/os_session.h @@ -7,7 +7,7 @@ struct Session unsigned count; /* Number of clients with this host */ unsigned hits; /* Number of subsequent kills for a host */ - Session(const Anope::string &ip, int len) : addr(ip, len), count(1), hits(0) { } + Session(const sockaddrs &ip, int len) : addr(ip, len), count(1), hits(0) { } }; struct Exception : Serializable |