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

cvs diff -r1.93 -r1.94 pkgsrc/mail/exim/Makefile (expand / switch to unified diff)

--- 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
3DISTNAME= exim-4.69 3DISTNAME= exim-4.69
4PKGREVISION= 3 4PKGREVISION= 4
5CATEGORIES= mail net 5CATEGORIES= mail net
6MASTER_SITES= ftp://ftp.exim.org/pub/exim/exim4/ \ 6MASTER_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/
9EXTRACT_SUFX= .tar.bz2 9EXTRACT_SUFX= .tar.bz2
10 10
11MAINTAINER= abs@NetBSD.org 11MAINTAINER= abs@NetBSD.org
12HOMEPAGE= http://www.exim.org/ 12HOMEPAGE= http://www.exim.org/
13COMMENT= The Exim mail transfer agent, a replacement for sendmail 13COMMENT= The Exim mail transfer agent, a replacement for sendmail
14 14
15CONFLICTS+= exim-exiscan-[0-9]* 15CONFLICTS+= exim-exiscan-[0-9]*
16 16
17USE_TOOLS+= perl:run 17USE_TOOLS+= perl:run

cvs diff -r1.39 -r1.40 pkgsrc/mail/exim/distinfo (expand / switch to unified diff)

--- 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
3SHA1 (exim-4.69.tar.bz2) = 321e238b6e6b32498110511ce72a911538305a39 3SHA1 (exim-4.69.tar.bz2) = 321e238b6e6b32498110511ce72a911538305a39
4RMD160 (exim-4.69.tar.bz2) = ae97c807c63f858ba4a0ab402677225da9337d05 4RMD160 (exim-4.69.tar.bz2) = ae97c807c63f858ba4a0ab402677225da9337d05
5Size (exim-4.69.tar.bz2) = 1658939 bytes 5Size (exim-4.69.tar.bz2) = 1658939 bytes
6SHA1 (patch-aa) = 93dca43408fb837deb95d2b22502c64559780f7c 6SHA1 (patch-aa) = 93dca43408fb837deb95d2b22502c64559780f7c
7SHA1 (patch-ab) = 1c6e7882346974390c22e7b9e09a76c5ed670d1d 7SHA1 (patch-ab) = 1c6e7882346974390c22e7b9e09a76c5ed670d1d
 8SHA1 (patch-ac) = de96032a9cf5450101cc73d615d374ddf6817fee
 9SHA1 (patch-ad) = 804ab58f454f7e100c117f2cec9cf478375c1752
8SHA1 (patch-ae) = 6cb0f00d159de7c342a55b09fb87ab533c5670bf 10SHA1 (patch-ae) = 6cb0f00d159de7c342a55b09fb87ab533c5670bf
9SHA1 (patch-ag) = 8512795060ad913f4699c277867fd24e7a785519 11SHA1 (patch-ag) = 8512795060ad913f4699c277867fd24e7a785519

File Added: pkgsrc/mail/exim/patches/Attic/patch-ac
$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,

File Added: pkgsrc/mail/exim/patches/Attic/patch-ad
$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