On Mon, Jul 16, 2007 at 04:05:46PM +0200, Magnus Holmgren wrote: > > I appreciate your debugging work. Nonetheless, I think most contributors of > patches usually let their code be included under the pertinent project > license, and are satisfied with an acknowledgement in the changelog, or, > after accumulating a substantial amount of contributed work, in the regular > AUTHORS file or similar. I would greatly appreciate it if you could do the > same, because when code is submitted under different licenses it can, at > least eventually, become rather messy to keep track of what parts of the > package can be used under what license.
Ok. I said I would do it if the upstream maintainer requests it. You're upstream maintainer in a way now, so that would be fair enough I think. Patch attached. You don't need to acknowledge my name, though. -- Robert Millan My spam trap is [EMAIL PROTECTED] Note: this address is only intended for spam harvesters. Writing to it will get you added to my black list.
diff -ur libspf2-1.2.5.dfsg.old/src/libspf2/spf_interpret.c libspf2-1.2.5.dfsg/src/libspf2/spf_interpret.c --- libspf2-1.2.5.dfsg.old/src/libspf2/spf_interpret.c 2005-02-22 04:41:27.000000000 +0100 +++ libspf2-1.2.5.dfsg/src/libspf2/spf_interpret.c 2007-07-01 01:03:17.000000000 +0200 @@ -135,7 +145,9 @@ /* Is this cur_dom? */ sender_dom = spf_request->env_from_dp; - if (sender_dom == NULL) + + /* For MAILER-DAEMON messages, fallback to helo domain */ + if ((sender_dom == NULL) || (sender_dom[0] == '\0')) sender_dom = spf_request->helo_dom; if ( spf_response->reason == SPF_REASON_LOCAL_POLICY ) { @@ -214,11 +226,15 @@ break; case SPF_RESULT_NEUTRAL: - case SPF_RESULT_NONE: snprintf( p, p_end - p, "%s is neither permitted nor denied by %s", ip, spf_source ); break; + case SPF_RESULT_NONE: + snprintf( p, p_end - p, "%s doesn't provide an SPF record", + spf_source ); + break; + case SPF_RESULT_TEMPERROR: snprintf( p, p_end - p, "encountered temporary error during SPF processing of %s", spf_source ); @@ -686,8 +702,12 @@ #define SPF_GET_LOOKUP_DATA() \ do { \ - if ( data == data_end ) \ + if ( data == data_end ) { \ lookup = spf_request->cur_dom; \ + /* For MAILER-DAEMON messages, fallback to helo domain */ \ + if ((lookup == NULL) || (lookup[0] == '\0')) \ + lookup = spf_request->helo_dom; \ + } \ else { \ err = SPF_record_expand_data( spf_server, \ spf_request, spf_response, \ @@ -1022,7 +1042,10 @@ if (spf_record_subr) SPF_record_free(spf_record_subr); SPF_FREE_LOOKUP_DATA(); - return DONE_TEMPERR( err ); + if (err == SPF_E_DNS_ERROR) + return DONE_TEMPERR( err ); + else + return DONE_PERMERR( err ); } /* diff -ur libspf2-1.2.5.dfsg.old/src/libspf2/spf_result.c libspf2-1.2.5.dfsg/src/libspf2/spf_result.c --- libspf2-1.2.5.dfsg.old/src/libspf2/spf_result.c 2004-08-10 15:04:02.000000000 +0200 +++ libspf2-1.2.5.dfsg/src/libspf2/spf_result.c 2007-07-01 01:03:29.000000000 +0200 @@ -187,11 +197,15 @@ break; case SPF_RESULT_NEUTRAL: - case SPF_RESULT_NONE: snprintf( p, p_end - p, "%s is neither permitted nor denied by %s", ip, spf_source ); break; + case SPF_RESULT_NONE: + snprintf( p, p_end - p, "%s doesn't provide an SPF record", + spf_source ); + break; + case SPF_RESULT_ERROR: snprintf( p, p_end - p, "encountered temporary error during SPF processing of %s", spf_source ); diff -ur libspf2-1.2.5.dfsg.old/src/libspf2/spf_server.c libspf2-1.2.5.dfsg/src/libspf2/spf_server.c --- libspf2-1.2.5.dfsg.old/src/libspf2/spf_server.c 2005-02-19 04:52:58.000000000 +0100 +++ libspf2-1.2.5.dfsg/src/libspf2/spf_server.c 2007-07-01 01:04:34.000000000 +0200 @@ -262,6 +272,9 @@ SPF_ASSERT_NOTNULL(spf_recordp); domain = spf_request->cur_dom; + /* For MAILER-DAEMON messages, fallback to helo domain */ + if ((domain == NULL) || (domain[0] == '\0')) + domain = spf_request->helo_dom; SPF_ASSERT_NOTNULL(domain); *spf_recordp = NULL; @@ -279,8 +292,7 @@ SPF_dns_rr_free(rr_txt); spf_response->result = SPF_RESULT_NONE; spf_response->reason = SPF_REASON_FAILURE; - return SPF_response_add_error(spf_response, -SPF_E_NOT_SPF, + return SPF_response_add_error(spf_response, SPF_E_NOT_SPF, "Host '%s' not found.", domain); break;