Upgrade to hickory 0.25

This also solves a security advisory that could have lead to a denail of service via the ring crate.
This commit is contained in:
Slatian
2025-03-19 21:19:05 +01:00
parent 7130c0d94a
commit e81ce74a2f
5 changed files with 707 additions and 210 deletions

View File

@ -22,8 +22,8 @@ use axum_extra::headers;
use axum_extra::TypedHeader;
use clap::Parser;
use env_logger::Env;
use hickory_resolver::Name;
use hickory_resolver::TokioAsyncResolver;
use hickory_resolver::{name_server::TokioConnectionProvider, system_conf::read_system_conf, Name, ResolveError, Resolver};
use hickory_resolver::TokioResolver;
use log::{info,warn,error};
use regex::Regex;
use serde::{Deserialize,Serialize};
@ -108,7 +108,7 @@ pub struct DigResult {
struct ServiceSharedState {
templating_engine: TemplatingEngine,
dns_resolvers: HashMap<Arc<str>,TokioAsyncResolver>,
dns_resolvers: HashMap<Arc<str>,TokioResolver>,
dns_resolver_aliases: HashMap<Arc<str>,Arc<str>>,
asn_db: geoip::MMDBCarrier,
location_db: geoip::MMDBCarrier,
@ -215,21 +215,24 @@ async fn main() {
info!("Initalizing dns resolvers ...");
let mut dns_resolver_selectables = Vec::<Selectable>::new();
let mut dns_resolver_map: HashMap<Arc<str>,TokioAsyncResolver> = HashMap::new();
let mut dns_resolver_map: HashMap<Arc<str>,TokioResolver> = HashMap::new();
let mut dns_resolver_aliases: HashMap<Arc<str>,Arc<str>> = HashMap::new();
if config.dns.enable_system_resolver {
info!("Initalizing System resolver ...");
let res = TokioAsyncResolver::tokio_from_system_conf();
let resolver = match res {
Ok(resolver) => resolver,
match initalize_system_resolver() {
Ok(resolver) => {
info!("System resolver successfully Initalized.");
dns_resolver_map.insert(
config.dns.system_resolver_id.clone(),
resolver
);
},
Err(e) => {
info!("Error while setting up dns resolver: {e}");
error!("Problem setting up system resolver: {e}");
::std::process::exit(1);
}
};
dns_resolver_map.insert(config.dns.system_resolver_id.clone(), resolver);
dns_resolver_selectables.push(Selectable {
id: config.dns.system_resolver_id.clone(),
name: config.dns.system_resolver_name.clone(),
@ -239,10 +242,10 @@ async fn main() {
for (key, resolver_config) in &config.dns.resolver {
info!("Initalizing {} resolver ...", key);
let resolver = TokioAsyncResolver::tokio(
let resolver = TokioResolver::builder_with_config(
resolver_config.to_hickory_resolver_config(),
Default::default()
);
).build();
dns_resolver_map.insert(key.clone(), resolver);
dns_resolver_selectables.push(Selectable {
id: key.clone(),
@ -331,6 +334,17 @@ async fn main() {
.unwrap();
}
fn initalize_system_resolver() -> Result<TokioResolver, ResolveError> {
let (system_conf, system_options) = read_system_conf()?;
let mut builder = Resolver::builder_with_config(
system_conf,
TokioConnectionProvider::default()
);
*builder.options_mut() = system_options;
return Ok(builder.build());
}
#[allow(clippy::too_many_arguments)]
async fn settings_query_middleware(
Query(query): Query<SettingsQuery>,