summaryrefslogtreecommitdiff
path: root/mail-filter/libspf2/files/libspf2-1.2.9-ipv6.patch
blob: 76e8cd37c27d60ec597089592c40571d4ebd1682 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$NetBSD: patch-aa,v 1.1 2009/09/08 10:36:27 tron Exp $

Fix an abort() caused by miscalculating the size of an internal buffer.
This can crash applications using "libspf2" (e.g. "milter-greylist")
in an e-mail gets delivered via SMTP over IPv6 depending on the
remote machine's IPv6 address.

--- src/libspf2/spf_expand.c.orig	2008-11-03 21:29:00.000000000 +0000
+++ src/libspf2/spf_expand.c	2009-09-08 11:27:52.000000000 +0100
@@ -245,7 +245,7 @@
 		case PARM_CLIENT_IP:		/* SMTP client IP				*/
 #ifdef COMPUTE
 			if (compute_length) {
-				len = sizeof(ip6_buf);
+				len = sizeof(ip6_rbuf);
 				if (d->dv.url_encode)
 					len *= 3;
 				buflen += len;

http://www.gossamer-threads.com/lists/spf/devel/35098

--- src/libspf2/spf_compile.c	2008-11-03 15:37:33.000000000 -0500
+++ src/libspf2/spf_compile.c	2009-09-07 23:46:02.000000000 -0400
@@ -778,7 +778,7 @@
 	const char			*end;
 	const char			*p;
 
-	char				 buf[ INET_ADDRSTRLEN ];
+	char				 buf[ INET6_ADDRSTRLEN ];
 	size_t				 len;
 	int					 err;
 
--- src/libspf2/spf_interpret.c	2008-10-22 11:47:43.000000000 -0400
+++ src/libspf2/spf_interpret.c	2009-09-08 00:42:25.000000000 -0400
@@ -505,7 +505,7 @@
 	char		dst_ip6_buf[ INET6_ADDRSTRLEN ];
 
 	struct in6_addr		src_ipv6;
-	int				cidr, mask;
+	int				cidr, cidr_save, mask;
 	int				i;
 	int				match;
 
@@ -517,6 +517,7 @@
 	cidr = SPF_i_mech_cidr(spf_request, mech);
 	if ( cidr == 0 )
 		cidr = 128;
+	cidr_save = cidr;
 
 	match = TRUE;
 	for( i = 0; i < array_elem( ipv6.s6_addr ) && match; i++ )
@@ -538,7 +539,7 @@
 		INET_NTOP(AF_INET6, &ipv6.s6_addr,
 							dst_ip6_buf, sizeof(dst_ip6_buf));
 		SPF_debugf( "ip_match:  %s == %s  (/%d):  %d",
-				src_ip6_buf, dst_ip6_buf, cidr, match );
+				src_ip6_buf, dst_ip6_buf, cidr_save, match );
 	}
 
 	return match;