This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-jspf.git
commit 6388698706c348204c43da1ab77e95ead3f767c1 Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Mon Jul 29 11:15:48 2024 +0200 JSPF-112 Bug: SPF Check Hangs Indefinitely in org.apache.james.jspf:apache-jspf-resolver:1.0.4 --- .../jspf/core/SPFCheckerExceptionCatcher.java | 2 +- .../jspf/executor/AsynchronousSPFExecutor.java | 22 +++++++++++++++++----- .../main/java/org/apache/james/jspf/impl/SPF.java | 4 ++-- .../apache/james/jspf/terms/IncludeMechanism.java | 4 ++-- .../apache/james/jspf/terms/RedirectModifier.java | 4 ++-- .../AsynchronousSPFExecutorIntegrationTest.java | 4 ++-- ...rationTest.java => DefaultSPFResolverTest.java} | 22 ++++++---------------- 7 files changed, 32 insertions(+), 30 deletions(-) diff --git a/resolver/src/main/java/org/apache/james/jspf/core/SPFCheckerExceptionCatcher.java b/resolver/src/main/java/org/apache/james/jspf/core/SPFCheckerExceptionCatcher.java index 3102c18..0e0cc90 100644 --- a/resolver/src/main/java/org/apache/james/jspf/core/SPFCheckerExceptionCatcher.java +++ b/resolver/src/main/java/org/apache/james/jspf/core/SPFCheckerExceptionCatcher.java @@ -40,6 +40,6 @@ public interface SPFCheckerExceptionCatcher { * @throws TempErrorException * @throws NeutralException */ - public void onException(Exception exception, SPFSession session) throws PermErrorException, NoneException, TempErrorException, NeutralException; + public void onException(Throwable exception, SPFSession session) throws PermErrorException, NoneException, TempErrorException, NeutralException; } diff --git a/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java b/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java index 56d2c8b..3ce330b 100644 --- a/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java +++ b/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java @@ -19,7 +19,9 @@ package org.apache.james.jspf.executor; +import java.io.IOException; import java.util.ArrayList; +import java.util.concurrent.CompletionException; import org.apache.james.jspf.core.DNSLookupContinuation; import org.apache.james.jspf.core.DNSResponse; @@ -82,20 +84,30 @@ public class AsynchronousSPFExecutor implements SPFExecutor { } }) .exceptionally(e -> { - if (e instanceof NoSuchRRSetException || e.getCause() instanceof NoSuchRRSetException) { + if (e instanceof CompletionException) { + e = e.getCause(); + } + if (e instanceof IOException && e.getMessage().startsWith("Timed out ")) { + e = new TimeoutException(e.getMessage()); + } + if (e instanceof NoSuchRRSetException) { try { DNSLookupContinuation dnsLookupContinuation = cont.getListener().onDNSResponse(new DNSResponse(new ArrayList<>()), session); handleCont(session, result, dnsLookupContinuation, checker); + result.setSPFResult(session); + return null; } catch (PermErrorException | NoneException | TempErrorException | NeutralException ex2) { handleError(session, ex2); + result.setSPFResult(session); + return null; } } if (e instanceof TimeoutException) { handleTimeout(cont, new DNSResponse((TimeoutException) e), session, result, checker); + result.setSPFResult(session); + return null; } - if (e.getCause() instanceof TimeoutException) { - handleTimeout(cont, new DNSResponse((TimeoutException) e.getCause()), session, result, checker); - } + handleError(session, e); result.setSPFResult(session); return null; }); @@ -113,7 +125,7 @@ public class AsynchronousSPFExecutor implements SPFExecutor { } } - private void handleError(SPFSession session, Exception e) { + private void handleError(SPFSession session, Throwable e) { while (e != null) { SPFChecker checker = session.popChecker(c -> c instanceof SPFCheckerExceptionCatcher); if (checker == null) { diff --git a/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java b/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java index b9d8dfc..adfcab2 100644 --- a/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java +++ b/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java @@ -254,9 +254,9 @@ public class SPF implements SPFChecker { /** - * @see org.apache.james.jspf.core.SPFCheckerExceptionCatcher#onException(java.lang.Exception, org.apache.james.jspf.core.SPFSession) + * @see org.apache.james.jspf.core.SPFCheckerExceptionCatcher#onException(java.lang.Throwable, org.apache.james.jspf.core.SPFSession) */ - public void onException(Exception exception, SPFSession session) + public void onException(Throwable exception, SPFSession session) throws PermErrorException, NoneException, TempErrorException, NeutralException { diff --git a/resolver/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java b/resolver/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java index 6c01e21..1e7be8b 100644 --- a/resolver/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java +++ b/resolver/src/main/java/org/apache/james/jspf/terms/IncludeMechanism.java @@ -103,9 +103,9 @@ public class IncludeMechanism implements Mechanism, ConfigurationEnabled, SPFChe } /** - * @see org.apache.james.jspf.core.SPFCheckerExceptionCatcher#onException(java.lang.Exception, org.apache.james.jspf.core.SPFSession) + * @see org.apache.james.jspf.core.SPFCheckerExceptionCatcher#onException(java.lang.Throwable, org.apache.james.jspf.core.SPFSession) */ - public void onException(Exception exception, SPFSession session) + public void onException(Throwable exception, SPFSession session) throws PermErrorException, NoneException, TempErrorException, NeutralException { diff --git a/resolver/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java b/resolver/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java index 5ac31d2..7234067 100644 --- a/resolver/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java +++ b/resolver/src/main/java/org/apache/james/jspf/terms/RedirectModifier.java @@ -76,9 +76,9 @@ public class RedirectModifier extends GenericModifier implements } /** - * @see org.apache.james.jspf.core.SPFCheckerExceptionCatcher#onException(java.lang.Exception, org.apache.james.jspf.core.SPFSession) + * @see org.apache.james.jspf.core.SPFCheckerExceptionCatcher#onException(java.lang.Throwable, org.apache.james.jspf.core.SPFSession) */ - public void onException(Exception exception, SPFSession session) + public void onException(Throwable exception, SPFSession session) throws PermErrorException, NoneException, TempErrorException, NeutralException { diff --git a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java b/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java index 56b8e51..8037672 100644 --- a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java +++ b/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java @@ -31,12 +31,12 @@ public class AsynchronousSPFExecutorIntegrationTest { @Test public void test() { SPF spf = new DefaultSPF(); - SPFResult result = spf.checkSPF("192.99.55.226", "n...@bytle.net", "beau.bytle.net"); + SPFResult result = spf.checkSPF("109.197.176.25", "n...@linagora.com", "linagora.com"); System.out.println(result.getResult()); System.out.println(result.getExplanation()); System.out.println(result.getHeader()); assertEquals("pass", result.getResult()); - assertEquals("Received-SPF: pass (spfCheck: domain of bytle.net designates 192.99.55.226 as permitted sender) client-ip=192.99.55.226; envelope-from=n...@bytle.net; helo=beau.bytle.net;", + assertEquals("Received-SPF: pass (spfCheck: domain of linagora.com designates 109.197.176.25 as permitted sender) client-ip=109.197.176.25; envelope-from=n...@linagora.com; helo=linagora.com;", result.getHeader()); } } \ No newline at end of file diff --git a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java b/resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java similarity index 62% copy from resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java copy to resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java index 56b8e51..cb6acad 100644 --- a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java +++ b/resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java @@ -19,24 +19,14 @@ package org.apache.james.jspf; -import static org.junit.Assert.assertEquals; - -import org.apache.james.jspf.executor.SPFResult; import org.apache.james.jspf.impl.DefaultSPF; -import org.apache.james.jspf.impl.SPF; +import org.junit.Assert; import org.junit.Test; -public class AsynchronousSPFExecutorIntegrationTest { - +public class DefaultSPFResolverTest { @Test - public void test() { - SPF spf = new DefaultSPF(); - SPFResult result = spf.checkSPF("192.99.55.226", "n...@bytle.net", "beau.bytle.net"); - System.out.println(result.getResult()); - System.out.println(result.getExplanation()); - System.out.println(result.getHeader()); - assertEquals("pass", result.getResult()); - assertEquals("Received-SPF: pass (spfCheck: domain of bytle.net designates 192.99.55.226 as permitted sender) client-ip=192.99.55.226; envelope-from=n...@bytle.net; helo=beau.bytle.net;", - result.getHeader()); + public void shouldHandleNotFound() { + String spfResult = new DefaultSPF().checkSPF("207.54.72.202","do_not_re...@reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de","reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de").getResult(); + Assert.assertEquals("neutral", spfResult); } -} \ No newline at end of file +} --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org