From 7a5c4e55991a8b884c1a2f4b00fd2e6f5297c0d6 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 6 Oct 2016 14:36:41 -0400 Subject: #1682: store aftype with masks and include cidrs in GetNUHMask --- src/modes.cpp | 24 +++++++++++++++++------- src/sockets.cpp | 5 +++++ 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/modes.cpp b/src/modes.cpp index 065558747..b41bece1d 100644 --- a/src/modes.cpp +++ b/src/modes.cpp @@ -836,14 +836,11 @@ Entry::Entry(const Anope::string &m, const Anope::string &fh) : name(m), mask(fh if (addr.valid() && cidr_range.is_pos_number_only()) { this->cidr_len = convertTo(cidr_range); - /* If we got here, cidr_len is a valid number. - * If cidr_len is >32 (or 128) it is handled later in - * cidr::match - */ this->host = cidr_ip; + this->family = addr.family(); - Log(LOG_DEBUG) << "Ban " << m << " has cidr " << this->cidr_len; + Log(LOG_DEBUG) << "Ban " << mask << " has cidr " << this->cidr_len; } } catch (const ConvertException &) { } @@ -864,8 +861,21 @@ const Anope::string Entry::GetNUHMask() const Anope::string n = nick.empty() ? "*" : nick, u = user.empty() ? "*" : user, h = host.empty() ? "*" : host, - r = real.empty() ? "" : "#" + real; - return n + "!" + u + "@" + h + r; + r = real.empty() ? "" : "#" + real, + c; + + switch (family) + { + case AF_INET: + if (cidr_len <= 32) + c = "/" + stringify(cidr_len); + break; + case AF_INET6: + if (cidr_len <= 128) + c = "/" + stringify(cidr_len); + break; + } + return n + "!" + u + "@" + h + r + c; } bool Entry::Matches(User *u, bool full) const diff --git a/src/sockets.cpp b/src/sockets.cpp index d4a4f95dc..70c9fef0d 100644 --- a/src/sockets.cpp +++ b/src/sockets.cpp @@ -47,6 +47,11 @@ void sockaddrs::clear() memset(this, 0, sizeof(*this)); } +int sockaddrs::family() const +{ + return sa.sa_family; +} + size_t sockaddrs::size() const { switch (sa.sa_family) -- cgit