Reset envelope on duplicate HELO/EHLO and after DATA.
This commit is contained in:
parent
2d30d62009
commit
95ed425097
1 changed files with 22 additions and 2 deletions
24
protocol.go
24
protocol.go
|
@ -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
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue