From 6b606ebb9b53d9680e073e71953b45929759ed18 Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Tue, 5 Nov 2013 15:18:19 -0800 Subject: [PATCH] SMTP, logging changes - smtpd/handler uses ParseEmailAddress() when opening mailbox and checking domainNoStore - Added host info to logging for both SMTP and POP3, closes #16 --- pop3d/handler.go | 8 ++++---- smtpd/handler.go | 23 +++++++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/pop3d/handler.go b/pop3d/handler.go index 3889f7b..36b740b 100644 --- a/pop3d/handler.go +++ b/pop3d/handler.go @@ -611,21 +611,21 @@ func (ses *Session) ooSeq(cmd string) { // Session specific logging methods func (ses *Session) logTrace(msg string, args ...interface{}) { - log.LogTrace("POP3<%v> %v", ses.id, fmt.Sprintf(msg, args...)) + log.LogTrace("POP3[%v]<%v> %v", ses.remoteHost, ses.id, fmt.Sprintf(msg, args...)) } func (ses *Session) logInfo(msg string, args ...interface{}) { - log.LogInfo("POP3<%v> %v", ses.id, fmt.Sprintf(msg, args...)) + log.LogInfo("POP3[%v]<%v> %v", ses.remoteHost, ses.id, fmt.Sprintf(msg, args...)) } func (ses *Session) logWarn(msg string, args ...interface{}) { // Update metrics //expWarnsTotal.Add(1) - log.LogWarn("POP3<%v> %v", ses.id, fmt.Sprintf(msg, args...)) + log.LogWarn("POP3[%v]<%v> %v", ses.remoteHost, ses.id, fmt.Sprintf(msg, args...)) } func (ses *Session) logError(msg string, args ...interface{}) { // Update metrics //expErrorsTotal.Add(1) - log.LogError("POP3<%v> %v", ses.id, fmt.Sprintf(msg, args...)) + log.LogError("POP3[%v]<%v> %v", ses.remoteHost, ses.id, fmt.Sprintf(msg, args...)) } diff --git a/smtpd/handler.go b/smtpd/handler.go index 1f19bb1..5f5d757 100644 --- a/smtpd/handler.go +++ b/smtpd/handler.go @@ -314,12 +314,19 @@ func (ss *Session) dataHandler() { i := 0 for e := ss.recipients.Front(); e != nil; e = e.Next() { recip := e.Value.(string) - if !strings.HasSuffix(strings.ToLower(recip), "@"+ss.server.domainNoStore) { + local, domain, err := ParseEmailAddress(recip) + if err != nil { + ss.logError("Failed to parse address for %q", recip) + ss.send(fmt.Sprintf("451 Failed to open mailbox for %v", recip)) + ss.reset() + return + } + if strings.ToLower(domain) != ss.server.domainNoStore { // Not our "no store" domain, so store the message - mb, err := ss.server.dataStore.MailboxFor(recip) + mb, err := ss.server.dataStore.MailboxFor(local) if err != nil { - ss.logError("Failed to open mailbox for %v", recip) - ss.send(fmt.Sprintf("451 Failed to open mailbox for %v", recip)) + ss.logError("Failed to open mailbox for %q", local) + ss.send(fmt.Sprintf("451 Failed to open mailbox for %v", local)) ss.reset() return } @@ -525,21 +532,21 @@ func (ss *Session) ooSeq(cmd string) { // Session specific logging methods func (ss *Session) logTrace(msg string, args ...interface{}) { - log.LogTrace("SMTP<%v> %v", ss.id, fmt.Sprintf(msg, args...)) + log.LogTrace("SMTP[%v]<%v> %v", ss.remoteHost, ss.id, fmt.Sprintf(msg, args...)) } func (ss *Session) logInfo(msg string, args ...interface{}) { - log.LogInfo("SMTP<%v> %v", ss.id, fmt.Sprintf(msg, args...)) + log.LogInfo("SMTP[%v]<%v> %v", ss.remoteHost, ss.id, fmt.Sprintf(msg, args...)) } func (ss *Session) logWarn(msg string, args ...interface{}) { // Update metrics expWarnsTotal.Add(1) - log.LogWarn("SMTP<%v> %v", ss.id, fmt.Sprintf(msg, args...)) + log.LogWarn("SMTP[%v]<%v> %v", ss.remoteHost, ss.id, fmt.Sprintf(msg, args...)) } func (ss *Session) logError(msg string, args ...interface{}) { // Update metrics expErrorsTotal.Add(1) - log.LogError("SMTP<%v> %v", ss.id, fmt.Sprintf(msg, args...)) + log.LogError("SMTP[%v]<%v> %v", ss.remoteHost, ss.id, fmt.Sprintf(msg, args...)) }