Send the HELO hostname to the HeloChecker.

This commit is contained in:
Christian Joergensen 2014-07-18 08:46:39 +02:00
parent 46b3a7668e
commit 97b38af3b4
5 changed files with 15 additions and 10 deletions

3
.hgignore Normal file

@ -0,0 +1,3 @@
syntax: glob
*.orig

@ -19,7 +19,7 @@ func ExampleServer() {
Addr: "0.0.0.0:10025",
HeloChecker: func(peer smtpd.Peer) error {
HeloChecker: func(peer smtpd.Peer, name string) error {
if !strings.HasPrefix(peer.Addr.String(), "42.42.42.42:") {
return errors.New("Denied")
}

@ -98,16 +98,15 @@ func (session *session) handleHELO(cmd command) {
session.envelope = nil
}
session.peer.HeloName = cmd.fields[1]
if session.server.HeloChecker != nil {
err := session.server.HeloChecker(session.peer)
err := session.server.HeloChecker(session.peer, cmd.fields[1])
if err != nil {
session.error(err)
return
}
}
session.peer.HeloName = cmd.fields[1]
session.reply(250, "Go ahead")
return
@ -126,16 +125,16 @@ func (session *session) handleEHLO(cmd command) {
session.envelope = nil
}
session.peer.HeloName = cmd.fields[1]
if session.server.HeloChecker != nil {
err := session.server.HeloChecker(session.peer)
err := session.server.HeloChecker(session.peer, cmd.fields[1])
if err != nil {
session.error(err)
return
}
}
session.peer.HeloName = cmd.fields[1]
extensions := session.extensions()
if len(extensions) > 1 {

@ -34,7 +34,7 @@ type Server struct {
// If an error is returned, it will be reported in the SMTP session.
// Use the Error struct for access to error codes.
ConnectionChecker func(peer Peer) error // Called upon new connection.
HeloChecker func(peer Peer) error // Called after HELO/EHLO.
HeloChecker func(peer Peer, name string) error // Called after HELO/EHLO.
SenderChecker func(peer Peer, addr string) error // Called after MAIL FROM.
RecipientChecker func(peer Peer, addr string) error // Called after each RCPT TO.

@ -378,7 +378,10 @@ func TestHELOCheck(t *testing.T) {
defer ln.Close()
server := &smtpd.Server{
HeloChecker: func(peer smtpd.Peer) error {
HeloChecker: func(peer smtpd.Peer, name string) error {
if name != "foobar.local" {
t.Fatal("Wrong HELO name")
}
return smtpd.Error{Code: 552, Message: "Denied"}
},
}
@ -392,7 +395,7 @@ func TestHELOCheck(t *testing.T) {
t.Fatalf("Dial failed: %v", err)
}
if err := c.Hello("localhost"); err == nil {
if err := c.Hello("foobar.local"); err == nil {
t.Fatal("Unexpected HELO success")
}