From 7c3ceeeaef145471c6423ae833a225d9c6c88cec Mon Sep 17 00:00:00 2001 From: Nuno Diegues Date: Thu, 14 Jan 2021 13:08:55 +0000 Subject: [PATCH] TUN-3757: Fix legacy Uint flags that are incorrectly handled by ufarve library The following UInt flags: * Uint64 - heartbeat-count, compression-quality * Uint - retries, port, proxy-port were not being correctly picked from the configuration YAML since the multi origin refactor This is due to a limitation of the ufarve library, which we overcome for now with handling those as Int flags. --- cmd/cloudflared/tunnel/cmd.go | 10 +++++++--- cmd/cloudflared/tunnel/configuration.go | 9 ++++++--- ingress/origin_request_config.go | 3 ++- tunneldns/tunnel.go | 4 +++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index 01d09a5b..e214ab1e 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -622,13 +622,15 @@ func tunnelFlags(shouldHide bool) []cli.Flag { Value: time.Second * 5, Hidden: true, }), - altsrc.NewUint64Flag(&cli.Uint64Flag{ + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + altsrc.NewIntFlag(&cli.IntFlag{ Name: "heartbeat-count", Usage: "Minimum number of unacked heartbeats to send before closing the connection.", Value: 5, Hidden: true, }), - altsrc.NewUintFlag(&cli.UintFlag{ + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + altsrc.NewIntFlag(&cli.IntFlag{ Name: "retries", Value: 5, Usage: "Maximum number of retries for connection/protocol errors.", @@ -647,7 +649,8 @@ func tunnelFlags(shouldHide bool) []cli.Flag { EnvVars: []string{"TUNNEL_GRACE_PERIOD"}, Hidden: true, }), - altsrc.NewUintFlag(&cli.UintFlag{ + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + altsrc.NewIntFlag(&cli.IntFlag{ Name: "compression-quality", Value: 0, Usage: "(beta) Use cross-stream compression instead HTTP compression. 0-off, 1-low, 2-medium, >=3-high.", @@ -932,6 +935,7 @@ func sshFlags(shouldHide bool) []cli.Flag { EnvVars: []string{"TUNNEL_PROXY_ADDRESS"}, Hidden: shouldHide, }), + // Note TUN-3758 , we use Int because UInt is not supported with altsrc altsrc.NewIntFlag(&cli.IntFlag{ Name: ingress.ProxyPortFlag, Usage: "Listen port for the proxy.", diff --git a/cmd/cloudflared/tunnel/configuration.go b/cmd/cloudflared/tunnel/configuration.go index 8a8ee908..43729380 100644 --- a/cmd/cloudflared/tunnel/configuration.go +++ b/cmd/cloudflared/tunnel/configuration.go @@ -262,8 +262,10 @@ func prepareTunnelConfig( } muxerConfig := &connection.MuxerConfig{ HeartbeatInterval: c.Duration("heartbeat-interval"), - MaxHeartbeats: c.Uint64("heartbeat-count"), - CompressionSetting: h2mux.CompressionSetting(c.Uint64("compression-quality")), + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + MaxHeartbeats: uint64(c.Int("heartbeat-count")), + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + CompressionSetting: h2mux.CompressionSetting(uint64(c.Int("compression-quality"))), MetricsUpdateFreq: c.Duration("metrics-update-freq"), } @@ -281,7 +283,8 @@ func prepareTunnelConfig( Log: log, Observer: connection.NewObserver(transportLogger, eventChans, isUIEnabled), ReportedVersion: version, - Retries: c.Uint("retries"), + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + Retries: uint(c.Int("retries")), RunFromTerminal: isRunningFromTerminal(), NamedTunnel: namedTunnel, ClassicTunnel: classicTunnel, diff --git a/ingress/origin_request_config.go b/ingress/origin_request_config.go index a71607a6..7486a799 100644 --- a/ingress/origin_request_config.go +++ b/ingress/origin_request_config.go @@ -92,7 +92,8 @@ func originRequestFromSingeRule(c *cli.Context) OriginRequestConfig { proxyAddress = c.String(flag) } if flag := ProxyPortFlag; c.IsSet(flag) { - proxyPort = c.Uint(flag) + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + proxyPort = uint(c.Int(flag)) } if c.IsSet(Socks5Flag) { proxyType = socksProxy diff --git a/tunneldns/tunnel.go b/tunneldns/tunnel.go index 315ad1fc..2c006ac8 100644 --- a/tunneldns/tunnel.go +++ b/tunneldns/tunnel.go @@ -50,6 +50,7 @@ func Command(hidden bool) *cli.Command { Value: "localhost", EnvVars: []string{"TUNNEL_DNS_ADDRESS"}, }, + // Note TUN-3758 , we use Int because UInt is not supported with altsrc &cli.IntFlag{ Name: "port", Usage: "Listen on given port for the DNS over HTTPS proxy server.", @@ -87,7 +88,8 @@ func Run(c *cli.Context) error { listener, err := CreateListener( c.String("address"), - uint16(c.Uint("port")), + // Note TUN-3758 , we use Int because UInt is not supported with altsrc + uint16(c.Int("port")), c.StringSlice("upstream"), c.StringSlice("bootstrap"), log,