From e38d4b2fc580a7dc09491d200a7652fbc0410ccf Mon Sep 17 00:00:00 2001 From: Aine Date: Thu, 17 Nov 2022 23:34:14 +0200 Subject: [PATCH] do not perform MX and SMTP checks at all when they are disabled --- go.mod | 2 +- go.sum | 4 ++-- smtp/server.go | 20 +++++++++++++------ smtp/session.go | 8 +++----- .../gitlab.com/etke.cc/go/validator/emails.go | 19 +++++++++--------- vendor/modules.txt | 2 +- 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index f7f0f06..30a43c0 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( gitlab.com/etke.cc/go/mxidwc v1.0.0 gitlab.com/etke.cc/go/secgen v1.1.1 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 golang.org/x/net v0.2.0 maunium.net/go/mautrix v0.12.3 diff --git a/go.sum b/go.sum index 9eb7521..3270104 100644 --- a/go.sum +++ b/go.sum @@ -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/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/validator v1.0.3 h1:qkMskwtA3Uiv1q7HTlNZaaZcIJTO4mp2p0KZAl53Xmo= -gitlab.com/etke.cc/go/validator v1.0.3/go.mod h1:3vdssRG4LwgdTr9IHz9MjGSEO+3/FO9hXPGMuSeweJ8= +gitlab.com/etke.cc/go/validator v1.0.4 h1:2HIBP12f/RZr/7KTNH5/PgPTzl1vi7Co3lmhNTWB31A= +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/go.mod h1:Dgtu0qvymNjjky4Bu5WC8+iSohcb5xZ9CtkD3ezDqIA= golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= diff --git a/smtp/server.go b/smtp/server.go index 89c332f..3301b87 100644 --- a/smtp/server.go +++ b/smtp/server.go @@ -13,12 +13,20 @@ import ( "gitlab.com/etke.cc/postmoogle/utils" ) -// ErrBanned returned to banned hosts -var ErrBanned = &smtp.SMTPError{ - Code: 554, - EnhancedCode: smtp.EnhancedCode{5, 5, 4}, - Message: "please, don't bother me anymore, kupo.", -} +var ( + // ErrBanned returned to banned hosts + ErrBanned = &smtp.SMTPError{ + Code: 554, + 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 { bot matrixbot diff --git a/smtp/session.go b/smtp/session.go index 7151989..ca75024 100644 --- a/smtp/session.go +++ b/smtp/session.go @@ -56,15 +56,13 @@ func (s *incomingSession) Rcpt(to string) error { } if !domainok { s.log.Debug("wrong domain of %s", to) - s.ban(s.addr) - return ErrBanned + return ErrNoUser } roomID, ok := s.getRoomID(utils.Mailbox(to)) if !ok { s.log.Debug("mapping for %s not found", to) - s.ban(s.addr) - return ErrBanned + return ErrNoUser } validations := s.getFilters(roomID) @@ -166,7 +164,7 @@ func validateEmail(from, to string, log *logger.Logger, options utils.IncomingFi enforce := validator.Enforce{ Email: true, MX: options.SpamcheckMX(), - SMTP: options.SpamcheckMX(), + SMTP: options.SpamcheckSMTP(), } v := validator.New(options.Spamlist(), enforce, to, log) diff --git a/vendor/gitlab.com/etke.cc/go/validator/emails.go b/vendor/gitlab.com/etke.cc/go/validator/emails.go index 4979130..26ce57b 100644 --- a/vendor/gitlab.com/etke.cc/go/validator/emails.go +++ b/vendor/gitlab.com/etke.cc/go/validator/emails.go @@ -35,34 +35,35 @@ func (v *V) Email(email string) bool { } } - if v.emailMX(email) { - return false + if v.enforce.MX { + if v.emailNoMX(email) { + return false + } } - smtpCheck := !v.emailSMTP(email) if v.enforce.SMTP { - return smtpCheck + if v.emailNoSMTP(email) { + return false + } } return true } -func (v *V) emailMX(email string) bool { +func (v *V) emailNoMX(email string) bool { at := strings.LastIndex(email, "@") domain := email[at+1:] nomx := !v.MX(domain) if nomx { v.log.Info("email %s domain %s invalid, reason: no MX", email, domain) - if v.enforce.MX { - return true - } + return true } return false } -func (v *V) emailSMTP(email string) bool { +func (v *V) emailNoSMTP(email string) bool { client, err := trysmtp.Connect(v.from, email) if err != nil { if strings.HasPrefix(err.Error(), "45") { diff --git a/vendor/modules.txt b/vendor/modules.txt index 8ae4482..9c1617f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -127,7 +127,7 @@ gitlab.com/etke.cc/go/secgen # gitlab.com/etke.cc/go/trysmtp v1.0.0 ## explicit; go 1.18 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 gitlab.com/etke.cc/go/validator # gitlab.com/etke.cc/linkpearl v0.0.0-20221116205701-65547c5608e6