diff --git a/changelog.d/2495.bugfix.md b/changelog.d/2495.bugfix.md new file mode 100644 index 000000000..178437bc9 --- /dev/null +++ b/changelog.d/2495.bugfix.md @@ -0,0 +1 @@ +Fix the DNS resolver failing to start without `/etc/resolv.conf` when `dns_servers` is configured. Contributed by @eleboucher. diff --git a/src/service/client/mod.rs b/src/service/client/mod.rs index f258f5195..39f00b40c 100644 --- a/src/service/client/mod.rs +++ b/src/service/client/mod.rs @@ -338,8 +338,16 @@ fn builder_interface( fn get_dns_resolver(server: &Arc) -> Result> { let config = &server.config; - let (system_resolver_config, mut opts) = hickory_resolver::system_conf::read_system_conf() - .map_err(|e| err!(error!("Failed to configure DNS resolver from system: {e}")))?; + let (system_resolver_config, mut opts) = + match hickory_resolver::system_conf::read_system_conf() { + | Ok(system_conf) => system_conf, + | Err(e) if config.dns_servers.is_empty() => + return Err(err!(error!("Failed to configure DNS resolver from system: {e}"))), + | Err(e) => { + warn!("Failed to read system DNS configuration, using dns_servers: {e}"); + Default::default() + }, + }; let mut conf = ResolverConfig::from_name_servers(vec![]); diff --git a/src/service/rooms/event_handler/state_at_incoming/tests.rs b/src/service/rooms/event_handler/state_at_incoming/tests.rs index bf7e0035b..c1d4c0ef9 100644 --- a/src/service/rooms/event_handler/state_at_incoming/tests.rs +++ b/src/service/rooms/event_handler/state_at_incoming/tests.rs @@ -222,7 +222,8 @@ async fn test_services() -> (Arc, std::path::PathBuf) { "database_path": path, "db_cache_capacity_mb": 16.0, "rocksdb_write_buffer_capacity_mb": 4.0, - "allow_local_presence": false + "allow_local_presence": false, + "dns_servers": ["127.0.0.1"] })) .unwrap(); let runtime = tokio::runtime::Handle::current();