Reset envelope on duplicate HELO/EHLO and after DATA.

This commit is contained in:
Christian Joergensen 2014-07-17 16:49:58 +02:00
parent a0c514f12d
commit 46b3a7668e

View file

@ -93,6 +93,11 @@ func (session *session) handleHELO(cmd command) {
return
}
if session.peer.HeloName != "" {
// Reset envelope in case of duplicate HELO
session.envelope = nil
}
session.peer.HeloName = cmd.fields[1]
if session.server.HeloChecker != nil {
@ -116,6 +121,11 @@ func (session *session) handleEHLO(cmd command) {
return
}
if session.peer.HeloName != "" {
// Reset envelope in case of duplicate EHLO
session.envelope = nil
}
session.peer.HeloName = cmd.fields[1]
if session.server.HeloChecker != nil {
@ -152,6 +162,11 @@ func (session *session) handleMAIL(cmd command) {
return
}
if session.envelope != nil {
session.reply(502, "Duplicate MAIL")
return
}
addr, err := parseAddress(cmd.params[1])
if err != nil {
@ -228,8 +243,8 @@ func (session *session) handleSTARTTLS(cmd command) {
return
}
// Reset HeloName as a new EHLO/HELO is required after STARTTLS
session.peer.HeloName = ""
// Reset envelope as a new EHLO/HELO is required after STARTTLS
session.envelope = nil
// Reset deadlines on the underlying connection before I replace it
// with a TLS connection
@ -270,12 +285,15 @@ func (session *session) handleDATA(cmd command) {
// Accept and deliver message
session.envelope.Data = data.Bytes()
if err := session.deliver(); err != nil {
session.error(err)
} else {
session.reply(250, "Thank you.")
}
session.envelope = nil
}
if err != nil {
@ -296,6 +314,8 @@ func (session *session) handleDATA(cmd command) {
session.server.MaxMessageSize,
))
session.envelope = nil
return
}