tinyhumansai/openhuman · error
DNS resolution failed for
Error message
DNS resolution failed for '{host}': {e} What it means
Error "DNS resolution failed for '{host}': {e}" thrown in tinyhumansai/openhuman.
When it happens
Trigger: Thrown at src/openhuman/tools/impl/network/url_guard.rs:156 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- DNS resolution errors: ENOTFOUND and getaddrinfo failures — how hostname lookups fail and how to debug them.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/2d8ff1b58316c113.
Report an issue: GitHub.
Appendix: source
Thrown at src/openhuman/tools/impl/network/url_guard.rs:156
if is_private_or_local_host(&ip_str) {
log::debug!("[url_guard] DNS rebinding blocked host={host} resolved_ip={ip_str}");
anyhow::bail!(
"DNS rebinding blocked: '{host}' resolved to private/local address {ip_str}"
);
}
}
Ok(url)
}
async fn resolve_host_ips(host: String, port: u16) -> anyhow::Result<Vec<IpAddr>> {
let log_host = host.clone();
tokio::task::spawn_blocking(move || {
(host.as_str(), port)
.to_socket_addrs()
.map_err(|e| {
log::debug!("[url_guard] DNS resolution failed host={host} port={port} error={e}");
anyhow::anyhow!("DNS resolution failed for '{host}': {e}")
})
.map(|iter| iter.map(|addr| addr.ip()).collect())
})
.await
.map_err(|e| {
log::debug!("[url_guard] DNS resolution task failed host={log_host} port={port} error={e}");
anyhow::anyhow!("DNS resolution task failed for '{log_host}': {e}")
})?
}
pub(super) fn normalize_allowed_domains(domains: Vec<String>) -> Vec<String> {
if domains.is_empty() {
return Vec::new();
}
let mut normalized = domains
.into_iter()
.filter_map(|d| normalize_domain(&d))
.collect::<Vec<_>>();View on GitHub (pinned to 7491200858)