Skip to content

Commit 7e26854

Browse files
committed
fix: include SNI in gateway TLS passthrough error messages
Add SNI and queried domain names to all error contexts in resolve_app_address and proxy_with_sni for easier debugging.
1 parent 20091a8 commit 7e26854

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

gateway/src/proxy/tls_passthough.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ async fn resolve_app_address(prefix: &str, sni: &str, compat: bool) -> Result<Ap
5656
let Some(data) = txt_record.txt_data().first() else {
5757
continue;
5858
};
59-
return AppAddress::parse(data).context("failed to parse app address");
59+
return AppAddress::parse(data)
60+
.with_context(|| format!("failed to parse app address for {sni}"));
6061
}
6162
} else if let Ok(lookup) = resolver.txt_lookup(txt_domain).await {
6263
if let Some(txt_record) = lookup.iter().next() {
6364
if let Some(data) = txt_record.txt_data().first() {
64-
return AppAddress::parse(data).context("failed to parse app address");
65+
return AppAddress::parse(data)
66+
.with_context(|| format!("failed to parse app address for {sni}"));
6567
}
6668
}
6769
}
@@ -70,15 +72,17 @@ async fn resolve_app_address(prefix: &str, sni: &str, compat: bool) -> Result<Ap
7072
if let Some((_, parent)) = sni.split_once('.') {
7173
let wildcard_domain = format!("{prefix}-wildcard.{parent}");
7274
let lookup = resolver
73-
.txt_lookup(wildcard_domain)
75+
.txt_lookup(&wildcard_domain)
7476
.await
75-
.context("failed to lookup wildcard app address")?;
76-
let txt_record = lookup.iter().next().context("no txt record found")?;
77+
.with_context(|| format!("failed to lookup wildcard app address for {sni} via {wildcard_domain}"))?;
78+
let txt_record = lookup.iter().next()
79+
.with_context(|| format!("no txt record found for {sni} via {wildcard_domain}"))?;
7780
let data = txt_record
7881
.txt_data()
7982
.first()
80-
.context("no data in txt record")?;
81-
return AppAddress::parse(data).context("failed to parse app address");
83+
.with_context(|| format!("no data in txt record for {sni} via {wildcard_domain}"))?;
84+
return AppAddress::parse(data)
85+
.with_context(|| format!("failed to parse app address for {sni} via {wildcard_domain}"));
8286
}
8387

8488
anyhow::bail!("failed to resolve app address for {sni}");
@@ -95,8 +99,8 @@ pub(crate) async fn proxy_with_sni(
9599
let dns_timeout = state.config.proxy.timeouts.dns_resolve;
96100
let addr = timeout(dns_timeout, resolve_app_address(ns_prefix, sni, compat))
97101
.await
98-
.context("DNS TXT resolve timeout")?
99-
.context("failed to resolve app address")?;
102+
.with_context(|| format!("DNS TXT resolve timeout for {sni}"))?
103+
.with_context(|| format!("failed to resolve app address for {sni}"))?;
100104
debug!("target address is {}:{}", addr.app_id, addr.port);
101105
proxy_to_app(state, inbound, buffer, &addr.app_id, addr.port).await
102106
}

0 commit comments

Comments
 (0)