mirror of
https://github.com/mjl-/mox.git
synced 2024-12-27 08:53:48 +03:00
listen/bind in deterministic order for consistent error messages, and warn if quickstart cannot find public ip's
without public ip's, the generated mox config will try to listen on 0.0.0.0 and ::, but because there is already a listener for 127.0.0.1:80 (and possibly others), a bind for 0.0.0.0:80 will fail. explicit public ip's are needed. the public http listener is useful for ACME validation over http. for issue #52
This commit is contained in:
parent
01bcd98a42
commit
038b478d16
4 changed files with 40 additions and 6 deletions
15
http/web.go
15
http/web.go
|
@ -18,6 +18,8 @@ import (
|
||||||
|
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
|
|
||||||
|
"golang.org/x/exp/maps"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
@ -362,7 +364,13 @@ func Listen() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, l := range mox.Conf.Static.Listeners {
|
// Initialize listeners in deterministic order for the same potential error
|
||||||
|
// messages.
|
||||||
|
names := maps.Keys(mox.Conf.Static.Listeners)
|
||||||
|
sort.Strings(names)
|
||||||
|
for _, name := range names {
|
||||||
|
l := mox.Conf.Static.Listeners[name]
|
||||||
|
|
||||||
portServe := map[int]*serve{}
|
portServe := map[int]*serve{}
|
||||||
|
|
||||||
var ensureServe func(https bool, port int, kind string) *serve
|
var ensureServe func(https bool, port int, kind string) *serve
|
||||||
|
@ -546,7 +554,10 @@ func Listen() {
|
||||||
ensureManagerHosts[m] = hosts
|
ensureManagerHosts[m] = hosts
|
||||||
}
|
}
|
||||||
|
|
||||||
for port, srv := range portServe {
|
ports := maps.Keys(portServe)
|
||||||
|
sort.Ints(ports)
|
||||||
|
for _, port := range ports {
|
||||||
|
srv := portServe[port]
|
||||||
sort.Slice(srv.PathHandlers, func(i, j int) bool {
|
sort.Slice(srv.PathHandlers, func(i, j int) bool {
|
||||||
a := srv.PathHandlers[i].Path
|
a := srv.PathHandlers[i].Path
|
||||||
b := srv.PathHandlers[j].Path
|
b := srv.PathHandlers[j].Path
|
||||||
|
|
|
@ -57,11 +57,12 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
|
||||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
|
||||||
"golang.org/x/exp/maps"
|
"golang.org/x/exp/maps"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||||
|
|
||||||
"github.com/mjl-/bstore"
|
"github.com/mjl-/bstore"
|
||||||
|
|
||||||
"github.com/mjl-/mox/config"
|
"github.com/mjl-/mox/config"
|
||||||
|
@ -307,7 +308,11 @@ type msgseq uint32
|
||||||
|
|
||||||
// Listen initializes all imap listeners for the configuration, and stores them for Serve to start them.
|
// Listen initializes all imap listeners for the configuration, and stores them for Serve to start them.
|
||||||
func Listen() {
|
func Listen() {
|
||||||
for name, listener := range mox.Conf.Static.Listeners {
|
names := maps.Keys(mox.Conf.Static.Listeners)
|
||||||
|
sort.Strings(names)
|
||||||
|
for _, name := range names {
|
||||||
|
listener := mox.Conf.Static.Listeners[name]
|
||||||
|
|
||||||
var tlsConfig *tls.Config
|
var tlsConfig *tls.Config
|
||||||
if listener.TLS != nil {
|
if listener.TLS != nil {
|
||||||
tlsConfig = listener.TLS.Config
|
tlsConfig = listener.TLS.Config
|
||||||
|
|
|
@ -457,6 +457,17 @@ listed in more DNS block lists, visit:
|
||||||
fmt.Printf(" OK\n")
|
fmt.Printf(" OK\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(publicIPs) == 0 {
|
||||||
|
log.Printf(`WARNING: Could not find your public IP address(es). The "public" listener is
|
||||||
|
configured to listen on 0.0.0.0 (IPv4) and :: (IPv6). If you don't change these
|
||||||
|
to your actual public IP addresses, you will likely get "address in use" errors
|
||||||
|
when starting mox because the "internal" listener binds to a specific IP
|
||||||
|
address on the same port(s).
|
||||||
|
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Printf("\n")
|
fmt.Printf("\n")
|
||||||
|
|
||||||
user := "mox"
|
user := "mox"
|
||||||
|
|
|
@ -19,11 +19,14 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/exp/maps"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||||
|
|
||||||
|
@ -175,7 +178,11 @@ func durationDefault(delay *time.Duration, def time.Duration) time.Duration {
|
||||||
// Listen initializes network listeners for incoming SMTP connection.
|
// Listen initializes network listeners for incoming SMTP connection.
|
||||||
// The listeners are stored for a later call to Serve.
|
// The listeners are stored for a later call to Serve.
|
||||||
func Listen() {
|
func Listen() {
|
||||||
for name, listener := range mox.Conf.Static.Listeners {
|
names := maps.Keys(mox.Conf.Static.Listeners)
|
||||||
|
sort.Strings(names)
|
||||||
|
for _, name := range names {
|
||||||
|
listener := mox.Conf.Static.Listeners[name]
|
||||||
|
|
||||||
var tlsConfig *tls.Config
|
var tlsConfig *tls.Config
|
||||||
if listener.TLS != nil {
|
if listener.TLS != nil {
|
||||||
tlsConfig = listener.TLS.Config
|
tlsConfig = listener.TLS.Config
|
||||||
|
|
Loading…
Reference in a new issue