mirror of
https://blitiri.com.ar/repos/chasquid
synced 2026-01-28 20:56:03 +00:00
smtpsrv: Always pass the environment variables to the hook
This patch makes the hooks always have a complete set of environment varuables, set to 0/1 or whatever is appropriate, to make it easier to write the checks for them.
This commit is contained in:
@@ -653,14 +653,18 @@ func (c *Conn) runPostDataHook(data []byte) ([]byte, bool, error) {
|
|||||||
cmd.Env = append(cmd.Env, "REMOTE_ADDR="+c.conn.RemoteAddr().String())
|
cmd.Env = append(cmd.Env, "REMOTE_ADDR="+c.conn.RemoteAddr().String())
|
||||||
cmd.Env = append(cmd.Env, "MAIL_FROM="+c.mailFrom)
|
cmd.Env = append(cmd.Env, "MAIL_FROM="+c.mailFrom)
|
||||||
cmd.Env = append(cmd.Env, "RCPT_TO="+strings.Join(c.rcptTo, " "))
|
cmd.Env = append(cmd.Env, "RCPT_TO="+strings.Join(c.rcptTo, " "))
|
||||||
cmd.Env = append(cmd.Env, "AUTH_AS="+c.authUser+"@"+c.authDomain)
|
|
||||||
if c.onTLS {
|
if c.completedAuth {
|
||||||
cmd.Env = append(cmd.Env, "ON_TLS=1")
|
cmd.Env = append(cmd.Env, "AUTH_AS="+c.authUser+"@"+c.authDomain)
|
||||||
}
|
} else {
|
||||||
if envelope.DomainIn(c.mailFrom, c.localDomains) {
|
cmd.Env = append(cmd.Env, "AUTH_AS=")
|
||||||
cmd.Env = append(cmd.Env, "FROM_LOCAL_DOMAIN=1")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd.Env = append(cmd.Env, "ON_TLS="+boolToStr(c.onTLS))
|
||||||
|
cmd.Env = append(cmd.Env, "FROM_LOCAL_DOMAIN="+boolToStr(
|
||||||
|
envelope.DomainIn(c.mailFrom, c.localDomains)))
|
||||||
|
cmd.Env = append(cmd.Env, "SPF_PASS="+boolToStr(c.spfResult == spf.Pass))
|
||||||
|
|
||||||
out, err := cmd.Output()
|
out, err := cmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
hookResults.Add("post-data:fail", 1)
|
hookResults.Add("post-data:fail", 1)
|
||||||
@@ -741,6 +745,13 @@ func lastLine(s string) string {
|
|||||||
return l[len(l)-2]
|
return l[len(l)-2]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func boolToStr(b bool) string {
|
||||||
|
if b {
|
||||||
|
return "1"
|
||||||
|
}
|
||||||
|
return "0"
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Conn) STARTTLS(params string) (code int, msg string) {
|
func (c *Conn) STARTTLS(params string) (code int, msg string) {
|
||||||
if c.onTLS {
|
if c.onTLS {
|
||||||
return 503, "You are already wearing that!"
|
return 503, "You are already wearing that!"
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ check "ON_TLS=1"
|
|||||||
check "AUTH_AS=user@testserver"
|
check "AUTH_AS=user@testserver"
|
||||||
check "PATH="
|
check "PATH="
|
||||||
check "REMOTE_ADDR="
|
check "REMOTE_ADDR="
|
||||||
|
check "SPF_PASS=0"
|
||||||
|
|
||||||
|
|
||||||
# Check that a failure in the script results in failing delivery.
|
# Check that a failure in the script results in failing delivery.
|
||||||
|
|||||||
Reference in New Issue
Block a user