Skip to content

Commit

Permalink
Merge pull request #2244 from zerotier/lel-amri-fix-mac-handling-in-r…
Browse files Browse the repository at this point in the history
…ules-parser

Fix mac handling in rules parser
  • Loading branch information
adamierymenko authored Sep 11, 2024
2 parents 4a485df + e1ee3eb commit 98e532d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
6 changes: 4 additions & 2 deletions controller/EmbeddedNetworkController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,12 +315,14 @@ static bool _parseRule(json &r,ZT_VirtualNetworkRule &rule)
return true;
} else if (t == "MATCH_MAC_SOURCE") {
rule.t |= ZT_NETWORK_RULE_MATCH_MAC_SOURCE;
const std::string mac(OSUtils::jsonString(r["mac"],"0"));
std::string mac(OSUtils::jsonString(r["mac"],"0"));
Utils::cleanMac(mac);
Utils::unhex(mac.c_str(),(unsigned int)mac.length(),rule.v.mac,6);
return true;
} else if (t == "MATCH_MAC_DEST") {
rule.t |= ZT_NETWORK_RULE_MATCH_MAC_DEST;
const std::string mac(OSUtils::jsonString(r["mac"],"0"));
std::string mac(OSUtils::jsonString(r["mac"],"0"));
Utils::cleanMac(mac);
Utils::unhex(mac.c_str(),(unsigned int)mac.length(),rule.v.mac,6);
return true;
} else if (t == "MATCH_IPV4_SOURCE") {
Expand Down
14 changes: 14 additions & 0 deletions node/Utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <stdexcept>
#include <vector>
#include <map>
#include <algorithm>

#if defined(__FreeBSD__)
#include <sys/endian.h>
Expand Down Expand Up @@ -849,6 +850,19 @@ class Utils
* Hexadecimal characters 0-f
*/
static const char HEXCHARS[16];

/*
* Remove `-` and `:` from a MAC address (in-place).
*
* @param mac The MAC address
*/
static inline void cleanMac(std::string& mac)
{
auto start = mac.begin();
auto end = mac.end();
auto new_end = std::remove_if(start, end, [](char c) { return c == 45 || c == 58; });
mac.erase(new_end, end);
}
};

} // namespace ZeroTier
Expand Down

0 comments on commit 98e532d

Please sign in to comment.