Send the HELO hostname to the HeloChecker.
This commit is contained in:
parent
95ed425097
commit
50ed5fd57a
5 changed files with 15 additions and 10 deletions
3
.hgignore
Normal file
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")
|
||||
}
|
||||
|
|
11
protocol.go
11
protocol.go
|
@ -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 {
|
||||
|
|
2
smtpd.go
2
smtpd.go
|
@ -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")
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue