Skip to content
This repository was archived by the owner on Jul 21, 2021. It is now read-only.

Commit c781938

Browse files
authored
Merge pull request decke#11 from JonathonReinhart/minor-cleanup-fixes
Minor cleanup and fixes
2 parents 0e8986c + 009ae8f commit c781938

File tree

2 files changed

+65
-65
lines changed

2 files changed

+65
-65
lines changed

cmd/hasher.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ import (
88
)
99

1010
func main() {
11+
if len(os.Args) != 2 {
12+
fmt.Fprintln(os.Stderr, "Usage: hasher PASSWORD")
13+
os.Exit(1)
14+
}
1115
password := os.Args[1]
1216

1317
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
1418
if err != nil {
15-
fmt.Println("Error generating hash: %s", err)
19+
fmt.Fprintln(os.Stderr, "Error generating hash: %s", err)
1620
}
1721
fmt.Println(string(hash))
1822
}

main.go

Lines changed: 60 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func connectionChecker(peer smtpd.Peer) error {
3333
}
3434
}
3535

36+
log.Printf("Connection from peer=[%s] denied: Not in allowed_nets\n", peerIP)
3637
return smtpd.Error{Code: 421, Message: "Denied"}
3738
}
3839

@@ -84,10 +85,13 @@ func senderChecker(peer smtpd.Peer, addr string) error {
8485
if *allowedUsers != "" && peer.Username != "" {
8586
user, err := AuthFetch(peer.Username)
8687
if err != nil {
88+
// Shouldn't happen: authChecker already validated username+password
8789
return smtpd.Error{Code: 451, Message: "Bad sender address"}
8890
}
8991

9092
if !addrAllowed(addr, user.allowedAddresses) {
93+
log.Printf("Mail from=<%s> not allowed for authenticated user %s (%v)\n",
94+
addr, peer.Username, peer.Addr)
9195
return smtpd.Error{Code: 451, Message: "Bad sender address"}
9296
}
9397
}
@@ -106,6 +110,8 @@ func senderChecker(peer smtpd.Peer, addr string) error {
106110
return nil
107111
}
108112

113+
log.Printf("Mail from=<%s> not allowed by allowed_sender pattern for peer %v\n",
114+
addr, peer.Addr)
109115
return smtpd.Error{Code: 451, Message: "Bad sender address"}
110116
}
111117

@@ -124,13 +130,15 @@ func recipientChecker(peer smtpd.Peer, addr string) error {
124130
return nil
125131
}
126132

133+
log.Printf("Mail to=<%s> not allowed by allowed_recipients pattern for peer %v\n",
134+
addr, peer.Addr)
127135
return smtpd.Error{Code: 451, Message: "Bad recipient address"}
128136
}
129137

