diff options
author | abs <abs@pkgsrc.org> | 2009-01-12 18:59:24 +0000 |
---|---|---|
committer | abs <abs@pkgsrc.org> | 2009-01-12 18:59:24 +0000 |
commit | f28f1f5ae0b6cdf018136d8a902d85288df1730c (patch) | |
tree | 868604ad851bfdbbb077deb11595d06e6232486e /mail/exim | |
parent | 323598598f8579350154d0dc627028ddcd64ad1a (diff) | |
download | pkgsrc-f28f1f5ae0b6cdf018136d8a902d85288df1730c.tar.gz |
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
Diffstat (limited to 'mail/exim')
-rw-r--r-- | mail/exim/Makefile | 4 | ||||
-rw-r--r-- | mail/exim/distinfo | 4 | ||||
-rw-r--r-- | mail/exim/patches/patch-ac | 114 | ||||
-rw-r--r-- | mail/exim/patches/patch-ad | 12 |
4 files changed, 131 insertions, 3 deletions
diff --git a/mail/exim/Makefile b/mail/exim/Makefile index 29d1bd5726d..92ed5290f4f 100644 --- a/mail/exim/Makefile +++ b/mail/exim/Makefile @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.93 2008/11/10 17:21:36 wiz Exp $ +# $NetBSD: Makefile,v 1.94 2009/01/12 18:59:24 abs Exp $ DISTNAME= exim-4.69 -PKGREVISION= 3 +PKGREVISION= 4 CATEGORIES= mail net MASTER_SITES= ftp://ftp.exim.org/pub/exim/exim4/ \ ftp://ftp.csx.cam.ac.uk/pub/software/email/exim/exim4/ \ diff --git a/mail/exim/distinfo b/mail/exim/distinfo index a59f77be0d6..ea4ad7ba696 100644 --- a/mail/exim/distinfo +++ b/mail/exim/distinfo @@ -1,9 +1,11 @@ -$NetBSD: distinfo,v 1.39 2008/01/14 18:57:39 adam Exp $ +$NetBSD: distinfo,v 1.40 2009/01/12 18:59:24 abs Exp $ SHA1 (exim-4.69.tar.bz2) = 321e238b6e6b32498110511ce72a911538305a39 RMD160 (exim-4.69.tar.bz2) = ae97c807c63f858ba4a0ab402677225da9337d05 Size (exim-4.69.tar.bz2) = 1658939 bytes SHA1 (patch-aa) = 93dca43408fb837deb95d2b22502c64559780f7c SHA1 (patch-ab) = 1c6e7882346974390c22e7b9e09a76c5ed670d1d +SHA1 (patch-ac) = de96032a9cf5450101cc73d615d374ddf6817fee +SHA1 (patch-ad) = 804ab58f454f7e100c117f2cec9cf478375c1752 SHA1 (patch-ae) = 6cb0f00d159de7c342a55b09fb87ab533c5670bf SHA1 (patch-ag) = 8512795060ad913f4699c277867fd24e7a785519 diff --git a/mail/exim/patches/patch-ac b/mail/exim/patches/patch-ac new file mode 100644 index 00000000000..a2faff17aeb --- /dev/null +++ b/mail/exim/patches/patch-ac @@ -0,0 +1,114 @@ +$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, diff --git a/mail/exim/patches/patch-ad b/mail/exim/patches/patch-ad new file mode 100644 index 00000000000..63b93015617 --- /dev/null +++ b/mail/exim/patches/patch-ad @@ -0,0 +1,12 @@ +$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 |