From a6b1d332b1d22fb47edd711a82e1857e42110b62 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 18 Jun 2020 13:07:18 +0200 Subject: mDNSResponder: Update to v878.200.35 The sources can be obtained via: https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-878.200.35.tar.gz Update #4010. --- mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h | 60 ++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 14 deletions(-) (limited to 'mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h') diff --git a/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h b/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h index 1962bb19..511aa3b6 100755 --- a/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h +++ b/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2002-2017 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. @@ -101,6 +101,10 @@ extern "C" { #define MaximumRDSize 264 #endif +#if !defined(MDNSRESPONDER_BTMM_SUPPORT) +#define MDNSRESPONDER_BTMM_SUPPORT 0 +#endif + // *************************************************************************** // Function scope indicators @@ -1335,6 +1339,13 @@ typedef struct McastResolver mDNSu32 timeout; // timeout value for questions } McastResolver; +enum { + Mortality_Mortal = 0, // This cache record can expire and get purged + Mortality_Immortal = 1, // Allow this record to remain in the cache indefinitely + Mortality_Ghost = 2 // An immortal record that has expired and can linger in the cache +}; +typedef mDNSu8 MortalityState; + // scoped values for DNSServer matching enum { @@ -1386,6 +1397,7 @@ typedef struct struct ResourceRecord_struct { mDNSu8 RecordType; // See kDNSRecordTypes enum. + MortalityState mortality; // Mortality of this resource record (See MortalityState enum) mDNSu16 rrtype; // See DNS_TypeValues enum. mDNSu16 rrclass; // See DNS_ClassValues enum. mDNSu32 rroriginalttl; // In seconds @@ -1399,7 +1411,6 @@ struct ResourceRecord_struct // ReconfirmAntecedents(), etc., use rdatahash as a pre-flight check to see // whether it's worth doing a full SameDomainName() call. If the rdatahash // is not a correct case-insensitive name hash, they'll get false negatives. - // Grouping pointers together at the end of the structure improves the memory layout efficiency mDNSInterfaceID InterfaceID; // Set if this RR is specific to one interface // For records received off the wire, InterfaceID is *always* set to the receiving interface @@ -1638,7 +1649,7 @@ struct CacheRecord_struct mDNSs32 TimeRcvd; // In platform time units mDNSs32 DelayDelivery; // Set if we want to defer delivery of this answer to local clients mDNSs32 NextRequiredQuery; // In platform time units - mDNSs32 LastUsed; // In platform time units + // Extra four bytes here (on 64bit) DNSQuestion *CRActiveQuestion; // Points to an active question referencing this answer. Can never point to a NewQuestion. mDNSs32 LastUnansweredTime; // In platform time units; last time we incremented UnansweredQueries mDNSu8 UnansweredQueries; // Number of times we've issued a query for this record without getting an answer @@ -1812,7 +1823,12 @@ typedef enum { DNSPUSH_ESTABLISHED = 4 } DNSPush_State; - +enum { + AllowExpired_None = 0, // Don't allow expired answers or mark answers immortal (behave normally) + AllowExpired_MakeAnswersImmortal = 1, // Any answers to this question get marked as immortal + AllowExpired_AllowExpiredAnswers = 2 // Allow already expired answers from the cache +}; +typedef mDNSu8 AllowExpiredState; #define HMAC_LEN 64 #define HMAC_IPAD 0x36 @@ -1899,13 +1915,26 @@ typedef enum { DNSSECValNotRequired = 0, DNSSECValRequired, DNSSECValInProgress, #define AWD_METRICS (USE_AWD && TARGET_OS_IOS) #if AWD_METRICS -typedef struct + +enum { - domainname * originalQName; // Name of original A/AAAA record if this question is for a CNAME record. - mDNSu32 querySendCount; // Number of queries that have been sent to DNS servers so far. - mDNSs32 firstQueryTime; // The time when the first query was sent to a DNS server. - mDNSBool answered; // Has this question been answered? + ExpiredAnswer_None = 0, // No expired answers used + ExpiredAnswer_Allowed = 1, // An expired answer is allowed by this request + ExpiredAnswer_AnsweredWithExpired = 2, // Question was answered with an expired answer + ExpiredAnswer_ExpiredAnswerChanged = 3, // Expired answer changed on refresh + + ExpiredAnswer_EnumCount +}; +typedef mDNSu8 ExpiredAnswerMetric; +typedef struct +{ + domainname * originalQName; // Name of original A/AAAA record if this question is for a CNAME record. + mDNSu32 querySendCount; // Number of queries that have been sent to DNS servers so far. + mDNSs32 firstQueryTime; // The time when the first query was sent to a DNS server. + mDNSBool answered; // Has this question been answered? + ExpiredAnswerMetric expiredAnswerState; // Expired answer state (see ExpiredAnswerMetric above) + } uDNSMetrics; #endif @@ -1977,6 +2006,7 @@ struct DNSQuestion_struct mDNSu16 noServerResponse; // At least one server did not respond. mDNSu16 triedAllServersOnce; // Tried all DNS servers once mDNSu8 unansweredQueries; // The number of unanswered queries to this server + AllowExpiredState allowExpired; // Allow expired answers state (see enum AllowExpired_None, etc. above) ZoneData *nta; // Used for getting zone data for private or LLQ query mDNSAddr servAddr; // Address and port learned from _dns-llq, _dns-llq-tls or _dns-query-tls SRV query @@ -2016,6 +2046,7 @@ struct DNSQuestion_struct mDNSIPPort TargetPort; // Must be set if Target is set mDNSOpaque16 TargetQID; // Must be set if Target is set domainname qname; + domainname firstExpiredQname; // first expired qname in request chain mDNSu16 qtype; mDNSu16 qclass; mDNSBool LongLived; // Set by client for calls to mDNS_StartQuery to indicate LLQs to unicast layer. @@ -2778,7 +2809,7 @@ extern void mDNS_SetupResourceRecord(AuthRecord *rr, RData *RDataStorage, mDN extern mDNSu32 deriveD2DFlagsFromAuthRecType(AuthRecType authRecType); extern mStatus mDNS_RegisterService (mDNS *const m, ServiceRecordSet *sr, const domainlabel *const name, const domainname *const type, const domainname *const domain, - const domainname *const host, mDNSIPPort port, const mDNSu8 txtinfo[], mDNSu16 txtlen, + const domainname *const host, mDNSIPPort port, RData *txtrdata, const mDNSu8 txtinfo[], mDNSu16 txtlen, AuthRecord *SubTypes, mDNSu32 NumSubTypes, mDNSInterfaceID InterfaceID, mDNSServiceCallback Callback, void *Context, mDNSu32 flags); extern mStatus mDNS_AddRecordToService(mDNS *const m, ServiceRecordSet *sr, ExtraResourceRecord *extra, RData *rdata, mDNSu32 ttl, mDNSu32 flags); @@ -2939,6 +2970,7 @@ extern char *GetRRDisplayString_rdb(const ResourceRecord *const rr, const RDataB #define RRDisplayString(m, rr) GetRRDisplayString_rdb(rr, &(rr)->rdata->u, (m)->MsgBuffer) #define ARDisplayString(m, rr) GetRRDisplayString_rdb(&(rr)->resrec, &(rr)->resrec.rdata->u, (m)->MsgBuffer) #define CRDisplayString(m, rr) GetRRDisplayString_rdb(&(rr)->resrec, &(rr)->resrec.rdata->u, (m)->MsgBuffer) +#define MortalityDisplayString(M) (M == Mortality_Mortal ? "mortal" : (M == Mortality_Immortal ? "immortal" : "ghost")) extern mDNSBool mDNSSameAddress(const mDNSAddr *ip1, const mDNSAddr *ip2); extern void IncrementLabelSuffix(domainlabel *name, mDNSBool RichText); extern mDNSBool mDNSv4AddrIsRFC1918(const mDNSv4Addr * const addr); // returns true for RFC1918 private addresses @@ -3601,17 +3633,17 @@ struct CompileTimeAssertionChecks_mDNS char sizecheck_AuthRecord [(sizeof(AuthRecord) <= 1208) ? 1 : -1]; char sizecheck_CacheRecord [(sizeof(CacheRecord) <= 232) ? 1 : -1]; char sizecheck_CacheGroup [(sizeof(CacheGroup) <= 232) ? 1 : -1]; - char sizecheck_DNSQuestion [(sizeof(DNSQuestion) <= 912) ? 1 : -1]; + char sizecheck_DNSQuestion [(sizeof(DNSQuestion) <= 1168) ? 1 : -1]; - char sizecheck_ZoneData [(sizeof(ZoneData) <= 1744) ? 1 : -1]; + char sizecheck_ZoneData [(sizeof(ZoneData) <= 2000) ? 1 : -1]; char sizecheck_NATTraversalInfo [(sizeof(NATTraversalInfo) <= 200) ? 1 : -1]; char sizecheck_HostnameInfo [(sizeof(HostnameInfo) <= 3050) ? 1 : -1]; char sizecheck_DNSServer [(sizeof(DNSServer) <= 330) ? 1 : -1]; - char sizecheck_NetworkInterfaceInfo[(sizeof(NetworkInterfaceInfo) <= 7376) ? 1 : -1]; + char sizecheck_NetworkInterfaceInfo[(sizeof(NetworkInterfaceInfo) <= 8400) ? 1 : -1]; char sizecheck_ServiceRecordSet [(sizeof(ServiceRecordSet) <= 5540) ? 1 : -1]; char sizecheck_DomainAuthInfo [(sizeof(DomainAuthInfo) <= 7888) ? 1 : -1]; #if APPLE_OSX_mDNSResponder - char sizecheck_ClientTunnel [(sizeof(ClientTunnel) <= 1256) ? 1 : -1]; + char sizecheck_ClientTunnel [(sizeof(ClientTunnel) <= 1512) ? 1 : -1]; #endif }; -- cgit v1.2.3