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