summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSMacOSX
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSMacOSX')
-rw-r--r--mDNSResponder/mDNSMacOSX/D2D.c49
-rw-r--r--mDNSResponder/mDNSMacOSX/DNS64.c8
-rw-r--r--mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.c10
-rw-r--r--mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.h15
-rw-r--r--mDNSResponder/mDNSMacOSX/LoggingProfiles/AppleInternal/com.apple.mDNSResponder.plist14
-rw-r--r--mDNSResponder/mDNSMacOSX/LoggingProfiles/com.apple.mDNSResponder.plist16
-rw-r--r--mDNSResponder/mDNSMacOSX/Metrics.h2
-rw-r--r--mDNSResponder/mDNSMacOSX/Metrics.m29
-rw-r--r--mDNSResponder/mDNSMacOSX/Private/com.apple.mDNSResponder.plist19
-rwxr-xr-xmDNSResponder/mDNSMacOSX/Scripts/bonjour-mcast-diagnose380
-rwxr-xr-xmDNSResponder/mDNSMacOSX/Scripts/bonjour-start-mdns-tcpdump56
-rw-r--r--mDNSResponder/mDNSMacOSX/Scripts/com.apple.mDNSResponder.mdns-tcpdump.plist21
-rw-r--r--mDNSResponder/mDNSMacOSX/daemon.c20
-rw-r--r--mDNSResponder/mDNSMacOSX/helper-stubs.c18
-rw-r--r--mDNSResponder/mDNSMacOSX/helper.c15
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSMacOSX.c280
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSMacOSX.h3
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSResponder.sb4
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj156
-rw-r--r--mDNSResponder/mDNSMacOSX/uDNSPathEvalulation.c8
20 files changed, 899 insertions, 224 deletions
diff --git a/mDNSResponder/mDNSMacOSX/D2D.c b/mDNSResponder/mDNSMacOSX/D2D.c
index 2848cdab..6ad8e945 100644
--- a/mDNSResponder/mDNSMacOSX/D2D.c
+++ b/mDNSResponder/mDNSMacOSX/D2D.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 4 -*-
*
- * Copyright (c) 2002-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2002-2018 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -97,7 +97,6 @@ static mDNSu8 *const compression_limit = (mDNSu8 *) &compression_base_msg + size
static mDNSu8 *const compression_lhs = (mDNSu8 *const) compression_base_msg.data + 27;
mDNSlocal void FreeD2DARElemCallback(mDNS *const m, AuthRecord *const rr, mStatus result);
-mDNSlocal void PrintHex(mDNSu8 *data, mDNSu16 len);
typedef struct D2DRecordListElem
{
@@ -167,44 +166,15 @@ mDNSlocal mDNSu8 * DNSNameCompressionBuildRHS(mDNSu8 *start, const ResourceRecor
return putRData(&compression_base_msg, start, compression_limit, resourceRecord);
}
-#define PRINT_DEBUG_BYTES_LIMIT 64 // set limit on number of record bytes printed for debugging
-
-mDNSlocal void PrintHex(mDNSu8 *data, mDNSu16 len)
+mDNSlocal void PrintHelper(const char *const tag, mDNSu8 *lhs, mDNSu16 lhs_len, mDNSu8 *rhs, mDNSu16 rhs_len)
{
- mDNSu8 *end;
- char buffer[49] = {0};
- char *bufend = buffer + sizeof(buffer);
-
- if (len > PRINT_DEBUG_BYTES_LIMIT)
- {
- LogInfo(" (limiting debug output to %d bytes)", PRINT_DEBUG_BYTES_LIMIT);
- len = PRINT_DEBUG_BYTES_LIMIT;
- }
- end = data + len;
-
- while(data < end)
+ if (mDNS_LoggingEnabled)
{
- char *ptr = buffer;
- for(; data < end && ptr < bufend-1; ptr+=3,data++)
- mDNS_snprintf(ptr, bufend - ptr, "%02X ", *data);
- LogInfo(" %s", buffer);
+ LogDebug("%s: LHS: (%d bytes) %.*H", tag, lhs_len, lhs_len, lhs);
+ if (rhs) LogDebug("%s: RHS: (%d bytes) %.*H", tag, rhs_len, rhs_len, rhs);
}
}
-mDNSlocal void PrintHelper(const char *const tag, mDNSu8 *lhs, mDNSu16 lhs_len, mDNSu8 *rhs, mDNSu16 rhs_len)
-{
- if (!mDNS_LoggingEnabled) return;
-
- LogInfo("%s:", tag);
- LogInfo(" LHS: (%d bytes)", lhs_len);
- PrintHex(lhs, lhs_len);
-
- if (!rhs) return;
-
- LogInfo(" RHS: (%d bytes)", rhs_len);
- PrintHex(rhs, rhs_len);
-}
-
mDNSlocal void FreeD2DARElemCallback(mDNS *const m, AuthRecord *const rr, mStatus result)
{
(void)m; // unused
@@ -333,9 +303,8 @@ mDNSlocal mStatus xD2DParse(const mDNSu8 * const lhs, const mDNSu16 lhs_len, con
if (mDNS_LoggingEnabled)
{
- LogInfo("%s", __func__);
- LogInfo(" Static Bytes: (%d bytes)", compression_lhs - (mDNSu8*)&compression_base_msg);
- PrintHex((mDNSu8*)&compression_base_msg, compression_lhs - (mDNSu8*)&compression_base_msg);
+ const int len = (int)(compression_lhs - (mDNSu8*)&compression_base_msg);
+ LogInfo("xD2DParse: Static Bytes: (%d bytes) %.*H", len, len, &compression_base_msg);
}
mDNSu8 *ptr = compression_lhs; // pointer to the end of our fake packet
@@ -366,8 +335,8 @@ mDNSlocal mStatus xD2DParse(const mDNSu8 * const lhs, const mDNSu16 lhs_len, con
if (mDNS_LoggingEnabled)
{
- LogInfo(" Our Bytes (%d bytes): ", ptr - compression_lhs);
- PrintHex(compression_lhs, ptr - compression_lhs);
+ const int len = (int)(ptr - compression_lhs);
+ LogInfo("xD2DParse: Our Bytes (%d bytes): %.*H", len, len, compression_lhs);
}
ptr = (mDNSu8 *) GetLargeResourceRecord(m, &compression_base_msg, compression_lhs, ptr, mDNSInterface_Any, kDNSRecordTypePacketAns, &m->rec);
diff --git a/mDNSResponder/mDNSMacOSX/DNS64.c b/mDNSResponder/mDNSMacOSX/DNS64.c
index 1f4e0ec2..6fef38f8 100644
--- a/mDNSResponder/mDNSMacOSX/DNS64.c
+++ b/mDNSResponder/mDNSMacOSX/DNS64.c
@@ -22,7 +22,13 @@
#include "DNS64.h"
#include <AssertMacros.h>
-#include <network/nat64.h>
+
+#if __has_include(<nw/private.h>)
+ #include <nw/private.h>
+#else
+ #include <network/nat64.h>
+#endif
+
#include <stdlib.h>
#include <string.h>
diff --git a/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.c b/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.c
index dd670ab1..2b89bc24 100644
--- a/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.c
+++ b/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 4 -*-
*
- * Copyright (c) 2002-2012 Apple Inc. All rights reserved.
+ * Copyright (c) 2002-2018 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,14 +15,6 @@
* limitations under the License.
*/
-// Suppress "warning: 'DNSServiceDiscoveryMachPort' is deprecated" messages -- we already know this code is building the deprecated API
-// Since we compile with all warnings treated as errors, we have to turn off the warnings here or the project won't compile
-#include <AvailabilityMacros.h>
-#undef AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
-#define AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
-#undef AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
-#define AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
-
#include "../mDNSMacOSX/DNSServiceDiscovery.h"
#include "DNSServiceDiscoveryDefines.h"
diff --git a/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.h b/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.h
index 004d3259..3f683a83 100644
--- a/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.h
+++ b/mDNSResponder/mDNSMacOSX/DNSServiceDiscovery.h
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 4 -*-
*
- * Copyright (c) 2002, 2004, 2006, 2011 Apple Inc. All rights reserved.
+ * Copyright (c) 2002-2018 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -31,8 +31,9 @@
#include <sys/cdefs.h>
#include <netinet/in.h>
+#include <os/availability.h>
-#include <AvailabilityMacros.h>
+#define kDNSServiceDiscoveryDeprecatedMsg "This API was deprecated in Mac OS X 10.3 and replaced by the portable cross-platform /usr/include/dns_sd.h API"
__BEGIN_DECLS
@@ -90,7 +91,7 @@ typedef uint32_t DNSRecordReference;
call to the specified callout function.
@param replyMsg The Mach message.
*/
-void DNSServiceDiscovery_handleReply(void *replyMsg);
+void DNSServiceDiscovery_handleReply(void *replyMsg) API_DEPRECATED(kDNSServiceDiscoveryDeprecatedMsg, macos(10.2, 10.3));
/***************************************************************************/
/* DNS Service Browser */
@@ -125,7 +126,7 @@ dns_service_discovery_ref DNSServiceBrowserCreate
const char *domain,
DNSServiceBrowserReply callBack,
void *context
-) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3;
+) API_DEPRECATED(kDNSServiceDiscoveryDeprecatedMsg, macos(10.2, 10.3));
/***************************************************************************/
/* Resolver requests */
@@ -158,7 +159,7 @@ dns_service_discovery_ref DNSServiceResolverResolve
const char *domain,
DNSServiceResolverReply callBack,
void *context
-) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3;
+) API_DEPRECATED(kDNSServiceDiscoveryDeprecatedMsg, macos(10.2, 10.3));
/***************************************************************************/
/* Mach port accessor and deallocation */
@@ -173,7 +174,7 @@ dns_service_discovery_ref DNSServiceResolverResolve
specified or some other error occurred which prevented the
resolution from being started.
*/
-mach_port_t DNSServiceDiscoveryMachPort(dns_service_discovery_ref dnsServiceDiscovery) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3;
+mach_port_t DNSServiceDiscoveryMachPort(dns_service_discovery_ref dnsServiceDiscovery) API_DEPRECATED(kDNSServiceDiscoveryDeprecatedMsg, macos(10.2, 10.3));
/*!
@function DNSServiceDiscoveryDeallocate
@@ -181,7 +182,7 @@ mach_port_t DNSServiceDiscoveryMachPort(dns_service_discovery_ref dnsServiceDisc
@param dnsServiceDiscovery A dns_service_discovery_ref as returned from a creation or enumeration call
@result void
*/
-void DNSServiceDiscoveryDeallocate(dns_service_discovery_ref dnsServiceDiscovery) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3;
+void DNSServiceDiscoveryDeallocate(dns_service_discovery_ref dnsServiceDiscovery) API_DEPRECATED(kDNSServiceDiscoveryDeprecatedMsg, macos(10.2, 10.3));
__END_DECLS
diff --git a/mDNSResponder/mDNSMacOSX/LoggingProfiles/AppleInternal/com.apple.mDNSResponder.plist b/mDNSResponder/mDNSMacOSX/LoggingProfiles/AppleInternal/com.apple.mDNSResponder.plist
new file mode 100644
index 00000000..72352ceb
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/LoggingProfiles/AppleInternal/com.apple.mDNSResponder.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>DEFAULT-OPTIONS</key>
+ <dict>
+ <key>Level</key>
+ <dict>
+ <key>Persist</key>
+ <string>Info</string>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/mDNSResponder/mDNSMacOSX/LoggingProfiles/com.apple.mDNSResponder.plist b/mDNSResponder/mDNSMacOSX/LoggingProfiles/com.apple.mDNSResponder.plist
new file mode 100644
index 00000000..1eba185d
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/LoggingProfiles/com.apple.mDNSResponder.plist
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>DEFAULT-OPTIONS</key>
+ <dict>
+ <key>Level</key>
+ <dict>
+ <key>Persist</key>
+ <string>Inherit</string>
+ <key>Enable</key>
+ <string>Inherit</string>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/mDNSResponder/mDNSMacOSX/Metrics.h b/mDNSResponder/mDNSMacOSX/Metrics.h
index ff419fd8..e3772299 100644
--- a/mDNSResponder/mDNSMacOSX/Metrics.h
+++ b/mDNSResponder/mDNSMacOSX/Metrics.h
@@ -26,7 +26,7 @@ extern "C" {
#if TARGET_OS_IOS
mStatus MetricsInit(void);
-void MetricsUpdateDNSQueryStats(const domainname *inQueryName, mDNSu16 inType, const ResourceRecord *inRR, mDNSu32 inSendCount, mDNSu32 inLatencyMs, mDNSBool inForCell);
+void MetricsUpdateDNSQueryStats(const domainname *inQueryName, mDNSu16 inType, const ResourceRecord *inRR, mDNSu32 inSendCount, ExpiredAnswerMetric inExpiredAnswerState, mDNSu32 inLatencyMs, mDNSBool inForCell);
void MetricsUpdateDNSResolveStats(const domainname *inQueryName, const ResourceRecord *inRR, mDNSBool inForCell);
void MetricsUpdateDNSQuerySize(mDNSu32 inSize);
void MetricsUpdateDNSResponseSize(mDNSu32 inSize);
diff --git a/mDNSResponder/mDNSMacOSX/Metrics.m b/mDNSResponder/mDNSMacOSX/Metrics.m
index e540f3be..dd20bc27 100644
--- a/mDNSResponder/mDNSMacOSX/Metrics.m
+++ b/mDNSResponder/mDNSMacOSX/Metrics.m
@@ -93,10 +93,11 @@ SOFT_LINK_CLASS(WirelessDiagnostics, AWDMDNSResponderDNSMessageSizeStats)
// Constants
//===========================================================================================================================
-#define kQueryStatsMaxQuerySendCount 10
-#define kQueryStatsSendCountBinCount (kQueryStatsMaxQuerySendCount + 1)
-#define kQueryStatsLatencyBinCount 55
-#define kResolveStatsMaxObjCount 2000
+#define kQueryStatsMaxQuerySendCount 10
+#define kQueryStatsSendCountBinCount (kQueryStatsMaxQuerySendCount + 1)
+#define kQueryStatsLatencyBinCount 55
+#define kQueryStatsExpiredAnswerStateCount (ExpiredAnswer_EnumCount)
+#define kResolveStatsMaxObjCount 2000
//===========================================================================================================================
// Data structures
@@ -152,6 +153,7 @@ typedef struct
uint16_t responseLatencyBins[kQueryStatsLatencyBinCount];
uint16_t negAnsweredQuerySendCountBins[kQueryStatsSendCountBinCount];
uint16_t negResponseLatencyBins[kQueryStatsLatencyBinCount];
+ uint16_t expiredAnswerStateBins[kQueryStatsExpiredAnswerStateCount];
} DNSHist;
@@ -159,6 +161,7 @@ check_compile_time(sizeof(DNSHist) <= 512);
check_compile_time(countof_field(DNSHist, unansweredQuerySendCountBins) == (kQueryStatsMaxQuerySendCount + 1));
check_compile_time(countof_field(DNSHist, answeredQuerySendCountBins) == (kQueryStatsMaxQuerySendCount + 1));
check_compile_time(countof_field(DNSHist, negAnsweredQuerySendCountBins) == (kQueryStatsMaxQuerySendCount + 1));
+check_compile_time(countof_field(DNSHist, expiredAnswerStateBins) == (kQueryStatsExpiredAnswerStateCount));
// Important: Do not modify kResponseLatencyMsLimits because the code used to generate AWD reports expects the response
// latency histogram bins to observe these time interval upper bounds.
@@ -344,7 +347,7 @@ check_compile_time(sizeof(DNSMessageSizeStats) <= 132);
mDNSlocal mStatus QueryStatsCreate(const char *inDomainStr, const char *inAltDomainStr, QueryNameTest_f inTest, mDNSBool inTerminal, QueryStats **outStats);
mDNSlocal void QueryStatsFree(QueryStats *inStats);
mDNSlocal void QueryStatsFreeList(QueryStats *inList);
-mDNSlocal mStatus QueryStatsUpdate(QueryStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell);
+mDNSlocal mStatus QueryStatsUpdate(QueryStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, ExpiredAnswerMetric inExpiredAnswerState, mDNSu32 inLatencyMs, mDNSBool inForCell);
mDNSlocal const char * QueryStatsGetDomainString(const QueryStats *inStats);
mDNSlocal mDNSBool QueryStatsDomainTest(const QueryStats *inStats, const domainname *inQueryName);
mDNSlocal mDNSBool QueryStatsHostnameTest(const QueryStats *inStats, const domainname *inQueryName);
@@ -492,7 +495,7 @@ mStatus MetricsInit(void)
// MetricsUpdateDNSQueryStats
//===========================================================================================================================
-mDNSexport void MetricsUpdateDNSQueryStats(const domainname *inQueryName, mDNSu16 inType, const ResourceRecord *inRR, mDNSu32 inSendCount, mDNSu32 inLatencyMs, mDNSBool inForCell)
+mDNSexport void MetricsUpdateDNSQueryStats(const domainname *inQueryName, mDNSu16 inType, const ResourceRecord *inRR, mDNSu32 inSendCount, ExpiredAnswerMetric inExpiredAnswerState, mDNSu32 inLatencyMs, mDNSBool inForCell)
{
QueryStats * stats;
mDNSBool match;
@@ -505,7 +508,7 @@ mDNSexport void MetricsUpdateDNSQueryStats(const domainname *inQueryName, mDNSu1
match = stats->test(stats, inQueryName);
if (match)
{
- QueryStatsUpdate(stats, inType, inRR, inSendCount, inLatencyMs, inForCell);
+ QueryStatsUpdate(stats, inType, inRR, inSendCount, inExpiredAnswerState, inLatencyMs, inForCell);
if (stats->terminal) break;
}
}
@@ -839,7 +842,7 @@ mDNSlocal void QueryStatsFreeList(QueryStats *inList)
// QueryStatsUpdate
//===========================================================================================================================
-mDNSlocal mStatus QueryStatsUpdate(QueryStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell)
+mDNSlocal mStatus QueryStatsUpdate(QueryStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, ExpiredAnswerMetric inExpiredAnswerState, mDNSu32 inLatencyMs, mDNSBool inForCell)
{
mStatus err;
DNSHistSet * set;
@@ -892,6 +895,7 @@ mDNSlocal mStatus QueryStatsUpdate(QueryStats *inStats, int inType, const Resour
for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {}
increment_saturate(hist->unansweredQueryDurationBins[i], UINT16_MAX);
}
+ increment_saturate(hist->expiredAnswerStateBins[Min(inExpiredAnswerState, (kQueryStatsExpiredAnswerStateCount-1))], UINT16_MAX);
err = mStatus_NoError;
exit:
@@ -2061,6 +2065,7 @@ mDNSlocal mStatus CreateAWDDNSDomainStats(DNSHist *inHist, const char *inDomain,
size_t binCount;
uint32_t sendCountBins[kQueryStatsSendCountBinCount];
uint32_t latencyBins[kQueryStatsLatencyBinCount];
+ uint32_t expiredAnswerBins[kQueryStatsExpiredAnswerStateCount];
awdStats = [[AWDDNSDomainStatsSoft alloc] init];
require_action_quiet(awdStats, exit, err = mStatus_UnknownErr);
@@ -2107,6 +2112,11 @@ mDNSlocal mStatus CreateAWDDNSDomainStats(DNSHist *inHist, const char *inDomain,
binCount = CopyHistogramBins(latencyBins, inHist->unansweredQueryDurationBins, kQueryStatsLatencyBinCount);
[awdStats setUnansweredQueryDurationMs:latencyBins count:(NSUInteger)binCount];
}
+
+ // Expired answers states
+
+ binCount = CopyHistogramBins(expiredAnswerBins, inHist->expiredAnswerStateBins, kQueryStatsExpiredAnswerStateCount);
+ [awdStats setExpiredAnswerStates:expiredAnswerBins count:(NSUInteger)binCount];
*outStats = awdStats;
awdStats = nil;
@@ -2166,6 +2176,9 @@ mDNSlocal void LogDNSHist(const DNSHist *inHist, const char *inDomain, mDNSBool
LogMsgNoIdent("Answered questions %4u", totalAnswered);
LogMsgNoIdent("Negatively answered questions %4u", totalNegAnswered);
LogMsgNoIdent("Unanswered questions %4u", totalUnanswered);
+ LogMsgNoIdent("Expired - no cached answer %4u", inHist->expiredAnswerStateBins[ExpiredAnswer_Allowed]);
+ LogMsgNoIdent("Expired - answered from cache %4u", inHist->expiredAnswerStateBins[ExpiredAnswer_AnsweredWithExpired]);
+ LogMsgNoIdent("Expired - cache changed %4u", inHist->expiredAnswerStateBins[ExpiredAnswer_ExpiredAnswerChanged]);
LogMsgNoIdent("-- Query send counts ---------");
LogDNSHistSendCounts(inHist->answeredQuerySendCountBins);
LogMsgNoIdent("-- Query send counts (NAQs) --");
diff --git a/mDNSResponder/mDNSMacOSX/Private/com.apple.mDNSResponder.plist b/mDNSResponder/mDNSMacOSX/Private/com.apple.mDNSResponder.plist
deleted file mode 100644
index 6d403b52..00000000
--- a/mDNSResponder/mDNSMacOSX/Private/com.apple.mDNSResponder.plist
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>DEFAULT-OPTIONS</key>
- <dict>
- <key>Default-Privacy-Setting</key>
- <string>Public</string>
- <key>Level</key>
- <dict>
- <key>Persist</key>
- <string>Inherit</string>
- <key>Enable</key>
- <string>Inherit</string>
- </dict>
- </dict>
-</dict>
-</plist>
-
diff --git a/mDNSResponder/mDNSMacOSX/Scripts/bonjour-mcast-diagnose b/mDNSResponder/mDNSMacOSX/Scripts/bonjour-mcast-diagnose
new file mode 100755
index 00000000..bda53ba8
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/Scripts/bonjour-mcast-diagnose
@@ -0,0 +1,380 @@
+#! /bin/bash
+#
+# Copyright (c) 2017-2018 Apple Inc. All rights reserved.
+#
+# This script is currently for Apple Internal use only.
+#
+
+version=1.4
+script=${BASH_SOURCE[0]}
+dnssdutil=${dnssdutil:-dnssdutil}
+
+#============================================================================================================================
+# PrintUsage
+#============================================================================================================================
+
+PrintUsage()
+{
+ echo ""
+ echo "Usage: $( basename "${script}" ) [options]"
+ echo ""
+ echo "Options:"
+ echo " -V Display version of this script and exit."
+ echo ""
+}
+
+#============================================================================================================================
+# LogOut
+#============================================================================================================================
+
+LogOut()
+{
+ echo "$( date '+%Y-%m-%d %H:%M:%S%z' ): $*"
+}
+
+#============================================================================================================================
+# LogMsg
+#============================================================================================================================
+
+LogMsg()
+{
+ echo "$*"
+ if [ -d "${workPath}" ]; then
+ LogOut "$*" >> "${workPath}/log.txt"
+ fi
+}
+
+#============================================================================================================================
+# ErrQuit
+#============================================================================================================================
+
+ErrQuit()
+{
+ echo "error: $*"
+ exit 1
+}
+
+#============================================================================================================================
+# SignalHandler
+#============================================================================================================================
+
+SignalHandler()
+{
+ LogMsg "Exiting due to signal."
+ trap '' SIGINT SIGTERM
+ pkill -TERM -P $$
+ wait
+ exit 2
+}
+
+#============================================================================================================================
+# ExitHandler
+#============================================================================================================================
+
+ExitHandler()
+{
+ if [ -d "${tempPath}" ]; then
+ rm -fr "${tempPath}"
+ fi
+}
+
+#============================================================================================================================
+# RunNetStat
+#============================================================================================================================
+
+RunNetStat()
+{
+ LogMsg "Running netstat -g -n -s"
+ netstat -g -n -s &> "${workPath}/netstat-g-n-s.txt"
+}
+
+#============================================================================================================================
+# StartPacketCapture
+#============================================================================================================================
+
+StartPacketCapture()
+{
+ LogMsg "Starting tcpdump."
+ tcpdump -n -w "${workPath}/tcpdump.pcapng" &> "${workPath}/tcpdump.txt" &
+ tcpdumpPID=$!
+}
+
+#============================================================================================================================
+# SaveExistingPacketCaptures
+#============================================================================================================================
+
+SaveExistingPacketCaptures()
+{
+ LogMsg "Saving existing mDNS packet captures."
+ mkdir "${workPath}/pcaps"
+ for file in /tmp/mdns-tcpdump.pcapng*; do
+ [ -e "${file}" ] || continue
+ baseName=$( sed -E 's/^mdns-tcpdump.pcapng([0-9]+)$/mdns-tcpdump-\1.pcapng/' <<< "$( basename ${file} )" )
+ gzip < ${file} > "${workPath}/pcaps/${baseName}.gz"
+ done
+}
+
+#============================================================================================================================
+# StopPacketCapture
+#============================================================================================================================
+
+StopPacketCapture()
+{
+ LogMsg "Stopping tcpdump."
+ kill -TERM ${tcpdumpPID}
+}
+
+#============================================================================================================================
+# RunInterfaceMulticastTests
+#============================================================================================================================
+
+RunInterfaceMulticastTests()
+{
+ local ifname="$1"
+ local allHostsV4=224.0.0.1
+ local allHostsV6=ff02::1
+ local mDNSV4=224.0.0.251
+ local mDNSV6=ff02::fb
+ local serviceList=( $( "${dnssdutil}" queryrecord -i "${ifname}" -A -t ptr -n _services._dns-sd._udp.local -l 6 | sed -E -n 's/.*(_.*_(tcp|udp)\.local\.)$/\1/p' | sort -u ) )
+ local log="${workPath}/mcast-test-log-${ifname}.txt"
+
+ LogOut "List of services: ${serviceList[*]}" >> "${log}"
+ # Ping All Hosts IPv4 multicast address.
+
+ local routeOutput=$( route -n get -ifscope ${ifname} "${allHostsV4}" 2> /dev/null )
+ if [ -n "${routeOutput}" ]; then
+ LogOut "Pinging "${allHostsV4}" on interface ${ifname}." >> "${log}"
+ ping -t 5 -b ${ifname} "${allHostsV4}" &> "${workPath}/ping-all-hosts-${ifname}.txt"
+ else
+ LogOut "No route to "${allHostsV4}" on interface ${ifname}." >> "${log}"
+ fi
+
+ # Ping mDNS IPv4 multicast address.
+
+ routeOutput=$( route -n get -ifscope ${ifname} "${mDNSV4}" 2> /dev/null )
+ if [ -n "${routeOutput}" ]; then
+ LogOut "Pinging "${mDNSV4}" on interface ${ifname}." >> "${log}"
+ ping -t 5 -b ${ifname} "${mDNSV4}" &> "${workPath}/ping-mDNS-${ifname}.txt"
+ else
+ LogOut "No route to "${mDNSV4}" on interface ${ifname}." >> "${log}"
+ fi
+
+ # Ping All Hosts IPv6 multicast address.
+
+ routeOutput=$( route -n get -ifscope ${ifname} -inet6 "${allHostsV6}" 2> /dev/null )
+ if [ -n "${routeOutput}" ]; then
+ LogOut "Pinging "${allHostsV6}" on interface ${ifname}." >> "${log}"
+ ping6 -c 6 -I ${ifname} "${allHostsV6}" &> "${workPath}/ping6-all-hosts-${ifname}.txt"
+ else
+ LogOut "No route to "${allHostsV6}" on interface ${ifname}." >> "${log}"
+ fi
+
+ # Ping mDNS IPv6 multicast address.
+
+ routeOutput=$( route -n get -ifscope ${ifname} -inet6 "${mDNSV6}" 2> /dev/null )
+ if [ -n "${routeOutput}" ]; then
+ LogOut "Pinging "${mDNSV6}" on interface ${ifname}." >> "${log}"
+ ping6 -c 6 -I ${ifname} "${mDNSV6}" &> "${workPath}/ping6-mDNS-${ifname}.txt"
+ else
+ LogOut "No route to "${mDNSV6}" on interface ${ifname}." >> "${log}"
+ fi
+
+ # Send mDNS queries for services.
+
+ for service in "${serviceList[@]}"; do
+ LogOut "Sending mDNS queries for "${service}" on interface ${ifname}." >> "${log}"
+ for(( i = 1; i <= 3; ++i )); do
+ printf "\n"
+ "${dnssdutil}" mdnsquery -i "${ifname}" -n "${service}" -t ptr -r 2
+ printf "\n"
+ "${dnssdutil}" mdnsquery -i "${ifname}" -n "${service}" -t ptr -r 1 --QU -p 5353
+ printf "\n"
+ done >> "${workPath}/mdnsquery-${ifname}.txt" 2>&1
+ done
+}
+
+#============================================================================================================================
+# RunMulticastTests
+#============================================================================================================================
+
+RunMulticastTests()
+{
+ local interfaces=( $( ifconfig -l -u ) )
+ local skipPrefixes=( ap awdl bridge ipsec lo p2p pdp_ip pktap UDC utun )
+ local ifname=""
+ local pid=""
+ local pids=()
+
+ LogMsg "List of interfaces: ${interfaces[*]}"
+ for ifname in "${interfaces[@]}"; do
+ local skip=false
+ for prefix in ${skipPrefixes[@]}; do
+ if [[ ${ifname} =~ ^${prefix}[0-9]*$ ]]; then
+ skip=true
+ break
+ fi
+ done
+
+ if [ "${skip}" != "true" ]; then
+ ifconfig ${ifname} | grep -q inet
+ if [ $? -ne 0 ]; then
+ skip=true
+ fi
+ fi
+
+ if [ "${skip}" == "true" ]; then
+ continue
+ fi
+
+ LogMsg "Starting interface multicast tests for ${ifname}."
+ RunInterfaceMulticastTests "${ifname}" & pids+=($!)
+ done
+
+ LogMsg "Waiting for interface multicast tests to complete..."
+ for pid in "${pids[@]}"; do
+ wait "${pid}"
+ done
+ LogMsg "All interface multicast tests completed."
+}
+
+#============================================================================================================================
+# RunBrowseTest
+#============================================================================================================================
+
+RunBrowseTest()
+{
+ LogMsg "Running dnssdutil browseAll command."
+ "${dnssdutil}" browseAll -A -d local -b 10 -c 10 &> "${workPath}/browseAll.txt"
+}
+
+#============================================================================================================================
+# IsMacOS
+#============================================================================================================================
+
+IsMacOS()
+{
+ [[ $( sw_vers -productName ) =~ ^Mac\ OS ]]
+}
+
+#============================================================================================================================
+# ArchiveLogs
+#============================================================================================================================
+
+ArchiveLogs()
+{
+ local workdir=$( basename "${workPath}" )
+ local archivePath="${dstPath}/${workdir}.tar.gz"
+
+ LogMsg "Archiving logs."
+ echo "---"
+ tar -C "${tempPath}" -czf "${archivePath}" "${workdir}"
+ if [ -e "${archivePath}" ]; then
+ echo "Created log archive at ${archivePath}"
+ echo "*** Please run sysdiagnose NOW. ***"
+ echo "Attach both the log archive and the sysdiagnose archive to the radar."
+ if IsMacOS; then
+ open "${dstPath}"
+ fi
+ else
+ echo "Failed to create archive at ${archivePath}."
+ fi
+ echo "---"
+}
+
+#============================================================================================================================
+# CreateWorkDirName
+#============================================================================================================================
+
+CreateWorkDirName()
+{
+ local suffix=""
+ local productName=$( sw_vers -productName )
+ if [ -n "${productName}" ]; then
+ suffix+="_${productName}"
+ fi
+
+ local model=""
+ if IsMacOS; then
+ model=$( sysctl -n hw.model )
+ model=${model//,/-}
+ else
+ model=$( gestalt_query -undecorated DeviceName )
+ fi
+ if [ -n "${model}" ]; then
+ suffix+="_${model}"
+ fi
+
+ local buildVersion=$( sw_vers -buildVersion )
+ if [ -n "${buildVersion}" ]; then
+ suffix+="_${buildVersion}"
+ fi
+
+ suffix=${suffix//[^A-Za-z0-9._-]/_}
+
+ printf "bonjour-mcast-diags_$( date '+%Y.%m.%d_%H-%M-%S%z' )${suffix}"
+}
+
+#============================================================================================================================
+# main
+#============================================================================================================================
+
+main()
+{
+ while getopts ":hV" option; do
+ case "${option}" in
+ h)
+ PrintUsage
+ exit 0
+ ;;
+ V)
+ echo "$( basename "${script}" ) version ${version}"
+ exit 0
+ ;;
+ :)
+ ErrQuit "option '${OPTARG}' requires an argument."
+ ;;
+ *)
+ ErrQuit "unknown option '${OPTARG}'."
+ ;;
+ esac
+ done
+
+ [ "${OPTIND}" -gt "$#" ] || ErrQuit "unexpected argument \""${!OPTIND}"\"."
+
+ if IsMacOS; then
+ if [ "${EUID}" -ne 0 ]; then
+ echo "Re-launching with sudo"
+ exec sudo ${script}
+ fi
+ dstPath=/var/tmp
+ else
+ [ "${EUID}" -eq 0 ] || ErrQuit "$( basename "${script}" ) needs to be run as root."
+ dstPath=/var/mobile/Library/Logs/CrashReporter
+ fi
+
+ tempPath=$( mktemp -d -q ) || ErrQuit "Failed to make temp directory."
+ workPath="${tempPath}/$( CreateWorkDirName )"
+ mkdir "${workPath}" || ErrQuit "Failed to make work directory."
+
+ trap SignalHandler SIGINT SIGTERM
+ trap ExitHandler EXIT
+
+ LogMsg "About: $( basename "${script}" ) version ${version} ($( md5 -q ${script} ))."
+ if [ "${dnssdutil}" != "dnssdutil" ]; then
+ if [ -x "$( which "${dnssdutil}" )" ]; then
+ LogMsg "Using $( "${dnssdutil}" -V ) at $( which "${dnssdutil}" )."
+ else
+ LogMsg "WARNING: dnssdutil (${dnssdutil}) isn't an executable."
+ fi
+ fi
+
+ RunNetStat
+ StartPacketCapture
+ SaveExistingPacketCaptures
+ RunBrowseTest
+ RunMulticastTests
+ StopPacketCapture
+ ArchiveLogs
+}
+
+main "$@"
diff --git a/mDNSResponder/mDNSMacOSX/Scripts/bonjour-start-mdns-tcpdump b/mDNSResponder/mDNSMacOSX/Scripts/bonjour-start-mdns-tcpdump
new file mode 100755
index 00000000..2a81b5f3
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/Scripts/bonjour-start-mdns-tcpdump
@@ -0,0 +1,56 @@
+#! /bin/bash
+#
+# Copyright (c) 2018 Apple Inc. All rights reserved.
+#
+# This script is currently for Apple Internal use only.
+#
+
+version=1.0
+script=${BASH_SOURCE[0]}
+
+#============================================================================================================================
+# PrintUsage
+#============================================================================================================================
+
+PrintUsage()
+{
+ echo ""
+ echo "Usage: $( basename "${script}" ) [options]"
+ echo ""
+ echo "Options:"
+ echo " -V Display version of this script and exit."
+ echo ""
+}
+
+#============================================================================================================================
+# main
+#============================================================================================================================
+
+main()
+{
+ while getopts ":hV" option; do
+ case "${option}" in
+ h)
+ PrintUsage
+ exit 0
+ ;;
+ V)
+ echo "$( basename "${script}" ) version ${version}"
+ exit 0
+ ;;
+ :)
+ ErrQuit "option '${OPTARG}' requires an argument."
+ ;;
+ *)
+ ErrQuit "unknown option '${OPTARG}'."
+ ;;
+ esac
+ done
+
+ [ "${OPTIND}" -gt "$#" ] || ErrQuit "unexpected argument \""${!OPTIND}"\"."
+
+ launchctl load /Library/LaunchDaemons/com.apple.mDNSResponder.mdns-tcpdump.plist
+ launchctl start com.apple.mDNSResponder.mdns-tcpdump
+}
+
+main "$@"
diff --git a/mDNSResponder/mDNSMacOSX/Scripts/com.apple.mDNSResponder.mdns-tcpdump.plist b/mDNSResponder/mDNSMacOSX/Scripts/com.apple.mDNSResponder.mdns-tcpdump.plist
new file mode 100644
index 00000000..0e48c217
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/Scripts/com.apple.mDNSResponder.mdns-tcpdump.plist
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.apple.mDNSResponder.mdns-tcpdump</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/usr/sbin/tcpdump</string>
+ <string>-w</string>
+ <string>/tmp/mdns-tcpdump.pcapng</string>
+ <string>-C</string>
+ <string>10</string>
+ <string>-W</string>
+ <string>16</string>
+ <string>( udp port 5353 ) or arp or icmp or icmp6</string>
+ </array>
+ <key>KeepAlive</key>
+ <false/>
+</dict>
+</plist>
diff --git a/mDNSResponder/mDNSMacOSX/daemon.c b/mDNSResponder/mDNSMacOSX/daemon.c
index fa192b6a..e16f1dbf 100644
--- a/mDNSResponder/mDNSMacOSX/daemon.c
+++ b/mDNSResponder/mDNSMacOSX/daemon.c
@@ -62,6 +62,7 @@ static os_log_t log_general = NULL;
#define kPreferencesKey_DebugLogging CFSTR("DebugLogging")
#define kPreferencesKey_UnicastPacketLogging CFSTR("UnicastPacketLogging")
#define kPreferencesKey_AlwaysAppendSearchDomains CFSTR("AlwaysAppendSearchDomains")
+#define kPreferencesKey_EnableAllowExpired CFSTR("EnableAllowExpired")
#define kPreferencesKey_NoMulticastAdvertisements CFSTR("NoMulticastAdvertisements")
#define kPreferencesKey_StrictUnicastOrdering CFSTR("StrictUnicastOrdering")
#define kPreferencesKey_OfferSleepProxyService CFSTR("OfferSleepProxyService")
@@ -84,13 +85,13 @@ static os_log_t log_general = NULL;
static mDNS_PlatformSupport PlatformStorage;
-// Start off with a default cache of 32K (141 records of 232 bytes each)
-// Each time we grow the cache we add another 141 records
-// 141 * 232 = 32712 bytes.
-// This fits in eight 4kB pages, with 56 bytes spare for memory block headers and similar overhead
+// Start off with a default cache of 32K (136 records of 240 bytes each)
+// Each time we grow the cache we add another 136 records
+// 136 * 240 = 32640 bytes.
+// This fits in eight 4kB pages, with 128 bytes spare for memory block headers and similar overhead
#define RR_CACHE_SIZE ((32*1024) / sizeof(CacheRecord))
static CacheEntity rrcachestorage[RR_CACHE_SIZE];
-struct CompileTimeAssertionChecks_RR_CACHE_SIZE { char a[(RR_CACHE_SIZE >= 141) ? 1 : -1]; };
+struct CompileTimeAssertionChecks_RR_CACHE_SIZE { char a[(RR_CACHE_SIZE >= 136) ? 1 : -1]; };
#define kRRCacheGrowSize (sizeof(CacheEntity) * RR_CACHE_SIZE)
@@ -107,6 +108,7 @@ static mDNSBool NoMulticastAdvertisements = mDNSfalse; // By default, advertise
extern mDNSBool StrictUnicastOrdering;
extern mDNSBool AlwaysAppendSearchDomains;
+extern mDNSBool EnableAllowExpired;
#if ENABLE_BLE_TRIGGERED_BONJOUR
extern mDNSBool EnableBLEBasedDiscovery;
@@ -571,7 +573,7 @@ mDNSexport void mDNSPlatformLogToFile(int log_level, const char *buffer)
if (!log_general)
os_log_error(OS_LOG_DEFAULT, "Could NOT create log handle in init_logging()");
else
- os_log_with_type(log_general, log_level, "%s", buffer);
+ os_log_with_type(log_general, log_level, "%{private}s", buffer);
}
@@ -652,6 +654,7 @@ mDNSlocal void SignalCallback(CFMachPortRef port, void *msg, CFIndex size, void
mDNS_Lock(m);
FORALL_CACHERECORDS(slot, cg, rr)
{
+ rr->resrec.mortality = Mortality_Mortal;
mDNS_PurgeCacheResourceRecord(m, rr);
}
// Restart unicast and multicast queries
@@ -763,7 +766,8 @@ mDNSlocal void SignalDispatch(dispatch_source_t source)
mDNS_Lock(m);
FORALL_CACHERECORDS(slot, cg, rr)
{
- mDNS_PurgeCacheResourceRecord(m, rr);
+ rr->resrec.mortality = Mortality_Mortal;
+ mDNS_PurgeCacheResourceRecord(m, rr);
}
// Restart unicast and multicast queries
mDNSCoreRestartQueries(m);
@@ -1528,6 +1532,7 @@ mDNSexport int main(int argc, char **argv)
UseInternalSleepProxy = (i+1<argc && mDNSIsDigit(argv[i+1][0]) && argv[i+1][1]==0) ? atoi(argv[++i]) : 1;
if (!strcasecmp(argv[i], "-StrictUnicastOrdering" )) StrictUnicastOrdering = mDNStrue;
if (!strcasecmp(argv[i], "-AlwaysAppendSearchDomains")) AlwaysAppendSearchDomains = mDNStrue;
+ if (!strcasecmp(argv[i], "-DisableAllowExpired" )) EnableAllowExpired = mDNSfalse;
#if DEBUG
if (!strcasecmp(argv[i], "-UseDebugSocket")) useDebugSocket = mDNStrue;
if (!strcasecmp(argv[i], "-NoSandbox")) useSandbox = mDNSfalse;
@@ -1568,6 +1573,7 @@ mDNSexport int main(int argc, char **argv)
NoMulticastAdvertisements = PreferencesGetValueBool(kPreferencesKey_NoMulticastAdvertisements, NoMulticastAdvertisements);
StrictUnicastOrdering = PreferencesGetValueBool(kPreferencesKey_StrictUnicastOrdering, StrictUnicastOrdering);
AlwaysAppendSearchDomains = PreferencesGetValueBool(kPreferencesKey_AlwaysAppendSearchDomains, AlwaysAppendSearchDomains);
+ EnableAllowExpired = PreferencesGetValueBool(kPreferencesKey_EnableAllowExpired, EnableAllowExpired);
OfferSleepProxyService = PreferencesGetValueInt(kPreferencesKey_OfferSleepProxyService, OfferSleepProxyService);
UseInternalSleepProxy = PreferencesGetValueInt(kPreferencesKey_UseInternalSleepProxy, UseInternalSleepProxy);
diff --git a/mDNSResponder/mDNSMacOSX/helper-stubs.c b/mDNSResponder/mDNSMacOSX/helper-stubs.c
index a1e804fd..c7c34968 100644
--- a/mDNSResponder/mDNSMacOSX/helper-stubs.c
+++ b/mDNSResponder/mDNSMacOSX/helper-stubs.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 4 -*-
*
- * Copyright (c) 2007-2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2007-2018 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -55,10 +55,10 @@ static int64_t maxwait_secs = 5LL;
//*************************************************************************************************************
// Utility Functions
-static void LogDebug(const char *prefix, xpc_object_t o)
+static void HelperLog(const char *prefix, xpc_object_t o)
{
char *desc = xpc_copy_description(o);
- mDNSHELPER_DEBUG("LogDebug %s: %s", prefix, desc);
+ mDNSHELPER_DEBUG("HelperLog %s: %s", prefix, desc);
free(desc);
}
@@ -83,7 +83,7 @@ mDNSlocal int SendDict_ToServer(xpc_object_t msg)
{
__block int errorcode = kHelperErr_NoResponse;
- LogDebug("SendDict_ToServer Sending msg to Daemon", msg);
+ HelperLog("SendDict_ToServer Sending msg to Daemon", msg);
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
dispatch_retain(sem); // for the block below
@@ -94,7 +94,7 @@ mDNSlocal int SendDict_ToServer(xpc_object_t msg)
if (type == XPC_TYPE_DICTIONARY)
{
- LogDebug("SendDict_ToServer Received reply msg from Daemon", recv_msg);
+ HelperLog("SendDict_ToServer Received reply msg from Daemon", recv_msg);
uint64_t reply_status = xpc_dictionary_get_uint64(recv_msg, kHelperReplyStatus);
errorcode = xpc_dictionary_get_int64(recv_msg, kHelperErrCode);
@@ -112,7 +112,7 @@ mDNSlocal int SendDict_ToServer(xpc_object_t msg)
{
LogMsg("SendDict_ToServer Received unexpected reply from daemon [%s]",
xpc_dictionary_get_string(recv_msg, XPC_ERROR_KEY_DESCRIPTION));
- LogDebug("SendDict_ToServer Unexpected Reply contents", recv_msg);
+ HelperLog("SendDict_ToServer Unexpected Reply contents", recv_msg);
}
dispatch_semaphore_signal(sem);
@@ -137,7 +137,7 @@ mDNSlocal xpc_object_t SendDict_GetReply(xpc_object_t msg)
if (!dict) return NULL;
xpc_retain(dict);
- LogDebug("SendDict_GetReply Sending msg to Daemon", msg);
+ HelperLog("SendDict_GetReply Sending msg to Daemon", msg);
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
dispatch_retain(sem); // for the block below
@@ -148,7 +148,7 @@ mDNSlocal xpc_object_t SendDict_GetReply(xpc_object_t msg)
if (type == XPC_TYPE_DICTIONARY)
{
- LogDebug("SendDict_GetReply Received reply msg from Daemon", recv_msg);
+ HelperLog("SendDict_GetReply Received reply msg from Daemon", recv_msg);
uint64_t reply_status = xpc_dictionary_get_uint64(recv_msg, kHelperReplyStatus);
switch (reply_status)
@@ -171,7 +171,7 @@ mDNSlocal xpc_object_t SendDict_GetReply(xpc_object_t msg)
{
LogMsg("SendDict_GetReply Received unexpected reply from daemon [%s]",
xpc_dictionary_get_string(recv_msg, XPC_ERROR_KEY_DESCRIPTION));
- LogDebug("SendDict_GetReply Unexpected Reply contents", recv_msg);
+ HelperLog("SendDict_GetReply Unexpected Reply contents", recv_msg);
}
dispatch_semaphore_signal(sem);
diff --git a/mDNSResponder/mDNSMacOSX/helper.c b/mDNSResponder/mDNSMacOSX/helper.c
index dc90b35d..7b6cb897 100644
--- a/mDNSResponder/mDNSMacOSX/helper.c
+++ b/mDNSResponder/mDNSMacOSX/helper.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 4 -*-
*
- * Copyright (c) 2007-2015 Apple Inc. All rights reserved.
+ * Copyright (c) 2007-2018 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -710,7 +710,12 @@ fin:
enum DNSKeyFormat
{
- formatNotDNSKey, formatDdnsTypeItem, formatDnsPrefixedServiceItem, formatBtmmPrefixedServiceItem
+ formatNotDNSKey,
+ formatDdnsTypeItem,
+ formatDnsPrefixedServiceItem,
+#if MDNSRESPONDER_BTMM_SUPPORT
+ formatBtmmPrefixedServiceItem
+#endif
};
// On Mac OS X on Intel, the four-character string seems to be stored backwards, at least sometimes.
@@ -720,7 +725,9 @@ enum DNSKeyFormat
#ifndef NO_SECURITYFRAMEWORK
+#if MDNSRESPONDER_BTMM_SUPPORT
static const char btmmprefix[] = "btmmdns:";
+#endif
static const char dnsprefix[] = "dns:";
static const char ddns[] = "ddns";
static const char ddnsrev[] = "sndd";
@@ -778,8 +785,10 @@ static enum DNSKeyFormat getDNSKeyFormat(SecKeychainItemRef item, SecKeychainAtt
}
if (attributes->attr[1].length >= sizeof(dnsprefix)-1 && 0 == strncasecmp(attributes->attr[1].data, dnsprefix, sizeof(dnsprefix)-1))
format = formatDnsPrefixedServiceItem;
+#if MDNSRESPONDER_BTMM_SUPPORT
else if (attributes->attr[1].length >= sizeof(btmmprefix)-1 && 0 == strncasecmp(attributes->attr[1].data, btmmprefix, sizeof(btmmprefix)-1))
format = formatBtmmPrefixedServiceItem;
+#endif
else if (attributes->attr[0].length == sizeof(ddns)-1 && 0 == strncasecmp(attributes->attr[0].data, ddns, sizeof(ddns)-1))
format = formatDdnsTypeItem;
else if (attributes->attr[0].length == sizeof(ddnsrev)-1 && 0 == strncasecmp(attributes->attr[0].data, ddnsrev, sizeof(ddnsrev)-1))
@@ -821,7 +830,9 @@ static CFPropertyListRef copyKeychainItemInfo(SecKeychainItemRef item, SecKeycha
data = CFDataCreate(kCFAllocatorDefault, attributes->attr[1].data, attributes->attr[1].length);
break;
case formatDnsPrefixedServiceItem:
+#if MDNSRESPONDER_BTMM_SUPPORT
case formatBtmmPrefixedServiceItem:
+#endif
data = CFDataCreate(kCFAllocatorDefault, attributes->attr[1].data, attributes->attr[1].length);
break;
default:
diff --git a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
index 3bb4ec69..f64e28af 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
+++ b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 4 -*-
*
- * Copyright (c) 2002-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2002-2018 Apple Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -86,22 +86,22 @@
#include <SystemConfiguration/SCPrivate.h>
#if TARGET_OS_IPHONE
-// For WiFiManagerClientRef etc, declarations.
-#include <MobileGestalt.h>
-#include <MobileWiFi/WiFiManagerClient.h>
+#include <MobileWiFi/WiFiManagerClient.h> // For WiFiManagerClientRef etc, declarations.
#include <dlfcn.h>
+#include <os/variant_private.h> // For os_variant_has_internal_diagnostics().
#endif // TARGET_OS_IPHONE
// Include definition of opaque_presence_indication for KEV_DL_NODE_PRESENCE handling logic.
#include <Kernel/IOKit/apple80211/apple80211_var.h>
#include <network_information.h> // for nwi_state
-#if APPLE_OSX_mDNSResponder
+#if MDNSRESPONDER_BTMM_SUPPORT
#include <AWACS.h>
+#endif
+
+#if APPLE_OSX_mDNSResponder
#include <ne_session.h> // for ne_session_set_socket_attributes()
-#else
-#define NO_AWACS 1
-#endif // APPLE_OSX_mDNSResponder
+#endif
#if APPLE_OSX_mDNSResponder && !TARGET_OS_EMBEDDED
#include <IOKit/platform/IOPlatformSupportPrivate.h>
@@ -153,9 +153,11 @@ static CFStringRef NetworkChangedKey_Computername;
static CFStringRef NetworkChangedKey_DNS;
static CFStringRef NetworkChangedKey_StateInterfacePrefix;
static CFStringRef NetworkChangedKey_DynamicDNS = CFSTR("Setup:/Network/DynamicDNS");
+static CFStringRef NetworkChangedKey_PowerSettings = CFSTR("State:/IOKit/PowerManagement/CurrentSettings");
+#if MDNSRESPONDER_BTMM_SUPPORT
static CFStringRef NetworkChangedKey_BackToMyMac = CFSTR("Setup:/Network/BackToMyMac");
static CFStringRef NetworkChangedKey_BTMMConnectivity = CFSTR("State:/Network/Connectivity");
-static CFStringRef NetworkChangedKey_PowerSettings = CFSTR("State:/IOKit/PowerManagement/CurrentSettings");
+#endif
static char HINFO_HWstring_buffer[32];
static char *HINFO_HWstring = "Device";
@@ -794,8 +796,8 @@ mDNSexport mStatus mDNSPlatformSendUDP(const mDNS *const m, const void *const ms
s, InterfaceID, ifa_name, dst->type, dst, mDNSVal16(dstPort), s, err, sendto_errno, strerror(sendto_errno), (mDNSu32)(m->timenow));
if (!mDNSAddressIsAllDNSLinkGroup(dst))
{
- if (sendto_errno == EHOSTUNREACH) return(mStatus_HostUnreachErr);
- if (sendto_errno == EHOSTDOWN || sendto_errno == ENETDOWN || sendto_errno == ENETUNREACH) return(mStatus_TransientErr);
+ if ((sendto_errno == EHOSTUNREACH) || (sendto_errno == ENETUNREACH)) return(mStatus_HostUnreachErr);
+ if ((sendto_errno == EHOSTDOWN) || (sendto_errno == ENETDOWN)) return(mStatus_TransientErr);
}
// Don't report EHOSTUNREACH in the first three minutes after boot
// This is because mDNSResponder intentionally starts up early in the boot process (See <rdar://problem/3409090>)
@@ -3310,6 +3312,40 @@ mDNSlocal u_int64_t getExtendedFlags(char * ifa_name)
return ifr.ifr_eflags;
}
+#if TARGET_OS_OSX
+// IFRTYPE_FUNCTIONAL_INTCOPROC type interfaces on macOS do not support Bonjour discovery.
+mDNSlocal mDNSBool isCoprocessorInterface(int sockFD, char * ifa_name)
+{
+ struct ifreq ifr;
+
+ if (sockFD < 0)
+ {
+ LogMsg("isCoprocessorInterface: invalid socket FD passed: %d", sockFD);
+ return mDNSfalse;
+ }
+
+ memset(&ifr, 0, sizeof(struct ifreq));
+ strlcpy(ifr.ifr_name, ifa_name, sizeof(ifr.ifr_name));
+
+ if (ioctl(sockFD, SIOCGIFFUNCTIONALTYPE, (caddr_t)&ifr) == -1)
+ {
+ LogMsg("isCoprocessorInterface: SIOCGIFFUNCTIONALTYPE failed, errno = %d (%s)", errno, strerror(errno));
+ return mDNSfalse;
+ }
+
+ if (ifr.ifr_functional_type == IFRTYPE_FUNCTIONAL_INTCOPROC)
+ {
+ LogMsg("isCoprocessorInterface: %s marked as coprocessor interface", ifa_name);
+ return mDNStrue;
+ }
+ else
+ return mDNSfalse;
+}
+
+#else // TARGET_OS_OSX
+#define isCoprocessorInterface(A, B) mDNSfalse
+#endif // TARGET_OS_OSX
+
#if TARGET_OS_IPHONE
// Function pointers for the routines we use in the MobileWiFi framework.
@@ -3499,7 +3535,17 @@ mDNSlocal NetworkInterfaceInfoOSX *AddInterfaceToList(struct ifaddrs *ifa, mDNSs
// we get the corresponding name for the interface index on which the packet was received and check against
// the InterfaceList for a matching name. So, keep the name in sync
strlcpy((*p)->ifinfo.ifname, ifa->ifa_name, sizeof((*p)->ifinfo.ifname));
- (*p)->Exists = mDNStrue;
+
+ // Determine if multicast state has changed.
+ const mDNSBool txrx = MulticastInterface(*p);
+ if ((*p)->ifinfo.McastTxRx != txrx)
+ {
+ (*p)->ifinfo.McastTxRx = txrx;
+ (*p)->Exists = MulticastStateChanged; // State change; need to deregister and reregister this interface
+ }
+ else
+ (*p)->Exists = mDNStrue;
+
// If interface was not in getifaddrs list last time we looked, but it is now, update 'AppearanceTime' for this record
if ((*p)->LastSeen != utc) (*p)->AppearanceTime = utc;
@@ -3539,7 +3585,6 @@ mDNSlocal NetworkInterfaceInfoOSX *AddInterfaceToList(struct ifaddrs *ifa, mDNSs
// We can be configured to disable multicast advertisement, but we want to to support
// local-only services, which need a loopback address record.
i->ifinfo.Advertise = m->DivertMulticastAdvertisements ? ((ifa->ifa_flags & IFF_LOOPBACK) ? mDNStrue : mDNSfalse) : m->AdvertiseLocalAddresses;
- i->ifinfo.McastTxRx = mDNSfalse; // For now; will be set up later at the end of UpdateInterfaceList
i->ifinfo.Loopback = ((ifa->ifa_flags & IFF_LOOPBACK) != 0) ? mDNStrue : mDNSfalse;
i->ifinfo.IgnoreIPv4LL = ((eflags & IFEF_ARPLL) != 0) ? mDNSfalse : mDNStrue;
@@ -3566,6 +3611,7 @@ mDNSlocal NetworkInterfaceInfoOSX *AddInterfaceToList(struct ifaddrs *ifa, mDNSs
LogInfo("AddInterfaceToList: D2DInterface set for %s", ifa->ifa_name);
i->isExpensive = (eflags & IFEF_EXPENSIVE) ? mDNStrue: mDNSfalse;
+ i->isAWDL = (eflags & IFEF_AWDL) ? mDNStrue: mDNSfalse;
if (eflags & IFEF_AWDL)
{
// Set SupportsUnicastMDNSResponse false for the AWDL interface since unicast reserves
@@ -3590,6 +3636,8 @@ mDNSlocal NetworkInterfaceInfoOSX *AddInterfaceToList(struct ifaddrs *ifa, mDNSs
i->BPF_len = 0;
i->Registered = mDNSNULL;
+ // MulticastInterface() depends on the "m" and "ifa_flags" values being initialized above.
+ i->ifinfo.McastTxRx = MulticastInterface(i);
// Do this AFTER i->BSSID has been set up
i->ifinfo.NetWake = (eflags & IFEF_EXPENSIVE)? mDNSfalse : NetWakeInterface(i);
GetMAC(&i->ifinfo.MAC, scope_id);
@@ -4827,14 +4875,14 @@ mDNSlocal mStatus UpdateInterfaceList(mDNSs32 utc)
mDNSPlatformMemCopy(m->PrimaryMAC.b, sdl->sdl_data + sdl->sdl_nlen, 6);
}
- if (ifa->ifa_flags & IFF_UP && ifa->ifa_addr)
+ if (ifa->ifa_flags & IFF_UP && ifa->ifa_addr && !isCoprocessorInterface(InfoSocket, ifa->ifa_name))
if (ifa->ifa_addr->sa_family == AF_INET || ifa->ifa_addr->sa_family == AF_INET6)
{
if (!ifa->ifa_netmask)
{
mDNSAddr ip;
SetupAddr(&ip, ifa->ifa_addr);
- LogMsg("getifaddrs: ifa_netmask is NULL for %5s(%d) Flags %04X Family %2d %#a",
+ LogMsg("UpdateInterfaceList: ifa_netmask is NULL for %5s(%d) Flags %04X Family %2d %#a",
ifa->ifa_name, if_nametoindex(ifa->ifa_name), ifa->ifa_flags, ifa->ifa_addr->sa_family, &ip);
}
// Apparently it's normal for the sa_family of an ifa_netmask to sometimes be zero, so we don't complain about that
@@ -4843,7 +4891,7 @@ mDNSlocal mStatus UpdateInterfaceList(mDNSs32 utc)
{
mDNSAddr ip;
SetupAddr(&ip, ifa->ifa_addr);
- LogMsg("getifaddrs ifa_netmask for %5s(%d) Flags %04X Family %2d %#a has different family: %d",
+ LogMsg("UpdateInterfaceList: ifa_netmask for %5s(%d) Flags %04X Family %2d %#a has different family: %d",
ifa->ifa_name, if_nametoindex(ifa->ifa_name), ifa->ifa_flags, ifa->ifa_addr->sa_family, &ip, ifa->ifa_netmask->sa_family);
}
// Currently we use a few internal ones like mDNSInterfaceID_LocalOnly etc. that are negative values (0, -1, -2).
@@ -4900,19 +4948,6 @@ mDNSlocal mStatus UpdateInterfaceList(mDNSs32 utc)
if (!foundav4 && v4Loopback) AddInterfaceToList(v4Loopback, utc);
if (!foundav6 && v6Loopback) AddInterfaceToList(v6Loopback, utc);
- // Now the list is complete, set the McastTxRx setting for each interface.
- NetworkInterfaceInfoOSX *i;
- for (i = m->p->InterfaceList; i; i = i->next)
- if (i->Exists)
- {
- mDNSBool txrx = MulticastInterface(i);
- if (i->ifinfo.McastTxRx != txrx)
- {
- i->ifinfo.McastTxRx = txrx;
- i->Exists = MulticastStateChanged; // State change; need to deregister and reregister this interface
- }
- }
-
if (InfoSocket >= 0)
close(InfoSocket);
@@ -5234,7 +5269,7 @@ mDNSlocal int ClearInactiveInterfaces(mDNSs32 utc)
if (!i->Exists)
{
if (i->LastSeen == utc) i->LastSeen = utc - 1;
- mDNSBool delete = (NumCacheRecordsForInterfaceID(m, i->ifinfo.InterfaceID) == 0) && (utc - i->LastSeen >= 60);
+ const mDNSBool delete = (i->isAWDL || (NumCacheRecordsForInterfaceID(m, i->ifinfo.InterfaceID) == 0)) && (utc - i->LastSeen >= 60);
LogInfo("ClearInactiveInterfaces: %-13s %5s(%lu) %.6a InterfaceID %p(%p) %#a/%d Age %d%s", delete ? "Deleting" : "Holding",
i->ifinfo.ifname, i->scope_id, &i->BSSID, i->ifinfo.InterfaceID, i,
&i->ifinfo.ip, CountMaskBits(&i->ifinfo.mask), utc - i->LastSeen,
@@ -5818,6 +5853,7 @@ mDNSlocal void SetupDDNSDomains(domainname *const fqdn, DNameListElem **RegDomai
}
CFRelease(ddnsdict);
}
+#if MDNSRESPONDER_BTMM_SUPPORT
if (RegDomains)
{
CFDictionaryRef btmm = SCDynamicStoreCopyValue(NULL, NetworkChangedKey_BackToMyMac);
@@ -5847,7 +5883,7 @@ mDNSlocal void SetupDDNSDomains(domainname *const fqdn, DNameListElem **RegDomai
CFRelease(btmm);
}
}
-
+#endif
}
// Returns mDNSfalse, if it does not set the configuration i.e., if the DNS configuration did not change
@@ -6141,7 +6177,7 @@ mDNSexport void mDNSPlatformDynDNSHostNameStatusChanged(const domainname *const
}
}
-#if APPLE_OSX_mDNSResponder
+#if MDNSRESPONDER_BTMM_SUPPORT
#if !NO_AWACS
// checks whether a domain is present in Setup:/Network/BackToMyMac. Just because there is a key in the
@@ -6283,7 +6319,7 @@ mDNSlocal void UpdateBTMMRelayConnection(mDNS *const m)
else LogInfo("UpdateBTMMRelayConnection: Not calling AWS_Disconnect");
}
}
-#elif !TARGET_OS_EMBEDDED
+#else
mDNSlocal void UpdateBTMMRelayConnection(mDNS *const m)
{
(void) m; // Unused
@@ -6291,11 +6327,9 @@ mDNSlocal void UpdateBTMMRelayConnection(mDNS *const m)
}
#endif // ! NO_AWACS
-#if !TARGET_OS_EMBEDDED
mDNSlocal void ProcessConndConfigChanges(void);
-#endif
-#endif // APPLE_OSX_mDNSResponder
+#endif // MDNSRESPONDER_BTMM_SUPPORT
// MUST be called holding the lock
mDNSlocal void SetDomainSecrets_internal(mDNS *m)
@@ -6369,11 +6403,13 @@ mDNSlocal void SetDomainSecrets_internal(mDNS *m)
offset = 0;
if (!strncmp(stringbuf, dnsprefix, strlen(dnsprefix)))
offset = strlen(dnsprefix);
+#if MDNSRESPONDER_BTMM_SUPPORT
else if (!strncmp(stringbuf, btmmprefix, strlen(btmmprefix)))
{
AutoTunnel = mDNStrue;
offset = strlen(btmmprefix);
}
+#endif
domainname domain;
if (!MakeDomainNameFromDNSNameString(&domain, stringbuf + offset)) { LogMsg("SetDomainSecrets: bad key domain %s", stringbuf); continue; }
@@ -6555,7 +6591,9 @@ mDNSlocal void SetDomainSecrets_internal(mDNS *m)
}
UpdateAnonymousRacoonConfig(m); // Determine whether we need racoon to accept incoming connections
+#if MDNSRESPONDER_BTMM_SUPPORT
ProcessConndConfigChanges(); // Update AutoTunnelInnerAddress values and default ipsec policies as necessary
+#endif
}
#endif // APPLE_OSX_mDNSResponder
@@ -7236,8 +7274,9 @@ mDNSexport void RemoveAutoTunnel6Record(mDNS *const m)
if (info->AutoTunnel)
UpdateAutoTunnel6Record(m, info);
}
+#endif /* APPLE_OSX_mDNSResponder */
-#if !TARGET_OS_EMBEDDED
+#if MDNSRESPONDER_BTMM_SUPPORT
mDNSlocal mDNSBool IPv6AddressIsOnInterface(mDNSv6Addr ipv6Addr, char *ifname)
{
struct ifaddrs *ifa;
@@ -7474,8 +7513,7 @@ mDNSlocal void ProcessConndConfigChanges(void)
// If awacsd crashes or exits for some reason, restart it
UpdateBTMMRelayConnection(m);
}
-#endif // !TARGET_OS_EMBEDDED
-#endif /* APPLE_OSX_mDNSResponder */
+#endif // MDNSRESPONDER_BTMM_SUPPORT
mDNSlocal mDNSBool IsAppleNetwork(mDNS *const m)
{
@@ -7580,9 +7618,11 @@ mDNSexport void mDNSMacOSXNetworkChanged(void)
#if APPLE_OSX_mDNSResponder
#if !TARGET_OS_EMBEDDED
+#if MDNSRESPONDER_BTMM_SUPPORT
mDNS_Lock(m);
ProcessConndConfigChanges();
mDNS_Unlock(m);
+#endif
// Scan to find client tunnels whose questions have completed,
// but whose local inner/outer addresses have changed since the tunnel was set up
@@ -7806,14 +7846,18 @@ mDNSlocal void NetworkChanged(SCDynamicStoreRef store, CFArrayRef changedKeys, v
//mDNSs32 delay = mDNSPlatformOneSecond * 2; // Start off assuming a two-second delay
const mDNSs32 delay = (mDNSPlatformOneSecond + 39) / 40; // 25 ms delay
- int c = CFArrayGetCount(changedKeys); // Count changes
+ const int c = CFArrayGetCount(changedKeys); // Count changes
CFRange range = { 0, c };
- int c_host = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_Hostnames ) != 0);
- int c_comp = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_Computername) != 0);
- int c_udns = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_DNS ) != 0);
- int c_ddns = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_DynamicDNS ) != 0);
- int c_btmm = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_BackToMyMac ) != 0);
- int c_v4ll = ChangedKeysHaveIPv4LL(changedKeys);
+ const int c_host = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_Hostnames ) != 0);
+ const int c_comp = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_Computername) != 0);
+ const int c_udns = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_DNS ) != 0);
+ const int c_ddns = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_DynamicDNS ) != 0);
+#if MDNSRESPONDER_BTMM_SUPPORT
+ const int c_btmm = (CFArrayContainsValue(changedKeys, range, NetworkChangedKey_BackToMyMac ) != 0);
+#else
+ const int c_btmm = 0;
+#endif
+ const int c_v4ll = ChangedKeysHaveIPv4LL(changedKeys);
int c_fast = 0;
// Do immediate network changed processing for "p2p*" interfaces and
@@ -7971,9 +8015,11 @@ mDNSlocal mStatus WatchForNetworkChanges(mDNS *const m)
CFArrayAppendValue(keys, NetworkChangedKey_Computername);
CFArrayAppendValue(keys, NetworkChangedKey_DNS);
CFArrayAppendValue(keys, NetworkChangedKey_DynamicDNS);
- CFArrayAppendValue(keys, NetworkChangedKey_BackToMyMac);
CFArrayAppendValue(keys, NetworkChangedKey_PowerSettings);
+#if MDNSRESPONDER_BTMM_SUPPORT
+ CFArrayAppendValue(keys, NetworkChangedKey_BackToMyMac);
CFArrayAppendValue(keys, NetworkChangedKey_BTMMConnectivity);
+#endif
CFArrayAppendValue(patterns, pattern1);
CFArrayAppendValue(patterns, pattern2);
CFArrayAppendValue(patterns, CFSTR("State:/Network/Interface/[^/]+/AirPort"));
@@ -8177,13 +8223,9 @@ mDNSlocal void removeCachedPeerRecords(mDNSu32 ifindex, mDNSAddr *ap, bool purge
// Handle KEV_DL_NODE_PRESENCE event.
mDNSlocal void nodePresence(struct kev_dl_node_presence * p)
{
- char buf[INET6_ADDRSTRLEN];
struct opaque_presence_indication *op = (struct opaque_presence_indication *) p->node_service_info;
- if (inet_ntop(AF_INET6, & p->sin6_node_address.sin6_addr, buf, sizeof(buf)))
- LogInfo("nodePresence: IPv6 address: %s, SUI %d", buf, op->SUI);
- else
- LogInfo("nodePresence: inet_ntop() error");
+ LogInfo("nodePresence: IPv6 address: %.16a, SUI %d", p->sin6_node_address.sin6_addr.s6_addr, op->SUI);
// AWDL will generate a KEV_DL_NODE_PRESENCE event with SSTH field of
// all zeroes when a node is present and has no services registered.
@@ -8203,17 +8245,11 @@ mDNSlocal void nodePresence(struct kev_dl_node_presence * p)
mDNSlocal void nodeAbsence(struct kev_dl_node_absence * p)
{
mDNSAddr peerAddr;
- char buf[INET6_ADDRSTRLEN];
-
- if (inet_ntop(AF_INET6, & p->sin6_node_address.sin6_addr, buf, sizeof(buf)))
- LogInfo("nodeAbsence: IPv6 address: %s", buf);
- else
- LogInfo("nodeAbsence: inet_ntop() error");
peerAddr.type = mDNSAddrType_IPv6;
peerAddr.ip.v6 = *(mDNSv6Addr*)&p->sin6_node_address.sin6_addr;
- LogInfo("nodeAbsence: immediately purge cached records from this peer");
+ LogInfo("nodeAbsence: immediately purge cached records from %.16a", p->sin6_node_address.sin6_addr.s6_addr);
removeCachedPeerRecords(p->sdl_node_address.sdl_index, & peerAddr, true);
}
@@ -8367,8 +8403,13 @@ mDNSlocal OSStatus KeychainChanged(SecKeychainEvent keychainEvent, SecKeychainCa
if (!err)
{
relevant = ((a->attr[0].length == 4 && (!strncasecmp(a->attr[0].data, "ddns", 4) || !strncasecmp(a->attr[0].data, "sndd", 4))) ||
- (a->attr[1].length >= mDNSPlatformStrLen(dnsprefix) && (!strncasecmp(a->attr[1].data, dnsprefix, mDNSPlatformStrLen(dnsprefix)))) ||
- (a->attr[1].length >= mDNSPlatformStrLen(btmmprefix) && (!strncasecmp(a->attr[1].data, btmmprefix, mDNSPlatformStrLen(btmmprefix)))));
+ (a->attr[1].length >= mDNSPlatformStrLen(dnsprefix) && (!strncasecmp(a->attr[1].data, dnsprefix, mDNSPlatformStrLen(dnsprefix)))));
+#if MDNSRESPONDER_BTMM_SUPPORT
+ if (!relevant && (a->attr[1].length >= mDNSPlatformStrLen(btmmprefix)) && !strncasecmp(a->attr[1].data, btmmprefix, mDNSPlatformStrLen(btmmprefix)))
+ {
+ relevant = mDNStrue;
+ }
+#endif
SecKeychainItemFreeAttributesAndData(a, NULL);
}
}
@@ -9419,36 +9460,13 @@ mDNSlocal void CreatePTRRecord(const domainname *domain)
// intentionally to avoid adding to the complexity of code handling /etc/hosts.
mDNSlocal void SetupLocalHostRecords(void)
{
- char buffer[MAX_REVERSE_MAPPING_NAME];
domainname name;
- int i;
- struct in6_addr addr;
- mDNSu8 *ptr = addr.__u6_addr.__u6_addr8;
- if (inet_pton(AF_INET, "127.0.0.1", &addr) == 1)
- {
- mDNS_snprintf(buffer, sizeof(buffer), "%d.%d.%d.%d.in-addr.arpa.",
- ptr[3], ptr[2], ptr[1], ptr[0]);
- MakeDomainNameFromDNSNameString(&name, buffer);
- CreatePTRRecord(&name);
- }
- else LogMsg("SetupLocalHostRecords: ERROR!! inet_pton AF_INET failed");
+ MakeDomainNameFromDNSNameString(&name, "1.0.0.127.in-addr.arpa.");
+ CreatePTRRecord(&name);
- if (inet_pton(AF_INET6, "::1", &addr) == 1)
- {
- for (i = 0; i < 16; i++)
- {
- static const char hexValues[] = "0123456789ABCDEF";
- buffer[i * 4 ] = hexValues[ptr[15 - i] & 0x0F];
- buffer[i * 4 + 1] = '.';
- buffer[i * 4 + 2] = hexValues[ptr[15 - i] >> 4];
- buffer[i * 4 + 3] = '.';
- }
- mDNS_snprintf(&buffer[64], sizeof(buffer)-64, "ip6.arpa.");
- MakeDomainNameFromDNSNameString(&name, buffer);
- CreatePTRRecord(&name);
- }
- else LogMsg("SetupLocalHostRecords: ERROR!! inet_pton AF_INET6 failed");
+ MakeDomainNameFromDNSNameString(&name, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.");
+ CreatePTRRecord(&name);
}
#if APPLE_OSX_mDNSResponder // Don't compile for dnsextd target
@@ -9465,6 +9483,56 @@ mDNSlocal void setSameDomainLabelPointer(void);
// 6) client calls to enumerate domains now go over LocalOnly interface
// (!!!KRS may add outgoing interface in addition)
+#if TARGET_OS_IPHONE
+mDNSlocal mDNSBool IsAppleInternalBuild(void)
+{
+ return (os_variant_has_internal_diagnostics("com.apple.mDNSResponder") ? mDNStrue : mDNSfalse);
+}
+
+mDNSlocal mStatus RegisterLocalOnlyAddressRecord(const domainname *const name, mDNSu16 type, const void *rdata, mDNSu16 rdlength)
+{
+ switch(type)
+ {
+ case kDNSType_A:
+ if (rdlength != 4) return (mStatus_BadParamErr);
+ break;
+
+ case kDNSType_AAAA:
+ if (rdlength != 16) return (mStatus_BadParamErr);
+ break;
+
+ default:
+ return (mStatus_BadParamErr);
+ }
+
+ AuthRecord *rr = mallocL("etchosts", sizeof(*rr));
+ if (!rr) return (mStatus_NoMemoryErr);
+ mDNSPlatformMemZero(rr, sizeof(*rr));
+
+ mDNS_SetupResourceRecord(rr, NULL, mDNSInterface_LocalOnly, type, 1, kDNSRecordTypeKnownUnique, AuthRecordLocalOnly, FreeEtcHosts, NULL);
+ AssignDomainName(&rr->namestorage, name);
+ mDNSPlatformMemCopy(rr->resrec.rdata->u.data, rdata, rdlength);
+
+ const mStatus err = mDNS_Register_internal(&mDNSStorage, rr);
+ if (err)
+ {
+ LogMsg("RegisterLocalOnlyAddressRecord: mDNS_Register error %d registering %s", err, ARDisplayString(&mDNSStorage, rr));
+ freeL("etchosts", rr);
+ }
+ return (err);
+}
+
+mDNSlocal void RegisterLocalOnlyARecord(const domainname *const name, const mDNSv4Addr *const addr)
+{
+ RegisterLocalOnlyAddressRecord(name, kDNSType_A, addr->b, (mDNSu16)sizeof(mDNSv4Addr));
+}
+
+mDNSlocal void RegisterLocalOnlyAAAARecord(const domainname *const name, const mDNSv6Addr *const addr)
+{
+ RegisterLocalOnlyAddressRecord(name, kDNSType_AAAA, addr->b, (mDNSu16)sizeof(mDNSv6Addr));
+}
+#endif
+
mDNSlocal mStatus mDNSPlatformInit_setup(mDNS *const m)
{
mStatus err;
@@ -9694,7 +9762,41 @@ mDNSlocal mStatus mDNSPlatformInit_setup(mDNS *const m)
#endif
if (SSLqueue == mDNSNULL) LogMsg("dispatch_queue_create: SSL queue NULL");
- mDNSMacOSXUpdateEtcHosts(m);
+#if TARGET_OS_IPHONE
+ // On device OSes (iOS, tvOS, watchOS, etc.), ignore /etc/hosts unless the OS is an internal build. When the /etc/hosts
+ // file is ignored, LocalOnly auth records will be registered for localhost and broadcasthost addresses contained in the
+ // standard /etc/hosts file:
+ //
+ // 127.0.0.1 localhost
+ // 255.255.255.255 broadcasthost
+ // ::1 localhost
+
+ if (!IsAppleInternalBuild())
+ {
+ const domainname *const localHostName = (const domainname *) "\x9" "localhost";
+ const domainname *const broadcastHostName = (const domainname *) "\xd" "broadcasthost";
+ const mDNSv4Addr localHostV4 = { { 127, 0, 0, 1 } };
+ mDNSv6Addr localHostV6;
+
+ // Register localhost 127.0.0.1 A record.
+
+ RegisterLocalOnlyARecord(localHostName, &localHostV4);
+
+ // Register broadcasthost 255.255.255.255 A record.
+
+ RegisterLocalOnlyARecord(broadcastHostName, &onesIPv4Addr);
+
+ // Register localhost ::1 AAAA record.
+
+ mDNSPlatformMemZero(&localHostV6, sizeof(localHostV6));
+ localHostV6.b[15] = 1;
+ RegisterLocalOnlyAAAARecord(localHostName, &localHostV6);
+ }
+ else
+#endif
+ {
+ mDNSMacOSXUpdateEtcHosts(m);
+ }
SetupLocalHostRecords();
return(mStatus_NoError);
diff --git a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h
index 55c74c6c..f189b07f 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h
+++ b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h
@@ -153,6 +153,7 @@ struct NetworkInterfaceInfoOSX_struct
int BPF_mcfd; // Socket for our IPv6 ND group membership
u_int BPF_len;
mDNSBool isExpensive; // True if this interface has the IFEF_EXPENSIVE flag set.
+ mDNSBool isAWDL; // True if this interface has the IFEF_AWDL flag set.
#ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
dispatch_source_t BPF_source;
#else
@@ -272,7 +273,7 @@ struct CompileTimeAssertionChecks_mDNSMacOSX
// Check our structures are reasonable sizes. Including overly-large buffers, or embedding
// other overly-large structures instead of having a pointer to them, can inadvertently
// cause structure sizes (and therefore memory usage) to balloon unreasonably.
- char sizecheck_NetworkInterfaceInfoOSX[(sizeof(NetworkInterfaceInfoOSX) <= 7464) ? 1 : -1];
+ char sizecheck_NetworkInterfaceInfoOSX[(sizeof(NetworkInterfaceInfoOSX) <= 8488) ? 1 : -1];
char sizecheck_mDNS_PlatformSupport [(sizeof(mDNS_PlatformSupport) <= 1378) ? 1 : -1];
};
diff --git a/mDNSResponder/mDNSMacOSX/mDNSResponder.sb b/mDNSResponder/mDNSMacOSX/mDNSResponder.sb
index 1458815c..29186314 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSResponder.sb
+++ b/mDNSResponder/mDNSMacOSX/mDNSResponder.sb
@@ -1,6 +1,6 @@
; -*- Mode: Scheme; tab-width: 4 -*-
;
-; Copyright (c) 2012-2015 Apple Inc. All rights reserved.
+; Copyright (c) 2012-2018 Apple Inc. All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
@@ -128,7 +128,7 @@
(literal "/private/var/preferences/SystemConfiguration/preferences.plist")
(subpath "/System/Library/Preferences/Logging")
(subpath "/AppleInternal/Library/Preferences/Logging")
- (subpath "/private/var/preferences/Logging/Subsystems")
+ (subpath "/private/var/preferences/Logging")
(subpath "/private/var/db/timezone")
(subpath "/Library/Preferences/Logging"))
diff --git a/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj b/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
index f1a8b1da..bbbd12ff 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
+++ b/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
@@ -271,8 +271,9 @@
4AAE0C9A0C68EA81003882A5 /* mDNSResponderHelper.8 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4AAE0C7A0C68E97F003882A5 /* mDNSResponderHelper.8 */; };
4BD2B63A134FE09F002B96D5 /* P2PPacketFilter.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BD2B638134FE09F002B96D5 /* P2PPacketFilter.c */; };
4BD2B63B134FE09F002B96D5 /* P2PPacketFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD2B639134FE09F002B96D5 /* P2PPacketFilter.h */; };
- 729DF4601CD40630005ECF70 /* com.apple.mDNSResponder.plist in CopyFiles */ = {isa = PBXBuildFile; fileRef = 729DF45F1CD40630005ECF70 /* com.apple.mDNSResponder.plist */; };
72FB5467166D5FCA0090B2D9 /* dnsctl.c in Sources */ = {isa = PBXBuildFile; fileRef = 72FB545A166D5F960090B2D9 /* dnsctl.c */; };
+ 789036921F7AC1FA0077A962 /* libnetwork.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 789036911F7AC1F90077A962 /* libnetwork.tbd */; };
+ 789036931F7AC2050077A962 /* libnetwork.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 789036911F7AC1F90077A962 /* libnetwork.tbd */; };
8415A6571897109000BDBA26 /* libdns_services.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8415A6561897109000BDBA26 /* libdns_services.dylib */; };
8417375C1B967D37000CD5C2 /* dnsctl_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 8417375A1B967CBE000CD5C2 /* dnsctl_server.c */; };
848DA5C7165477E000D2E8B4 /* xpc_services.c in Sources */ = {isa = PBXBuildFile; fileRef = 848DA5C6165477E000D2E8B4 /* xpc_services.c */; };
@@ -324,8 +325,14 @@
B7E06B0D1DBA9DFE00E4580C /* ClientCommon.c in Sources */ = {isa = PBXBuildFile; fileRef = FF5852100DD27BD300862BDF /* ClientCommon.c */; };
B7E06B0E1DBA9E9700E4580C /* DomainBrowser.strings in Resources */ = {isa = PBXBuildFile; fileRef = B7016F4F1D5D0D1900107E7C /* DomainBrowser.strings */; };
BD03E88D1AD31278005E8A81 /* SymptomReporter.c in Sources */ = {isa = PBXBuildFile; fileRef = BD03E88C1AD31278005E8A81 /* SymptomReporter.c */; };
+ BD28AE8F207B892D00F0B257 /* bonjour-mcast-diagnose in Copy diagnose scripts */ = {isa = PBXBuildFile; fileRef = BD28AE8E207B88F600F0B257 /* bonjour-mcast-diagnose */; };
+ BD41B27D203EBE6100A53629 /* dns_sd.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA572630AF190C20055A0F1 /* dns_sd.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BD41F9C4209B60AC0077F8B6 /* libpcap.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BD41F9C3209B60AC0077F8B6 /* libpcap.tbd */; };
BD691B2A1ED2F47100E6F317 /* DNS64.c in Sources */ = {isa = PBXBuildFile; fileRef = BD691B281ED2F43200E6F317 /* DNS64.c */; };
BD691B2B1ED2F4AB00E6F317 /* DNS64.h in Headers */ = {isa = PBXBuildFile; fileRef = BD691B291ED2F43200E6F317 /* DNS64.h */; };
+ BD75E940206ADEF400656ED3 /* com.apple.mDNSResponder.plist in Copy AppleInternal Logging Profile */ = {isa = PBXBuildFile; fileRef = BDB61846206ADDDF00AFF600 /* com.apple.mDNSResponder.plist */; };
+ BD893CE5206C0D980055F9E7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD893CE4206C0D980055F9E7 /* SystemConfiguration.framework */; };
+ BD893CE7206C0EAF0055F9E7 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD893CE6206C0EAF0055F9E7 /* CoreFoundation.framework */; };
BD9BA7551EAF91FB00658CCF /* dnssdutil.c in Sources */ = {isa = PBXBuildFile; fileRef = BD9BA7541EAF91E700658CCF /* dnssdutil.c */; };
BD9BA7581EAF929C00658CCF /* CoreUtils.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD9BA7571EAF929C00658CCF /* CoreUtils.framework */; };
BDA3F08A1C48DB920054FB4B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDA3F0891C48DB910054FB4B /* Foundation.framework */; };
@@ -333,6 +340,12 @@
BDA3F08F1C48DCA50054FB4B /* Metrics.m in Sources */ = {isa = PBXBuildFile; fileRef = BDA3F0881C48DB6D0054FB4B /* Metrics.m */; };
BDA9A7881B3A924C00523835 /* dns_sd_private.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA9A7871B3A923600523835 /* dns_sd_private.h */; settings = {ATTRIBUTES = (Private, ); }; };
BDA9A7891B3A92A500523835 /* dns_sd_private.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA9A7871B3A923600523835 /* dns_sd_private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BDAF4BC020B52D3D0062219E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDAF4BBF20B52D3D0062219E /* CFNetwork.framework */; };
+ BDB04221203FEF4C00419961 /* dns_sd.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA572630AF190C20055A0F1 /* dns_sd.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BDB04222203FEF4D00419961 /* dns_sd.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA572630AF190C20055A0F1 /* dns_sd.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BDB04223203FF18000419961 /* dns_sd_private.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA9A7871B3A923600523835 /* dns_sd_private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BDB04224203FF18000419961 /* dns_sd_private.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA9A7871B3A923600523835 /* dns_sd_private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BDB61845206ADB9D00AFF600 /* com.apple.mDNSResponder.plist in Copy Base Logging Profile */ = {isa = PBXBuildFile; fileRef = BDB61843206ADB7700AFF600 /* com.apple.mDNSResponder.plist */; };
BDBF9B941ED74B9C001498A8 /* DNS64State.h in Headers */ = {isa = PBXBuildFile; fileRef = BDBF9B931ED74B8C001498A8 /* DNS64State.h */; };
D284BE540ADD80740027CCDF /* dnssd_ipc.h in Headers */ = {isa = PBXBuildFile; fileRef = F5E11B5B04A28126019798ED /* dnssd_ipc.h */; };
D284BE580ADD80740027CCDF /* mDNS.c in Sources */ = {isa = PBXBuildFile; fileRef = 6575FBE9022EAF5A00000109 /* mDNS.c */; };
@@ -717,14 +730,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- 8418673D15AB8BFF00BB7F70 /* CopyFiles */ = {
+ 8418673D15AB8BFF00BB7F70 /* Copy Base Logging Profile */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstPath = /System/Library/Preferences/Logging/Subsystems;
dstSubfolderSpec = 0;
files = (
- 729DF4601CD40630005ECF70 /* com.apple.mDNSResponder.plist in CopyFiles */,
+ BDB61845206ADB9D00AFF600 /* com.apple.mDNSResponder.plist in Copy Base Logging Profile */,
);
+ name = "Copy Base Logging Profile";
runOnlyForDeploymentPostprocessing = 1;
};
B7D566C61E81D9B600E43008 /* CopyFiles */ = {
@@ -738,6 +752,28 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ BD28AE8C207B888E00F0B257 /* Copy diagnose scripts */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/local/bin;
+ dstSubfolderSpec = 0;
+ files = (
+ BD28AE8F207B892D00F0B257 /* bonjour-mcast-diagnose in Copy diagnose scripts */,
+ );
+ name = "Copy diagnose scripts";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ BD75E93F206ADEAD00656ED3 /* Copy AppleInternal Logging Profile */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /AppleInternal/Library/Preferences/Logging/Subsystems;
+ dstSubfolderSpec = 0;
+ files = (
+ BD75E940206ADEF400656ED3 /* com.apple.mDNSResponder.plist in Copy AppleInternal Logging Profile */,
+ );
+ name = "Copy AppleInternal Logging Profile";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
D284BE6A0ADD80740027CCDF /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -891,9 +927,9 @@
6575FBE9022EAF5A00000109 /* mDNS.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; name = mDNS.c; path = ../mDNSCore/mDNS.c; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
6575FBEB022EAF7200000109 /* mDNSMacOSX.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = mDNSMacOSX.c; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
6575FBEC022EAF7200000109 /* daemon.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = daemon.c; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
- 729DF45F1CD40630005ECF70 /* com.apple.mDNSResponder.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = com.apple.mDNSResponder.plist; path = Private/com.apple.mDNSResponder.plist; sourceTree = "<group>"; };
72FB545A166D5F960090B2D9 /* dnsctl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dnsctl.c; path = ../Clients/dnsctl.c; sourceTree = "<group>"; };
72FB545F166D5FB00090B2D9 /* dnsctl */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dnsctl; sourceTree = BUILT_PRODUCTS_DIR; };
+ 789036911F7AC1F90077A962 /* libnetwork.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libnetwork.tbd; path = usr/lib/libnetwork.tbd; sourceTree = SDKROOT; };
7F18A9F60587CEF6001880B3 /* DNSCommon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = DNSCommon.c; path = ../mDNSCore/DNSCommon.c; sourceTree = SOURCE_ROOT; };
7F18A9F70587CEF6001880B3 /* uDNS.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = uDNS.c; path = ../mDNSCore/uDNS.c; sourceTree = SOURCE_ROOT; };
7F461DB5062DBF2900672BF3 /* DNSDigest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = DNSDigest.c; path = ../mDNSCore/DNSDigest.c; sourceTree = SOURCE_ROOT; };
@@ -952,8 +988,12 @@
B7D6CA701D1076F3005E24CF /* DomainBrowser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainBrowser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
B7E5920F1DB687A700A38085 /* Base */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Base; path = Base.lproj/DNSServiceDiscoveryPref.nib; sourceTree = "<group>"; };
BD03E88C1AD31278005E8A81 /* SymptomReporter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SymptomReporter.c; sourceTree = "<group>"; };
+ BD28AE8E207B88F600F0B257 /* bonjour-mcast-diagnose */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "bonjour-mcast-diagnose"; sourceTree = "<group>"; };
+ BD41F9C3209B60AC0077F8B6 /* libpcap.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libpcap.tbd; path = usr/lib/libpcap.tbd; sourceTree = SDKROOT; };
BD691B281ED2F43200E6F317 /* DNS64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = DNS64.c; sourceTree = "<group>"; };
BD691B291ED2F43200E6F317 /* DNS64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNS64.h; sourceTree = "<group>"; };
+ BD893CE4206C0D980055F9E7 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+ BD893CE6206C0EAF0055F9E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
BD9BA7531EAF90E400658CCF /* dnssdutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dnssdutil; sourceTree = BUILT_PRODUCTS_DIR; };
BD9BA7541EAF91E700658CCF /* dnssdutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dnssdutil.c; path = ../Clients/dnssdutil.c; sourceTree = "<group>"; };
BD9BA7571EAF929C00658CCF /* CoreUtils.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreUtils.framework; path = System/Library/PrivateFrameworks/CoreUtils.framework; sourceTree = SDKROOT; };
@@ -961,6 +1001,9 @@
BDA3F0881C48DB6D0054FB4B /* Metrics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Metrics.m; sourceTree = "<group>"; };
BDA3F0891C48DB910054FB4B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
BDA9A7871B3A923600523835 /* dns_sd_private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dns_sd_private.h; path = ../mDNSShared/dns_sd_private.h; sourceTree = "<group>"; };
+ BDAF4BBF20B52D3D0062219E /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
+ BDB61843206ADB7700AFF600 /* com.apple.mDNSResponder.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.apple.mDNSResponder.plist; sourceTree = "<group>"; };
+ BDB61846206ADDDF00AFF600 /* com.apple.mDNSResponder.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = com.apple.mDNSResponder.plist; sourceTree = "<group>"; };
BDBF9B931ED74B8C001498A8 /* DNS64State.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNS64State.h; sourceTree = "<group>"; };
BDE238C11DF69D8300B9F696 /* dns_sd_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dns_sd_internal.h; path = ../mDNSShared/dns_sd_internal.h; sourceTree = "<group>"; };
D284BE730ADD80740027CCDF /* mDNSResponder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mDNSResponder; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1084,6 +1127,7 @@
21B830A61D8A63E400AE2001 /* CoreFoundation.framework in Frameworks */,
21B830A21D8A63A300AE2001 /* libxml2.dylib in Frameworks */,
37538E141D7A43B600226BE4 /* libicucore.dylib in Frameworks */,
+ 789036931F7AC2050077A962 /* libnetwork.tbd in Frameworks */,
21B830A41D8A63BB00AE2001 /* Security.framework in Frameworks */,
21B830A51D8A63CB00AE2001 /* IOKit.framework in Frameworks */,
);
@@ -1149,7 +1193,11 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ BD41F9C4209B60AC0077F8B6 /* libpcap.tbd in Frameworks */,
+ BDAF4BC020B52D3D0062219E /* CFNetwork.framework in Frameworks */,
+ BD893CE7206C0EAF0055F9E7 /* CoreFoundation.framework in Frameworks */,
BD9BA7581EAF929C00658CCF /* CoreUtils.framework in Frameworks */,
+ BD893CE5206C0D980055F9E7 /* SystemConfiguration.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1164,6 +1212,7 @@
D284BE660ADD80740027CCDF /* SystemConfiguration.framework in Frameworks */,
21B830A81D8A642200AE2001 /* libicucore.dylib in Frameworks */,
219D5542149ED645004464AE /* libxml2.dylib in Frameworks */,
+ 789036921F7AC1FA0077A962 /* libnetwork.tbd in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1246,6 +1295,8 @@
19C28FBDFE9D53C911CA2CBB /* Products */,
37DDE9241BA382280092AC61 /* Unit Tests */,
BD9BA7561EAF929C00658CCF /* Frameworks */,
+ BDB61842206ADB7700AFF600 /* LoggingProfiles */,
+ BD28AE8D207B88F600F0B257 /* Scripts */,
);
name = mDNSResponder;
sourceTree = "<group>";
@@ -1267,7 +1318,6 @@
21F51DBD1B3540DB0070B05C /* com.apple.dnsextd.plist */,
21F51DBF1B35412D0070B05C /* com.apple.mDNSResponder.plist */,
21F51DBE1B3541030070B05C /* com.apple.mDNSResponderHelper.plist */,
- 729DF45F1CD40630005ECF70 /* com.apple.mDNSResponder.plist */,
21A57F4A145B2AE100939099 /* CryptoAlg.c */,
21A57F4B145B2AE100939099 /* CryptoAlg.h */,
21A57F51145B2B1400939099 /* CryptoSupport.c */,
@@ -1568,14 +1618,44 @@
path = macOS;
sourceTree = "<group>";
};
+ BD28AE8D207B88F600F0B257 /* Scripts */ = {
+ isa = PBXGroup;
+ children = (
+ BD28AE8E207B88F600F0B257 /* bonjour-mcast-diagnose */,
+ );
+ path = Scripts;
+ sourceTree = "<group>";
+ };
BD9BA7561EAF929C00658CCF /* Frameworks */ = {
isa = PBXGroup;
children = (
+ BDAF4BBF20B52D3D0062219E /* CFNetwork.framework */,
+ BD41F9C3209B60AC0077F8B6 /* libpcap.tbd */,
+ BD893CE6206C0EAF0055F9E7 /* CoreFoundation.framework */,
+ BD893CE4206C0D980055F9E7 /* SystemConfiguration.framework */,
+ 789036911F7AC1F90077A962 /* libnetwork.tbd */,
BD9BA7571EAF929C00658CCF /* CoreUtils.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
+ BDB61842206ADB7700AFF600 /* LoggingProfiles */ = {
+ isa = PBXGroup;
+ children = (
+ BDB61843206ADB7700AFF600 /* com.apple.mDNSResponder.plist */,
+ BDB61844206ADB7700AFF600 /* AppleInternal */,
+ );
+ path = LoggingProfiles;
+ sourceTree = "<group>";
+ };
+ BDB61844206ADB7700AFF600 /* AppleInternal */ = {
+ isa = PBXGroup;
+ children = (
+ BDB61846206ADDDF00AFF600 /* com.apple.mDNSResponder.plist */,
+ );
+ path = AppleInternal;
+ sourceTree = "<group>";
+ };
DB2CC4420662DCE500335AB3 /* Java Support */ = {
isa = PBXGroup;
children = (
@@ -1784,6 +1864,8 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ BDB04221203FEF4C00419961 /* dns_sd.h in Headers */,
+ BDB04223203FF18000419961 /* dns_sd_private.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1791,6 +1873,8 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ BDB04222203FEF4D00419961 /* dns_sd.h in Headers */,
+ BDB04224203FF18000419961 /* dns_sd_private.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1799,6 +1883,7 @@
buildActionMask = 2147483647;
files = (
BDA9A7881B3A924C00523835 /* dns_sd_private.h in Headers */,
+ BD41B27D203EBE6100A53629 /* dns_sd.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1881,7 +1966,6 @@
2141DD19123FFCDB0086D23E /* Headers */,
2141DD1A123FFCDB0086D23E /* Sources */,
2141DD1B123FFCDB0086D23E /* Frameworks */,
- 2130256B12400DE600AC839F /* ShellScript */,
);
buildRules = (
);
@@ -2115,8 +2199,10 @@
4A7B9E7F14FDA21B00B84CC1 /* CopyFiles */,
4A7B9E8114FDA25500B84CC1 /* CopyFiles */,
D284BE6C0ADD80740027CCDF /* Run Script */,
- 8418673D15AB8BFF00BB7F70 /* CopyFiles */,
21F51DC01B35418C0070B05C /* CopyFiles */,
+ 8418673D15AB8BFF00BB7F70 /* Copy Base Logging Profile */,
+ BD75E93F206ADEAD00656ED3 /* Copy AppleInternal Logging Profile */,
+ BD28AE8C207B888E00F0B257 /* Copy diagnose scripts */,
);
buildRules = (
);
@@ -2439,19 +2525,6 @@
shellPath = /bin/sh;
shellScript = "if [ -e \"${SDKROOT}/usr/local/include/vproc.h\" -o -e \"${SDKROOT}/usr/include/vproc.h\" ]\nthen\nrm -f \"${CONFIGURATION_TEMP_DIR}/vproc.h\"\nelse\ntouch \"${CONFIGURATION_TEMP_DIR}/vproc.h\"\nfi\n\nipsec=$(ls \"${SDKROOT}/usr/lib/libipsec.*\" 2> /dev/null | wc -l)\nif [ \"$ipsec\" != \"0\" ]\nthen\nrm -f \"${CONFIGURATION_TEMP_DIR}/ipsec_options.h\"\ntouch \"${CONFIGURATION_TEMP_DIR}/ipsec_options.h\"\nrm -f \"${CONFIGURATION_TEMP_DIR}/libipsec.a\"\nelse\necho \"#define MDNS_NO_IPSEC 1\" > ${CONFIGURATION_TEMP_DIR}/ipsec_options.h\ntouch \"${CONFIGURATION_TEMP_DIR}/empty.c\"\nfor i in ${ARCHS}\ndo\nccflags=\"-arch $i $ccflags\"\ndone\ncc ${ccflags} \"${CONFIGURATION_TEMP_DIR}/empty.c\" -c -o \"${CONFIGURATION_TEMP_DIR}/libipsec.a\"\nrm -f \"${CONFIGURATION_TEMP_DIR}/empty.c\"\nfi\n";
};
- 2130256B12400DE600AC839F /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 8;
- files = (
- );
- inputPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 1;
- shellPath = /bin/sh;
- shellScript = "DSTROOT=${DSTROOT}\n\nmkdir -p \"$DSTROOT/usr/include\"\nsed 's/\\(^#define _DNS_SD_LIBDISPATCH \\)0$/\\1 1/' \"$SRCROOT/../mDNSShared/dns_sd.h\" > \"$DSTROOT/usr/include/dns_sd.h\"";
- };
21DE714D115831CB00DD4BD1 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 8;
@@ -2463,7 +2536,7 @@
);
runOnlyForDeploymentPostprocessing = 1;
shellPath = "/bin/bash -e -x";
- shellScript = "DSTROOT=${DSTROOT}\nmkdir -p \"$DSTROOT/usr/include\"\nsed 's/\\(^#define _DNS_SD_LIBDISPATCH \\)0$/\\1 1/' \"$SRCROOT/../mDNSShared/dns_sd.h\" > \"$DSTROOT/usr/include/dns_sd.h\"\n\nif [[ \"${ACTION}\" == \"installhdrs\" ]]; then\n exit 0\nfi\n\nif [[ \"${PLATFORM_NAME}\" =~ \"simulator\" ]]; then\n ln -s libsystem_dnssd.dylib ${DSTROOT}${INSTALL_PATH}/libsystem_sim_dnssd.dylib\nfi\n";
+ shellScript = "DSTROOT=${DSTROOT}\n\nif [[ \"${ACTION}\" == \"installhdrs\" ]] || [[ \"${ACTION}\" == \"installapi\" ]]; then\n exit 0\nfi\n\nif [[ \"${PLATFORM_NAME}\" =~ \"simulator\" ]]; then\n ln -s libsystem_dnssd.dylib ${DSTROOT}${INSTALL_PATH}/libsystem_sim_dnssd.dylib\nfi\n";
};
37DDE9341BA384000092AC61 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@@ -3154,7 +3227,6 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"__APPLE_USE_RFC_3542=1",
- "_DNS_SD_LIBDISPATCH=1",
"APPLE_OSX_mDNSResponder=1",
"__MigTypeCheck=1",
"mDNSResponderVersion=${MVERS}",
@@ -3249,7 +3321,6 @@
"-lMobileGestalt",
);
"OTHER_LDFLAGS[sdk=macosx*][arch=*]" = (
- "-lAWACS",
"-weak_framework",
WebFilterDNS,
"-weak_framework",
@@ -3339,7 +3410,6 @@
buildSettings = {
GCC_PREPROCESSOR_DEFINITIONS = (
"__APPLE_USE_RFC_3542=1",
- "_DNS_SD_LIBDISPATCH=1",
"APPLE_OSX_mDNSResponder=1",
"__MigTypeCheck=1",
"mDNSResponderVersion=${MVERS}",
@@ -3431,6 +3501,7 @@
INSTALLHDRS_SCRIPT_PHASE = YES;
INSTALL_PATH = /usr/local/lib/system;
PRODUCT_NAME = dns_sd;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
"SKIP_INSTALL[sdk=iphonesimulator*]" = YES;
};
name = Debug;
@@ -3474,12 +3545,14 @@
"$(inherited)",
"__DARWIN_NON_CANCELABLE=1",
);
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/";
INSTALLHDRS_COPY_PHASE = YES;
INSTALLHDRS_SCRIPT_PHASE = YES;
INSTALL_PATH = /usr/lib/system;
INTERPOSITION_SIM_SUFFIX = "";
"INTERPOSITION_SIM_SUFFIX[sdk=iphonesimulator*]" = _sim;
+ IS_ZIPPERED = YES;
LINK_WITH_STANDARD_LIBRARIES = NO;
OTHER_LDFLAGS = (
"-Wl,-umbrella,System",
@@ -3496,7 +3569,11 @@
"-llaunch",
"-lsystem_asl",
);
+ OTHER_TAPI_FLAGS = "-umbrella System -extra-public-header $(SRCROOT)/DNSServiceDiscovery.h";
PRODUCT_NAME = libsystem_dnssd;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
+ SUPPORTS_TEXT_BASED_API = YES;
+ TAPI_VERIFY_MODE = Pedantic;
};
name = Debug;
};
@@ -3509,6 +3586,7 @@
"$(inherited)",
"__DARWIN_NON_CANCELABLE=1",
);
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/";
INSTALL_PATH = /usr/lib/system;
INTERPOSITION_SIM_SUFFIX = "";
@@ -3529,7 +3607,11 @@
"-llaunch",
"-lsystem_asl",
);
+ OTHER_TAPI_FLAGS = "-umbrella System -extra-public-header $(SRCROOT)/DNSServiceDiscovery.h";
PRODUCT_NAME = libsystem_dnssd_debug;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
+ SUPPORTS_TEXT_BASED_API = YES;
+ TAPI_VERIFY_MODE = Pedantic;
};
name = Debug;
};
@@ -3543,6 +3625,7 @@
"$(inherited)",
"__DARWIN_NON_CANCELABLE=1",
);
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GENERATE_PROFILING_CODE = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/";
INSTALL_PATH = /usr/lib/system;
@@ -3564,7 +3647,11 @@
"-llaunch",
"-lsystem_asl",
);
+ OTHER_TAPI_FLAGS = "-umbrella System -extra-public-header $(SRCROOT)/DNSServiceDiscovery.h";
PRODUCT_NAME = libsystem_dnssd_profile;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
+ SUPPORTS_TEXT_BASED_API = YES;
+ TAPI_VERIFY_MODE = Pedantic;
};
name = Debug;
};
@@ -3755,6 +3842,7 @@
INSTALLHDRS_SCRIPT_PHASE = YES;
INSTALL_PATH = /usr/local/lib/system;
PRODUCT_NAME = dns_sd;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
"SKIP_INSTALL[sdk=iphonesimulator*]" = YES;
};
name = Release;
@@ -3836,7 +3924,6 @@
);
GCC_PREPROCESSOR_DEFINITIONS = (
"__APPLE_USE_RFC_3542=1",
- "_DNS_SD_LIBDISPATCH=1",
"APPLE_OSX_mDNSResponder=1",
"__MigTypeCheck=1",
"mDNSResponderVersion=${MVERS}",
@@ -3899,7 +3986,6 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"__APPLE_USE_RFC_3542=1",
- "_DNS_SD_LIBDISPATCH=1",
"APPLE_OSX_mDNSResponder=1",
"__MigTypeCheck=1",
"mDNSResponderVersion=${MVERS}",
@@ -4644,7 +4730,6 @@
DEAD_CODE_STRIPPING = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"__APPLE_USE_RFC_3542=1",
- "_DNS_SD_LIBDISPATCH=1",
"APPLE_OSX_mDNSResponder=1",
"__MigTypeCheck=1",
"mDNSResponderVersion=${MVERS}",
@@ -4715,7 +4800,6 @@
"-lMobileGestalt",
);
"OTHER_LDFLAGS[sdk=macosx*][arch=*]" = (
- "-lAWACS",
"-weak_framework",
WebFilterDNS,
"-weak_framework",
@@ -4807,6 +4891,7 @@
"$(inherited)",
"__DARWIN_NON_CANCELABLE=1",
);
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/";
INSTALL_PATH = /usr/lib/system;
INTERPOSITION_SIM_SUFFIX = "";
@@ -4827,7 +4912,11 @@
"-llaunch",
"-lsystem_asl",
);
+ OTHER_TAPI_FLAGS = "-umbrella System -extra-public-header $(SRCROOT)/DNSServiceDiscovery.h";
PRODUCT_NAME = libsystem_dnssd_debug;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
+ SUPPORTS_TEXT_BASED_API = YES;
+ TAPI_VERIFY_MODE = Pedantic;
};
name = Release;
};
@@ -4841,6 +4930,7 @@
"$(inherited)",
"__DARWIN_NON_CANCELABLE=1",
);
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GENERATE_PROFILING_CODE = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/";
INSTALL_PATH = /usr/lib/system;
@@ -4862,7 +4952,11 @@
"-llaunch",
"-lsystem_asl",
);
+ OTHER_TAPI_FLAGS = "-umbrella System -extra-public-header $(SRCROOT)/DNSServiceDiscovery.h";
PRODUCT_NAME = libsystem_dnssd_profile;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
+ SUPPORTS_TEXT_BASED_API = YES;
+ TAPI_VERIFY_MODE = Pedantic;
};
name = Release;
};
@@ -4889,12 +4983,14 @@
"$(inherited)",
"__DARWIN_NON_CANCELABLE=1",
);
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/";
INSTALLHDRS_COPY_PHASE = YES;
INSTALLHDRS_SCRIPT_PHASE = YES;
INSTALL_PATH = /usr/lib/system;
INTERPOSITION_SIM_SUFFIX = "";
"INTERPOSITION_SIM_SUFFIX[sdk=iphonesimulator*]" = _sim;
+ IS_ZIPPERED = YES;
LINK_WITH_STANDARD_LIBRARIES = NO;
OTHER_LDFLAGS = (
"-Wl,-umbrella,System",
@@ -4911,7 +5007,11 @@
"-llaunch",
"-lsystem_asl",
);
+ OTHER_TAPI_FLAGS = "-umbrella System -extra-public-header $(SRCROOT)/DNSServiceDiscovery.h";
PRODUCT_NAME = libsystem_dnssd;
+ PUBLIC_HEADERS_FOLDER_PATH = /usr/include;
+ SUPPORTS_TEXT_BASED_API = YES;
+ TAPI_VERIFY_MODE = Pedantic;
};
name = Release;
};
diff --git a/mDNSResponder/mDNSMacOSX/uDNSPathEvalulation.c b/mDNSResponder/mDNSMacOSX/uDNSPathEvalulation.c
index 96d4a0db..e4744736 100644
--- a/mDNSResponder/mDNSMacOSX/uDNSPathEvalulation.c
+++ b/mDNSResponder/mDNSMacOSX/uDNSPathEvalulation.c
@@ -17,7 +17,13 @@
#include "mDNSMacOSX.h"
#include <libproc.h>
-#include <network/private.h>
+
+#if __has_include(<nw/private.h>)
+ #include <nw/private.h>
+#else
+ #include <network/private.h>
+#endif
+
#include "dns_sd_internal.h"
//Gets the DNSPolicy from NW PATH EVALUATOR