summaryrefslogtreecommitdiff
path: root/src/operserv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/operserv.cpp')
-rw-r--r--src/operserv.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/operserv.cpp b/src/operserv.cpp
index 5f6f8c2be..727432585 100644
--- a/src/operserv.cpp
+++ b/src/operserv.cpp
@@ -428,7 +428,18 @@ XLine *XLineManager::Check(User *u)
if (!x->GetUser().empty() && !Anope::Match(u->GetIdent(), x->GetUser()))
continue;
- if (x->GetHost().empty() || (u->ip() && Anope::Match(u->ip.addr(), x->GetHost())) || Anope::Match(u->host, x->GetHost()) || (!u->chost.empty() && Anope::Match(u->chost, x->GetHost())) || (!u->vhost.empty() && Anope::Match(u->vhost, x->GetHost())))
+ if (u->ip() && !x->GetHost().empty())
+ {
+ try
+ {
+ cidr cidr_ip(x->GetHost());
+ if (cidr_ip.match(u->ip))
+ return x;
+ }
+ catch (const SocketException &) { }
+ }
+
+ if (x->GetHost().empty() || (Anope::Match(u->host, x->GetHost()) || (!u->chost.empty() && Anope::Match(u->chost, x->GetHost())) || (!u->vhost.empty() && Anope::Match(u->vhost, x->GetHost()))))
{
OnMatch(u, x);
return x;