When checking the PTR mechanism, if an RR record is not found, the
SPFJava library incorrectly aborts processing instead of silently failing the
mechanism and allowing further mechanisms to be evaluated.
The relevant sections of the RFC are below:
http://www.ietf.org/internet-drafts/draft-schlitt-spf-classic-02.txt
Section 5:
"Several mechanisms rely on information fetched from DNS. For these
DNS queries, except where noted, if the DNS server returns an error
(RCODE other than 0 or 3) or the query times out, the mechanism
throws the exception "TempError". If the server returns "domain does
not exist" (RCODE 3), then evaluation of the mechanism continues as
if the server returned no error (RCODE 0) and zero answer records."
Section 5.5:
"Check all validated domain names to see if they end in the
<target-name> domain. If any do, this mechanism matches. If no
validated domain name can be found, or if none of the validated
domain names end in the <target-name>, this mechanism fails to
match.
If a DNS error occurs while doing the PTR RR lookup, then this
mechanism fails to match. If a DNS error occurs while doing an A RR
lookup, then that domain name is skipped and the search continues.
"
Nowhere does it say that an exception is thrown and processing ends,
just that the mechanism fails to match. Other SPF validation tools seem
to handle this case correctly.