summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago Crepaldi <thiago@thiagocrepaldi.com>2014-02-05 18:41:30 -0200
committerAttila Molnar <attilamolnar@hush.com>2014-02-07 18:10:20 +0100
commit4ed0292914ca78aa419aab3add5b113c26b81a12 (patch)
tree567f16d8c3f26b652b4b9d4313f4091dafce1aa8 /src
parent9dd4108273d95204edbc366618da6500571267df (diff)
m_ldapauth.cpp: Allow multiple patterns for users to bypass LDAP auth
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_ldapauth.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/modules/m_ldapauth.cpp b/src/modules/m_ldapauth.cpp
index 6b7c9d219..179fe6fca 100644
--- a/src/modules/m_ldapauth.cpp
+++ b/src/modules/m_ldapauth.cpp
@@ -264,7 +264,7 @@ class ModuleLDAPAuth : public Module
LocalStringExt ldapVhost;
std::string base;
std::string attribute;
- std::string allowpattern;
+ std::vector<std::string> allowpatterns;
std::vector<std::string> whitelistedcidrs;
bool useusername;
@@ -287,7 +287,6 @@ public:
base = tag->getString("baserdn");
attribute = tag->getString("attribute");
- allowpattern = tag->getString("allowpattern");
killreason = tag->getString("killreason");
vhost = tag->getString("host");
// Set to true if failed connects should be reported to operators
@@ -316,6 +315,13 @@ public:
if (!attr.empty() && !val.empty())
requiredattributes.push_back(make_pair(attr, val));
}
+
+ std::string allowpattern = tag->getString("allowpattern");
+ irc::spacesepstream ss(allowpattern);
+ for (std::string more; ss.GetToken(more); )
+ {
+ allowpatterns.push_back(more);
+ }
}
void OnUserConnect(LocalUser *user) CXX11_OVERRIDE
@@ -330,10 +336,13 @@ public:
ModResult OnUserRegister(LocalUser* user) CXX11_OVERRIDE
{
- if ((!allowpattern.empty()) && (InspIRCd::Match(user->nick,allowpattern)))
+ for (std::vector<std::string>::const_iterator i = allowpatterns.begin(); i != allowpatterns.end(); ++i)
{
- ldapAuthed.set(user,1);
- return MOD_RES_PASSTHRU;
+ if (InspIRCd::Match(user->nick, *i))
+ {
+ ldapAuthed.set(user,1);
+ return MOD_RES_PASSTHRU;
+ }
}
for (std::vector<std::string>::iterator i = whitelistedcidrs.begin(); i != whitelistedcidrs.end(); i++)