Skip to content

Commit 2bb56e3

Browse files
authored
Merge pull request #547 from Dstack-TEE/fix/gateway-tls-passthrough-error-context
fix: include SNI in gateway TLS passthrough error messages
2 parents 471aa48 + 511a21d commit 2bb56e3

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

gateway/src/proxy/tls_passthough.rs

Lines changed: 18 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,22 @@ 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(|| {
78+
format!("failed to lookup wildcard app address for {sni} via {wildcard_domain}")
79+
})?;
80+
let txt_record = lookup
81+
.iter()
82+
.next()
83+
.with_context(|| format!("no txt record found for {sni} via {wildcard_domain}"))?;
7784
let data = txt_record
7885
.txt_data()
7986
.first()
80-
.context("no data in txt record")?;
81-
return AppAddress::parse(data).context("failed to parse app address");
87+
.with_context(|| format!("no data in txt record for {sni} via {wildcard_domain}"))?;
88+
return AppAddress::parse(data).with_context(|| {
89+
format!("failed to parse app address for {sni} via {wildcard_domain}")
90+
});
8291
}
8392

8493
anyhow::bail!("failed to resolve app address for {sni}");
@@ -95,8 +104,8 @@ pub(crate) async fn proxy_with_sni(
95104
let dns_timeout = state.config.proxy.timeouts.dns_resolve;
96105
let addr = timeout(dns_timeout, resolve_app_address(ns_prefix, sni, compat))
97106
.await
98-
.context("DNS TXT resolve timeout")?
99-
.context("failed to resolve app address")?;
107+
.with_context(|| format!("DNS TXT resolve timeout for {sni}"))?
108+
.with_context(|| format!("failed to resolve app address for {sni}"))?;
100109
debug!("target address is {}:{}", addr.app_id, addr.port);
101110
proxy_to_app(state, inbound, buffer, &addr.app_id, addr.port).await
102111
}

0 commit comments

Comments
 (0)