reverseproxy: Permit resolver addresses to not specify a port (#4760)

Context: https://caddy.community/t/caddy-2-5-dynamic-upstreams-and-consul-srv-dns/15839

I realized it probably makes sense to allow `:53` to be omitted, since it's the default port for DNS.
This commit is contained in:
Francis Lavoie 2022-05-04 14:40:39 -04:00 committed by GitHub
parent e84e19a04e
commit e7fbee8c82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,6 +7,7 @@ import (
"net" "net"
"net/http" "net/http"
"strconv" "strconv"
"strings"
"sync" "sync"
"time" "time"
@ -372,7 +373,14 @@ func (u *UpstreamResolver) ParseAddresses() error {
for _, v := range u.Addresses { for _, v := range u.Addresses {
addr, err := caddy.ParseNetworkAddress(v) addr, err := caddy.ParseNetworkAddress(v)
if err != nil { if err != nil {
return err // If a port wasn't specified for the resolver,
// try defaulting to 53 and parse again
if strings.Contains(err.Error(), "missing port in address") {
addr, err = caddy.ParseNetworkAddress(v + ":53")
}
if err != nil {
return err
}
} }
if addr.PortRangeSize() != 1 { if addr.PortRangeSize() != 1 {
return fmt.Errorf("resolver address must have exactly one address; cannot call %v", addr) return fmt.Errorf("resolver address must have exactly one address; cannot call %v", addr)