Re: include: result confusion?
Hannah Schroeter <[email protected]> Wed, 22 Oct 2008 12:28:10 +0200
| Newsgroups | gmane.mail.spam.spf.devel |
|---|---|
| Organization | Schlund + Partner AG |
| Message-ID | <[email protected]> |
Hi! On Tue, Oct 21, 2008 at 06:29:26PM -0400, Scott Kitterman wrote: >[...] >>I have actually a few patches still pending with Shevek, and prepared >>one to revert a change that made my own test for this fail (after >>passing with 1.2.5). >>Thanks for confirming my interpretation of the RFC, so I won't have to >>change my local test and I will be able to keep the local change in our >>local revision control systems (the one for the company's development >>and from whence the deployed software is build, and my own for merging >>stuff around with S.). >Ubuntu is releasing in about a week with 1.2.8. If somone could send me a >diff to revert this regression in the next few days I can get it fixed. >I'd really appreciate it. My patch is against Shevek's svn, the trunk (r14023). I guess it should apply, at most with an offset in the line numbers. Alas, Shevek's svn doesn't have tags or branches to give me a notion from which revision the releases (e.g. 1.2.8) are, so I can't prepare patches against the release proper. The only tag it has is "1.0.0". I also include a patch for an issue that caused crashes in our MX that might be helpful and that isn't yet included by Shevek because he's pondering a different solution, while I think my patch is definitely better than nothing (at least our crashes are definitely gone). >Scott K Kind regards, Hannah. ------------------------------------------- Sender Policy Framework: http://www.openspf.org Modify Your Subscription: http://www.listbox.com/member/ Archives: https://www.listbox.com/member/archive/1007/=now RSS Feed: https://www.listbox.com/member/archive/rss/1007/ Powered by Listbox: http://www.listbox.com
0003-Fix-result-for-include-of-a-domain-that-has-no-SPF.patch
(text/x-diff, 905 B)
From f85a9a71c8051394c1f3c108f8eb0ba51e611be3 Mon Sep 17 00:00:00 2001 From: Hannah Schroeter <[email protected]> Date: Tue, 21 Oct 2008 16:28:33 +0200 Subject: [PATCH] Fix result for include: of a domain that has no SPF or TXT record (should be PermError). --- src/libspf2/spf_interpret.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-) diff --git a/src/libspf2/spf_interpret.c b/src/libspf2/spf_interpret.c index 78fa81a..a9f903f 100644 --- a/src/libspf2/spf_interpret.c +++ b/src/libspf2/spf_interpret.c @@ -1090,10 +1090,7 @@ SPF_record_interpret(SPF_record_t *spf_record, if (spf_record_subr) SPF_record_free(spf_record_subr); SPF_FREE_LOOKUP_DATA(); - if (err == SPF_E_DNS_ERROR) - return DONE_TEMPERR( err ); - else - return DONE_PERMERR( err ); + return DONE_TEMPERR( err ); } SPF_ASSERT_NOTNULL(spf_record_subr); -- 1.5.6.4
0002-actually-keep-track-of-max_var_len-so-SPF_record_exp.patch
(text/x-diff, 3.8 KB)
From 5fdb382c9ecb40236ca8c41cec2b08d11e429774 Mon Sep 17 00:00:00 2001 From: Hannah Schroeter <[email protected]> Date: Mon, 20 Oct 2008 16:09:05 +0200 Subject: [PATCH] actually keep track of max_var_len so SPF_record_expand_data doesn't fail and abort the whole program on some cases, e.g. creating the Received-SPF header when the envelope from is very long. --- src/libspf2/spf_request.c | 50 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/libspf2/spf_request.c b/src/libspf2/spf_request.c index 181b0e4..cf6c39b 100644 --- a/src/libspf2/spf_request.c +++ b/src/libspf2/spf_request.c @@ -41,6 +41,7 @@ SPF_request_t * SPF_request_new(SPF_server_t *spf_server) { SPF_request_t *sr; + const char *rec_dom; sr = (SPF_request_t *)malloc(sizeof(SPF_request_t)); if (! sr) @@ -51,6 +52,9 @@ SPF_request_new(SPF_server_t *spf_server) sr->client_ver = AF_UNSPEC; sr->ipv4.s_addr = htonl(INADDR_ANY); sr->ipv6 = in6addr_any; + rec_dom = SPF_request_get_rec_dom(sr); + if (rec_dom) + sr->max_var_len = strlen(rec_dom); return sr; } @@ -116,11 +120,15 @@ SPF_request_set_ipv6_str(SPF_request_t *sr, const char *astr) SPF_errcode_t SPF_request_set_helo_dom(SPF_request_t *sr, const char *dom) { + size_t len; SPF_ASSERT_NOTNULL(dom); SPF_FREE(sr->helo_dom); sr->helo_dom = strdup(dom); if (! sr->helo_dom) return SPF_E_NO_MEMORY; + len = strlen(dom); + if (len > sr->max_var_len) + sr->max_var_len = len; /* set cur_dom and env_from? */ if (sr->env_from == NULL) return SPF_request_set_env_from(sr, dom); @@ -130,16 +138,24 @@ SPF_request_set_helo_dom(SPF_request_t *sr, const char *dom) const char * SPF_request_get_rec_dom(SPF_request_t *sr) { + char *result; + size_t len; SPF_server_t *spf_server; spf_server = sr->spf_server; - return spf_server->rec_dom; + result = spf_server->rec_dom; + if (result) { + len = strlen(result); + if (len > sr->max_var_len) + sr->max_var_len = len; + } + return result; } int SPF_request_set_env_from(SPF_request_t *sr, const char *from) { char *cp; - int len; + size_t len; SPF_ASSERT_NOTNULL(from); SPF_FREE(sr->env_from); @@ -187,6 +203,10 @@ SPF_request_set_env_from(SPF_request_t *sr, const char *from) } } + len = strlen(sr->env_from); + if (sr->max_var_len < len) + sr->max_var_len = len; + return 0; // SPF_E_SUCCESS } @@ -200,8 +220,12 @@ SPF_request_get_client_dom(SPF_request_t *sr) SPF_ASSERT_NOTNULL(spf_server); if (sr->client_dom == NULL) { + size_t len; sr->client_dom = SPF_dns_get_client_dom(spf_server->resolver, sr); + len = strlen(sr->client_dom); + if (len > sr->max_var_len) + sr->max_var_len = len; } return sr->client_dom; } @@ -225,6 +249,16 @@ SPF_request_is_loopback(SPF_request_t *sr) static SPF_errcode_t SPF_request_prepare(SPF_request_t *sr) { + const char *rec_dom; + size_t len; + + /* SPF_request_get_rec_dom result could have changed */ + rec_dom = SPF_request_get_rec_dom(sr); + if (rec_dom) { + len = strlen(rec_dom); + if (len > sr->max_var_len) + sr->max_var_len = len; + } if (sr->use_helo) sr->cur_dom = sr->helo_dom; else @@ -241,11 +275,23 @@ SPF_request_query_record(SPF_request_t *spf_request, SPF_record_t *spf_record, SPF_errcode_t err) { + const char *rec_dom; + size_t len; + if (err != SPF_E_SUCCESS) { if (spf_record) SPF_record_free(spf_record); return err; } + + /* SPF_request_get_rec_dom result could have changed */ + rec_dom = SPF_request_get_rec_dom(spf_request); + if (rec_dom) { + len = strlen(rec_dom); + if (len > spf_request->max_var_len) + spf_request->max_var_len = len; + } + /* Now, in theory, SPF_response_errors(spf_response) == 0 */ if (SPF_response_errors(spf_response) > 0) SPF_infof("Warning: %d errors in response, " -- 1.5.6.4