Subject: [alpine-devel] SpamAssassin DNSBL tests fail after changes in perl (patch included)

From: Johan Dahlberg <[email-masked]>
Date: Wed, 17 Dec 2014 11:49:40 +0200

Hello,

With the update to 3.1 some changes in perl broke the dns resolving
capabilities of SpamAssassin.

Although the fault lies within SpamAssassin itself, and it should be on
their end to fix/update it. Still I created a patch that will let 
SpamAssassin 3.4 use DNSBL and general dns lookups properly again.

I cant guarantee it solves all cases but it worked just fine here.

Johan

--- SpamAssassin/DnsResolver.pm.bak
+++ SpamAssassin/DnsResolver.pm
@@ -204,8 +204,10 @@
     @ns_addr_port = @{$self->{conf}->{dns_servers}};
     dbg("dns: servers set by config to: %s", join(', ',@ns_addr_port));
   } elsif ($res) {  # default as provided by Net::DNS, e.g.
/etc/resolv.conf
-    @ns_addr_port = map(untaint_var("[$_]:" . $res->{port}),
-                        @{$res->{nameservers}});
+    my @ns = $res->UNIVERSAL::can('nameservers') ? $res->nameservers
+                                                 :
@{$res->{nameservers}};
+    my $port = $res->UNIVERSAL::can('port') ? $res->port :
$res->{port};
+    @ns_addr_port = map(untaint_var("[$_]:" . $port), @ns);
     dbg("dns: servers obtained from Net::DNS : %s", join(',
',@ns_addr_port));
   }
   return @ns_addr_port;

---

From: Leonardo Arena <[email-masked]>
Date: Mon, 22 Dec 2014 17:12:13 +0100

> +++ SpamAssassin/DnsResolver.pm

Hi,
thanks for your contribution.
Would it be possible to have a GIT patch? It would be easier and 100%
error-free to apply.
Thanks!

R,
leo

---

From: Johan Dahlberg <[email-masked]>
Date: Mon, 22 Dec 2014 19:05:29 +0200

> Would it be possible to have a GIT patch? It would be easier and 100%

Hello, I'm not so used to working with git, but I think the attached
patch is correct.

Johan
diff --git a/lib/Mail/SpamAssassin/DnsResolver.pm.orig b/lib/Mail/SpamAssassin/DnsResolver.pm
index 41ae81c..fdc1e5e 100644
--- a/lib/Mail/SpamAssassin/DnsResolver.pm.orig
+++ b/lib/Mail/SpamAssassin/DnsResolver.pm
@@ -204,8 +204,10 @@ sub configured_nameservers {
     @ns_addr_port = @{$self->{conf}->{dns_servers}};
     dbg("dns: servers set by config to: %s", join(', ',@ns_addr_port));
   } elsif ($res) {  # default as provided by Net::DNS, e.g. /etc/resolv.conf
-    @ns_addr_port = map(untaint_var("[$_]:" . $res->{port}),
-                        @{$res->{nameservers}});
+    my @ns = $res->UNIVERSAL::can('nameservers') ? $res->nameservers
+                                                 : @{$res->{nameservers}};
+    my $port = $res->UNIVERSAL::can('port') ? $res->port : $res->{port};
+    @ns_addr_port = map(untaint_var("[$_]:" . $port), @ns);
     dbg("dns: servers obtained from Net::DNS : %s", join(', ',@ns_addr_port));
   }
   return @ns_addr_port;

---

From: Johan Dahlberg <[email-masked]>
Date: Mon, 22 Dec 2014 21:11:08 +0200

>      dbg("dns: servers obtained from Net::DNS : %s", join(', ',@ns_addr_port));

I took some time to figure out git a bit so I guess the following
attached patch is more accurate(?).

Regards,
Johan
---
 lib/Mail/SpamAssassin/DnsResolver.pm | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/Mail/SpamAssassin/DnsResolver.pm b/lib/Mail/SpamAssassin/DnsResolver.pm
--- a/lib/Mail/SpamAssassin/DnsResolver.pm
-- 
2.2.1

---

From: Leonardo Arena <[email-masked]>
Date: Thu, 25 Dec 2014 10:55:08 +0100

> attached patch is more accurate(?).

Thanks.
I applied it to edge, can you please check that it works as expected?
Then I can backport it to 3.1-stable.

For future patches it would be nice to have a GIT patch against aports
tree. It would be more straightforward to apply them.
Thanks!

- leo

---

From: Johan Dahlberg <[email-masked]>
Date: Thu, 25 Dec 2014 13:32:48 +0200

> tree. It would be more straightforward to apply them.

I will test is as soon as the package shows up on the mirrors.

However I have a problem downloading your aports git, getting the
following several times now:

#> git clone http://git.alpinelinux.org/cgit/aports/

# Cloning into 'aports'...
# error: Unable to get pack file
# http://git.alpinelinux.org/cgit/aports/objects/pack/pack-1f504ab51e1954e77d4841ca04d0a395bec1e1af.pack
# Recv failure: Connection timed out
# error: Unable to find e24b2cb6f0edf60b9bc766902715f25076ad591a under
# http://git.alpinelinux.org/cgit/aports
# Cannot obtain needed tree e24b2cb6f0edf60b9bc766902715f25076ad591a
# while processing commit 934775c391ac937f8c7a4f952cc7498df51abd7e.
# error: fetch failed.

It's temporary perhaps. Are there any mirrors?

If I have any future patches I will create them against the aports tree.

Regards,
Johan

---

From: Leonardo Arena <[email-masked]>
Date: Thu, 25 Dec 2014 13:08:32 +0100

> It's temporary perhaps. Are there any mirrors?

May be is a web server issue. Have you tried
git://git.alpinelinux.org/cgit/aports/ ?

Thanks!

---

From: Johan Dahlberg <[email-masked]>
Date: Fri, 26 Dec 2014 03:28:09 +0200

> > If I have any future patches I will create them against the aports tree.

The patched spamassassin is working as expected.

DNSBL lookups and scoring are all accurate. So I think you can push this
to the main repo.

Regards,
Johan

---

From: Leonardo Arena <[email-masked]>
Date: Mon, 29 Dec 2014 13:58:56 +0100

On ven, 2014-12-26 at 03:28 +0200, Johan Dahlberg wrote:

[snip]

> DNSBL lookups and scoring are all accurate. So I think you can push this

Backported to 3.1-stable.

Thanks!

- leo