do not perform MX and SMTP checks at all when they are disabled

This commit is contained in:
Aine
2022-11-17 23:34:14 +02:00
parent 2e712e0a67
commit e38d4b2fc5
6 changed files with 31 additions and 24 deletions

2
go.mod
View File

@@ -20,7 +20,7 @@ require (
gitlab.com/etke.cc/go/mxidwc v1.0.0 gitlab.com/etke.cc/go/mxidwc v1.0.0
gitlab.com/etke.cc/go/secgen v1.1.1 gitlab.com/etke.cc/go/secgen v1.1.1
gitlab.com/etke.cc/go/trysmtp v1.0.0 gitlab.com/etke.cc/go/trysmtp v1.0.0
gitlab.com/etke.cc/go/validator v1.0.3 gitlab.com/etke.cc/go/validator v1.0.4
gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6 gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6
golang.org/x/net v0.2.0 golang.org/x/net v0.2.0
maunium.net/go/mautrix v0.12.3 maunium.net/go/mautrix v0.12.3

4
go.sum
View File

@@ -99,8 +99,8 @@ gitlab.com/etke.cc/go/secgen v1.1.1 h1:RmKOki725HIhWJHzPtAc9X4YvBneczndchpMgoDkE
gitlab.com/etke.cc/go/secgen v1.1.1/go.mod h1:3pJqRGeWApzx7qXjABqz2o2SMCNpKSZao/gXVdasqE8= gitlab.com/etke.cc/go/secgen v1.1.1/go.mod h1:3pJqRGeWApzx7qXjABqz2o2SMCNpKSZao/gXVdasqE8=
gitlab.com/etke.cc/go/trysmtp v1.0.0 h1:f/7gSmzohKniVeLSLevI+ZsySYcPUGkT9cRlOTwjOr8= gitlab.com/etke.cc/go/trysmtp v1.0.0 h1:f/7gSmzohKniVeLSLevI+ZsySYcPUGkT9cRlOTwjOr8=
gitlab.com/etke.cc/go/trysmtp v1.0.0/go.mod h1:KqRuIB2IPElEEbAxXmFyKtm7S5YiuEb4lxwWthccqyE= gitlab.com/etke.cc/go/trysmtp v1.0.0/go.mod h1:KqRuIB2IPElEEbAxXmFyKtm7S5YiuEb4lxwWthccqyE=
gitlab.com/etke.cc/go/validator v1.0.3 h1:qkMskwtA3Uiv1q7HTlNZaaZcIJTO4mp2p0KZAl53Xmo= gitlab.com/etke.cc/go/validator v1.0.4 h1:2HIBP12f/RZr/7KTNH5/PgPTzl1vi7Co3lmhNTWB31A=
gitlab.com/etke.cc/go/validator v1.0.3/go.mod h1:3vdssRG4LwgdTr9IHz9MjGSEO+3/FO9hXPGMuSeweJ8= gitlab.com/etke.cc/go/validator v1.0.4/go.mod h1:3vdssRG4LwgdTr9IHz9MjGSEO+3/FO9hXPGMuSeweJ8=
gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6 h1:+HDT2/bx3Hug++aeDE/PaoRRcnKdYzEm6i2RlOAzPXo= gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6 h1:+HDT2/bx3Hug++aeDE/PaoRRcnKdYzEm6i2RlOAzPXo=
gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6/go.mod h1:Dgtu0qvymNjjky4Bu5WC8+iSohcb5xZ9CtkD3ezDqIA= gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6/go.mod h1:Dgtu0qvymNjjky4Bu5WC8+iSohcb5xZ9CtkD3ezDqIA=
golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=

View File

@@ -13,12 +13,20 @@ import (
"gitlab.com/etke.cc/postmoogle/utils" "gitlab.com/etke.cc/postmoogle/utils"
) )
// ErrBanned returned to banned hosts var (
var ErrBanned = &smtp.SMTPError{ // ErrBanned returned to banned hosts
Code: 554, ErrBanned = &smtp.SMTPError{
EnhancedCode: smtp.EnhancedCode{5, 5, 4}, Code: 554,
Message: "please, don't bother me anymore, kupo.", EnhancedCode: smtp.EnhancedCode{5, 5, 4},
} Message: "please, don't bother me anymore, kupo.",
}
// ErrNoUser returned when no such mailbox found
ErrNoUser = &smtp.SMTPError{
Code: 550,
EnhancedCode: smtp.EnhancedCode{5, 5, 0},
Message: "no such user here, kupo.",
}
)
type mailServer struct { type mailServer struct {
bot matrixbot bot matrixbot

View File

@@ -56,15 +56,13 @@ func (s *incomingSession) Rcpt(to string) error {
} }
if !domainok { if !domainok {
s.log.Debug("wrong domain of %s", to) s.log.Debug("wrong domain of %s", to)
s.ban(s.addr) return ErrNoUser
return ErrBanned
} }
roomID, ok := s.getRoomID(utils.Mailbox(to)) roomID, ok := s.getRoomID(utils.Mailbox(to))
if !ok { if !ok {
s.log.Debug("mapping for %s not found", to) s.log.Debug("mapping for %s not found", to)
s.ban(s.addr) return ErrNoUser
return ErrBanned
} }
validations := s.getFilters(roomID) validations := s.getFilters(roomID)
@@ -166,7 +164,7 @@ func validateEmail(from, to string, log *logger.Logger, options utils.IncomingFi
enforce := validator.Enforce{ enforce := validator.Enforce{
Email: true, Email: true,
MX: options.SpamcheckMX(), MX: options.SpamcheckMX(),
SMTP: options.SpamcheckMX(), SMTP: options.SpamcheckSMTP(),
} }
v := validator.New(options.Spamlist(), enforce, to, log) v := validator.New(options.Spamlist(), enforce, to, log)

View File

@@ -35,34 +35,35 @@ func (v *V) Email(email string) bool {
} }
} }
if v.emailMX(email) { if v.enforce.MX {
return false if v.emailNoMX(email) {
return false
}
} }
smtpCheck := !v.emailSMTP(email)
if v.enforce.SMTP { if v.enforce.SMTP {
return smtpCheck if v.emailNoSMTP(email) {
return false
}
} }
return true return true
} }
func (v *V) emailMX(email string) bool { func (v *V) emailNoMX(email string) bool {
at := strings.LastIndex(email, "@") at := strings.LastIndex(email, "@")
domain := email[at+1:] domain := email[at+1:]
nomx := !v.MX(domain) nomx := !v.MX(domain)
if nomx { if nomx {
v.log.Info("email %s domain %s invalid, reason: no MX", email, domain) v.log.Info("email %s domain %s invalid, reason: no MX", email, domain)
if v.enforce.MX { return true
return true
}
} }
return false return false
} }
func (v *V) emailSMTP(email string) bool { func (v *V) emailNoSMTP(email string) bool {
client, err := trysmtp.Connect(v.from, email) client, err := trysmtp.Connect(v.from, email)
if err != nil { if err != nil {
if strings.HasPrefix(err.Error(), "45") { if strings.HasPrefix(err.Error(), "45") {

2
vendor/modules.txt vendored
View File

@@ -127,7 +127,7 @@ gitlab.com/etke.cc/go/secgen
# gitlab.com/etke.cc/go/trysmtp v1.0.0 # gitlab.com/etke.cc/go/trysmtp v1.0.0
## explicit; go 1.18 ## explicit; go 1.18
gitlab.com/etke.cc/go/trysmtp gitlab.com/etke.cc/go/trysmtp
# gitlab.com/etke.cc/go/validator v1.0.3 # gitlab.com/etke.cc/go/validator v1.0.4
## explicit; go 1.18 ## explicit; go 1.18
gitlab.com/etke.cc/go/validator gitlab.com/etke.cc/go/validator
# gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6 # gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6