1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-23 15:37:01 +00:00

Only fail if there is no address to listen on at all, regardless of mode

Currently, chasquid exits if any mode (SMTP/submission/submission+tls)
has no addresses to listen on. This means that chasquid must be given
addresses for all three.

While that's generally the expected configuration, there are cases where
users may not want to have all three.

So this patch replaces that fatal error with a warning, and only makes
chasquid exit if there are no addresses to listen on at all.
This commit is contained in:
Alberto Bertogli
2017-04-11 23:34:55 +01:00
parent 7f5bedf4aa
commit 17eff21279
5 changed files with 14 additions and 15 deletions

View File

@@ -149,35 +149,38 @@ func main() {
log.Fatalf("Error getting systemd listeners: %v", err)
}
loadAddresses(s, conf.SmtpAddress,
naddr := loadAddresses(s, conf.SmtpAddress,
systemdLs["smtp"], smtpsrv.ModeSMTP)
loadAddresses(s, conf.SubmissionAddress,
naddr += loadAddresses(s, conf.SubmissionAddress,
systemdLs["submission"], smtpsrv.ModeSubmission)
loadAddresses(s, conf.SubmissionOverTlsAddress,
naddr += loadAddresses(s, conf.SubmissionOverTlsAddress,
systemdLs["submission_tls"], smtpsrv.ModeSubmissionTLS)
if naddr == 0 {
log.Fatalf("No address to listen on")
}
s.ListenAndServe()
}
func loadAddresses(srv *smtpsrv.Server, addrs []string, ls []net.Listener, mode smtpsrv.SocketMode) {
// Load addresses.
acount := 0
func loadAddresses(srv *smtpsrv.Server, addrs []string, ls []net.Listener, mode smtpsrv.SocketMode) int {
naddr := 0
for _, addr := range addrs {
// The "systemd" address indicates we get listeners via systemd.
if addr == "systemd" {
srv.AddListeners(ls, mode)
acount += len(ls)
naddr += len(ls)
} else {
srv.AddAddr(addr, mode)
acount++
naddr++
}
}
if acount == 0 {
log.Errorf("No %v addresses/listeners", mode)
if naddr == 0 {
log.Errorf("Warning: No %v addresses/listeners", mode)
log.Errorf("If using systemd, check that you named the sockets")
log.Fatalf("Exiting")
}
return naddr
}
func initMailLog(path string) {