diff options
author | Aaron Kemp <kemp@google.com> | 2015-03-02 15:05:44 -0500 |
---|---|---|
committer | Gilad Arnold <garnold@google.com> | 2015-08-10 23:11:52 -0700 |
commit | 1bddb2cfdda68f99d27495a9f6b9f720db2a7144 (patch) | |
tree | 90e30706444db84f5dc03ada00b04a0a7aed180b | |
parent | 650d229bfc31be30636c2ac62f242952e4f583d4 (diff) | |
download | firewalld-1bddb2cfdda68f99d27495a9f6b9f720db2a7144.tar.gz |
firewalld: allow interface names containing '-'
Previously, interface names could only contain alphanumerics.
BUG=none
TEST=ran iptables unit tests
Change-Id: I19951389f7fef54f74568592f6988fd5da1b164b
Reviewed-on: https://chromium-review.googlesource.com/255152
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Tested-by: Aaron Kemp <kemp@google.com>
Commit-Queue: Aaron Kemp <kemp@google.com>
-rw-r--r-- | iptables.cc | 11 | ||||
-rw-r--r-- | iptables_unittest.cc | 6 |
2 files changed, 14 insertions, 3 deletions
diff --git a/iptables.cc b/iptables.cc index 43daf1b..73d373d 100644 --- a/iptables.cc +++ b/iptables.cc @@ -9,6 +9,7 @@ #include <base/logging.h> #include <base/strings/string_number_conversions.h> +#include <base/strings/string_util.h> #include <base/strings/stringprintf.h> #include <chromeos/process.h> @@ -29,13 +30,17 @@ const char kMarkForUserTraffic[] = "1"; const char kTableIdForUserTraffic[] = "1"; bool IsValidInterfaceName(const std::string& iface) { - // |iface| should be shorter than |kInterfaceNameSize| chars, - // and have only alphanumeric characters. + // |iface| should be shorter than |kInterfaceNameSize| chars and have only + // alphanumeric characters (embedded hypens are also permitted). if (iface.length() >= kInterfaceNameSize) { return false; } + if (StartsWithASCII(iface, "-", true /* case_sensitive */) || + EndsWith(iface, "-", true /* case_sensitive */)) { + return false; + } for (auto c : iface) { - if (!std::isalnum(c)) { + if (!std::isalnum(c) && (c != '-')) { return false; } } diff --git a/iptables_unittest.cc b/iptables_unittest.cc index e70fcb0..65503a1 100644 --- a/iptables_unittest.cc +++ b/iptables_unittest.cc @@ -40,6 +40,12 @@ TEST_F(IpTablesTest, InvalidInterfaceName) { ASSERT_FALSE(iptables_succeeds.PunchUdpHole(53, "reallylonginterfacename")); ASSERT_FALSE(iptables_succeeds.PunchUdpHole(53, "with spaces")); ASSERT_FALSE(iptables_succeeds.PunchUdpHole(53, "with$ymbols")); + ASSERT_FALSE(iptables_succeeds.PunchUdpHole(53, "-startdash")); + ASSERT_FALSE(iptables_succeeds.PunchUdpHole(53, "enddash-")); +} + +TEST_F(IpTablesTest, ValidInterfaceName) { + ASSERT_TRUE(iptables_succeeds.PunchUdpHole(53, "middle-dash")); } TEST_F(IpTablesTest, PunchTcpHoleSucceeds) { |