This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch 3.8.x in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ce2f0b716122dc49ae3e1f124b6a2ec5e949136d Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue Jul 4 00:23:06 2023 +0700 JAMES-3920 Switch tu synchronous SPF executor --- .../org/apache/james/transport/mailets/SPF.java | 25 +++++++++++++++++++--- .../apache/james/transport/mailets/SPFTest.java | 14 ++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java index 1bda369912..d215a73591 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java @@ -27,8 +27,16 @@ import javax.mail.internet.MimeMessage; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.dnsservice.library.netmatcher.NetMatcher; +import org.apache.james.jspf.core.DNSServiceEnabled; +import org.apache.james.jspf.core.MacroExpand; +import org.apache.james.jspf.core.MacroExpandEnabled; +import org.apache.james.jspf.core.SPFCheckEnabled; import org.apache.james.jspf.executor.SPFResult; -import org.apache.james.jspf.impl.DefaultSPF; +import org.apache.james.jspf.executor.SynchronousSPFExecutor; +import org.apache.james.jspf.impl.DNSServiceXBillImpl; +import org.apache.james.jspf.impl.DefaultTermsFactory; +import org.apache.james.jspf.parser.RFC4408SPF1Parser; +import org.apache.james.jspf.wiring.WiringServiceTable; import org.apache.mailet.Attribute; import org.apache.mailet.AttributeName; import org.apache.mailet.AttributeUtils; @@ -95,9 +103,9 @@ public class SPF extends GenericMailet { addHeader = Boolean.parseBoolean(getInitParameter("checkLocalIps", "false")); if (spfDnsService == null) { - spf = new DefaultSPF(); + createSPF(new DNSServiceXBillImpl()); } else { - spf = new org.apache.james.jspf.impl.SPF(spfDnsService); + createSPF(spfDnsService); } Collection<String> ignoredNetworks = Splitter.on(',') @@ -109,6 +117,17 @@ public class SPF extends GenericMailet { LOGGER.info("SPF addHeader={} debug={} ignoredNetworks={}", addHeader, debug, ignoredNetworks); } + private void createSPF(org.apache.james.jspf.core.DNSService dnsProbe) { + WiringServiceTable wiringService = new WiringServiceTable(); + wiringService.put(DNSServiceEnabled.class, dnsProbe); + MacroExpand macroExpand = new MacroExpand(dnsProbe); + wiringService.put(MacroExpandEnabled.class, macroExpand); + RFC4408SPF1Parser parser = new RFC4408SPF1Parser(new DefaultTermsFactory(wiringService)); + SynchronousSPFExecutor executor = new SynchronousSPFExecutor(dnsProbe); + spf = new org.apache.james.jspf.impl.SPF(dnsProbe, parser, macroExpand,executor ); + wiringService.put(SPFCheckEnabled.class, spf); + } + @Override public void service(Mail mail) throws MessagingException { String remoteAddr = mail.getRemoteAddr(); diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java index c7e378d731..688ac35187 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java @@ -60,7 +60,7 @@ public class SPFTest { @BeforeAll public static void setupMockedSPFDNSService() throws TimeoutException { mockedSPFDNSService = mock(org.apache.james.jspf.core.DNSService.class); - when(mockedSPFDNSService.getRecordsAsync(any(DNSRequest.class))) + when(mockedSPFDNSService.getRecords(any(DNSRequest.class))) .thenAnswer(invocation -> { DNSRequest req = invocation.getArgument(0); switch (req.getRecordType()) { @@ -69,26 +69,26 @@ public class SPFTest { List<String> l = new ArrayList<>(); switch (req.getHostname()) { case "some.host.local": - return CompletableFuture.completedFuture(l); + return l; case "spf1.james.apache.org": // pass l.add("v=spf1 +all"); - return CompletableFuture.completedFuture(l); + return l; case "spf2.james.apache.org": // fail l.add("v=spf1 -all"); - return CompletableFuture.completedFuture(l); + return l; case "spf3.james.apache.org": // softfail l.add("v=spf1 ~all"); - return CompletableFuture.completedFuture(l); + return l; case "spf4.james.apache.org": // permerror l.add("v=spf1 badcontent!"); - return CompletableFuture.completedFuture(l); + return l; case "spf5.james.apache.org": // temperror - return CompletableFuture.failedFuture(new TimeoutException("TIMEOUT")); + throw new TimeoutException("TIMEOUT"); default: throw new RuntimeException("Unknown record " + req.getHostname()); } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org