ph10 2005/12/01 14:21:25 GMT
Modified files:
exim-doc/doc-txt ChangeLog
exim-src/src os.c version.c
Log:
The code for finding all the local interface addresses on a FreeBSD
system running IPv6 was broken.
Revision Changes Path
1.269 +12 -0 exim/exim-doc/doc-txt/ChangeLog
1.4 +5 -4 exim/exim-src/src/os.c
1.12 +1 -1 exim/exim-src/src/version.c
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.268
retrieving revision 1.269
diff -u -r1.268 -r1.269
--- ChangeLog 28 Nov 2005 10:07:55 -0000 1.268
+++ ChangeLog 1 Dec 2005 14:21:25 -0000 1.269
@@ -1,7 +1,19 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.268 2005/11/28 10:07:55 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.269 2005/12/01 14:21:25 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
+
+Exim version 4.61
+-----------------
+
+PH/01 The code for finding all the local interface addresses on a FreeBSD
+ system running IPv6 was broken. This may well have applied to all BSD
+ systems, as well as to others that have similar system calls. The broken
+ code found IPv4 interfaces correctly, but gave incorrect values for the
+ IPv6 interfaces. In particular, ::1 was not found. The effect in Exim was
+ that it would not match correctly against @[] and not recognize the IPv6
+ addresses as local.
+
Exim version 4.60
-----------------
Index: os.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/os.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- os.c 27 Jun 2005 14:29:43 -0000 1.3
+++ os.c 1 Dec 2005 14:21:25 -0000 1.4
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/os.c,v 1.3 2005/06/27 14:29:43 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/os.c,v 1.4 2005/12/01 14:21:25 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -661,8 +661,9 @@
if ((ifreq.V_ifr_flags & IFF_UP) == 0) continue;
/* On some operating systems we have to get the IP address of the interface
- by another call. On others, it's already there, but we must reinstate the
- data in ifreq, because SIOCGIFFLAGS may wreck it. */
+ by another call. On others, it's already there, but we must copy the full
+ length because we only copied the basic length above, and anyway,
+ GIFFLAGS may have wrecked the data. */
#ifndef SIOCGIFCONF_GIVES_ADDR
if (ioctl(vs, V_GIFADDR, (char *)&ifreq) < 0)
@@ -671,8 +672,8 @@
addrp = &ifreq.V_ifr_addr;
#else
- memcpy((char *)&ifreq, cp, sizeof(ifreq));
- memcpy(addrbuf, (char *)&(ifreq.V_ifr_addr), len - sizeof(ifreq.V_ifr_name));
+ memcpy(addrbuf, cp + offsetof(struct V_ifreq, V_ifr_addr),
+ len - sizeof(ifreq.V_ifr_name));
addrp = (struct sockaddr *)addrbuf;
#endif
Index: version.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/version.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- version.c 12 Oct 2005 15:45:38 -0000 1.11
+++ version.c 1 Dec 2005 14:21:25 -0000 1.12
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/version.c,v 1.11 2005/10/12 15:45:38 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/version.c,v 1.12 2005/12/01 14:21:25 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -12,7 +12,7 @@
#include "exim.h"
-#define THIS_VERSION "4.60"
+#define THIS_VERSION "4.61"
/* The header file cnumber.h contains a single line containing the