Files
kumomta/docs
Wez Furlong 7953a7b0f2 fix: spf didn't parse records when TXT had non-spf records
The issue here was essentially a data fidelity issue around
TXT record representation.

A DNS TXT record can be composed from multiple strings, and a domain can
return multiple TXT records, so there is some nesting.

The SPF RFC says:

```
3.3.  Multiple Strings in a Single DNS Record

   As defined in [RFC1035], Sections 3.3 and 3.3.14, a single text DNS
   record can be composed of more than one string.  If a published
   record contains multiple character-strings, then the record MUST be
   treated as if those strings are concatenated together without adding
   spaces.  For example:

      IN TXT "v=spf1 .... first" "second string..."

   is equivalent to:

      IN TXT "v=spf1 .... firstsecond string..."

   TXT records containing multiple strings are useful in constructing
   records that would exceed the 255-octet maximum length of a
   character-string within a single TXT record.
```

so the SPF logic was dutifully joining records together around the
empty string.

Howerver, if you look at `dig yahoo.com txt` you'll see a bunch
of non-SPF records:

```
yahoo.com.              1800    IN      TXT     "google-site-verification=Z3-Vh6zqUMgybVH4wQl1GxKSKN7JE13kyCyeZ3TZZ-I"
yahoo.com.              1800    IN      TXT     "v=spf1 redirect=_spf.mail.yahoo.com"
yahoo.com.              1800    IN      TXT     "Zoom=13284637"
yahoo.com.              1800    IN      TXT     "edb3bff2c0d64622a9b2250438277a59"
```

these were getting joined together and producing a bogus input.

Obviously we should not join the results from the txt lookup
together like that, but then why would the RFC make a point
of talking about joining stuff together, and where should
that logic live?

Our `Answer::as_txt` implementation was doing some joining
of its own and it turned out that it was concatenating across
the outer layer of the aforementioned TXT record nesting.

This commit fixes that up and adds some test coverage.
2025-03-07 07:06:10 -07:00
..
2023-10-18 16:18:56 -06:00
2025-02-28 08:41:16 -08:00
2025-02-27 06:01:11 -07:00
2025-02-20 13:04:57 +00:00
2025-02-20 16:00:16 -07:00