Mon Jan 12 18:59:24 2009 UTC ()
Update exim to 4.69nb4
- Add support for getifaddrs() and enable on NetBSD - submitted back to
exim bugzilla as http://bugs.exim.org/show_bug.cgi?id=802
- Increase size of addrbuf[512] used in old style ioctl() version of
os_common_find_running_interfaces()
Fixes issue on NetBSD 5.0
(abs)
diff -r1.93 -r1.94 pkgsrc/mail/exim/Makefile
diff -r1.39 -r1.40 pkgsrc/mail/exim/distinfo
diff -r0 -r1.12 pkgsrc/mail/exim/patches/patch-ac
diff -r0 -r1.11 pkgsrc/mail/exim/patches/patch-ad
--- pkgsrc/mail/exim/Makefile 2008/11/10 17:21:36 1.93
+++ pkgsrc/mail/exim/Makefile 2009/01/12 18:59:24 1.94
| @@ -1,17 +1,17 @@ | | | @@ -1,17 +1,17 @@ |
1 | # $NetBSD: Makefile,v 1.93 2008/11/10 17:21:36 wiz Exp $ | | 1 | # $NetBSD: Makefile,v 1.94 2009/01/12 18:59:24 abs Exp $ |
2 | | | 2 | |
3 | DISTNAME= exim-4.69 | | 3 | DISTNAME= exim-4.69 |
4 | PKGREVISION= 3 | | 4 | PKGREVISION= 4 |
5 | CATEGORIES= mail net | | 5 | CATEGORIES= mail net |
6 | MASTER_SITES= ftp://ftp.exim.org/pub/exim/exim4/ \ | | 6 | MASTER_SITES= ftp://ftp.exim.org/pub/exim/exim4/ \ |
7 | ftp://ftp.csx.cam.ac.uk/pub/software/email/exim/exim4/ \ | | 7 | ftp://ftp.csx.cam.ac.uk/pub/software/email/exim/exim4/ \ |
8 | ftp://ftp.esat.net/pub/networking/mail/mta/exim/exim4/ | | 8 | ftp://ftp.esat.net/pub/networking/mail/mta/exim/exim4/ |
9 | EXTRACT_SUFX= .tar.bz2 | | 9 | EXTRACT_SUFX= .tar.bz2 |
10 | | | 10 | |
11 | MAINTAINER= abs@NetBSD.org | | 11 | MAINTAINER= abs@NetBSD.org |
12 | HOMEPAGE= http://www.exim.org/ | | 12 | HOMEPAGE= http://www.exim.org/ |
13 | COMMENT= The Exim mail transfer agent, a replacement for sendmail | | 13 | COMMENT= The Exim mail transfer agent, a replacement for sendmail |
14 | | | 14 | |
15 | CONFLICTS+= exim-exiscan-[0-9]* | | 15 | CONFLICTS+= exim-exiscan-[0-9]* |
16 | | | 16 | |
17 | USE_TOOLS+= perl:run | | 17 | USE_TOOLS+= perl:run |
--- pkgsrc/mail/exim/distinfo 2008/01/14 18:57:39 1.39
+++ pkgsrc/mail/exim/distinfo 2009/01/12 18:59:24 1.40
| @@ -1,9 +1,11 @@ | | | @@ -1,9 +1,11 @@ |
1 | $NetBSD: distinfo,v 1.39 2008/01/14 18:57:39 adam Exp $ | | 1 | $NetBSD: distinfo,v 1.40 2009/01/12 18:59:24 abs Exp $ |
2 | | | 2 | |
3 | SHA1 (exim-4.69.tar.bz2) = 321e238b6e6b32498110511ce72a911538305a39 | | 3 | SHA1 (exim-4.69.tar.bz2) = 321e238b6e6b32498110511ce72a911538305a39 |
4 | RMD160 (exim-4.69.tar.bz2) = ae97c807c63f858ba4a0ab402677225da9337d05 | | 4 | RMD160 (exim-4.69.tar.bz2) = ae97c807c63f858ba4a0ab402677225da9337d05 |
5 | Size (exim-4.69.tar.bz2) = 1658939 bytes | | 5 | Size (exim-4.69.tar.bz2) = 1658939 bytes |
6 | SHA1 (patch-aa) = 93dca43408fb837deb95d2b22502c64559780f7c | | 6 | SHA1 (patch-aa) = 93dca43408fb837deb95d2b22502c64559780f7c |
7 | SHA1 (patch-ab) = 1c6e7882346974390c22e7b9e09a76c5ed670d1d | | 7 | SHA1 (patch-ab) = 1c6e7882346974390c22e7b9e09a76c5ed670d1d |
| | | 8 | SHA1 (patch-ac) = de96032a9cf5450101cc73d615d374ddf6817fee |
| | | 9 | SHA1 (patch-ad) = 804ab58f454f7e100c117f2cec9cf478375c1752 |
8 | SHA1 (patch-ae) = 6cb0f00d159de7c342a55b09fb87ab533c5670bf | | 10 | SHA1 (patch-ae) = 6cb0f00d159de7c342a55b09fb87ab533c5670bf |
9 | SHA1 (patch-ag) = 8512795060ad913f4699c277867fd24e7a785519 | | 11 | SHA1 (patch-ag) = 8512795060ad913f4699c277867fd24e7a785519 |
$NetBSD: patch-ac,v 1.12 2009/01/12 18:59:24 abs Exp $
--- src/os.c.orig 2007-01-08 10:50:18.000000000 +0000
+++ src/os.c
@@ -463,6 +463,75 @@ calls the common function; on Linux it c
This function finds the addresses of all the running interfaces on the machine.
A chain of blocks containing the textual form of the addresses is returned.
+getifaddrs() provides a sane consistent way to query this on modern OSs,
+otherwise fall back to a maze of twisty ioctl() calls
+
+Arguments: none
+Returns: a chain of ip_address_items, each pointing to a textual
+ version of an IP address, with the port field set to zero
+*/
+
+
+#ifndef NO_FIND_INTERFACES
+
+#ifdef HAVE_GETIFADDRS
+
+#include <ifaddrs.h>
+
+ip_address_item *
+os_common_find_running_interfaces(void)
+{
+struct ifaddrs *ifalist = NULL;
+ip_address_item *yield = NULL;
+ip_address_item *last = NULL;
+ip_address_item *next;
+
+if (getifaddrs(&ifalist) != 0)
+ log_write(0, LOG_PANIC_DIE, "Unable to call getifaddrs: %d %s",
+ errno, strerror(errno));
+
+struct ifaddrs *ifa;
+for (ifa = ifalist; ifa != NULL; ifa = ifa->ifa_next)
+ {
+ if (ifa->ifa_addr->sa_family != AF_INET
+#if HAVE_IPV6
+ && ifa->ifa_addr->sa_family != AF_INET6
+#endif /* HAVE_IPV6 */
+ )
+ continue;
+
+ if ( !(ifa->ifa_flags & IFF_UP) ) /* Only want 'UP' interfaces */
+ continue;
+
+ /* Create a data block for the address, fill in the data, and put it on the
+ chain. */
+
+ next = store_get(sizeof(ip_address_item));
+ next->next = NULL;
+ next->port = 0;
+ (void)host_ntoa(-1, ifa->ifa_addr, next->address, NULL);
+
+ if (yield == NULL)
+ yield = last = next;
+ else
+ {
+ last->next = next;
+ last = next;
+ }
+
+ DEBUG(D_interface) debug_printf("Actual local interface address is %s (%s)\n",
+ last->address, ifa->ifa_name);
+ }
+
+/* free the list of addresses, and return the chain of data blocks. */
+
+freeifaddrs (ifalist);
+return yield;
+}
+
+#else /* HAVE_GETIFADDRS */
+
+/*
Problems:
(1) Solaris 2 has the SIOGIFNUM call to get the number of interfaces, but
@@ -486,15 +555,8 @@ Problems:
the former, calling the latter does no harm, but it causes grief on Linux and
BSD systems in the case of IP aliasing, so a means of cutting it out is
provided.
-
-Arguments: none
-Returns: a chain of ip_address_items, each pointing to a textual
- version of an IP address, with the port field set to zero
*/
-
-#ifndef NO_FIND_INTERFACES
-
/* If there is IPv6 support, and SIOCGLIFCONF is defined, define macros to
use these new, longer versions of the old IPv4 interfaces. Otherwise, define
the macros to use the historical versions. */
@@ -556,7 +618,7 @@ char *cp;
char buf[MAX_INTERFACES*sizeof(struct V_ifreq)];
struct sockaddr *addrp;
size_t len = 0;
-char addrbuf[256];
+char addrbuf[512];
/* We have to create a socket in order to do ioctls on it to find out
what we want to know. */
@@ -701,6 +763,8 @@ for (cp = buf; cp < buf + ifc.V_ifc_len;
return yield;
}
+#endif /* HAVE_GETIFADDRS */
+
#else /* NO_FIND_INTERFACES */
/* Some experimental or developing OS (e.g. GNU/Hurd) do not have the ioctls,
$NetBSD: patch-ad,v 1.11 2009/01/12 18:59:24 abs Exp $
--- OS/os.h-NetBSD.orig 2007-06-27 09:46:28.000000000 +0100
+++ OS/os.h-NetBSD
@@ -3,6 +3,7 @@
/* Exim: OS-specific C header file for NetBSD */
#define HAVE_BSD_GETLOADAVG
+#define HAVE_GETIFADDRS
#define HAVE_MMAP
#define HAVE_SYS_MOUNT_H
#define SIOCGIFCONF_GIVES_ADDR