summaryrefslogtreecommitdiff
path: root/include/modules
diff options
context:
space:
mode:
Diffstat (limited to 'include/modules')
-rw-r--r--include/modules/chanserv.h48
-rw-r--r--include/modules/nickserv.h3
-rw-r--r--include/modules/os_session.h2
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