--- mDNSCore/mDNS.c.ORG	Mon Jul 24 15:37:04 2006
+++ mDNSCore/mDNS.c	Sat Sep  2 15:51:12 2006
@@ -5487,7 +5487,7 @@
 				{
 				// If record is recent, just ensure the whole RRSet has the same TTL (as required by DNS semantics)
 				// else, if record is old, mark it to be flushed
-				if (m->timenow - r2->TimeRcvd < mDNSPlatformOneSecond)
+				if (r2->resrec.rroriginalttl > 1 && m->timenow - r2->TimeRcvd < mDNSPlatformOneSecond)
 					r2->resrec.rroriginalttl = r1->resrec.rroriginalttl;
 				else
 					{
--- mDNSPosix/Makefile.ORG	Thu Jun  1 13:41:25 2006
+++ mDNSPosix/Makefile	Mon Jul 24 15:38:05 2006
@@ -270,7 +270,7 @@
 
 # Configure per-OS peculiarities
 ifeq ($(os),solaris)
-CFLAGS_OS = -DNOT_HAVE_DAEMON -DNOT_HAVE_SA_LEN -DNOT_HAVE_SOCKLEN_T -DNOT_HAVE_IF_NAMETOINDEX \
+CFLAGS_OS = -DHAVE_SOLARIS -DHAVE_IPV6 -DNOT_HAVE_DAEMON -DNOT_HAVE_SA_LEN -DNOT_HAVE_SOCKLEN_T -DNOT_HAVE_IF_NAMETOINDEX \
 	 -DLOG_PERROR=0 -D_XPG4_2 -D__EXTENSIONS__ -DHAVE_BROKEN_RECVIF_NAME
 CC = gcc
 LD = gcc -shared
@@ -299,9 +299,10 @@
 LOCALBASE?=/usr/local
 INSTBASE=$(LOCALBASE)
 STARTUPSCRIPTNAME=mdns.sh
-CFLAGS_OS =
+CFLAGS_OS = -DHAVE_IPV6
 JAVACFLAGS_OS += -I$(JDK)/include/freebsd
 LDCONFIG = ldconfig
+OPTIONALTARG = nss_mdns
 else
 
 ifeq ($(os),openbsd)
@@ -488,7 +489,9 @@
 else
 	$(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc2.d/S52mdns
 	$(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc3.d/S52mdns
+ifneq ($(os),solaris)
 	$(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc4.d/S52mdns
+endif
 	$(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc5.d/S52mdns
 	$(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc0.d/K16mdns
 	$(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc6.d/K16mdns
--- mDNSPosix/PosixDaemon.c.ORG	Thu Jun  1 13:41:25 2006
+++ mDNSPosix/PosixDaemon.c	Thu Jun  1 13:41:24 2006
@@ -131,11 +131,17 @@
 #include <pwd.h>
 #include <sys/types.h>
 
+#include <strings.h>	// bzero()
+
 #include "mDNSEmbeddedAPI.h"
 #include "mDNSDebug.h"
 #include "mDNSPosix.h"
 #include "uds_daemon.h"
 #include "PlatformCommon.h"
+
+#ifdef NOT_HAVE_DAEMON
+#  include "mDNSUNP.h"
+#endif
 
 #define CONFIG_FILE "/etc/mdnsd.conf"
 static domainname DynDNSZone;                // Default wide-area zone for service registration
--- mDNSPosix/mDNSPosix.c.ORG	Thu Jun  1 13:41:25 2006
+++ mDNSPosix/mDNSPosix.c	Thu Jun  1 13:41:24 2006
@@ -852,7 +852,13 @@
 		{
 		struct ipv6_mreq imr6;
 		struct sockaddr_in6 bindAddr6;
-	#if defined(IPV6_PKTINFO)
+	#if defined(IPV6_RECVPKTINFO)
+		if (err == 0)
+		{
+		  err = setsockopt(*sktPtr, IPPROTO_IPV6, IPV6_RECVPKTINFO, &kOn, sizeof(kOn));
+		  if (err < 0) { err = errno; perror("setsockopt - IPV6_RECVPKTINFO"); }
+		}
+	#elif defined(IPV6_PKTINFO)
 		if (err == 0)
 			{
 				err = setsockopt(*sktPtr, IPPROTO_IPV6, IPV6_PKTINFO, &kOn, sizeof(kOn));
@@ -861,12 +867,20 @@
 	#else
 		#warning This platform has no way to get the destination interface information for IPv6 -- will only work for single-homed hosts
 	#endif
-	#if defined(IPV6_HOPLIMIT)
+	#if defined(IPV6_RECVHOPLIMIT)
+		if (err == 0)
+		{
+		  err = setsockopt(*sktPtr, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &kOn, sizeof(kOn));
+		  if (err < 0) { err = errno; perror("setsockopt - IPV6_RECVHOPLIMIT"); }
+		}
+	#elif defined(IPV6_HOPLIMIT)
 		if (err == 0)
 			{
 				err = setsockopt(*sktPtr, IPPROTO_IPV6, IPV6_HOPLIMIT, &kOn, sizeof(kOn));
 				if (err < 0) { err = errno; perror("setsockopt - IPV6_HOPLIMIT"); }
 			}
+	#else
+		#warning This platform has no way to specify the value of hoplimit field of received IP6 hdr
 	#endif
 
 		// Add multicast group membership on this interface
--- mDNSPosix/mDNSUNP.c.ORG	Thu Jun  1 13:41:25 2006
+++ mDNSPosix/mDNSUNP.c	Thu Jun  1 13:41:25 2006
@@ -153,8 +153,9 @@
     #include <net/if_dl.h>
 #endif
 
-#if defined(AF_INET6) && HAVE_IPV6 && !HAVE_LINUX
-#include <netinet6/in6_var.h>
+#if defined(AF_INET6) && HAVE_IPV6 && !HAVE_LINUX && !HAVE_SOLARIS
+#  include <net/if_var.h>
+#  include <netinet6/in6_var.h>
 #endif
 
 #if defined(AF_INET6) && HAVE_IPV6 && HAVE_LINUX
--- mDNSShared/uds_daemon.c.ORG	Thu Jun  1 13:41:25 2006
+++ mDNSShared/uds_daemon.c	Thu Jun  1 13:41:25 2006
@@ -603,6 +603,7 @@
 #define dnssd_strerror(X)	strerror(X)
 #endif
 
+#include <strings.h>	// bzero()
 #include <stdlib.h>
 #include <stdio.h>
 #include "mDNSEmbeddedAPI.h"


syntax highlighted by Code2HTML, v. 0.9.1