From 5b5f738410bd3b7e20978fd9b95f5654d91a8f54 Mon Sep 17 00:00:00 2001 From: Sergey Zonov Date: Sat, 15 Oct 2022 17:32:52 +0700 Subject: [PATCH] make possible #91. - add strict_sender bool configuration value - if strict_sender set as true use for outgoing mail only SMTPs with sender matches to from address --- config.go | 1 + main.go | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/config.go b/config.go index b14e0ff..2bb24b1 100644 --- a/config.go +++ b/config.go @@ -45,6 +45,7 @@ var ( allowedUsers = flagset.String("allowed_users", "", "Path to file with valid users/passwords") command = flagset.String("command", "", "Path to pipe command") remotesStr = flagset.String("remotes", "", "Outgoing SMTP servers") + strictSender = flagset.Bool("strict_sender", false, "Use only SMTP servers with Sender matches to From") // additional flags _ = flagset.String("config", "", "Path to config file (ini format)") diff --git a/main.go b/main.go index 24ed1db..32b701f 100644 --- a/main.go +++ b/main.go @@ -163,9 +163,21 @@ func mailHandler(peer smtpd.Peer, env smtpd.Envelope) error { "uuid": generateUUID(), }) - if *remotesStr == "" && *command == "" { + var envRemotes []*Remote + + if *strictSender { + for _, remote := range remotes { + if remote.Sender == env.Sender { + envRemotes = append(envRemotes, remote) + } + } + } else { + envRemotes = remotes + } + + if len(envRemotes) == 0 && *command == "" { logger.Warning("no remote_host or command set; discarding mail") - return nil + return smtpd.Error{Code: 554, Message: "There are no appropriate remote_host or command"} } env.AddReceivedLine(peer) @@ -190,7 +202,7 @@ func mailHandler(peer smtpd.Peer, env smtpd.Envelope) error { cmdLogger.Info("pipe command successful: " + stdout.String()) } - for _, remote := range remotes { + for _, remote := range envRemotes { logger = logger.WithField("host", remote.Addr) logger.Info("delivering mail from peer using smarthost")