Skip to content

Commit

Permalink
Do not require authority for UNIX domain sockets
Browse files Browse the repository at this point in the history
Copy from hyperium#487
Thanks for the help from Sascha Grunert.
  • Loading branch information
mingliangli-lml committed Aug 24, 2022
1 parent 88b0789 commit 613eb4f
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1465,14 +1465,20 @@ impl proto::Peer for Peer {
// A request translated from HTTP/1 must not include the :authority
// header
if let Some(authority) = pseudo.authority {
let maybe_authority = uri::Authority::from_maybe_shared(authority.clone().into_inner());
parts.authority = Some(maybe_authority.or_else(|why| {
malformed!(
"malformed headers: malformed authority ({:?}): {}",
authority,
why,
)
})?);
// When connecting to a UNIX Domain Socket (UDS), then we might get a path for the
// authority field. If it's a local path and exists, then we do not error in that case
// and assume an UDS.
if !authority.is_empty() && !authority.ends_with(".sock") {
let maybe_authority =
uri::Authority::from_maybe_shared(authority.clone().into_inner());
parts.authority = Some(maybe_authority.or_else(|why| {
malformed!(
"malformed headers: malformed authority ({:?}): {}",
authority,
why,
)
})?);
}
}

// A :scheme is required, except CONNECT.
Expand Down

0 comments on commit 613eb4f

Please sign in to comment.