diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-02-18 17:33:44 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-02-22 11:59:08 +0100 |
| commit | d773017b19c48fe1019a45438d12e9e7c0951336 (patch) | |
| tree | 121bc84895ae0acceab80e1e40a3de82d25c9f37 | |
| parent | d7f2abebf97a3e01587c9f950b575fc0ec70a998 (diff) | |
| download | mullvadvpn-d773017b19c48fe1019a45438d12e9e7c0951336.tar.xz mullvadvpn-d773017b19c48fe1019a45438d12e9e7c0951336.zip | |
Do not assume that requested GUID was assigned to Wintun adapter
| -rw-r--r-- | talpid-core/src/tunnel/openvpn/mod.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/talpid-core/src/tunnel/openvpn/mod.rs b/talpid-core/src/tunnel/openvpn/mod.rs index 7fdde6cdf0..6210b61d8b 100644 --- a/talpid-core/src/tunnel/openvpn/mod.rs +++ b/talpid-core/src/tunnel/openvpn/mod.rs @@ -68,7 +68,6 @@ lazy_static! { static ref WINTUN_DLL: Mutex<Option<Arc<windows::WintunDll>>> = Mutex::new(None); static ref ADAPTER_ALIAS: U16CString = U16CString::from_str("Mullvad").unwrap(); static ref ADAPTER_POOL: U16CString = U16CString::from_str("Mullvad").unwrap(); - static ref ADAPTER_GUID_STR: String = windows::string_from_guid(&ADAPTER_GUID); } #[cfg(windows)] @@ -391,10 +390,20 @@ impl OpenVpnMonitor<OpenVpnCommand> { log::warn!("You may need to restart Windows to complete the install of Wintun"); } + let assigned_guid = adapter.adapter().guid(); + let assigned_guid = assigned_guid.as_ref().unwrap_or_else(|error| { + log::error!( + "{}", + error.display_chain_with_msg("Cannot identify adapter guid") + ); + &ADAPTER_GUID + }); + let assigned_guid_string = windows::string_from_guid(assigned_guid); + // Workaround: OpenVPN looks up "ComponentId" to identify tunnel devices. // If Wintun fails to create this registry value, create it here. let adapter_key = - windows::find_adapter_registry_key(&*ADAPTER_GUID_STR, KEY_READ | KEY_WRITE); + windows::find_adapter_registry_key(&assigned_guid_string, KEY_READ | KEY_WRITE); match adapter_key { Ok(adapter_key) => { let component_id: io::Result<String> = adapter_key.get_value("ComponentId"); |
