list

server

This is the main dovel repository, it has the Go code to run dovel SMTP server.

curl https://dovel.email/server.tar tar

885ff35

Author: blmayer (bleemayer@gmail.com)

Date: Mon Sep 11 18:59:25 2023 -0300

Parent: f936e47

Added link check

Diff

cmd/dovel/backend.go

commit 885ff35d8429864cf5a1d0587868fce13c187bd4
Author: blmayer <bleemayer@gmail.com>
Date:   Mon Sep 11 18:59:25 2023 -0300

    Added link check

diff --git a/cmd/dovel/backend.go b/cmd/dovel/backend.go
index bef872b..b18e60d 100644
--- a/cmd/dovel/backend.go
+++ b/cmd/dovel/backend.go
@@ -76,9 +76,17 @@ func (s *Session) Data(raw io.Reader) error {
 		return err
 	}
 	domain := strings.Split(from.Address, "@")[1]
+
 	h := path.Join(configPath, "hooks", "send-"+domain)
-	if _, err := os.Stat(h); err == nil {
-		err := s.Send(s.from, s.tos, strings.NewReader(string(cont)))
+	if f, err := os.Lstat(h); err == nil {
+		if !f.Mode().IsRegular() {
+			h, err = os.Readlink(h)
+			if err != nil {
+				println(domain, "read link", err.Error())
+			}
+		}
+
+		err = s.Send(s.from, s.tos, strings.NewReader(string(cont)))
 		if err != nil {
 			println("send", err.Error())
 			return err
@@ -102,9 +110,14 @@ func (s *Session) Data(raw io.Reader) error {
 		domain := strings.Split(toAddr.Address, "@")[1]
 
 		h := path.Join(configPath, "hooks", "receive-"+domain)
-		if _, err := os.Stat(h); err != nil {
+		if f, err := os.Lstat(h); err != nil {
 			println(domain, "receive error:", err.Error())
 			continue
+		} else if !f.Mode().IsRegular() {
+			h, err = os.Readlink(h)
+			if err != nil {
+				println(domain, "read link", err.Error())
+			}
 		}
 
 		c := exec.Command(h)