1
0
Fork 0

Codechange: [Network] Let IsInNetmask use std::string

pull/9369/head
rubidium42 2021-06-13 21:29:40 +02:00 committed by rubidium42
parent 36705f1dc0
commit a91e29b656
3 changed files with 7 additions and 8 deletions

View File

@ -143,7 +143,7 @@ bool NetworkAddress::IsFamily(int family)
* @note netmask without /n assumes all bits need to match. * @note netmask without /n assumes all bits need to match.
* @return true if this IP is within the netmask. * @return true if this IP is within the netmask.
*/ */
bool NetworkAddress::IsInNetmask(const char *netmask) bool NetworkAddress::IsInNetmask(const std::string &netmask)
{ {
/* Resolve it if we didn't do it already */ /* Resolve it if we didn't do it already */
if (!this->IsResolved()) this->GetAddress(); if (!this->IsResolved()) this->GetAddress();
@ -153,16 +153,15 @@ bool NetworkAddress::IsInNetmask(const char *netmask)
NetworkAddress mask_address; NetworkAddress mask_address;
/* Check for CIDR separator */ /* Check for CIDR separator */
const char *chr_cidr = strchr(netmask, '/'); auto cidr_separator_location = netmask.find('/');
if (chr_cidr != nullptr) { if (cidr_separator_location != std::string::npos) {
int tmp_cidr = atoi(chr_cidr + 1); int tmp_cidr = atoi(netmask.substr(cidr_separator_location + 1).c_str());
/* Invalid CIDR, treat as single host */ /* Invalid CIDR, treat as single host */
if (tmp_cidr > 0 && tmp_cidr < cidr) cidr = tmp_cidr; if (tmp_cidr > 0 && tmp_cidr < cidr) cidr = tmp_cidr;
/* Remove the / so that NetworkAddress works on the IP portion */ /* Remove the / so that NetworkAddress works on the IP portion */
std::string ip_str(netmask, chr_cidr - netmask); mask_address = NetworkAddress(netmask.substr(0, cidr_separator_location), 0, this->address.ss_family);
mask_address = NetworkAddress(ip_str.c_str(), 0, this->address.ss_family);
} else { } else {
mask_address = NetworkAddress(netmask, 0, this->address.ss_family); mask_address = NetworkAddress(netmask, 0, this->address.ss_family);
} }

View File

@ -116,7 +116,7 @@ public:
} }
bool IsFamily(int family); bool IsFamily(int family);
bool IsInNetmask(const char *netmask); bool IsInNetmask(const std::string &netmask);
/** /**
* Compare the address of this class with the address of another. * Compare the address of this class with the address of another.

View File

@ -56,7 +56,7 @@ public:
/* Check if the client is banned */ /* Check if the client is banned */
bool banned = false; bool banned = false;
for (const auto &entry : _network_ban_list) { for (const auto &entry : _network_ban_list) {
banned = address.IsInNetmask(entry.c_str()); banned = address.IsInNetmask(entry);
if (banned) { if (banned) {
Packet p(Tban_packet); Packet p(Tban_packet);
p.PrepareToSend(); p.PrepareToSend();