diff options
author | Edwin Groothuis <edwin@FreeBSD.org> | 2008-09-01 01:20:23 +0000 |
---|---|---|
committer | Edwin Groothuis <edwin@FreeBSD.org> | 2008-09-01 01:20:23 +0000 |
commit | 543afdf8f16267caec30535e5f5b6f6e92c6d207 (patch) | |
tree | 027252576c1688d1bb63e190c723de90be46dee5 /dns/nss_mdns | |
parent | Upgrade to version 2.00. The major new feature is experimental S/MIME (diff) |
Update dns/nss_mdns to v0.10
Updates dns/nss_mdns port to v0.10 and changes MAINTAINER
field (as per bms's suggestion). This PR fixes the issue
reported in PR ports/123169, so that PR can be closed.
PR: ports/126952
Submitted by: Ashish Shukla <wahjava@gmail.com>
Approved by: bms@
Notes
Notes:
svn path=/head/; revision=219559
Diffstat (limited to 'dns/nss_mdns')
-rw-r--r-- | dns/nss_mdns/Makefile | 5 | ||||
-rw-r--r-- | dns/nss_mdns/distinfo | 6 | ||||
-rw-r--r-- | dns/nss_mdns/files/patch-configure.ac | 16 | ||||
-rw-r--r-- | dns/nss_mdns/files/patch-src__Makefile.am | 75 | ||||
-rw-r--r-- | dns/nss_mdns/files/patch-src__avahi-test.c | 10 | ||||
-rw-r--r-- | dns/nss_mdns/files/patch-src__bsdnss.c | 467 | ||||
-rw-r--r-- | dns/nss_mdns/files/patch-src__query.c | 147 |
7 files changed, 63 insertions, 663 deletions
diff --git a/dns/nss_mdns/Makefile b/dns/nss_mdns/Makefile index b39007770bd6..51953f119feb 100644 --- a/dns/nss_mdns/Makefile +++ b/dns/nss_mdns/Makefile @@ -6,13 +6,12 @@ # PORTNAME= nss_mdns -PORTVERSION= 0.9 -PORTREVISION= 6 +PORTVERSION= 0.10 CATEGORIES= dns ipv6 MASTER_SITES= http://0pointer.de/lennart/projects/nss-mdns/ DISTNAME= nss-mdns-${PORTVERSION} -MAINTAINER= bms@FreeBSD.org +MAINTAINER= wahjava@gmail.com COMMENT= NSS module implementing multicast DNS name resolution USE_AUTOTOOLS= autoconf:262 automake:19 libtool:15 diff --git a/dns/nss_mdns/distinfo b/dns/nss_mdns/distinfo index 300d2e555100..e66704e10eba 100644 --- a/dns/nss_mdns/distinfo +++ b/dns/nss_mdns/distinfo @@ -1,3 +1,3 @@ -MD5 (nss-mdns-0.9.tar.gz) = bc72f5b19cc6ce8cacde448236b30868 -SHA256 (nss-mdns-0.9.tar.gz) = 0bf226bb3a1716e6eb97355e08a7ffcf09aadfb91ba41ccef2ef1ba7a01719a2 -SIZE (nss-mdns-0.9.tar.gz) = 346397 +MD5 (nss-mdns-0.10.tar.gz) = 03938f17646efbb50aa70ba5f99f51d7 +SHA256 (nss-mdns-0.10.tar.gz) = 1e683c2e7c3921814706d62fbbd3e9cbf493a75fa00255e0e715508d8134fa6d +SIZE (nss-mdns-0.10.tar.gz) = 353130 diff --git a/dns/nss_mdns/files/patch-configure.ac b/dns/nss_mdns/files/patch-configure.ac deleted file mode 100644 index 17a4e0c65a72..000000000000 --- a/dns/nss_mdns/files/patch-configure.ac +++ /dev/null @@ -1,16 +0,0 @@ ---- configure.ac.orig Mon Jan 1 18:36:21 2007 -+++ configure.ac Sat Jan 20 14:34:44 2007 -@@ -83,6 +83,13 @@ - AC_FUNC_SELECT_ARGTYPES - AC_CHECK_FUNCS([gethostbyaddr gethostbyname gettimeofday inet_ntoa memset select socket strcspn strdup strerror strncasecmp strcasecmp strspn]) - -+# FreeBSD has a slightly different NSS interface -+case ${host} in -+ *-freebsd*) freebsd="yes" ;; -+esac -+ -+AM_CONDITIONAL([FREEBSD_NSS], [test "x$freebsd" = "xyes"]) -+ - # If using GCC specify some additional parameters - if test "x$GCC" = "xyes" ; then - CFLAGS="$CFLAGS -pipe -W -Wall -pedantic" diff --git a/dns/nss_mdns/files/patch-src__Makefile.am b/dns/nss_mdns/files/patch-src__Makefile.am index 568df237353d..7bbd1b6540b3 100644 --- a/dns/nss_mdns/files/patch-src__Makefile.am +++ b/dns/nss_mdns/files/patch-src__Makefile.am @@ -1,57 +1,26 @@ ---- src/Makefile.am.orig Mon Jan 1 18:39:28 2007 -+++ src/Makefile.am Sat Jan 20 14:34:44 2007 -@@ -29,13 +29,22 @@ - # This cool debug trap works on i386/gcc only - AM_CFLAGS+='-DDEBUG_TRAP=__asm__("int $$3")' +--- src/Makefile.am.orig 2007-02-08 22:12:23.000000000 +0530 ++++ src/Makefile.am 2008-04-30 02:52:50.000000000 +0530 +@@ -34,13 +34,7 @@ + lib_LTLIBRARIES = --lib_LTLIBRARIES= \ -+AM_LDFLAGS=-avoid-version -module -export-dynamic -+ -+if FREEBSD_NSS -+nss_modules_freebsd= \ -+ nss_mdns.la -+else -+nss_modules_glibc= \ + if FREEBSD_NSS +-lib_LTLIBRARIES += \ +- nss_mdns.la \ +- nss_mdns4.la \ +- nss_mdns6.la \ +- nss_mdns_minimal.la \ +- nss_mdns4_minimal.la \ +- nss_mdns6_minimal.la ++lib_LTLIBRARIES += nss_mdns.la + else + lib_LTLIBRARIES += \ libnss_mdns.la \ - libnss_mdns4.la \ - libnss_mdns6.la \ - libnss_mdns_minimal.la \ - libnss_mdns4_minimal.la \ - libnss_mdns6_minimal.la -+endif -+ -+lib_LTLIBRARIES = $(nss_modules_glibc) $(nss_modules_freebsd) - - noinst_PROGRAMS= \ - nss-test -@@ -81,6 +90,30 @@ - libnss_mdns6_minimal_la_SOURCES=$(libnss_mdns_la_SOURCES) - libnss_mdns6_minimal_la_CFLAGS=$(libnss_mdns_la_CFLAGS) -DNSS_IPV6_ONLY=1 -DMDNS_MINIMAL +@@ -90,7 +84,7 @@ libnss_mdns6_minimal_la_LDFLAGS=$(libnss_mdns_la_LDFLAGS) -+ -+nss_mdns_la_SOURCES=$(libnss_mdns_la_SOURCES) bsdnss.c -+nss_mdns_la_CFLAGS=$(libnss_mdns_la_CFLAGS) -+nss_mdns_la_LDFLAGS=$(AM_LDFLAGS) -shrext .so.1 -+ -+nss_mdns_minimal_la_SOURCES=$(nss_mdns_la_SOURCES) -+nss_mdns_minimal_la_CFLAGS=$(nss_mdns_la_CFLAGS) -DMDNS_MINIMAL -+nss_mdns_minimal_la_LDFLAGS=$(nss_mdns_la_LDFLAGS) -+ -+nss_mdns4_la_SOURCES=$(nss_mdns_la_SOURCES) -+nss_mdns4_la_CFLAGS=$(nss_mdns_la_CFLAGS) -DNSS_IPV4_ONLY=1 -+nss_mdns4_la_LDFLAGS=$(nss_mdns_la_LDFLAGS) -+ -+nss_mdns4_minimal_la_SOURCES=$(nss_mdns_la_SOURCES) -+nss_mdns4_minimal_la_CFLAGS=$(nss_mdns_la_CFLAGS) -DNSS_IPV4_ONLY=1 -DMDNS_MINIMAL -+nss_mdns4_minimal_la_LDFLAGS=$(nss_mdns_la_LDFLAGS) -+ -+nss_mdns6_la_SOURCES=$(nss_mdns_la_SOURCES) -+nss_mdns6_la_CFLAGS=$(nss_mdns_la_CFLAGS) -DNSS_IPV6_ONLY=1 -+nss_mdns6_la_LDFLAGS=$(nss_mdns_la_LDFLAGS) -+ -+nss_mdns6_minimal_la_SOURCES=$(nss_mdns_la_SOURCES) -+nss_mdns6_minimal_la_CFLAGS=$(nss_mdns_la_CFLAGS) -DNSS_IPV6_ONLY=1 -DMDNS_MINIMAL -+nss_mdns6_minimal_la_LDFLAGS=$(nss_mdns_la_LDFLAGS) - avahi_test_SOURCES = \ - avahi.c avahi.h \ + # FreeBSD +-nss_mdns_la_SOURCES=$(sources) bsdnss.c ++nss_mdns_la_SOURCES=$(sources) bsdnss.c nss.c + nss_mdns_la_CFLAGS=$(AM_CFLAGS) + nss_mdns_la_LDFLAGS=$(AM_LDFLAGS) -shrext .so.1 + diff --git a/dns/nss_mdns/files/patch-src__avahi-test.c b/dns/nss_mdns/files/patch-src__avahi-test.c deleted file mode 100644 index c828ebe5a446..000000000000 --- a/dns/nss_mdns/files/patch-src__avahi-test.c +++ /dev/null @@ -1,10 +0,0 @@ ---- src/avahi-test.c.orig Sat Aug 6 00:51:50 2005 -+++ src/avahi-test.c Sat Jan 20 14:34:44 2007 -@@ -19,6 +19,7 @@ - USA. - ***/ - -+#include <sys/socket.h> - #include <arpa/inet.h> - #include <stdio.h> - diff --git a/dns/nss_mdns/files/patch-src__bsdnss.c b/dns/nss_mdns/files/patch-src__bsdnss.c index fbdb2b61f60d..e95192c1d62c 100644 --- a/dns/nss_mdns/files/patch-src__bsdnss.c +++ b/dns/nss_mdns/files/patch-src__bsdnss.c @@ -1,431 +1,36 @@ ---- src/bsdnss.c.orig Tue Apr 10 12:16:00 2007 -+++ src/bsdnss.c Tue Apr 10 12:21:42 2007 -@@ -0,0 +1,428 @@ -+/* rcs tags go here when pushed upstream */ -+/* Original author: Bruce M. Simpson <bms@FreeBSD.org> */ -+ -+/*** -+ This file is part of nss-mdns. -+· -+ nss-mdns is free software; you can redistribute it and/or modify -+ it under the terms of the GNU Lesser General Public License as published -+ by the Free Software Foundation; either version 2 of the License, -+ or (at your option) any later version. -+· -+ nss-mdns is distributed in the hope that it will be useful, but1 -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+· -+ You should have received a copy of the GNU Lesser General Public License -+ along with nss-mdns; if not, write to the Free Software -+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -+ USA. -+***/ -+ -+#include <sys/param.h> -+#include <sys/types.h> -+#include <sys/time.h> -+#include <sys/uio.h> -+#include <sys/socket.h> -+#include <sys/ktrace.h> -+ -+#include <stdarg.h> -+#include <stdlib.h> -+#include <stdio.h> -+#include <string.h> -+ -+#include <errno.h> -+#include <pwd.h> -+#include <grp.h> -+#include <nss.h> -+ -+#include <netinet/in.h> -+#include <netdb.h> -+ -+#include "config.h" -+ -+#ifdef MDNS_MINIMAL -+/* -+ * FreeBSD support prefers Avahi. -+ */ -+#endif -+ -+#if defined(NSS_IPV4_ONLY) || defined(NSS_IPV6_ONLY) -+/* -+ * FreeBSD's libc is always built with IPv4 support. -+ * There is no way of telling at compile time with a define if libc -+ * was built with -DINET6 or not; a configure test would be required. -+ * Therefore, distinguishing between the two makes no sense. -+ */ -+#define NO_BUILD_BSD_NSS -+#endif -+ -+#ifndef NO_BUILD_BSD_NSS -+/* -+ * To turn on utrace() records, compile with -DDEBUG_UTRACE. -+ */ -+#ifdef DEBUG_UTRACE -+#define _NSS_UTRACE(msg) \ -+ do { \ -+ static const char __msg[] = msg ; \ -+ (void)utrace(__msg, sizeof(__msg)); \ -+ } while (0) -+#else -+#define _NSS_UTRACE(msg) -+#endif -+ -+ns_mtab *nss_module_register(const char *source, unsigned int *mtabsize, -+ nss_module_unregister_fn *unreg); -+ -+extern enum nss_status _nss_mdns_gethostbyname_r (const char *name, struct hostent * result, -+ char *buffer, size_t buflen, int *errnop, -+ int *h_errnop); -+ -+extern enum nss_status _nss_mdns_gethostbyname2_r (const char *name, int af, struct hostent * result, -+ char *buffer, size_t buflen, int *errnop, -+ int *h_errnop); -+extern enum nss_status _nss_mdns_gethostbyaddr_r (struct in_addr * addr, int len, int type, -+ struct hostent * result, char *buffer, -+ size_t buflen, int *errnop, int *h_errnop); -+ -+typedef enum nss_status (*_bsd_nsstub_fn_t)(const char *, struct hostent *, char *, size_t, int *, int *); -+ -+/* XXX: FreeBSD 5.x is not supported. */ -+static NSS_METHOD_PROTOTYPE(__nss_bsdcompat_getaddrinfo); -+static NSS_METHOD_PROTOTYPE(__nss_bsdcompat_gethostbyaddr_r); -+static NSS_METHOD_PROTOTYPE(__nss_bsdcompat_gethostbyname2_r); -+static NSS_METHOD_PROTOTYPE(__nss_bsdcompat_ghbyaddr); -+static NSS_METHOD_PROTOTYPE(__nss_bsdcompat_ghbyname); -+ -+static ns_mtab methods[] = { -+ /* database, name, method, mdata */ -+ { NSDB_HOSTS, "getaddrinfo", __nss_bsdcompat_getaddrinfo, NULL }, -+ { NSDB_HOSTS, "gethostbyaddr_r", __nss_bsdcompat_gethostbyaddr_r, NULL }, -+ { NSDB_HOSTS, "gethostbyname2_r", __nss_bsdcompat_gethostbyname2_r, NULL }, -+ { NSDB_HOSTS, "ghbyaddr", __nss_bsdcompat_ghbyaddr, NULL }, -+ { NSDB_HOSTS, "ghbyname", __nss_bsdcompat_ghbyname, NULL }, -+}; -+ -+ns_mtab * -+nss_module_register(const char *source, unsigned int *mtabsize, -+ nss_module_unregister_fn *unreg) -+{ -+ -+ *mtabsize = sizeof(methods)/sizeof(methods[0]); -+ *unreg = NULL; -+ return (methods); -+} -+ -+/* -+ * Calling convention: -+ * ap: const char *name (optional), struct addrinfo *pai (hints, optional) -+ * retval: struct addrinfo ** -+ * -+ * TODO: Map all returned hostents, not just the first match. -+ * -+ * name must always be specified by libc; pai is allocated -+ * by libc and must always be specified. -+ * -+ * We can malloc() addrinfo instances and hang them off ai->next; -+ * canonnames may also be malloc()'d. -+ * libc is responsible for mapping our ns error return to gai_strerror(). -+ * -+ * libc calls us only to look up qualified hostnames. We don't need to -+ * worry about port numbers; libc will call getservbyname() and explore -+ * the appropriate maps configured in nsswitch.conf(5). -+ * -+ * _errno and _h_errno are unused by getaddrinfo(), as it is -+ * [mostly] OS independent interface implemented by Win32. -+ */ -+static int -+__nss_bsdcompat_getaddrinfo(void *retval, void *mdata __unused, va_list ap) -+{ -+ struct addrinfo sentinel; -+ struct addrinfo *ai; -+ char *buffer; -+ void *cbufp; /* buffer handed to libc */ -+ char *hap; -+ struct hostent *hp; -+ void *mbufp; /* buffer handed to mdns */ -+ const char *name; -+ const struct addrinfo *pai; -+ struct sockaddr *psa; /* actually *sockaddr_storage */ -+ struct addrinfo **resultp; -+ int _errno; -+ int _h_errno; -+ size_t mbuflen = 1024; -+ enum nss_status status; -+ -+ _NSS_UTRACE("__nss_bsdcompat_getaddrinfo: called"); -+ -+ _h_errno = _errno = 0; -+ status = NSS_STATUS_UNAVAIL; -+ -+ name = va_arg(ap, const char *); -+ pai = va_arg(ap, struct addrinfo *); -+ resultp = (struct addrinfo **)retval; -+ -+ /* XXX: Will be used to hang off multiple matches later. */ -+ memset(&sentinel, 0, sizeof(sentinel)); -+ -+ if (name == NULL || pai == NULL) { -+ *resultp = sentinel.ai_next; -+ return (NS_UNAVAIL); -+ } -+ -+ mbufp = malloc((sizeof(struct hostent) + mbuflen)); -+ if (mbufp == NULL) { -+ *resultp = sentinel.ai_next; -+ return (NS_UNAVAIL); -+ } -+ hp = (struct hostent *)mbufp; -+ buffer = (char *)(hp + 1); -+ -+ cbufp = malloc(sizeof(struct addrinfo) + -+ sizeof(struct sockaddr_storage)); -+ if (cbufp == NULL) { -+ free(mbufp); -+ *resultp = sentinel.ai_next; -+ return (NS_UNAVAIL); -+ } -+ ai = (struct addrinfo *)cbufp; -+ psa = (struct sockaddr *)(ai + 1); -+ -+ /* -+ * 1. Call the nss_mdns internal gethostbyname function. -+ * 2. Map hostent to addrinfo. -+ * 3. Hand-off buffer to libc. -+ */ -+ status = _nss_mdns_gethostbyname_r(name, hp, buffer, mbuflen, -+ &_errno, &_h_errno); -+ status = __nss_compat_result(status, _errno); -+ -+ if (status == NS_SUCCESS) { -+ memset(ai, 0, sizeof(struct addrinfo)); -+ ai->ai_flags = pai->ai_flags; -+ ai->ai_socktype = pai->ai_socktype; -+ ai->ai_protocol = pai->ai_protocol; -+ ai->ai_family = hp->h_addrtype; -+ memset(psa, 0, sizeof(struct sockaddr_storage)); -+ psa->sa_len = ai->ai_addrlen; -+ psa->sa_family = ai->ai_family; -+ ai->ai_addr = psa; -+ hap = hp->h_addr_list[0]; -+ switch (ai->ai_family) { -+ case AF_INET: -+ ai->ai_addrlen = sizeof(struct sockaddr_in); -+ memcpy(&((struct sockaddr_in *)psa)->sin_addr, hap, -+ ai->ai_addrlen); -+ break; -+ case AF_INET6: -+ ai->ai_addrlen = sizeof(struct sockaddr_in6); -+ memcpy(&((struct sockaddr_in6 *)psa)->sin6_addr, hap, -+ ai->ai_addrlen); -+ break; -+ default: -+ ai->ai_addrlen = sizeof(struct sockaddr_storage); -+ memcpy(psa->sa_data, hap, ai->ai_addrlen); -+ } -+ sentinel.ai_next = ai; -+ free(mbufp); -+ } -+ -+ if (sentinel.ai_next == NULL) { -+ free(cbufp); -+ free(mbufp); -+ } -+ -+ *resultp = sentinel.ai_next; -+ return (status); -+} -+ -+/* -+ * Calling convention: -+ * ap: const u_char *uaddr, socklen_t len, int af, struct hostent *hp, -+ * char *buf, size_t buflen, int ret_errno, int *h_errnop -+ * retval: should be set to NULL or hp passed in -+ */ -+static int -+__nss_bsdcompat_gethostbyaddr_r(void *retval, void *mdata __unused, va_list ap) -+{ -+ void *addr; -+ char *buf; -+ int *h_errnop; -+ struct hostent *hp; -+ struct hostent **resultp; -+ int af; -+ size_t buflen; -+ int len; -+ int ret_errno; -+ enum nss_status status; -+ -+ addr = va_arg(ap, void *); -+ len = va_arg(ap, socklen_t); -+ af = va_arg(ap, int); -+ hp = va_arg(ap, struct hostent *); -+ buf = va_arg(ap, char *); -+ buflen = va_arg(ap, size_t); -+ ret_errno = va_arg(ap, int); -+ h_errnop = va_arg(ap, int *); -+ resultp = (struct hostent **)retval; -+ -+ *resultp = NULL; -+ status = _nss_mdns_gethostbyaddr_r(addr, len, af, hp, buf, buflen, -+ &ret_errno, h_errnop); -+ -+ status = __nss_compat_result(status, *h_errnop); -+ if (status == NS_SUCCESS) -+ *resultp = hp; -+ return (status); -+} -+ -+/* -+ * Calling convention: -+ * ap: const char *name, int af, struct hostent *hp, char *buf, -+ * size_t buflen, int ret_errno, int *h_errnop -+ * retval is a struct hostent **result passed in by the libc client, -+ * which is responsible for allocating storage. -+ */ -+static int -+__nss_bsdcompat_gethostbyname2_r(void *retval, void *mdata __unused, -+ va_list ap) -+{ -+ char *buf; -+ const char *name; -+ int *h_errnop; -+ struct hostent *hp; -+ struct hostent **resultp; -+ int af; -+ size_t buflen; -+ int ret_errno; -+ enum nss_status status; -+ -+ name = va_arg(ap, char *); -+ af = va_arg(ap, int); -+ hp = va_arg(ap, struct hostent *); -+ buf = va_arg(ap, char *); -+ buflen = va_arg(ap, size_t); -+ ret_errno = va_arg(ap, int); -+ h_errnop = va_arg(ap, int *); -+ resultp = (struct hostent **)retval; -+ -+ *resultp = NULL; -+ if (hp == NULL) -+ return (NS_UNAVAIL); -+ -+ status = _nss_mdns_gethostbyname2_r(name, af, hp, buf, buflen, -+ &ret_errno, h_errnop); -+ -+ status = __nss_compat_result(status, *h_errnop); -+ if (status == NS_SUCCESS) -+ *resultp = hp; -+ return (status); -+} -+ -+/* -+ * Used by getipnodebyaddr(3). -+ * -+ * Calling convention: -+ * ap: struct in[6]_addr *src, size_t len, int af, int *errp -+ * retval: pointer to a pointer to an uninitialized struct hostent, -+ * in which should be returned a single pointer to on-heap storage. -+ * -+ * This function is responsible for allocating on-heap storage. -+ * The caller is responsible for calling freehostent() on the returned -+ * storage. -+ */ -+static int -+__nss_bsdcompat_ghbyaddr(void *retval, void *mdata __unused, va_list ap) -+{ -+ char *buffer; -+ void *bufp; -+ int *errp; -+ struct hostent *hp; -+ struct hostent **resultp; -+ void *src; -+ int af; -+ size_t buflen = 1024; -+ size_t len; -+ int h_errnop; -+ enum nss_status status; -+ -+ src = va_arg(ap, void *); -+ len = va_arg(ap, size_t); -+ af = va_arg(ap, int); -+ errp = va_arg(ap, int *); -+ resultp = (struct hostent **)retval; -+ -+ _NSS_UTRACE("__nss_bsdcompat_ghbyaddr: called"); -+ -+ bufp = malloc((sizeof(struct hostent) + buflen)); -+ if (bufp == NULL) { -+ *resultp = NULL; -+ return (NS_UNAVAIL); -+ } -+ hp = (struct hostent *)bufp; -+ buffer = (char *)(hp + 1); -+ -+ status = _nss_mdns_gethostbyaddr_r(src, len, af, hp, buffer, -+ buflen, errp, &h_errnop); -+ -+ status = __nss_compat_result(status, *errp); -+ if (status != NS_SUCCESS) { -+ free(bufp); -+ hp = NULL; -+ } -+ *resultp = hp; -+ return (status); -+} -+ -+/* -+ * Used by getipnodebyname(3). -+ * -+ * Calling convention: -+ * ap: const char *name, int af, int *errp -+ * retval: pointer to a pointer to an uninitialized struct hostent. -+ * -+ * This function is responsible for allocating on-heap storage. -+ * The caller is responsible for calling freehostent() on the returned -+ * storage. -+ */ -+static int -+__nss_bsdcompat_ghbyname(void *retval, void *mdata __unused, va_list ap) -+{ -+ char *buffer; -+ void *bufp; -+ int *errp; -+ struct hostent *hp; -+ struct hostent **resultp; -+ char *name; -+ int af; -+ size_t buflen = 1024; -+ int h_errnop; -+ enum nss_status status; -+ -+ name = va_arg(ap, char *); -+ af = va_arg(ap, int); -+ errp = va_arg(ap, int *); -+ resultp = (struct hostent **)retval; -+ -+ bufp = malloc((sizeof(struct hostent) + buflen)); -+ if (bufp == NULL) { -+ *resultp = NULL; -+ return (NS_UNAVAIL); -+ } -+ hp = (struct hostent *)bufp; -+ buffer = (char *)(hp + 1); -+ -+ status = _nss_mdns_gethostbyname_r(name, hp, buffer, buflen, errp, -+ &h_errnop); -+ -+ status = __nss_compat_result(status, *errp); -+ if (status != NS_SUCCESS) { -+ free(bufp); -+ hp = NULL; -+ } -+ *resultp = hp; -+ return (status); -+} -+ -+#endif /* !NO_BUILD_BSD_NSS */ +--- src/bsdnss.c.orig 2008-04-30 02:40:37.000000000 +0530 ++++ src/bsdnss.c 2008-04-30 02:43:11.000000000 +0530 +@@ -56,7 +56,7 @@ + #if defined(NSS_IPV4_ONLY) || defined(NSS_IPV6_ONLY) + /* + * FreeBSD's libc is always built with IPv4 support. +- * There is no way of telling at compile time with a define if libc ++ * Therxe is no way of telling at compile time with a define if libc + * was built with -DINET6 or not; a configure test would be required. + * Therefore, distinguishing between the two makes no sense. + */ +@@ -219,22 +219,8 @@ + * 2. Map hostent to addrinfo. + * 3. Hand-off buffer to libc. + */ +- switch (pai->ai_family) { +- case AF_UNSPEC: +- status = _nss_mdns_gethostbyname_r(name, hp, buffer, mbuflen, +- &_errno, &_h_errno); +- break; +- case AF_INET: +- status = _nss_mdns4_gethostbyname_r(name, hp, buffer, mbuflen, +- &_errno, &_h_errno); +- break; +- case AF_INET6: +- status = _nss_mdns6_gethostbyname_r(name, hp, buffer, mbuflen, +- &_errno, &_h_errno); +- break; +- default: +- break; +- } ++ status = _nss_mdns_gethostbyname2_r(name, pai->ai_family, hp, buffer, ++ mbuflen, &_errno, &_h_errno); + status = __nss_compat_result(status, _errno); + + if (status == NS_SUCCESS) { diff --git a/dns/nss_mdns/files/patch-src__query.c b/dns/nss_mdns/files/patch-src__query.c deleted file mode 100644 index 83fddb8e08c0..000000000000 --- a/dns/nss_mdns/files/patch-src__query.c +++ /dev/null @@ -1,147 +0,0 @@ ---- src/query.c.orig Sun Nov 20 00:56:17 2005 -+++ src/query.c Sat Jan 20 14:34:44 2007 -@@ -87,13 +87,36 @@ - if (bind(fd, (struct sockaddr*) &sa, sizeof(sa)) < 0) - goto fail; - -+#ifdef IP_PKTINFO - yes = 1; -- if (setsockopt(fd, IPPROTO_IP, IP_RECVTTL, &yes, sizeof(yes)) < 0) -- goto fail; -- - if (setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &yes, sizeof(yes)) < 0) - goto fail; -+#else -+ -+#ifdef IP_RECVINTERFACE -+ yes = 1; -+ if (setsockopt (fd, IPPROTO_IP, IP_RECVINTERFACE, &yes, sizeof(yes)) < 0) -+ goto fail; -+#elif defined(IP_RECVIF) -+ yes = 1; -+ if (setsockopt (fd, IPPROTO_IP, IP_RECVIF, &yes, sizeof(yes)) < 0) -+ goto fail; -+#endif -+ -+#ifdef IP_RECVDSTADDR -+ yes = 1; -+ if (setsockopt (fd, IPPROTO_IP, IP_RECVDSTADDR, &yes, sizeof(yes)) < 0) -+ goto fail; -+#endif -+ -+#endif /* IP_PKTINFO */ - -+#ifdef IP_RECVTTL -+ yes = 1; -+ if (setsockopt(fd, IPPROTO_IP, IP_RECVTTL, &yes, sizeof(yes)) < 0) -+ goto fail; -+#endif -+ - if (set_cloexec(fd) < 0) - goto fail; - -@@ -113,9 +136,15 @@ - struct sockaddr_in sa; - struct msghdr msg; - struct iovec io; -+#ifdef IP_PKTINFO - struct cmsghdr *cmsg; -+ uint8_t cmsg_data[CMSG_SPACE(sizeof(struct in_pktinfo))]; - struct in_pktinfo *pkti; -- uint8_t cmsg_data[CMSG_LEN(sizeof(struct in_pktinfo))]; -+#elif defined(IP_SENDSRCADDR) -+ struct cmsghdr *cmsg; -+ uint8_t cmsg_data[CMSG_SPACE(sizeof(struct in_addr))]; -+ struct in_addr *addr; -+#endif - int i, n; - struct ifreq ifreq[32]; - struct ifconf ifconf; -@@ -131,24 +160,43 @@ - io.iov_base = p->data; - io.iov_len = p->size; - -- memset(cmsg_data, 0, sizeof(cmsg_data)); -- cmsg = (struct cmsghdr*) cmsg_data; -- cmsg->cmsg_len = sizeof(cmsg_data); -- cmsg->cmsg_level = IPPROTO_IP; -- cmsg->cmsg_type = IP_PKTINFO; -- -- pkti = (struct in_pktinfo*) CMSG_DATA(cmsg); -- pkti->ipi_ifindex = 0; -- - memset(&msg, 0, sizeof(msg)); - msg.msg_name = &sa; - msg.msg_namelen = sizeof(sa); - msg.msg_iov = &io; - msg.msg_iovlen = 1; -+ msg.msg_flags = 0; -+ -+#ifdef IP_PKTINFO -+ memset(cmsg_data, 0, sizeof(cmsg_data)); - msg.msg_control = cmsg_data; - msg.msg_controllen = sizeof(cmsg_data); -- msg.msg_flags = 0; -+ -+ cmsg = CMSG_FIRSTHDR(&msg); -+ cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo)); -+ cmsg->cmsg_level = IPPROTO_IP; -+ cmsg->cmsg_type = IP_PKTINFO; -+ -+ pkti = (struct in_pktinfo*) CMSG_DATA(cmsg); - -+ msg.msg_controllen = cmsg->cmsg_len; -+#elif defined(IP_SENDSRCADDR) -+ memset(cmsg_data, 0, sizeof(cmsg_data)); -+ msg.msg_control = cmsg_data; -+ msg.msg_controllen = sizeof(cmsg_data); -+ -+ cmsg = CMSG_FIRSTHDR(&msg); -+ cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr)); -+ cmsg->cmsg_level = IPPROTO_IP; -+ cmsg->cmsg_type = IP_SENDSRCADDR; -+ -+ addr = (struct in_addr *)CMSG_DATA(cmsg); -+ -+ msg.msg_controllen = cmsg->cmsg_len; -+#elif defined(__GNUC__) -+#warning "FIXME: We need some code to set the outgoing interface/local address here if IP_PKTINFO/IP_SENDSRCADDR is not available" -+#endif -+ - ifconf.ifc_req = ifreq; - ifconf.ifc_len = sizeof(ifreq); - -@@ -183,6 +231,7 @@ - if (ioctl(fd, SIOCGIFINDEX, &ifreq[i]) < 0) - continue; /* See above why we ignore this error */ - -+#ifdef IP_PKTINFO - /* Only send the the packet once per interface. We assume that - * multiple addresses assigned to the same interface follow - * immediately one after the other.*/ -@@ -190,6 +239,11 @@ - continue; - - last_index = pkti->ipi_ifindex = ifreq[i].ifr_ifindex; -+#elif defined(IP_SENDSRCADDR) -+ addr->s_addr = ifsa->sin_addr.s_addr; -+#elif defined(__GNUC__) -+#warning "FIXME: We need some code to set the outgoing interface/local address here if IP_PKTINFO/IP_SENDSRCADDR is not available" -+#endif - - for (;;) { - -@@ -241,7 +295,12 @@ - *ret_ttl = 0; - - for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg,cmsg)) { -- if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_TTL) { -+#ifdef SOL_IP -+ if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_TTL) -+#else -+ if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_TTL) -+#endif -+ { - *ret_ttl = (uint8_t) (*(uint32_t*) CMSG_DATA(cmsg)); - break; - } |