Procházet zdrojové kódy

Fix: use MeekConfig.HostHeader value in MeekModePlaintextRoundTrip

- Explicit Host header config value was ignored and request URL host
  was used instead.
Rod Hynes před 4 roky
rodič
revize
7d9a05d439
1 změnil soubory, kde provedl 12 přidání a 1 odebrání
  1. 12 1
      psiphon/meekConn.go

+ 12 - 1
psiphon/meekConn.go

@@ -134,7 +134,6 @@ type MeekConfig struct {
 
 	// UseObfuscatedSessionTickets indicates whether to use obfuscated session
 	// tickets. Assumes UseHTTPS is true. Ignored for MeekModePlaintextRoundTrip.
-	//
 	UseObfuscatedSessionTickets bool
 
 	// SNIServerName is the value to place in the TLS/QUIC SNI server_name field
@@ -637,6 +636,14 @@ func DialMeek(
 		meek.meekObfuscatedKey = meekConfig.MeekObfuscatedKey
 		meek.meekObfuscatorPaddingSeed = meekConfig.MeekObfuscatorPaddingSeed
 		meek.clientTunnelProtocol = meekConfig.ClientTunnelProtocol
+
+	} else if meek.mode == MeekModePlaintextRoundTrip {
+
+		// MeekModeRelay and MeekModeObfuscatedRoundTrip set the Host header
+		// implicitly via meek.url; MeekModePlaintextRoundTrip does not use
+		// meek.url; it uses the RoundTrip input request.URL instead. So the
+		// Host header is set to meekConfig.HostHeader explicitly here.
+		meek.additionalHeaders.Add("Host", meekConfig.HostHeader)
 	}
 
 	return meek, nil
@@ -834,6 +841,10 @@ func (meek *MeekConn) RoundTrip(request *http.Request) (*http.Response, error) {
 
 	requestCtx := request.Context()
 
+	// Clone the request to apply addtional headers without modifying the input.
+	request = request.Clone(requestCtx)
+	meek.addAdditionalHeaders(request)
+
 	// The setDialerRequestContext/CloseIdleConnections concurrency note in
 	// ObfuscatedRoundTrip applies to RoundTrip as well.