~emersion/tlstunnel

18dd507ea55ee473984e7e09e631a4da9d70c036 — Simon Ser 6 days ago fd46214
Don't try to guess listening address

Always listen on all hosts. Only use the host part of a frontend
address for TLS cert names.

Customizing the listen host will be better done with a `bind`
directive, like Caddy does.
2 files changed, 9 insertions(+), 13 deletions(-)

M cmd/tlstunnel/main.go
M directives.go
M cmd/tlstunnel/main.go => cmd/tlstunnel/main.go +1 -1
@@ 9,7 9,7 @@ import (
)

var (
	configPath = "config"
	configPath   = "config"
	certDataPath = ""
)


M directives.go => directives.go +8 -12
@@ 38,25 38,21 @@ func parseFrontend(srv *Server, d *Directive) error {
		return err
	}

	for _, listenAddr := range d.Params {
		host, port, err := net.SplitHostPort(listenAddr)
	for _, addr := range d.Params {
		host, port, err := net.SplitHostPort(addr)
		if err != nil {
			return fmt.Errorf("failed to parse listen address %q: %v", listenAddr, err)
			return fmt.Errorf("failed to parse frontend address %q: %v", addr, err)
		}

		// TODO: come up with something more robust
		var name string
		if host != "" && host != "localhost" && net.ParseIP(host) == nil {
			name = host
			host = ""

			srv.ManagedNames = append(srv.ManagedNames, name)
		if host != "" {
			srv.ManagedNames = append(srv.ManagedNames, host)
		}

		addr := net.JoinHostPort(host, port)
		// TODO: allow to customize listen host
		addr := net.JoinHostPort("", port)

		ln := srv.RegisterListener(addr)
		if err := ln.RegisterFrontend(name, frontend); err != nil {
		if err := ln.RegisterFrontend(host, frontend); err != nil {
			return err
		}
	}