Support TLS listeners (fixes issue #2).

This commit is contained in:
Christian Joergensen 2017-10-09 20:05:15 +02:00
parent b2cb7a02c3
commit 52e449011b
2 changed files with 57 additions and 0 deletions

View file

@ -110,6 +110,11 @@ func (srv *Server) newSession(c net.Conn) (s *session) {
},
}
// Check if the underlying connection is already TLS.
// This will happen if the Listerner provided Serve()
// is from tls.Listen()
__, s.tls = c.(*tls.Conn)
s.scanner = bufio.NewScanner(s.reader)
return

View file

@ -1191,3 +1191,55 @@ func TestMailformedMAILFROM(t *testing.T) {
t.Fatalf("Quit failed: %v", err)
}
}
func TestTLSListener(t *testing.T) {
cert, err := tls.X509KeyPair(localhostCert, localhostKey)
if err != nil {
t.Fatalf("Cert load failed: %v", err)
}
cfg := &tls.Config{
Certificates: []tls.Certificate{cert},
}
ln, err := tls.Listen("tcp", "127.0.0.1:0", cfg)
defer ln.Close()
addr := ln.Addr().String()
server := &smtpd.Server{
Authenticator: func(peer smtpd.Peer, username, password string) error { return nil },
}
go func() {
server.Serve(ln)
}()
conn, err := tls.Dial("tcp", addr, &tls.Config{InsecureSkipVerify: true})
if err != nil {
t.Fatalf("couldn't connect to tls socket: %v", err)
}
c, err := smtp.NewClient(conn, "localhost")
if err != nil {
t.Fatalf("couldn't create client: %v", err)
}
if err := c.Hello("localhost"); err != nil {
t.Fatalf("HELO failed: %v", err)
}
if err := cmd(c.Text, 334, "AUTH PLAIN"); err != nil {
t.Fatalf("AUTH didn't work: %v", err)
}
if err := cmd(c.Text, 235, "Zm9vAGJhcgBxdXV4"); err != nil {
t.Fatalf("AUTH didn't work: %v", err)
}
if err := c.Quit(); err != nil {
t.Fatalf("Quit failed: %v", err)
}
}