summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSMacOSX
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSMacOSX')
-rw-r--r--mDNSResponder/mDNSMacOSX/DNS64.c26
-rw-r--r--mDNSResponder/mDNSMacOSX/DNS64.h4
-rw-r--r--mDNSResponder/mDNSMacOSX/daemon.c6
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSMacOSX.c109
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSMacOSX.h7
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj8
6 files changed, 113 insertions, 47 deletions
diff --git a/mDNSResponder/mDNSMacOSX/DNS64.c b/mDNSResponder/mDNSMacOSX/DNS64.c
index 6fef38f8..e167cdde 100644
--- a/mDNSResponder/mDNSMacOSX/DNS64.c
+++ b/mDNSResponder/mDNSMacOSX/DNS64.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2017-2019 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.
@@ -54,12 +54,12 @@ check_compile_time(sizeof_field(DNS64, qnameStash) == kDNS64IPv4OnlyFQDNLength)
// Local Prototypes
//===========================================================================================================================
-mDNSlocal mStatus DNS64GetIPv6Addrs(mDNS *m, mDNSu16 inResGroupID, struct in6_addr **outAddrs, uint32_t *outAddrCount);
-mDNSlocal mStatus DNS64GetPrefixes(mDNS *m, mDNSu16 inResGroupID, nw_nat64_prefix_t **outPrefixes, uint32_t *outPrefixCount);
+mDNSlocal mStatus DNS64GetIPv6Addrs(mDNS *m, mDNSu32 inResGroupID, struct in6_addr **outAddrs, uint32_t *outAddrCount);
+mDNSlocal mStatus DNS64GetPrefixes(mDNS *m, mDNSu32 inResGroupID, nw_nat64_prefix_t **outPrefixes, uint32_t *outPrefixCount);
mDNSlocal mDNSBool DNS64GetReverseIPv6Addr(const domainname *inQName, struct in6_addr *outAddr);
mDNSlocal mDNSu32 DNS64IPv4OnlyFQDNHash(void);
mDNSlocal void DNS64RestartQuestion(mDNS *m, DNSQuestion *q, DNS64State newState);
-mDNSlocal mDNSBool DNS64TestIPv6Synthesis(mDNS *m, mDNSu16 inResGroupID, const mDNSv4Addr *inV4Addr);
+mDNSlocal mDNSBool DNS64TestIPv6Synthesis(mDNS *m, mDNSu32 inResGroupID, const mDNSv4Addr *inV4Addr);
//===========================================================================================================================
// DNS64StateMachine
@@ -174,10 +174,10 @@ mDNSexport mDNSBool DNS64StateMachine(mDNS *m, DNSQuestion *inQ, const ResourceR
}
//===========================================================================================================================
-// DNS64AnswerQuestion
+// DNS64AnswerCurrentQuestion
//===========================================================================================================================
-mDNSexport mStatus DNS64AnswerQuestion(mDNS *m, DNSQuestion *inQ, const ResourceRecord *inRR, QC_result inResult)
+mDNSexport mStatus DNS64AnswerCurrentQuestion(mDNS *m, const ResourceRecord *inRR, QC_result inResult)
{
mStatus err;
ResourceRecord newRR;
@@ -187,10 +187,11 @@ mDNSexport mStatus DNS64AnswerQuestion(mDNS *m, DNSQuestion *inQ, const Resource
uint32_t i;
struct in_addr v4Addr;
struct in6_addr synthV6;
+ DNSQuestion * const q = m->CurrentQuestion;
- require_action_quiet(inQ->qDNSServer, exit, err = mStatus_BadParamErr);
+ require_action_quiet(q->qDNSServer, exit, err = mStatus_BadParamErr);
- err = DNS64GetPrefixes(m, inQ->qDNSServer->resGroupID, &prefixes, &prefixCount);
+ err = DNS64GetPrefixes(m, q->qDNSServer->resGroupID, &prefixes, &prefixCount);
require_noerr_quiet(err, exit);
newRR = *inRR;
@@ -205,7 +206,8 @@ mDNSexport mStatus DNS64AnswerQuestion(mDNS *m, DNSQuestion *inQ, const Resource
if (nw_nat64_synthesize_v6(&prefixes[i], &v4Addr, &synthV6))
{
memcpy(rdata.u.ipv6.b, synthV6.s6_addr, 16);
- inQ->QuestionCallback(m, inQ, &newRR, inResult);
+ q->QuestionCallback(m, q, &newRR, inResult);
+ if (m->CurrentQuestion != q) break;
}
}
err = mStatus_NoError;
@@ -354,7 +356,7 @@ mDNSexport void DNS64RestartQuestions(mDNS *m)
((RR)->RecordType != kDNSRecordTypePacketNegative) && \
!(RR)->InterfaceID)
-mDNSlocal mStatus DNS64GetIPv6Addrs(mDNS *m, const mDNSu16 inResGroupID, struct in6_addr **outAddrs, uint32_t *outAddrCount)
+mDNSlocal mStatus DNS64GetIPv6Addrs(mDNS *m, const mDNSu32 inResGroupID, struct in6_addr **outAddrs, uint32_t *outAddrCount)
{
mStatus err;
const CacheGroup * cg;
@@ -403,7 +405,7 @@ exit:
// DNS64GetPrefixes
//===========================================================================================================================
-mDNSlocal mStatus DNS64GetPrefixes(mDNS *m, mDNSu16 inResGroupID, nw_nat64_prefix_t **outPrefixes, uint32_t *outPrefixCount)
+mDNSlocal mStatus DNS64GetPrefixes(mDNS *m, mDNSu32 inResGroupID, nw_nat64_prefix_t **outPrefixes, uint32_t *outPrefixCount)
{
mStatus err;
struct in6_addr * v6Addrs;
@@ -535,7 +537,7 @@ mDNSlocal void DNS64RestartQuestion(mDNS *const m, DNSQuestion *inQ, DNS64State
// DNS64TestIPv6Synthesis
//===========================================================================================================================
-mDNSlocal mDNSBool DNS64TestIPv6Synthesis(mDNS *m, mDNSu16 inResGroupID, const mDNSv4Addr *inV4Addr)
+mDNSlocal mDNSBool DNS64TestIPv6Synthesis(mDNS *m, mDNSu32 inResGroupID, const mDNSv4Addr *inV4Addr)
{
mStatus err;
nw_nat64_prefix_t * prefixes = NULL;
diff --git a/mDNSResponder/mDNSMacOSX/DNS64.h b/mDNSResponder/mDNSMacOSX/DNS64.h
index 80eb7feb..dc07dcc1 100644
--- a/mDNSResponder/mDNSMacOSX/DNS64.h
+++ b/mDNSResponder/mDNSMacOSX/DNS64.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Apple Inc. All rights reserved.
+ * Copyright (c) 2017-2019 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.
@@ -27,7 +27,7 @@ extern "C" {
#endif
mDNSexport mDNSBool DNS64StateMachine(mDNS *m, DNSQuestion *inQ, const ResourceRecord *inRR, QC_result inResult);
-mDNSexport mStatus DNS64AnswerQuestion(mDNS *m, DNSQuestion *inQ, const ResourceRecord *inRR, QC_result inResult);
+mDNSexport mStatus DNS64AnswerCurrentQuestion(mDNS *m, const ResourceRecord *inRR, QC_result inResult);
mDNSexport void DNS64HandleNewQuestion(mDNS *m, DNSQuestion *inQ);
mDNSexport void DNS64ResetState(DNSQuestion *inQ);
mDNSexport void DNS64RestartQuestions(mDNS *m);
diff --git a/mDNSResponder/mDNSMacOSX/daemon.c b/mDNSResponder/mDNSMacOSX/daemon.c
index 695e4114..233ffb99 100644
--- a/mDNSResponder/mDNSMacOSX/daemon.c
+++ b/mDNSResponder/mDNSMacOSX/daemon.c
@@ -517,13 +517,13 @@ mDNSexport void INFOCallback(void)
for (s = mDNSStorage.DNSServers; s; s = s->next)
{
NetworkInterfaceInfoOSX *ifx = IfindexToInterfaceInfoOSX(s->interface);
- LogMsgNoIdent("DNS Server %##s %s%s%#a:%d %d %s %d %d %s %s %s %s %s %s",
+ LogMsgNoIdent("DNS Server %##s %s%s%#a:%d %d %s %d %u %s %s %s %s %s %s",
s->domain.c, ifx ? ifx->ifinfo.ifname : "", ifx ? " " : "", &s->addr, mDNSVal16(s->port),
- s->penaltyTime ? s->penaltyTime - mDNS_TimeNow(&mDNSStorage) : 0, DNSScopeToString(s->scoped),
+ s->penaltyTime ? (s->penaltyTime - mDNS_TimeNow(&mDNSStorage)) : 0, DNSScopeToString(s->scopeType),
s->timeout, s->resGroupID,
s->req_A ? "v4" : "!v4",
s->req_AAAA ? "v6" : "!v6",
- s->cellIntf ? "cell" : "!cell",
+ s->isCell ? "cell" : "!cell",
s->isExpensive ? "exp" : "!exp",
s->isCLAT46 ? "clat46" : "!clat46",
s->DNSSECAware ? "DNSSECAware" : "!DNSSECAware");
diff --git a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
index b7e53032..126edd03 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
+++ b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
@@ -93,7 +93,6 @@
// 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 MDNSRESPONDER_BTMM_SUPPORT
#include <AWACS.h>
@@ -3626,7 +3625,6 @@ mDNSlocal NetworkInterfaceInfoOSX *AddInterfaceToList(struct ifaddrs *ifa, mDNSs
i->isExpensive = (eflags & IFEF_EXPENSIVE) ? mDNStrue: mDNSfalse;
i->isAWDL = (eflags & IFEF_AWDL) ? mDNStrue: mDNSfalse;
- i->isCLAT46 = (eflags & IFEF_CLAT46) ? mDNStrue: mDNSfalse;
if (eflags & IFEF_AWDL)
{
// Set SupportsUnicastMDNSResponse false for the AWDL interface since unicast reserves
@@ -5410,7 +5408,7 @@ mDNSlocal void ConfigSearchDomains(dns_resolver_t *resolver, mDNSInterfaceID int
{
if (MakeDomainNameFromDNSNameString(&d, resolver->search[j]) != NULL)
{
- static char interface_buf[32];
+ char interface_buf[32];
mDNS_snprintf(interface_buf, sizeof(interface_buf), "for interface %s", InterfaceNameForID(&mDNSStorage, interfaceId));
LogInfo("ConfigSearchDomains: (%s) configuring search domain %s %s (generation= %llu)", scopeString,
resolver->search[j], (interfaceId == mDNSInterface_Any) ? "" : interface_buf, generation);
@@ -5476,7 +5474,24 @@ mDNSlocal void ConfigNonUnicastResolver(dns_resolver_t *r)
}
}
-mDNSlocal void ConfigDNSServers(dns_resolver_t *r, mDNSInterfaceID interface, mDNSu32 scope, mDNSu16 resGroupID)
+#if !defined(NWI_IFSTATE_FLAGS_HAS_CLAT46)
+#define NWI_IFSTATE_FLAGS_HAS_CLAT46 0x0040
+#endif
+
+mDNSlocal mDNSBool NWIInterfaceHasCLAT46(nwi_state_t state, uint32_t ifIndex)
+{
+ char ifNameBuf[IFNAMSIZ + 1];
+ const char *ifNamePtr = if_indextoname(ifIndex, ifNameBuf);
+ if (!ifNamePtr) return(mDNSfalse);
+
+ const nwi_ifstate_t ifState = nwi_state_get_ifstate(state, ifNamePtr);
+ if (!ifState) return(mDNSfalse);
+
+ const nwi_ifstate_flags flags = nwi_ifstate_get_flags(ifState);
+ return((flags & NWI_IFSTATE_FLAGS_HAS_CLAT46) ? mDNStrue : mDNSfalse);
+}
+
+mDNSlocal void ConfigDNSServers(dns_resolver_t *r, mDNSInterfaceID interface, mDNSu32 scope, mDNSu32 resGroupID)
{
int n;
domainname d;
@@ -5509,7 +5524,15 @@ mDNSlocal void ConfigDNSServers(dns_resolver_t *r, mDNSInterfaceID interface, mD
reqAAAA = (r->flags & DNS_RESOLVER_FLAGS_REQUEST_AAAA_RECORDS ? mDNStrue : mDNSfalse);
info = IfindexToInterfaceInfoOSX(interface);
isExpensive = (info && info->isExpensive) ? mDNStrue : mDNSfalse;
- isCLAT46 = (info && info->isCLAT46) ? mDNStrue : mDNSfalse;
+ if (mDNSStorage.p->NWIState && interface)
+ {
+ const uint32_t ifIndex = (uint32_t)((uintptr_t)interface);
+ isCLAT46 = NWIInterfaceHasCLAT46(mDNSStorage.p->NWIState, ifIndex);
+ }
+ else
+ {
+ isCLAT46 = mDNSfalse;
+ }
for (n = 0; n < r->n_nameserver; n++)
{
@@ -5553,7 +5576,7 @@ mDNSlocal void ConfigDNSServers(dns_resolver_t *r, mDNSInterfaceID interface, mD
// "service_specific_resolver" has entries that should be used for Service scoped question i.e., questions that specify
// a service identifier (q->ServiceID)
//
-mDNSlocal void ConfigResolvers(dns_config_t *config, mDNSu32 scope, mDNSBool setsearch, mDNSBool setservers, MD5_CTX *sdc, mDNSu16 resGroupID)
+mDNSlocal void ConfigResolvers(dns_config_t *config, mDNSu32 scope, mDNSBool setsearch, mDNSBool setservers, MD5_CTX *sdc)
{
int i;
dns_resolver_t **resolver;
@@ -5609,12 +5632,7 @@ mDNSlocal void ConfigResolvers(dns_config_t *config, mDNSu32 scope, mDNSBool set
}
else
{
- // Each scoped resolver gets its own ID (i.e., they are in their own group) so that responses from the
- // scoped resolver are not used by other non-scoped or scoped resolvers.
- if (scope != kScopeNone)
- resGroupID++;
-
- ConfigDNSServers(r, interface, scope, resGroupID);
+ ConfigDNSServers(r, interface, scope, mDNS_GetNextResolverGroupID());
}
}
}
@@ -5910,7 +5928,6 @@ mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNSBool setservers, mDNSBool setse
{
mDNS *const m = &mDNSStorage;
MD5_CTX sdc; // search domain context
- static mDNSu16 resolverGroupID = 0;
// Need to set these here because we need to do this even if SCDynamicStoreCreate() or SCDynamicStoreCopyValue() below don't succeed
if (fqdn ) fqdn->c[0] = 0;
@@ -6011,20 +6028,9 @@ mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNSBool setservers, mDNSBool setse
SetupActiveDirectoryDomain(config);
#endif
- // With scoped DNS, we don't want to answer a non-scoped question using a scoped cache entry
- // and vice-versa. As we compare resolverGroupID for matching cache entry with question, we need
- // to make sure that they don't match. We ensure this by always bumping up resolverGroupID between
- // the two calls to ConfigResolvers DNSServers for scoped and non-scoped can never have the
- // same resolverGroupID.
- //
- // All non-scoped resolvers use the same resolverGroupID i.e, we treat them all equally.
- ConfigResolvers(config, kScopeNone, setsearch, setservers, &sdc, ++resolverGroupID);
- resolverGroupID += config->n_resolver;
-
- ConfigResolvers(config, kScopeInterfaceID, setsearch, setservers, &sdc, resolverGroupID);
- resolverGroupID += config->n_scoped_resolver;
-
- ConfigResolvers(config, kScopeServiceID, setsearch, setservers, &sdc, resolverGroupID);
+ ConfigResolvers(config, kScopeNone, setsearch, setservers, &sdc);
+ ConfigResolvers(config, kScopeInterfaceID, setsearch, setservers, &sdc);
+ ConfigResolvers(config, kScopeServiceID, setsearch, setservers, &sdc);
// Acking provides a hint to other processes that the current DNS configuration has completed
// its update. When configd receives the ack, it publishes a notification.
@@ -9532,6 +9538,36 @@ mDNSlocal void RegisterLocalOnlyAAAARecord(const domainname *const name, const m
}
#endif
+mDNSlocal void NWIEventHandler(void)
+{
+ mDNS * const m = &mDNSStorage;
+ nwi_state_t newState = nwi_state_copy();
+
+ KQueueLock();
+ const nwi_state_t oldState = m->p->NWIState;
+ m->p->NWIState = newState;
+ if (m->p->NWIState)
+ {
+ uint32_t lastIfIndex = 0;
+ mDNSBool lastCLAT46 = mDNSfalse;
+ for (DNSServer *server = m->DNSServers; server; server = server->next)
+ {
+ const uint32_t ifIndex = (uint32_t)((uintptr_t)server->interface);
+ if (ifIndex == 0) continue;
+ if (ifIndex == lastIfIndex)
+ {
+ server->isCLAT46 = lastCLAT46;
+ continue;
+ }
+ server->isCLAT46 = NWIInterfaceHasCLAT46(m->p->NWIState, ifIndex);
+ lastIfIndex = ifIndex;
+ lastCLAT46 = server->isCLAT46;
+ }
+ }
+ KQueueUnlock("NWIEventHandler");
+ if (oldState) nwi_state_release(oldState);
+}
+
mDNSlocal mStatus mDNSPlatformInit_setup(mDNS *const m)
{
mStatus err;
@@ -9672,6 +9708,18 @@ mDNSlocal mStatus mDNSPlatformInit_setup(mDNS *const m)
err = WatchForSysEvents(m);
if (err) { LogMsg("mDNSPlatformInit_setup: WatchForSysEvents failed %d", err); return(err); }
+ m->p->NWIState = nwi_state_copy();
+ uint32_t status = notify_register_dispatch(nwi_state_get_notify_key(), &m->p->NWINotifyToken, dispatch_get_main_queue(),
+ ^(__unused int token) { NWIEventHandler(); });
+ if (status == NOTIFY_STATUS_OK)
+ {
+ m->p->NWINotifyRegistered = mDNStrue;
+ }
+ else
+ {
+ LogMsg("mDNSPlatformInit_setup: notify_register_dispatch failed %u", status);
+ }
+
mDNSs32 utc = mDNSPlatformUTC();
m->SystemWakeOnLANEnabled = SystemWakeForNetworkAccess();
myGetIfAddrs(1);
@@ -9868,7 +9916,11 @@ mDNSexport void mDNSPlatformClose(mDNS *const m)
}
if (m->p->SysEventNotifier >= 0) { close(m->p->SysEventNotifier); m->p->SysEventNotifier = -1; }
-
+ if (m->p->NWINotifyRegistered)
+ {
+ notify_cancel(m->p->NWINotifyToken);
+ m->p->NWINotifyRegistered = mDNSfalse;
+ }
terminateD2DPlugins();
mDNSs32 utc = mDNSPlatformUTC();
@@ -9981,6 +10033,7 @@ mDNSexport void mDNSPlatformQsort ( void *base, int nel, int width, in
}
#if !(APPLE_OSX_mDNSResponder && MACOSX_MDNS_MALLOC_DEBUGGING)
mDNSexport void * mDNSPlatformMemAllocate(mDNSu32 len) { return(mallocL("mDNSPlatformMemAllocate", len)); }
+mDNSexport void * mDNSPlatformMemAllocateClear(mDNSu32 len) { return(callocL("mDNSPlatformMemAllocateClear", len)); }
#endif
mDNSexport void mDNSPlatformMemFree (void *mem) { freeL("mDNSPlatformMemFree", mem); }
diff --git a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h
index 82de4331..23368183 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h
+++ b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.h
@@ -28,7 +28,8 @@ extern "C" {
#include <IOKit/pwr_mgt/IOPMLibPrivate.h>
#include <sys/socket.h>
#include <netinet/in.h>
-#include "mDNSEmbeddedAPI.h" // for domain name structure
+#include <network_information.h> // for nwi_state
+#include "mDNSEmbeddedAPI.h" // for domain name structure
#include <net/if.h>
#include <os/log.h>
@@ -154,7 +155,6 @@ struct NetworkInterfaceInfoOSX_struct
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.
- mDNSBool isCLAT46; // True if this interface has the IFEF_CLAT46 flag set.
#ifdef MDNSRESPONDER_USES_LIB_DISPATCH_AS_PRIMARY_EVENT_LOOP_MECHANISM
dispatch_source_t BPF_source;
#else
@@ -185,6 +185,9 @@ struct mDNS_PlatformSupport_struct
SCDynamicStoreRef Store;
CFRunLoopSourceRef StoreRLS;
CFRunLoopSourceRef PMRLS;
+ nwi_state_t NWIState;
+ int NWINotifyToken;
+ mDNSBool NWINotifyRegistered;
int SysEventNotifier;
KQueueEntry SysEventKQueue;
IONotificationPortRef PowerPortRef;
diff --git a/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj b/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
index 8067d931..5df1073d 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
+++ b/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
@@ -347,6 +347,8 @@
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 */; };
+ BDE5BCCA226D7181009C723C /* DNSCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = BDE5BCC9226D7181009C723C /* DNSCommon.h */; };
+ BDE5BCCC226D7198009C723C /* uDNS.h in Headers */ = {isa = PBXBuildFile; fileRef = BDE5BCCB226D7197009C723C /* uDNS.h */; };
BDF8BB902208E2A800419B62 /* mDNSResponder.plist in Copy BATS test plist */ = {isa = PBXBuildFile; fileRef = BDF8BB8F2208E26E00419B62 /* mDNSResponder.plist */; };
D284BE540ADD80740027CCDF /* dnssd_ipc.h in Headers */ = {isa = PBXBuildFile; fileRef = F5E11B5B04A28126019798ED /* dnssd_ipc.h */; };
D284BE580ADD80740027CCDF /* mDNS.c in Sources */ = {isa = PBXBuildFile; fileRef = 6575FBE9022EAF5A00000109 /* mDNS.c */; };
@@ -1018,6 +1020,8 @@
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>"; };
+ BDE5BCC9226D7181009C723C /* DNSCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DNSCommon.h; path = ../mDNSCore/DNSCommon.h; sourceTree = "<group>"; };
+ BDE5BCCB226D7197009C723C /* uDNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = uDNS.h; path = ../mDNSCore/uDNS.h; sourceTree = "<group>"; };
BDF8BB8F2208E26E00419B62 /* mDNSResponder.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = mDNSResponder.plist; sourceTree = "<group>"; };
D284BE730ADD80740027CCDF /* mDNSResponder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mDNSResponder; sourceTree = BUILT_PRODUCTS_DIR; };
D284BEB00ADD80920027CCDF /* dns-sd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "dns-sd"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1347,6 +1351,7 @@
84F4C08F188F04CF00D1E1DE /* dns_services.h */,
848DA5D516547F7200D2E8B4 /* dns_xpc.h */,
7F18A9F60587CEF6001880B3 /* DNSCommon.c */,
+ BDE5BCC9226D7181009C723C /* DNSCommon.h */,
7F461DB5062DBF2900672BF3 /* DNSDigest.c */,
FF13FFEA0A5DA44A00897C81 /* dnsextd_lexer.l */,
FF13FFEC0A5DA45500897C81 /* dnsextd_parser.y */,
@@ -1398,6 +1403,7 @@
FFCB6D73075D539900B8AF62 /* PlatformCommon.c */,
BD03E88C1AD31278005E8A81 /* SymptomReporter.c */,
7F18A9F70587CEF6001880B3 /* uDNS.c */,
+ BDE5BCCB226D7197009C723C /* uDNS.h */,
216D9ACD1720C9F5008066E1 /* uDNSPathEvalulation.c */,
F525E72804AA167501F1CF4D /* uds_daemon.c */,
4A2E69DD0F5475A3004A87B0 /* uds_daemon.h */,
@@ -1835,7 +1841,9 @@
2ECC11A60C4FEC3800CB1885 /* helpermsg-types.h in Headers */,
21A57F4E145B2AE100939099 /* CryptoAlg.h in Headers */,
21A57F55145B2B1400939099 /* CryptoSupport.h in Headers */,
+ BDE5BCCA226D7181009C723C /* DNSCommon.h in Headers */,
2124FA2C1471E98C0021D7BB /* nsec.h in Headers */,
+ BDE5BCCC226D7198009C723C /* uDNS.h in Headers */,
2124FA301471E9B50021D7BB /* dnssec.h in Headers */,
BD691B2B1ED2F4AB00E6F317 /* DNS64.h in Headers */,
218E8E53156D8C0300720DA0 /* dnsproxy.h in Headers */,