summaryrefslogtreecommitdiffhomepage
path: root/windows
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2019-05-17 22:28:36 +0200
committerOdd Stranne <odd@mullvad.net>2019-05-27 10:30:55 +0200
commit5c666d39ec19619e58b46bdc71a50d0dcb2dc98c (patch)
treea0e2cf798f4da0017333e590dd93411570217a12 /windows
parent88ea2269971f1eb482c338c8891432ecb691ab19 (diff)
downloadmullvadvpn-5c666d39ec19619e58b46bdc71a50d0dcb2dc98c.tar.xz
mullvadvpn-5c666d39ec19619e58b46bdc71a50d0dcb2dc98c.zip
Make DHCP server rule more explicit
Diffstat (limited to 'windows')
-rw-r--r--windows/winfw/src/winfw/fwcontext.cpp2
-rw-r--r--windows/winfw/src/winfw/rules/permitdhcpserver.cpp12
-rw-r--r--windows/winfw/src/winfw/rules/permitdhcpserver.h13
3 files changed, 24 insertions, 3 deletions
diff --git a/windows/winfw/src/winfw/fwcontext.cpp b/windows/winfw/src/winfw/fwcontext.cpp
index 4cff5d7166..e5325f0b9c 100644
--- a/windows/winfw/src/winfw/fwcontext.cpp
+++ b/windows/winfw/src/winfw/fwcontext.cpp
@@ -49,7 +49,7 @@ void AppendSettingsRules(FwContext::Ruleset &ruleset, const WinFwSettings &setti
{
ruleset.emplace_back(std::make_unique<rules::PermitLan>());
ruleset.emplace_back(std::make_unique<rules::PermitLanService>());
- ruleset.emplace_back(std::make_unique<rules::PermitDhcpServer>());
+ ruleset.emplace_back(rules::PermitDhcpServer::WithExtent(rules::PermitDhcpServer::Extent::IPv4Only));
}
}
diff --git a/windows/winfw/src/winfw/rules/permitdhcpserver.cpp b/windows/winfw/src/winfw/rules/permitdhcpserver.cpp
index ffc786c616..6e22b146fa 100644
--- a/windows/winfw/src/winfw/rules/permitdhcpserver.cpp
+++ b/windows/winfw/src/winfw/rules/permitdhcpserver.cpp
@@ -7,6 +7,7 @@
#include "libwfp/conditions/conditionprotocol.h"
#include "libwfp/conditions/conditionport.h"
#include "libwfp/conditions/conditionip.h"
+#include <stdexcept>
using namespace wfp::conditions;
@@ -21,6 +22,17 @@ static const uint32_t DHCPV4_SERVER_PORT = 67;
} // anonymous namespace
+//static
+std::unique_ptr<PermitDhcpServer> PermitDhcpServer::WithExtent(Extent extent)
+{
+ if (extent != Extent::IPv4Only)
+ {
+ throw std::runtime_error("The only supported mode is IPv4Only");
+ }
+
+ return std::unique_ptr<PermitDhcpServer>(new PermitDhcpServer);
+}
+
bool PermitDhcpServer::apply(IObjectInstaller &objectInstaller)
{
return applyIpv4(objectInstaller);
diff --git a/windows/winfw/src/winfw/rules/permitdhcpserver.h b/windows/winfw/src/winfw/rules/permitdhcpserver.h
index 49e06bfb53..93879b21a7 100644
--- a/windows/winfw/src/winfw/rules/permitdhcpserver.h
+++ b/windows/winfw/src/winfw/rules/permitdhcpserver.h
@@ -1,6 +1,7 @@
#pragma once
#include "ifirewallrule.h"
+#include <memory>
namespace rules
{
@@ -9,13 +10,21 @@ class PermitDhcpServer : public IFirewallRule
{
public:
- PermitDhcpServer() = default;
- ~PermitDhcpServer() = default;
+ enum class Extent
+ {
+ All,
+ IPv4Only,
+ IPv6Only
+ };
+
+ static std::unique_ptr<PermitDhcpServer> WithExtent(Extent extent);
bool apply(IObjectInstaller &objectInstaller) override;
private:
+ PermitDhcpServer() = default;
+
bool applyIpv4(IObjectInstaller &objectInstaller) const;
};