diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-03-01 14:04:59 +0000 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-03-01 14:04:59 +0000 |
| commit | 2610bd23035901ba0e25824629d3768b4430a708 (patch) | |
| tree | 2f637a783b88118337fbbc6b89d081fbc643fd5c | |
| parent | 55117d52ce234f5ed8b3ef81ee484b56b799ba6a (diff) | |
| parent | 0973c9fe25b73ce11593d86b74aac19ac9721f6f (diff) | |
| download | mullvadvpn-2610bd23035901ba0e25824629d3768b4430a708.tar.xz mullvadvpn-2610bd23035901ba0e25824629d3768b4430a708.zip | |
Merge branch 'fix-emils-bad-cpp'
| -rw-r--r-- | windows/windns/src/windns/windnscontext.cpp | 20 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/fwcontext.cpp | 2 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/rules/restrictdns.cpp | 4 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/rules/restrictdns.h | 6 |
4 files changed, 21 insertions, 11 deletions
diff --git a/windows/windns/src/windns/windnscontext.cpp b/windows/windns/src/windns/windnscontext.cpp index 7c95358652..d9d7913c67 100644 --- a/windows/windns/src/windns/windnscontext.cpp +++ b/windows/windns/src/windns/windnscontext.cpp @@ -40,6 +40,16 @@ void WinDnsContext::set(const std::vector<std::wstring> &ipv4NameServers, m_recoverySink->setTarget(recoverySinkInfo); } + // Clearing DNS agents if the new server lists are empty, as they aren't needed. + if (ipv4NameServers.empty()) + { + m_ipv4Agent.reset(); + } + if (ipv6NameServers.empty()) + { + m_ipv6Agent.reset(); + } + if (!m_nameServerSource) { m_nameServerSource = std::make_unique<NameServerSource>(ipv4NameServers, ipv6NameServers); @@ -51,15 +61,15 @@ void WinDnsContext::set(const std::vector<std::wstring> &ipv4NameServers, } // - // Instantiate agents unless they're already set up. + // Instantiate agents unless they're already set up or the relevant server lists are empty // - - if (!m_ipv4Agent) + if (!m_ipv4Agent && !ipv4NameServers.empty()) { m_ipv4Agent = std::make_unique<DnsAgent>(Protocol::IPv4, m_nameServerSource.get(), m_recoverySink.get(), m_logSink); - } + } + - if (!m_ipv6Agent) + if (!m_ipv6Agent && !ipv6NameServers.empty()) { m_ipv6Agent = std::make_unique<DnsAgent>(Protocol::IPv6, m_nameServerSource.get(), m_recoverySink.get(), m_logSink); } diff --git a/windows/winfw/src/winfw/fwcontext.cpp b/windows/winfw/src/winfw/fwcontext.cpp index 3a90c97b9f..f971f24b2e 100644 --- a/windows/winfw/src/winfw/fwcontext.cpp +++ b/windows/winfw/src/winfw/fwcontext.cpp @@ -114,7 +114,7 @@ bool FwContext::applyPolicyConnected(const WinFwSettings &settings, const WinFwR ruleset.emplace_back(std::make_unique<rules::RestrictDns>( tunnelInterfaceAlias, wfp::IpAddress(v4Gateway), - (v6Gateway != nullptr) ? &wfp::IpAddress(v6Gateway) : nullptr + (v6Gateway != nullptr) ? std::make_unique<wfp::IpAddress>(v6Gateway) : nullptr )); return applyRuleset(ruleset); diff --git a/windows/winfw/src/winfw/rules/restrictdns.cpp b/windows/winfw/src/winfw/rules/restrictdns.cpp index 53c303cc47..9009dcc4ee 100644 --- a/windows/winfw/src/winfw/rules/restrictdns.cpp +++ b/windows/winfw/src/winfw/rules/restrictdns.cpp @@ -12,10 +12,10 @@ using namespace wfp::conditions; namespace rules { -RestrictDns::RestrictDns(const std::wstring &tunnelInterfaceAlias, const wfp::IpAddress v4DnsHost, wfp::IpAddress *v6DnsHost) +RestrictDns::RestrictDns(const std::wstring &tunnelInterfaceAlias, const wfp::IpAddress v4DnsHost, std::unique_ptr<wfp::IpAddress> v6DnsHost) : m_tunnelInterfaceAlias(tunnelInterfaceAlias) , m_v4DnsHost(v4DnsHost) - , m_v6DnsHost(v6DnsHost) + , m_v6DnsHost(std::move(v6DnsHost)) { } diff --git a/windows/winfw/src/winfw/rules/restrictdns.h b/windows/winfw/src/winfw/rules/restrictdns.h index ca3057a5cd..0dba66a048 100644 --- a/windows/winfw/src/winfw/rules/restrictdns.h +++ b/windows/winfw/src/winfw/rules/restrictdns.h @@ -11,15 +11,15 @@ class RestrictDns : public IFirewallRule { public: - RestrictDns(const std::wstring &tunnelInterfaceAlias, const wfp::IpAddress v4DnsHost, wfp::IpAddress *v6DnsHost); - + RestrictDns(const std::wstring &tunnelInterfaceAlias, const wfp::IpAddress v4DnsHost, std::unique_ptr<wfp::IpAddress> v6DnsHost); + bool apply(IObjectInstaller &objectInstaller) override; private: const std::wstring m_tunnelInterfaceAlias; const wfp::IpAddress m_v4DnsHost; - const wfp::IpAddress *m_v6DnsHost; + const std::unique_ptr<wfp::IpAddress> m_v6DnsHost; }; |