130138
func authChecker(peer smtpd.Peer, username string, password string) error {
131139
err := AuthCheckPassword(username, password)
132140
if err != nil {
133-
log.Printf("Auth error: %v\n", err)
141+
log.Printf("Auth error for peer %v: %v\n", peer.Addr, err)
134142
return smtpd.Error{Code: 535, Message: "Authentication credentials invalid"}
135143
}
136144
return nil
@@ -188,7 +196,7 @@ func mailHandler(peer smtpd.Peer, env smtpd.Envelope) error {
188196
return nil
189197
}
190198

191-
func main() {
199+
func getTLSConfig() *tls.Config {
192200
// Ciphersuites as defined in stock Go but without 3DES and RC4
193201
// https://golang.org/src/crypto/tls/cipher_suites.go
194202
var tlsCipherSuites = []uint16{
@@ -214,6 +222,24 @@ func main() {
214222
tls.TLS_RSA_WITH_AES_256_CBC_SHA,
215223
}
216224

225+
if *localCert == "" || *localKey == "" {
226+
log.Fatal("TLS certificate/key not defined in config")
227+
}
228+
229+
cert, err := tls.LoadX509KeyPair(*localCert, *localKey)
230+
if err != nil {
231+
log.Fatal(err)
232+
}
233+
234+
return &tls.Config{
235+
PreferServerCipherSuites: true,
236+
MinVersion: tls.VersionTLS11,
237+
CipherSuites: tlsCipherSuites,
238+
Certificates: []tls.Certificate{cert},
239+
}
240+
}
241+
242+
func main() {
217243
ConfigLoad()
218244

219245
if *versionInfo {
@@ -231,11 +257,16 @@ func main() {
231257
log.SetOutput(io.MultiWriter(os.Stdout, f))
232258
}
233259

234-
listeners := strings.Split(*listen, " ")
235-
236-
for i := range listeners {
237-
listener := listeners[i]
260+
// Load allowed users file
261+
if *allowedUsers != "" {
262+
err := AuthLoadFile(*allowedUsers)
263+
if err != nil {
264+
log.Fatalf("Authentication file: %s\n", err)
265+
}
266+
}
238267

268+
// Create a server for each desired listen address
269+
for _, listenAddr := range strings.Split(*listen, " ") {
239270
server := &smtpd.Server{
240271
Hostname: *hostName,
241272
WelcomeMessage: *welcomeMsg,
@@ -246,76 +277,41 @@ func main() {
246277
}
247278

248279
if *allowedUsers != "" {
249-
err := AuthLoadFile(*allowedUsers)
250-
if err != nil {
251-
log.Fatalf("Authentication file: %s\n", err)
252-
}
253-
254280
server.Authenticator = authChecker
255281
}
256282

257-
if strings.Index(listeners[i], "://") == -1 {
258-
log.Printf("Listen on %s ...\n", listener)
259-
go server.ListenAndServe(listener)
260-
} else if strings.HasPrefix(listeners[i], "starttls://") {
261-
listener = strings.TrimPrefix(listener, "starttls://")
283+
var lsnr net.Listener
284+
var err error
262285

263-
if *localCert == "" || *localKey == "" {
264-
log.Fatal("TLS certificate/key not defined in config")
265-
}
286+
if strings.Index(listenAddr, "://") == -1 {
287+
log.Printf("Listen on %s ...\n", listenAddr)
266288

267-
cert, err := tls.LoadX509KeyPair(*localCert, *localKey)
268-
if err != nil {
269-
log.Fatal(err)
270-
}
289+
lsnr, err = net.Listen("tcp", listenAddr)
290+
} else if strings.HasPrefix(listenAddr, "starttls://") {
291+
listenAddr = strings.TrimPrefix(listenAddr, "starttls://")
271292

272-
server.TLSConfig = &tls.Config{
273-
PreferServerCipherSuites: true,
274-
MinVersion: tls.VersionTLS11,
275-
CipherSuites: tlsCipherSuites,
276-
Certificates: []tls.Certificate{cert},
277-
}
293+
server.TLSConfig = getTLSConfig()
278294
server.ForceTLS = *localForceTLS
279295

280-
log.Printf("Listen on %s (STARTSSL) ...\n", listener)
281-
lsnr, err := net.Listen("tcp", listener)
282-
if err != nil {
283-
log.Fatal(err)
284-
}
285-
defer lsnr.Close()
286-
287-
go server.Serve(lsnr)
288-
} else if strings.HasPrefix(listeners[i], "tls://") {
289-
290-
listener = strings.TrimPrefix(listener, "tls://")
291-
292-
if *localCert == "" || *localKey == "" {
293-
log.Fatal("TLS certificate/key not defined in config")
294-
}
295-
296-
cert, err := tls.LoadX509KeyPair(*localCert, *localKey)
297-
if err != nil {
298-
log.Fatal(err)
299-
}
300-
301-
server.TLSConfig = &tls.Config{
302-
PreferServerCipherSuites: true,
303-
MinVersion: tls.VersionTLS11,
304-
CipherSuites: tlsCipherSuites,
305-
Certificates: []tls.Certificate{cert},
306-
}
296+
log.Printf("Listen on %s (STARTTLS) ...\n", listenAddr)
297+
lsnr, err = net.Listen("tcp", listenAddr)
298+
} else if strings.HasPrefix(listenAddr, "tls://") {
299+
listenAddr = strings.TrimPrefix(listenAddr, "tls://")
307300

308-
log.Printf("Listen on %s (TLS) ...\n", listener)
309-
lsnr, err := tls.Listen("tcp", listener, server.TLSConfig)
310-
if err != nil {
311-
log.Fatal(err)
312-
}
313-
defer lsnr.Close()
301+
server.TLSConfig = getTLSConfig()
314302

315-
go server.Serve(lsnr)
303+
log.Printf("Listen on %s (TLS) ...\n", listenAddr)
304+
lsnr, err = tls.Listen("tcp", listenAddr, server.TLSConfig)
316305
} else {
317-
log.Fatal("Unknown protocol in listener ", listener)
306+
log.Fatal("Unknown protocol in listen address ", listenAddr)
318307
}
308+
309+
if err != nil {
310+
log.Fatal(err)
311+
}
312+
defer lsnr.Close()
313+
314+
go server.Serve(lsnr)
319315
}
320316

321317
for true {

0 commit comments

Comments
 (0)