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