diff options
Diffstat (limited to 'src/operserv.cpp')
-rw-r--r-- | src/operserv.cpp | 13 |
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; |