From f01edf10244ccd53e098abdc1773c1aa0e4c5f8d Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 19 Sep 2018 08:53:26 +0200 Subject: mDNSResponder: Update to v765.1.2 The sources can be obtained via: https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-765.1.2.tar.gz Move mDNS_StartResolveService() and mDNS_StopResolveService() to an RTEMS-specific file (rtemsbsd/mdns/mDNSResolveService.c) using the v576.30.4 implementation. Apple removed these functions without explanation. Update #3522. --- mDNSResponder/mDNSPosix/._ReadMe.txt | Bin 171 -> 0 bytes mDNSResponder/mDNSPosix/Makefile | 11 +++--- mDNSResponder/mDNSPosix/ReadMe.txt | 14 ------- mDNSResponder/mDNSPosix/mDNSPosix.c | 72 +++++++++++++++++++++-------------- mDNSResponder/mDNSPosix/mdnsd.sh | 2 +- mDNSResponder/mDNSPosix/nss_mdns.c | 4 ++ 6 files changed, 54 insertions(+), 49 deletions(-) delete mode 100755 mDNSResponder/mDNSPosix/._ReadMe.txt (limited to 'mDNSResponder/mDNSPosix') diff --git a/mDNSResponder/mDNSPosix/._ReadMe.txt b/mDNSResponder/mDNSPosix/._ReadMe.txt deleted file mode 100755 index cd621b2a..00000000 Binary files a/mDNSResponder/mDNSPosix/._ReadMe.txt and /dev/null differ diff --git a/mDNSResponder/mDNSPosix/Makefile b/mDNSResponder/mDNSPosix/Makefile index de8bd00c..4f98e90f 100755 --- a/mDNSResponder/mDNSPosix/Makefile +++ b/mDNSResponder/mDNSPosix/Makefile @@ -146,6 +146,7 @@ ifeq ($(os),x) # we get build failures: ‘daemon’ is deprecated (declared at /usr/include/stdlib.h:283) CFLAGS_OS = -DHAVE_IPV6 -no-cpp-precomp -Werror -Wdeclaration-after-statement \ -D__MAC_OS_X_VERSION_MIN_REQUIRED=__MAC_OS_X_VERSION_10_4 \ + -DHAVE_STRLCPY=1 \ -D__APPLE_USE_RFC_2292 #-Wunreachable-code CC = gcc LD = $(CC) -dynamiclib @@ -218,7 +219,7 @@ CFLAGS = $(CFLAGS_COMMON) $(CFLAGS_OS) $(CFLAGS_DEBUG) all: setup Daemon libdns_sd Clients SAClient SAResponder SAProxyResponder Identify NetMonitor $(OPTIONALTARG) -install: setup InstalledDaemon InstalledStartup InstalledLib InstalledManPages InstalledClients $(OPTINSTALL) +install: setup InstalledStartup InstalledDaemon InstalledLib InstalledManPages InstalledClients $(OPTINSTALL) # 'setup' sets up the build directory structure the way we want setup: @@ -297,9 +298,10 @@ InstalledNSS: $(NSSINSTPATH)/$(NSSLINKNAME) /etc/nss_mdns.conf $(MANPATH)/man5/n @echo $+ " installed" # Note: If daemon already installed, we make sure it's stopped before overwriting it -$(INSTBASE)/sbin/mdnsd: $(BUILDDIR)/mdnsd +$(INSTBASE)/sbin/mdnsd: $(BUILDDIR)/mdnsd $(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) @if test -x $@; then $(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) stop; fi $(CP) $< $@ + @$(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) start $(INSTBASE)/lib/libdns_sd.$(LDSUFFIX).$(LIBVERS): $(BUILDDIR)/libdns_sd.$(LDSUFFIX) $(CP) $< $@ @@ -312,12 +314,9 @@ endif $(INSTBASE)/include/dns_sd.h: $(SHAREDDIR)/dns_sd.h $(CP) $< $@ -# We make this target dependent on $(INSTBASE)/sbin/mdnsd because we need to ensure -# that the daemon is installed *before* we try to execute the command to start it. -$(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME): mdnsd.sh $(STARTUPSCRIPTDIR) $(INSTBASE)/sbin/mdnsd +$(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME): mdnsd.sh $(STARTUPSCRIPTDIR) $(CP) $< $@ chmod ugo+x $@ - $@ start ifdef RUNLEVELSCRIPTSDIR ifeq ($(wildcard $(RUNLEVELSCRIPTSDIR)/runlevels/default), $(RUNLEVELSCRIPTSDIR)/runlevels/default) $(LN) $@ $(RUNLEVELSCRIPTSDIR)/runlevels/default/mdns diff --git a/mDNSResponder/mDNSPosix/ReadMe.txt b/mDNSResponder/mDNSPosix/ReadMe.txt index a374ddf0..c2f56412 100755 --- a/mDNSResponder/mDNSPosix/ReadMe.txt +++ b/mDNSResponder/mDNSPosix/ReadMe.txt @@ -308,20 +308,6 @@ CVE-ID CVE-2011-0220 : JaeSeung Song of the Department of Computing at Imperial College London -Impact:  A local application may be able to cause a denial of service -Description:  A denial of service issue was addressed through -improved memory handling. -CVE-ID -CVE-2015-7988 : Alexandre Helie - -Impact:  A remote attacker may be able to cause unexpected -application termination or arbitrary code execution -Description:  Multiple memory corruption issues existed in DNS -data parsing. These issues were addressed through improved bounds -checking. -CVE-ID -CVE-2015-7987 : Alexandre Helie - To Do List ---------- • port to a System V that's not Solaris diff --git a/mDNSResponder/mDNSPosix/mDNSPosix.c b/mDNSResponder/mDNSPosix/mDNSPosix.c index 77b57149..07633703 100755 --- a/mDNSResponder/mDNSPosix/mDNSPosix.c +++ b/mDNSResponder/mDNSPosix/mDNSPosix.c @@ -147,7 +147,7 @@ mDNSlocal void SockAddrTomDNSAddr(const struct sockaddr *const sa, mDNSAddr *ipA // mDNS core calls this routine when it needs to send a packet. mDNSexport mStatus mDNSPlatformSendUDP(const mDNS *const m, const void *const msg, const mDNSu8 *const end, - mDNSInterfaceID InterfaceID, UDPSocket *src, const mDNSAddr *dst, + mDNSInterfaceID InterfaceID, UDPSocket *src, const mDNSAddr *dst, mDNSIPPort dstPort, mDNSBool useBackgroundTrafficClass) { int err = 0; @@ -320,13 +320,6 @@ mDNSlocal void SocketDataReady(mDNS *const m, PosixNetworkInterface *intf, int s &senderAddr, senderPort, &destAddr, MulticastDNSPort, InterfaceID); } -mDNSexport mDNSBool mDNSPlatformPeekUDP(mDNS *const m, UDPSocket *src) -{ - (void)m; // unused - (void)src; // unused - return mDNSfalse; -} - mDNSexport TCPSocket *mDNSPlatformTCPSocket(mDNS * const m, TCPSocketFlags flags, mDNSIPPort * port, mDNSBool useBackgroundTrafficClass) { (void)m; // Unused @@ -929,8 +922,8 @@ mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct // and skip the probe phase of the probe/announce packet sequence. intf->coreIntf.DirectLink = mDNSfalse; #ifdef DIRECTLINK_INTERFACE_NAME - if (strcmp(intfName, STRINGIFY(DIRECTLINK_INTERFACE_NAME)) == 0) - intf->coreIntf.DirectLink = mDNStrue; + if (strcmp(intfName, STRINGIFY(DIRECTLINK_INTERFACE_NAME)) == 0) + intf->coreIntf.DirectLink = mDNStrue; #endif intf->coreIntf.SupportsUnicastMDNSResponse = mDNStrue; @@ -1419,14 +1412,36 @@ mDNSexport void mDNSPlatformUnlock (const mDNS *const m) // On the Posix platform this maps directly to the ANSI C strcpy. mDNSexport void mDNSPlatformStrCopy(void *dst, const void *src) { - strcpy((char *)dst, (char *)src); + strcpy((char *)dst, (const char *)src); +} + +mDNSexport mDNSu32 mDNSPlatformStrLCopy(void *dst, const void *src, mDNSu32 len) +{ +#if HAVE_STRLCPY + return ((mDNSu32)strlcpy((char *)dst, (const char *)src, len)); +#else + size_t srcLen; + + srcLen = strlen((const char *)src); + if (srcLen < len) + { + memcpy(dst, src, srcLen + 1); + } + else if (len > 0) + { + memcpy(dst, src, len - 1); + ((char *)dst)[len - 1] = '\0'; + } + + return ((mDNSu32)srcLen); +#endif } // mDNS core calls this routine to get the length of a C string. // On the Posix platform this maps directly to the ANSI C strlen. mDNSexport mDNSu32 mDNSPlatformStrLen (const void *src) { - return strlen((char*)src); + return strlen((const char*)src); } // mDNS core calls this routine to copy memory. @@ -1558,10 +1573,10 @@ mDNSexport void mDNSPlatformSendWakeupPacket(mDNS *const m, mDNSInterfaceID Inte (void) iteration; } -mDNSexport mDNSBool mDNSPlatformValidRecordForInterface(AuthRecord *rr, const NetworkInterfaceInfo *intf) +mDNSexport mDNSBool mDNSPlatformValidRecordForInterface(const AuthRecord *rr, mDNSInterfaceID InterfaceID) { (void) rr; - (void) intf; + (void) InterfaceID; return 1; } @@ -1620,37 +1635,38 @@ mDNSexport mStatus mDNSPlatformStoreSPSMACAddr(mDNSAddr *spsaddr, char *ifnam return mStatus_NoError; } -mDNSexport mStatus mDNSPlatformClearSPSMACAddr(void) +mDNSexport mStatus mDNSPlatformClearSPSData(void) { return mStatus_NoError; } +mDNSexport mStatus mDNSPlatformStoreOwnerOptRecord(char *ifname, DNSMessage *msg, int length) +{ + (void) ifname; // Unused + (void) msg; // Unused + (void) length; // Unused + return mStatus_UnsupportedErr; +} + mDNSexport mDNSu16 mDNSPlatformGetUDPPort(UDPSocket *sock) { (void) sock; // unused - + return (mDNSu16)-1; } mDNSexport mDNSBool mDNSPlatformInterfaceIsD2D(mDNSInterfaceID InterfaceID) { (void) InterfaceID; // unused - - return mDNSfalse; -} - -mDNSexport void mDNSPlatformGetDNSRoutePolicy(mDNS *const m, DNSQuestion *q, mDNSBool *isCellBlocked) -{ - (void) m; - q->ServiceID = -1; - *isCellBlocked = mDNSfalse; + return mDNSfalse; } -mDNSexport void mDNSPlatformSetuDNSSocktOpt(UDPSocket *src, const mDNSAddr *dst, DNSQuestion *q) +mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q) { - (void) src; - (void) dst; + (void) sock; + (void) transType; + (void) addrType; (void) q; } diff --git a/mDNSResponder/mDNSPosix/mdnsd.sh b/mDNSResponder/mDNSPosix/mdnsd.sh index c43d9fcb..6e65612b 100644 --- a/mDNSResponder/mDNSPosix/mdnsd.sh +++ b/mDNSResponder/mDNSPosix/mdnsd.sh @@ -40,6 +40,7 @@ if [ -r /sbin/start-stop-daemon ]; then else killmdnsd() { kill -TERM `cat /var/run/mdnsd.pid` + sleep 1 } START= STOP=killmdnsd @@ -60,7 +61,6 @@ case "$1" in reload|restart|force-reload) echo -n "Restarting Apple Darwin Multicast DNS / DNS Service Discovery daemon:" $STOP $DAEMON - sleep 1 $START $DAEMON echo -n " mdnsd" ;; diff --git a/mDNSResponder/mDNSPosix/nss_mdns.c b/mDNSResponder/mDNSPosix/nss_mdns.c index ade4d4d2..afadb3c6 100755 --- a/mDNSResponder/mDNSPosix/nss_mdns.c +++ b/mDNSResponder/mDNSPosix/nss_mdns.c @@ -1088,6 +1088,7 @@ mdns_lookup_callback ns_type_t expected_rr_type = af_to_rr (result->hostent->h_addrtype); + // Idiot check class if (rrclass != C_IN) { syslog (LOG_WARNING, @@ -1269,6 +1270,7 @@ add_address_to_buffer (result_map_t * result, const void * data, int len) return NULL; } + // Idiot check if (len != result->hostent->h_length) { syslog (LOG_WARNING, @@ -1309,6 +1311,7 @@ contains_address (result_map_t * result, const void * data, int len) { int i; + // Idiot check if (len != result->hostent->h_length) { syslog (LOG_WARNING, @@ -2470,6 +2473,7 @@ cmp_dns_suffix (const char * name, const char * domain) const char * nametail; const char * domaintail; + // Idiot checks if (*name == 0 || *name == k_dns_separator) { // Name can't be empty or start with separator -- cgit v1.2.3