diff --git a/imapserver/server.go b/imapserver/server.go index d120ec0..e247104 100644 --- a/imapserver/server.go +++ b/imapserver/server.go @@ -1454,6 +1454,9 @@ func (c *conn) cmdStarttls(tag, cmd string, p *parser) { if c.tls { xsyntaxErrorf("tls already active") // ../rfc/9051:1353 } + if c.tlsConfig == nil { + xsyntaxErrorf("starttls not announced") + } conn := c.conn if n := c.br.Buffered(); n > 0 { diff --git a/smtpserver/server.go b/smtpserver/server.go index 4aefe26..5b1ccbb 100644 --- a/smtpserver/server.go +++ b/smtpserver/server.go @@ -931,6 +931,9 @@ func (c *conn) cmdStarttls(p *parser) { if c.account != nil { xsmtpUserErrorf(smtp.C503BadCmdSeq, smtp.SeProto5BadCmdOrSeq1, "cannot starttls after authentication") } + if c.tlsConfig == nil { + xsmtpUserErrorf(smtp.C503BadCmdSeq, smtp.SeProto5BadCmdOrSeq1, "starttls not offered") + } // We don't want to do TLS on top of c.r because it also prints protocol traces: We // don't want to log the TLS stream. So we'll do TLS on the underlying connection,