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


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)