summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules.h3
-rw-r--r--src/channels.cpp4
-rw-r--r--src/modules.cpp2
-rw-r--r--src/modules/m_banredirect.cpp2
-rw-r--r--src/modules/m_cban.cpp2
-rw-r--r--src/modules/m_chanprotect.cpp2
-rw-r--r--src/modules/m_denychans.cpp2
-rw-r--r--src/modules/m_foobar.cpp2
-rw-r--r--src/modules/m_joinflood.cpp2
-rw-r--r--src/modules/m_kicknorejoin.cpp2
-rw-r--r--src/modules/m_operchans.cpp2
-rw-r--r--src/modules/m_override.cpp4
-rw-r--r--src/modules/m_redirect.cpp2
-rw-r--r--src/modules/m_regonlycreate.cpp2
-rw-r--r--src/modules/m_restrictchans.cpp2
-rw-r--r--src/modules/m_services.cpp2
-rw-r--r--src/modules/m_services_account.cpp2
-rw-r--r--src/modules/m_sslmodes.cpp2
18 files changed, 21 insertions, 20 deletions
diff --git a/include/modules.h b/include/modules.h
index 8354f34b4..7b1ee43b4 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -545,9 +545,10 @@ class CoreExport Module : public Extensible
* @param cname The channel name being joined. For new channels this is valid where chan is not.
* @param privs A string containing the users privilages when joining the channel. For new channels this will contain "@".
* You may alter this string to alter the user's modes on the channel.
+ * @param keygiven The key given to join the channel, or an empty string if none was provided
* @return 1 To prevent the join, 0 to allow it.
*/
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs);
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven);
/** Called whenever a user is about to be kicked.
* Returning a value of 1 from this function stops the process immediately, causing no
diff --git a/src/channels.cpp b/src/channels.cpp
index 838013c4c..b0de06267 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -278,7 +278,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool
if (IS_LOCAL(user) && override == false)
{
MOD_RESULT = 0;
- FOREACH_RESULT_I(Instance,I_OnUserPreJoin,OnUserPreJoin(user,NULL,cname,privs));
+ FOREACH_RESULT_I(Instance,I_OnUserPreJoin, OnUserPreJoin(user, NULL, cname, privs, key ? key : ""));
if (MOD_RESULT == 1)
return NULL;
}
@@ -298,7 +298,7 @@ Channel* Channel::JoinUser(InspIRCd* Instance, User *user, const char* cn, bool
if (IS_LOCAL(user) && override == false)
{
MOD_RESULT = 0;
- FOREACH_RESULT_I(Instance,I_OnUserPreJoin,OnUserPreJoin(user,Ptr,cname,privs));
+ FOREACH_RESULT_I(Instance,I_OnUserPreJoin, OnUserPreJoin(user, Ptr, cname, privs, key ? key : ""));
if (MOD_RESULT == 1)
{
return NULL;
diff --git a/src/modules.cpp b/src/modules.cpp
index 28eeec7c2..41e4e2606 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -114,7 +114,7 @@ void Module::OnPostJoin(User*, Channel*) { }
void Module::OnUserPart(User*, Channel*, const std::string&, bool&) { }
void Module::OnRehash(User*, const std::string&) { }
void Module::OnServerRaw(std::string&, bool, User*) { }
-int Module::OnUserPreJoin(User*, Channel*, const char*, std::string&) { return 0; }
+int Module::OnUserPreJoin(User*, Channel*, const char*, std::string&, const std::string&) { return 0; }
void Module::OnMode(User*, void*, int, const std::string&) { }
Version Module::GetVersion() { return Version(1,0,0,0,VF_VENDOR,-1); }
void Module::OnOper(User*, const std::string&) { }
diff --git a/src/modules/m_banredirect.cpp b/src/modules/m_banredirect.cpp
index bb59cde3d..3e61e198e 100644
--- a/src/modules/m_banredirect.cpp
+++ b/src/modules/m_banredirect.cpp
@@ -258,7 +258,7 @@ class ModuleBanRedirect : public Module
ExceptionModule = ServerInstance->Modules->Find("m_banexception.so");
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
/* This prevents recursion when a user sets multiple ban redirects in a chain
* (thanks Potter)
diff --git a/src/modules/m_cban.cpp b/src/modules/m_cban.cpp
index 79adf9fcf..10948caf7 100644
--- a/src/modules/m_cban.cpp
+++ b/src/modules/m_cban.cpp
@@ -177,7 +177,7 @@ class ModuleCBan : public Module
return 0;
}
- virtual int OnUserPreJoin(User *user, Channel *chan, const char *cname, std::string &privs)
+ virtual int OnUserPreJoin(User *user, Channel *chan, const char *cname, std::string &privs, const std::string &keygiven)
{
XLine *rl = ServerInstance->XLines->MatchesLine("CBAN", cname);
diff --git a/src/modules/m_chanprotect.cpp b/src/modules/m_chanprotect.cpp
index e85744d06..fdb69d307 100644
--- a/src/modules/m_chanprotect.cpp
+++ b/src/modules/m_chanprotect.cpp
@@ -394,7 +394,7 @@ class ModuleChanProtect : public Module
}
}
- virtual int OnUserPreJoin(User *user, Channel *chan, const char *cname, std::string &privs)
+ virtual int OnUserPreJoin(User *user, Channel *chan, const char *cname, std::string &privs, const std::string &keygiven)
{
// if the user is the first user into the channel, mark them as the founder, but only if
// the config option for it is set
diff --git a/src/modules/m_denychans.cpp b/src/modules/m_denychans.cpp
index c45f07818..cab26122d 100644
--- a/src/modules/m_denychans.cpp
+++ b/src/modules/m_denychans.cpp
@@ -87,7 +87,7 @@ class ModuleDenyChannels : public Module
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
for (int j =0; j < Conf->Enumerate("badchan"); j++)
{
diff --git a/src/modules/m_foobar.cpp b/src/modules/m_foobar.cpp
index d9254c435..6ab156fb0 100644
--- a/src/modules/m_foobar.cpp
+++ b/src/modules/m_foobar.cpp
@@ -86,7 +86,7 @@ class ModuleFoobar : public Module
ServerInstance->Logs->Log("m_foobar",DEBUG,"Foobar: User "+b+" parted "+c);
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (chan->IsExtBanned(user, 'n'))
return 1;
diff --git a/src/modules/m_joinflood.cpp b/src/modules/m_joinflood.cpp
index 5f8c329cc..c406c1701 100644
--- a/src/modules/m_joinflood.cpp
+++ b/src/modules/m_joinflood.cpp
@@ -222,7 +222,7 @@ class ModuleJoinFlood : public Module
ServerInstance->Modules->Attach(eventlist, this, 3);
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (chan)
{
diff --git a/src/modules/m_kicknorejoin.cpp b/src/modules/m_kicknorejoin.cpp
index 794a7f9ef..16def4d79 100644
--- a/src/modules/m_kicknorejoin.cpp
+++ b/src/modules/m_kicknorejoin.cpp
@@ -130,7 +130,7 @@ public:
ServerInstance->Modules->Attach(eventlist, this, 4);
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (chan)
{
diff --git a/src/modules/m_operchans.cpp b/src/modules/m_operchans.cpp
index d73fb58cf..d1111fd86 100644
--- a/src/modules/m_operchans.cpp
+++ b/src/modules/m_operchans.cpp
@@ -61,7 +61,7 @@ class ModuleOperChans : public Module
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (!IS_OPER(user))
{
diff --git a/src/modules/m_override.cpp b/src/modules/m_override.cpp
index a20d2fd02..af7201882 100644
--- a/src/modules/m_override.cpp
+++ b/src/modules/m_override.cpp
@@ -224,7 +224,7 @@ class ModuleOverride : public Module
return ACR_DEFAULT;
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (IS_OPER(user))
{
@@ -243,7 +243,7 @@ class ModuleOverride : public Module
return -1;
}
- if ((*chan->key) && (CanOverride(user,"KEY")))
+ if ((*chan->key) && (CanOverride(user,"KEY")) && !strcasecmp(keygiven.c_str(), chan->key))
{
if (NoisyOverride)
chan->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE %s :%s used oper-override to bypass the channel key", cname, user->nick);
diff --git a/src/modules/m_redirect.cpp b/src/modules/m_redirect.cpp
index 47e76c00b..44cea9b0b 100644
--- a/src/modules/m_redirect.cpp
+++ b/src/modules/m_redirect.cpp
@@ -112,7 +112,7 @@ class ModuleRedirect : public Module
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (chan)
{
diff --git a/src/modules/m_regonlycreate.cpp b/src/modules/m_regonlycreate.cpp
index e4f928468..eea6b7876 100644
--- a/src/modules/m_regonlycreate.cpp
+++ b/src/modules/m_regonlycreate.cpp
@@ -26,7 +26,7 @@ class ModuleRegOnlyCreate : public Module
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (chan)
return 0;
diff --git a/src/modules/m_restrictchans.cpp b/src/modules/m_restrictchans.cpp
index 8543e9719..1838338bd 100644
--- a/src/modules/m_restrictchans.cpp
+++ b/src/modules/m_restrictchans.cpp
@@ -51,7 +51,7 @@ class ModuleRestrictChans : public Module
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
irc::string x = cname;
// user is not an oper and its not in the allow list
diff --git a/src/modules/m_services.cpp b/src/modules/m_services.cpp
index 54690c39b..5b39de931 100644
--- a/src/modules/m_services.cpp
+++ b/src/modules/m_services.cpp
@@ -258,7 +258,7 @@ class ModuleServices : public Module
return OnUserPreMessage(user,dest,target_type,text,status, exempt_list);
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if (chan)
{
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp
index 8077007dc..70539ddde 100644
--- a/src/modules/m_services_account.cpp
+++ b/src/modules/m_services_account.cpp
@@ -192,7 +192,7 @@ class ModuleServicesAccount : public Module
return OnUserPreMessage(user, dest, target_type, text, status, exempt_list);
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
std::string *account;
user->GetExt("accountname", account);
diff --git a/src/modules/m_sslmodes.cpp b/src/modules/m_sslmodes.cpp
index fa8dd9815..8e0439169 100644
--- a/src/modules/m_sslmodes.cpp
+++ b/src/modules/m_sslmodes.cpp
@@ -82,7 +82,7 @@ class ModuleSSLModes : public Module
}
- virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs)
+ virtual int OnUserPreJoin(User* user, Channel* chan, const char* cname, std::string &privs, const std::string &keygiven)
{
if(chan && chan->IsModeSet('z'))
{