diff options
| author | Odd Stranne <odd@mullvad.net> | 2018-04-26 15:58:14 +0200 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2018-06-18 08:45:11 +0200 |
| commit | 3d6735a6b8bcdaee5d7736e343b3c7e92ec0ffca (patch) | |
| tree | 9921cf609c09aaa897e0b7e047bc3a19882f8beb | |
| parent | aab18143f862f66402ddfc97b8b57440b810c8d2 (diff) | |
| download | mullvadvpn-3d6735a6b8bcdaee5d7736e343b3c7e92ec0ffca.tar.xz mullvadvpn-3d6735a6b8bcdaee5d7736e343b3c7e92ec0ffca.zip | |
Add code for reverting DNS settings
| -rw-r--r-- | windns/src/windns/dnsreverter.cpp | 32 | ||||
| -rw-r--r-- | windns/src/windns/dnsreverter.h | 19 |
2 files changed, 51 insertions, 0 deletions
diff --git a/windns/src/windns/dnsreverter.cpp b/windns/src/windns/dnsreverter.cpp new file mode 100644 index 0000000000..12d15e7bbc --- /dev/null +++ b/windns/src/windns/dnsreverter.cpp @@ -0,0 +1,32 @@ +#include "stdafx.h" +#include "dnsreverter.h" +#include "wmi/methodcall.h" +#include <sstream> + +DnsReverter::DnsReverter(std::shared_ptr<ITraceSink> traceSink) + : m_traceSink(traceSink) +{ +} + +void DnsReverter::revert(wmi::IConnection &connection, const DnsConfig &config) +{ + XTRACE("Reverting DNS configuration for interface with index=", config.interfaceIndex()); + + std::wstringstream ss; + + ss << L"SELECT * FROM Win32_NetworkAdapterConfiguration " + << L"WHERE SettingID = '" << config.id() << L"'"; + + auto resultSet = connection.query(ss.str().c_str()); + + if (false == resultSet.advance()) + { + XTRACE("Unable to retrieve active configuration"); + return; + } + + auto activeConfig = resultSet.result(); + auto targetDns = config.servers(); + + nchelpers::SetDnsServers(connection, activeConfig, targetDns); +} diff --git a/windns/src/windns/dnsreverter.h b/windns/src/windns/dnsreverter.h new file mode 100644 index 0000000000..98de9caa8c --- /dev/null +++ b/windns/src/windns/dnsreverter.h @@ -0,0 +1,19 @@ +#pragma once + +#include "wmi/iconnection.h" +#include "dnsconfig.h" +#include "itracesink.h" +#include <memory> + +class DnsReverter +{ +public: + + DnsReverter(std::shared_ptr<ITraceSink> traceSink = std::make_shared<NullTraceSink>()); + + void revert(wmi::IConnection &connection, const DnsConfig &config); + +private: + + std::shared_ptr<ITraceSink> m_traceSink; +}; |
