On Fri, 18 May 2012, Janne Snabb wrote:

> Yes, thank you! How about something like this additional patch?

Oops, the previous patch was incorrect. It was checking for "type ==
T_SPF" before the type was defined. This should be better. Sorry about
the noise.

---
 doc/doc-docbook/spec.xfpt |    7 ++++---
 src/src/lookups/dnsdb.c   |    8 ++++++++
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index b650fc3..2a81042 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -6790,10 +6790,11 @@ white space is ignored.
 .cindex "TXT record" "in &(dnsdb)& lookup"
 .cindex "SPF record" "in &(dnsdb)& lookup"
 .new
-For TXT and SPF records with multiple items of data, only the first item is 
returned,
+For TXT records with multiple items of data, only the first item is returned,
 unless a separator for them is specified using a comma after the separator
-character followed immediately by the TXT/SPF record item separator. To 
concatenate
-items without a separator, use a semicolon instead.
+character followed immediately by the TXT record item separator. To concatenate
+items without a separator, use a semicolon instead. For SPF records the
+default behaviour is to concatenate multiple items without using a separator.
 .wen
 .code
 ${lookup dnsdb{>\n,: txt=a.b.example}}
diff --git a/src/src/lookups/dnsdb.c b/src/src/lookups/dnsdb.c
index 3fd9f98..6181355 100644
--- a/src/src/lookups/dnsdb.c
+++ b/src/src/lookups/dnsdb.c
@@ -246,6 +246,14 @@ if (type == T_PTR && keystring[0] != '<' &&
     string_is_ip_address(keystring, NULL) != 0)
   sep = -1;
 
+/* SPF strings should be concatenated without a separator, thus make
+   it the default if not defined (see RFC 4408 section 3.1.3).
+   Multiple SPF records are forbidden (section 3.1.2) but are currently
+   not handled specially, thus they are concatenated with \n by default. */
+
+if (type == T_SPF && outsep2 == NULL)
+  outsep2 = US"";
+
 /* Now scan the list and do a lookup for each item */
 
 while ((domain = string_nextinlist(&keystring, &sep, buffer, sizeof(buffer)))
-- 
1.7.9.5


-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim 
details at http://www.exim.org/ ##

Reply via email to