Просмотр исходного кода

Merge pull request #126 from szonov/master

make possible #91
Bernhard Fröhlich 2 лет назад
Родитель
Сommit
970f761a4f
2 измененных файлов с 16 добавлено и 3 удалено
  1. 1 0
      config.go
  2. 15 3
      main.go

+ 1 - 0
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)")

+ 15 - 3
main.go

@@ -164,9 +164,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)
@@ -200,7 +212,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")