author | Alberto Bertogli
<albertito@blitiri.com.ar> 2018-12-01 10:42:13 UTC |
committer | Alberto Bertogli
<albertito@blitiri.com.ar> 2018-12-01 11:58:50 UTC |
parent | 4296e28074b0aad2a6d926bfe59e241929631820 |
internal/courier/smtp_test.go | +4 | -1 |
internal/queue/queue.go | +20 | -20 |
internal/smtpsrv/server_test.go | +1 | -1 |
internal/sts/sts_test.go | +4 | -4 |
diff --git a/internal/courier/smtp_test.go b/internal/courier/smtp_test.go index a0a94f2..d9daa26 100644 --- a/internal/courier/smtp_test.go +++ b/internal/courier/smtp_test.go @@ -110,7 +110,10 @@ func TestSMTP(t *testing.T) { // lookup whick makes the test more hermetic. This is a hack, ideally we // would be able to override the default resolver, but Go does not // implement that yet. - testMX["to"] = []*net.MX{{":::", 10}, {host, 20}} + testMX["to"] = []*net.MX{ + {Host: ":::", Pref: 10}, + {Host: host, Pref: 20}, + } *smtpPort = port s, tmpDir := newSMTP(t) diff --git a/internal/queue/queue.go b/internal/queue/queue.go index f21094f..ec5818f 100644 --- a/internal/queue/queue.go +++ b/internal/queue/queue.go @@ -393,27 +393,27 @@ func (item *Item) deliver(q *Queue, rcpt *Recipient) (err error, permanent bool) if envelope.DomainIn(rcpt.Address, q.localDomains) { deliverAttempts.Add("email:local", 1) return q.localC.Deliver(item.From, rcpt.Address, item.Data) - } else { - deliverAttempts.Add("email:remote", 1) - from := item.From - if !envelope.DomainIn(item.From, q.localDomains) { - // We're sending from a non-local to a non-local. This should - // happen only when there's an alias to forward email to a - // non-local domain. In this case, using the original From is - // problematic, as we may not be an authorized sender for this. - // Some MTAs (like Exim) will do it anyway, others (like - // gmail) will construct a special address based on the - // original address. We go with the latter. - // Note this assumes "+" is an alias suffix separator. - // We use the IDNA version of the domain if possible, because - // we can't know if the other side will support SMTPUTF8. - from = fmt.Sprintf("%s+fwd_from=%s@%s", - envelope.UserOf(rcpt.OriginalAddress), - strings.Replace(from, "@", "=", -1), - mustIDNAToASCII(envelope.DomainOf(rcpt.OriginalAddress))) - } - return q.remoteC.Deliver(from, rcpt.Address, item.Data) } + + deliverAttempts.Add("email:remote", 1) + from := item.From + if !envelope.DomainIn(item.From, q.localDomains) { + // We're sending from a non-local to a non-local. This should + // happen only when there's an alias to forward email to a + // non-local domain. In this case, using the original From is + // problematic, as we may not be an authorized sender for this. + // Some MTAs (like Exim) will do it anyway, others (like + // gmail) will construct a special address based on the + // original address. We go with the latter. + // Note this assumes "+" is an alias suffix separator. + // We use the IDNA version of the domain if possible, because + // we can't know if the other side will support SMTPUTF8. + from = fmt.Sprintf("%s+fwd_from=%s@%s", + envelope.UserOf(rcpt.OriginalAddress), + strings.Replace(from, "@", "=", -1), + mustIDNAToASCII(envelope.DomainOf(rcpt.OriginalAddress))) + } + return q.remoteC.Deliver(from, rcpt.Address, item.Data) } // countRcpt counts how many recipients are in the given status. diff --git a/internal/smtpsrv/server_test.go b/internal/smtpsrv/server_test.go index d37cdd8..ff8598b 100644 --- a/internal/smtpsrv/server_test.go +++ b/internal/smtpsrv/server_test.go @@ -374,7 +374,7 @@ func generateCert(path string) error { x509.KeyUsageCertSign, BasicConstraintsValid: true, - IsCA: true, + IsCA: true, } priv, err := rsa.GenerateKey(rand.Reader, 1024) diff --git a/internal/sts/sts_test.go b/internal/sts/sts_test.go index 0a61f3b..ddc71b9 100644 --- a/internal/sts/sts_test.go +++ b/internal/sts/sts_test.go @@ -385,7 +385,7 @@ func TestCacheBadData(t *testing.T) { } } -func mustFetch(t *testing.T, c *PolicyCache, ctx context.Context, d string) *Policy { +func (c *PolicyCache) mustFetch(ctx context.Context, t *testing.T, d string) *Policy { p, err := c.Fetch(ctx, d) if err != nil { t.Fatalf("Fetch %q failed: %v", d, err) @@ -421,7 +421,7 @@ func TestCacheRefresh(t *testing.T) { mode: enforce mx: mx max_age: 100` - p := mustFetch(t, c, ctx, "refresh-test") + p := c.mustFetch(ctx, t, "refresh-test") if p.MaxAge != 100*time.Second { t.Fatalf("policy.MaxAge is %v, expected 100s", p.MaxAge) } @@ -434,7 +434,7 @@ func TestCacheRefresh(t *testing.T) { mx: mx max_age: 200` - p = mustFetch(t, c, ctx, "refresh-test") + p = c.mustFetch(ctx, t, "refresh-test") if p.MaxAge != 100*time.Second { t.Fatalf("policy.MaxAge is %v, expected 100s", p.MaxAge) } @@ -450,7 +450,7 @@ func TestCacheRefresh(t *testing.T) { time.Sleep(5 * time.Millisecond) } - p = mustFetch(t, c, ctx, "refresh-test") + p = c.mustFetch(ctx, t, "refresh-test") if p.MaxAge != 200*time.Second { t.Fatalf("policy.MaxAge is %v, expected 200s", p.MaxAge) }