summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBug Magnet <marco.nikic@mullvad.net>2024-11-05 10:13:35 +0100
committerBug Magnet <marco.nikic@mullvad.net>2024-11-26 11:03:54 +0100
commitdd66d1246b005594a16841ec945bf98914e80899 (patch)
tree4337bf013ef0591dfee8fbf0fecf4f0401b036aa
parent038be31659eba06001e15185256bd64ee4e105bc (diff)
downloadmullvadvpn-dd66d1246b005594a16841ec945bf98914e80899.tar.xz
mullvadvpn-dd66d1246b005594a16841ec945bf98914e80899.zip
Allow override of encrypted DNS domain name
-rw-r--r--ios/MullvadRustRuntime/EncryptedDNSProxy.swift2
-rw-r--r--ios/MullvadRustRuntime/include/mullvad_rust_runtime.h2
-rw-r--r--mullvad-daemon/src/api.rs2
-rw-r--r--mullvad-encrypted-dns-proxy/src/config_resolver.rs5
-rw-r--r--mullvad-encrypted-dns-proxy/src/state.rs4
-rw-r--r--mullvad-ios/src/encrypted_dns_proxy.rs16
6 files changed, 22 insertions, 9 deletions
diff --git a/ios/MullvadRustRuntime/EncryptedDNSProxy.swift b/ios/MullvadRustRuntime/EncryptedDNSProxy.swift
index 690e2459d0..5179cbc51b 100644
--- a/ios/MullvadRustRuntime/EncryptedDNSProxy.swift
+++ b/ios/MullvadRustRuntime/EncryptedDNSProxy.swift
@@ -20,7 +20,7 @@ public class EncryptedDNSProxy {
private let state: OpaquePointer
public init() {
- state = encrypted_dns_proxy_init()
+ state = encrypted_dns_proxy_init("frakta.eu")
proxyConfig = ProxyHandle(context: nil, port: 0)
}
diff --git a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
index 26904b89df..ad13d1f6e0 100644
--- a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
+++ b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
@@ -34,7 +34,7 @@ extern const uint16_t CONFIG_SERVICE_PORT;
/**
* Initializes a valid pointer to an instance of `EncryptedDnsProxyState`.
*/
-struct EncryptedDnsProxyState *encrypted_dns_proxy_init(void);
+struct EncryptedDnsProxyState *encrypted_dns_proxy_init(const char *domain_name);
/**
* This must be called only once to deallocate `EncryptedDnsProxyState`.
diff --git a/mullvad-daemon/src/api.rs b/mullvad-daemon/src/api.rs
index 2558dbfee8..a0fef2c984 100644
--- a/mullvad-daemon/src/api.rs
+++ b/mullvad-daemon/src/api.rs
@@ -609,7 +609,7 @@ impl AccessModeSelector {
ApiConnectionMode::Proxied(ProxyConfig::from(proxy))
}
AccessMethod::BuiltIn(BuiltInAccessMethod::EncryptedDnsProxy) => {
- if let Err(error) = encrypted_dns_proxy_cache.fetch_configs().await {
+ if let Err(error) = encrypted_dns_proxy_cache.fetch_configs("frakta.eu").await {
log::warn!("Failed to fetch new Encrypted DNS Proxy configurations");
log::debug!("{error:#?}");
}
diff --git a/mullvad-encrypted-dns-proxy/src/config_resolver.rs b/mullvad-encrypted-dns-proxy/src/config_resolver.rs
index b763183a1b..96aa64e938 100644
--- a/mullvad-encrypted-dns-proxy/src/config_resolver.rs
+++ b/mullvad-encrypted-dns-proxy/src/config_resolver.rs
@@ -61,8 +61,9 @@ pub fn default_resolvers() -> Vec<Nameserver> {
]
}
-pub async fn resolve_default_config() -> Result<Vec<config::ProxyConfig>, Error> {
- resolve_configs(&default_resolvers(), "frakta.eu").await
+pub async fn resolve_default_config(domain: &str) -> Result<Vec<config::ProxyConfig>, Error> {
+ // TODO: We should remove the default value here and just force the callers to provide a domain instead
+ resolve_configs(&default_resolvers(), domain).await
}
/// Look up the `domain` towards the given `resolvers`, and try to deserialize all the returned
diff --git a/mullvad-encrypted-dns-proxy/src/state.rs b/mullvad-encrypted-dns-proxy/src/state.rs
index daad7123be..3d6a26a0ce 100644
--- a/mullvad-encrypted-dns-proxy/src/state.rs
+++ b/mullvad-encrypted-dns-proxy/src/state.rs
@@ -59,8 +59,8 @@ impl EncryptedDnsProxyState {
}
/// Fetch a config, but error out only when no existing configuration was there.
- pub async fn fetch_configs(&mut self) -> Result<(), FetchConfigError> {
- match resolve_default_config().await {
+ pub async fn fetch_configs(&mut self, domain: &str) -> Result<(), FetchConfigError> {
+ match resolve_default_config(domain).await {
Ok(new_configs) => {
self.configurations = HashSet::from_iter(new_configs.into_iter());
}
diff --git a/mullvad-ios/src/encrypted_dns_proxy.rs b/mullvad-ios/src/encrypted_dns_proxy.rs
index cf4219897e..d371044d48 100644
--- a/mullvad-ios/src/encrypted_dns_proxy.rs
+++ b/mullvad-ios/src/encrypted_dns_proxy.rs
@@ -1,5 +1,6 @@
use crate::ProxyHandle;
+use libc::c_char;
use mullvad_encrypted_dns_proxy::state::{EncryptedDnsProxyState as State, FetchConfigError};
use mullvad_encrypted_dns_proxy::Forwarder;
use std::{
@@ -9,10 +10,13 @@ use std::{
};
use tokio::{net::TcpListener, task::JoinHandle};
+use std::ffi::CStr;
+
/// A thin wrapper around [`mullvad_encrypted_dns_proxy::state::EncryptedDnsProxyState`] that
/// can start a local forwarder (see [`Self::start`]).
pub struct EncryptedDnsProxyState {
state: State,
+ domain: String,
}
#[derive(Debug)]
@@ -47,7 +51,7 @@ impl From<Error> for i32 {
impl EncryptedDnsProxyState {
async fn start(&mut self) -> Result<ProxyHandle, Error> {
self.state
- .fetch_configs()
+ .fetch_configs(&self.domain)
.await
.map_err(Error::FetchConfig)?;
let proxy_configuration = self.state.next_configuration().ok_or(Error::NoConfigs)?;
@@ -79,9 +83,17 @@ impl EncryptedDnsProxyState {
/// Initializes a valid pointer to an instance of `EncryptedDnsProxyState`.
#[no_mangle]
-pub unsafe extern "C" fn encrypted_dns_proxy_init() -> *mut EncryptedDnsProxyState {
+pub unsafe extern "C" fn encrypted_dns_proxy_init(
+ domain_name: *const c_char,
+) -> *mut EncryptedDnsProxyState {
+ let domain = unsafe {
+ let c_str = CStr::from_ptr(domain_name);
+ String::from_utf8_lossy(c_str.to_bytes())
+ };
+
let state = Box::new(EncryptedDnsProxyState {
state: State::default(),
+ domain: domain.into_owned(),
});
Box::into_raw(state)
}