From 7d33d36d73d2e902b107fb597e84e44ab11274a9 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 19 Sep 2018 08:54:52 +0200 Subject: mDNSResponder: Update to v765.30.11 The sources can be obtained via: https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-765.30.11.tar.gz Update #3522. --- mDNSResponder/Makefile | 2 +- mDNSResponder/mDNSCore/dnsproxy.c | 21 +++--- mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h | 2 +- mDNSResponder/mDNSCore/uDNS.c | 5 +- mDNSResponder/mDNSMacOSX/Metrics.m | 123 ++++++++++--------------------- mDNSResponder/mDNSMacOSX/mDNSMacOSX.c | 32 ++++---- mDNSResponder/mDNSPosix/Responder.c | 4 +- mDNSResponder/mDNSPosix/mDNSPosix.c | 36 +++++++-- mDNSResponder/mDNSPosix/mDNSUNP.c | 4 +- mDNSResponder/mDNSShared/dns_sd.h | 2 +- mDNSResponder/mDNSWindows/mDNSWin32.c | 2 +- 11 files changed, 112 insertions(+), 121 deletions(-) (limited to 'mDNSResponder') diff --git a/mDNSResponder/Makefile b/mDNSResponder/Makefile index dbf604af..ddf12f73 100644 --- a/mDNSResponder/Makefile +++ b/mDNSResponder/Makefile @@ -16,7 +16,7 @@ include $(MAKEFILEPATH)/pb_makefiles/platform.make -MVERS = "mDNSResponder-765.20.4" +MVERS = "mDNSResponder-765.30.11" DDNSWRITECONFIG = "$(DSTROOT)/Library/Application Support/Bonjour/ddnswriteconfig" VER = diff --git a/mDNSResponder/mDNSCore/dnsproxy.c b/mDNSResponder/mDNSCore/dnsproxy.c index 05b70dd9..5376d3c8 100644 --- a/mDNSResponder/mDNSCore/dnsproxy.c +++ b/mDNSResponder/mDNSCore/dnsproxy.c @@ -195,6 +195,8 @@ mDNSlocal mDNSu8 *AddResourceRecords(mDNS *const m, DNSProxyClient *pc, mDNSu8 * CacheRecord *soa = mDNSNULL; CacheRecord *cname = mDNSNULL; mDNSu8 *limit; + domainname tempQName; + mDNSu32 tempQNameHash; *error = mStatus_NoError; *prevptr = mDNSNULL; @@ -222,20 +224,17 @@ mDNSlocal mDNSu8 *AddResourceRecords(mDNS *const m, DNSProxyClient *pc, mDNSu8 * } LogInfo("AddResourceRecords: Limit is %d", limit - m->omsg.data); - if (!SameDomainName(&pc->qname, &pc->q.qname)) - { - AssignDomainName(&pc->q.qname, &pc->qname); - pc->q.qnamehash = DomainNameHashValue(&pc->q.qname); - } + AssignDomainName(&tempQName, &pc->qname); + tempQNameHash = DomainNameHashValue(&tempQName); again: nsec = soa = cname = mDNSNULL; - slot = HashSlot(&pc->q.qname); - - cg = CacheGroupForName(m, slot, pc->q.qnamehash, &pc->q.qname); + slot = HashSlot(&tempQName); + + cg = CacheGroupForName(m, slot, tempQNameHash, &tempQName); if (!cg) { - LogInfo("AddResourceRecords: CacheGroup not found"); + LogInfo("AddResourceRecords: CacheGroup not found for %##s", tempQName.c); *error = mStatus_NoSuchRecord; return mDNSNULL; } @@ -344,8 +343,8 @@ again: } if (cname) { - AssignDomainName(&pc->q.qname, &cname->resrec.rdata->u.name); - pc->q.qnamehash = DomainNameHashValue(&pc->q.qname); + AssignDomainName(&tempQName, &cname->resrec.rdata->u.name); + tempQNameHash = DomainNameHashValue(&tempQName); goto again; } if (!ptr) diff --git a/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h b/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h index 3fd654eb..248b848f 100755 --- a/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h +++ b/mDNSResponder/mDNSCore/mDNSEmbeddedAPI.h @@ -3376,7 +3376,7 @@ extern mDNSu8 *DNSProxySetAttributes(DNSQuestion *q, DNSMessageHeader *h, DNSMes #if APPLE_OSX_mDNSResponder extern void mDNSPlatformGetDNSRoutePolicy(mDNS *const m, DNSQuestion *q, mDNSBool *isBlocked); #endif -extern void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q); +extern void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q); extern mDNSs32 mDNSPlatformGetPID(void); extern mDNSBool mDNSValidKeepAliveRecord(AuthRecord *rr); diff --git a/mDNSResponder/mDNSCore/uDNS.c b/mDNSResponder/mDNSCore/uDNS.c index 694c745c..5848e1e1 100755 --- a/mDNSResponder/mDNSCore/uDNS.c +++ b/mDNSResponder/mDNSCore/uDNS.c @@ -4737,7 +4737,10 @@ mDNSexport void uDNS_CheckCurrentQuestion(mDNS *const m) { q->LocalSocket = mDNSPlatformUDPSocket(m, zeroIPPort); if (q->LocalSocket) - mDNSPlatformSetSocktOpt(q->LocalSocket, mDNSTransport_UDP, q->qDNSServer->addr.type, q); + { + mDNSPlatformSetSocktOpt(q->LocalSocket, mDNSTransport_UDP, mDNSAddrType_IPv4, q); + mDNSPlatformSetSocktOpt(q->LocalSocket, mDNSTransport_UDP, mDNSAddrType_IPv6, q); + } } if (!q->LocalSocket) err = mStatus_NoMemoryErr; // If failed to make socket (should be very rare), we'll try again next time else diff --git a/mDNSResponder/mDNSMacOSX/Metrics.m b/mDNSResponder/mDNSMacOSX/Metrics.m index 8dae3f5f..bfff58e4 100644 --- a/mDNSResponder/mDNSMacOSX/Metrics.m +++ b/mDNSResponder/mDNSMacOSX/Metrics.m @@ -99,16 +99,14 @@ static const Domain kQueryStatsDomains[] = { "apple.com.", (domainname *)"\x5" "apple" "\x3" "com", 2 }, { "icloud.com.", (domainname *)"\x6" "icloud" "\x3" "com", 2 }, { "mzstatic.com.", (domainname *)"\x8" "mzstatic" "\x3" "com", 2 }, - { "me.com.", (domainname *)"\x2" "me" "\x3" "com", 2 }, { "google.com.", (domainname *)"\x6" "google" "\x3" "com", 2 }, - { "youtube.com.", (domainname *)"\x7" "youtube" "\x3" "com", 2 }, { "facebook.com.", (domainname *)"\x8" "facebook" "\x3" "com", 2 }, { "baidu.com.", (domainname *)"\x5" "baidu" "\x3" "com", 2 }, { "yahoo.com.", (domainname *)"\x5" "yahoo" "\x3" "com", 2 }, { "qq.com.", (domainname *)"\x2" "qq" "\x3" "com", 2 }, }; -check_compile_time(countof(kQueryStatsDomains) == 11); +check_compile_time(countof(kQueryStatsDomains) == 9); // DNSHist contains the per domain per network type histogram data that goes in a DNSDomainStats protobuf message. See // MDNSResponder.proto update. @@ -168,7 +166,6 @@ check_compile_time(countof_field(DNSHist, negResponseLatencyBins) == (count typedef struct { - DNSHist * histAny; // Histogram data for queries of any resource record type. DNSHist * histA; // Histogram data for queries for A resource records. DNSHist * histAAAA; // Histogram data for queries for AAAA resource records. @@ -313,7 +310,7 @@ static AWDServerConnection * gAWDServerConnection = nil; mDNSlocal mStatus DNSDomainStatsCreate(const Domain *inDomain, DNSDomainStats **outStats); mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats); mDNSlocal void DNSDomainStatsFreeList(DNSDomainStats *inList); -mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, uint16_t inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell); +mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell); mDNSlocal mStatus ResolveStatsDomainCreate(const Domain *inDomain, ResolveStatsDomain **outDomain); mDNSlocal void ResolveStatsDomainFree(ResolveStatsDomain *inDomain); @@ -362,18 +359,10 @@ mDNSlocal void ValidateDNSStatsDomains(void); mStatus MetricsInit(void) { - mStatus err; - #if (METRICS_VALIDATE_DNS_STATS_DOMAINS) ValidateDNSStatsDomains(); #endif - err = CreateDomainStatsList(&gDomainStatsList); - require_noerr_quiet(err, exit); - - err = CreateResolveStatsList(&gResolveStatsList); - require_noerr_quiet(err, exit); - @autoreleasepool { gAWDServerConnection = [[AWDServerConnectionSoft alloc] @@ -395,7 +384,7 @@ mStatus MetricsInit(void) SubmitAWDMetric(inMetricID); } forIdentifier: (UInt32)AWDMetricId_MDNSResponder_ResolveStats]; - + [gAWDServerConnection registerQueriableMetricCallback: ^(UInt32 inMetricID) { @@ -408,8 +397,14 @@ mStatus MetricsInit(void) LogMsg("MetricsInit: failed to create AWD server connection."); } } -exit: - return (err); + + if( gAWDServerConnection ) + { + CreateDomainStatsList(&gDomainStatsList); + CreateResolveStatsList(&gResolveStatsList); + } + + return (mStatus_NoError); } //=========================================================================================================================== @@ -425,6 +420,9 @@ mDNSexport void MetricsUpdateUDNSQueryStats(const domainname *inQueryName, mDNSu int skipCount; int skipCountLast = -1; + require_quiet(gAWDServerConnection, exit); + require_quiet((inType == kDNSType_A) || (inType == kDNSType_AAAA), exit); + queryLabelCount = CountLabels(inQueryName); for (stats = gDomainStatsList; stats; stats = stats->next) @@ -455,6 +453,8 @@ mDNSexport void MetricsUpdateUDNSQueryStats(const domainname *inQueryName, mDNSu } } +exit: + return; } //=========================================================================================================================== @@ -473,6 +473,7 @@ mDNSexport void MetricsUpdateUDNSResolveStats(const domainname *inQueryName, con const domainname * queryParentDomain; Response response; + require_quiet(gAWDServerConnection, exit); require_quiet((inRR->rrtype == kDNSType_A) || (inRR->rrtype == kDNSType_AAAA), exit); require_quiet(inRR->rDNSServer, exit); @@ -536,6 +537,7 @@ mDNSexport void LogMetrics(void) int hostnameObjCount = 0; int addrObjCount = 0; + LogMsgNoIdent("gAWDServerConnection %p", gAWDServerConnection); LogMsgNoIdent("---- DNS query stats by domain -----"); for (stats = gDomainStatsList; stats; stats = stats->next) @@ -657,7 +659,6 @@ mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats) { if (inStats->nonCellular) { - ForgetMem(&inStats->nonCellular->histAny); ForgetMem(&inStats->nonCellular->histA); ForgetMem(&inStats->nonCellular->histAAAA); free(inStats->nonCellular); @@ -665,7 +666,6 @@ mDNSlocal void DNSDomainStatsFree(DNSDomainStats *inStats) } if (inStats->cellular) { - ForgetMem(&inStats->cellular->histAny); ForgetMem(&inStats->cellular->histA); ForgetMem(&inStats->cellular->histAAAA); free(inStats->cellular); @@ -693,51 +693,31 @@ mDNSlocal void DNSDomainStatsFreeList(DNSDomainStats *inList) // DNSDomainStatsUpdate //=========================================================================================================================== -mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, uint16_t inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell) +mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, int inType, const ResourceRecord *inRR, mDNSu32 inQuerySendCount, mDNSu32 inLatencyMs, mDNSBool inForCell) { mStatus err; - DNSHistSet ** p; DNSHistSet * set; - DNSHist * histAny; + DNSHistSet ** pSet; DNSHist * hist; + DNSHist ** pHist; int i; require_action_quiet(inRR || (inQuerySendCount > 0), exit, err = mStatus_NoError); + require_action_quiet((inType == kDNSType_A) || (inType == kDNSType_AAAA), exit, err = mStatus_NoError); - p = inForCell ? &inStats->cellular : &inStats->nonCellular; - if ((set = *p) == NULL) + pSet = inForCell ? &inStats->cellular : &inStats->nonCellular; + if ((set = *pSet) == NULL) { set = (DNSHistSet *)calloc(1, sizeof(*set)); require_action_quiet(set, exit, err = mStatus_NoMemoryErr); - *p = set; + *pSet = set; } - if ((histAny = set->histAny) == NULL) + pHist = (inType == kDNSType_A) ? &set->histA : &set->histAAAA; + if ((hist = *pHist) == NULL) { - histAny = (DNSHist *)calloc(1, sizeof(*histAny)); - require_action_quiet(histAny, exit, err = mStatus_NoMemoryErr); - set->histAny = histAny; - } - if (inType == kDNSType_A) - { - if ((hist = set->histA) == NULL) - { - hist = (DNSHist *)calloc(1, sizeof(*hist)); - require_action_quiet(hist, exit, err = mStatus_NoMemoryErr); - set->histA = hist; - } - } - else if (inType == kDNSType_AAAA) - { - if ((hist = set->histAAAA) == NULL) - { - hist = (DNSHist *)calloc(1, sizeof(*hist)); - require_action_quiet(hist, exit, err = mStatus_NoMemoryErr); - set->histAAAA = hist; - } - } - else - { - hist = NULL; + hist = (DNSHist *)calloc(1, sizeof(*hist)); + require_action_quiet(hist, exit, err = mStatus_NoMemoryErr); + *pHist = hist; } if (inRR) @@ -748,35 +728,23 @@ mDNSlocal mStatus DNSDomainStatsUpdate(DNSDomainStats *inStats, uint16_t inType, i = Min(inQuerySendCount, kQueryStatsMaxQuerySendCount); - sendCountBins = isNegative ? histAny->negAnsweredQuerySendCountBins : histAny->answeredQuerySendCountBins; + sendCountBins = isNegative ? hist->negAnsweredQuerySendCountBins : hist->answeredQuerySendCountBins; increment_saturate(sendCountBins[i], UINT16_MAX); - if (hist) - { - sendCountBins = isNegative ? hist->negAnsweredQuerySendCountBins : hist->answeredQuerySendCountBins; - increment_saturate(sendCountBins[i], UINT16_MAX); - } if (inQuerySendCount > 0) { for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {} - latencyBins = isNegative ? histAny->negResponseLatencyBins : histAny->responseLatencyBins; + latencyBins = isNegative ? hist->negResponseLatencyBins : hist->responseLatencyBins; increment_saturate(latencyBins[i], UINT16_MAX); - if (hist) - { - latencyBins = isNegative ? hist->negResponseLatencyBins : hist->responseLatencyBins; - increment_saturate(latencyBins[i], UINT16_MAX); - } } } else { i = Min(inQuerySendCount, kQueryStatsMaxQuerySendCount); - increment_saturate(histAny->unansweredQuerySendCountBins[i], UINT16_MAX); - if (hist) increment_saturate(hist->unansweredQuerySendCountBins[i], UINT16_MAX); + increment_saturate(hist->unansweredQuerySendCountBins[i], UINT16_MAX); for (i = 0; (i < (int)countof(kResponseLatencyMsLimits)) && (inLatencyMs >= kResponseLatencyMsLimits[i]); ++i) {} - increment_saturate(histAny->unansweredQueryDurationBins[i], UINT16_MAX); - if (hist) increment_saturate(hist->unansweredQueryDurationBins[i], UINT16_MAX); + increment_saturate(hist->unansweredQueryDurationBins[i], UINT16_MAX); } err = mStatus_NoError; @@ -1505,7 +1473,7 @@ mDNSlocal void FreeResolveStatsServerList(ResolveStatsDNSServer *inList) mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID) { - mStatus err = mStatus_NoError; + mStatus err; switch (inMetricID) { @@ -1518,11 +1486,12 @@ mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID) break; case AWDMetricId_MDNSResponder_ServicesStats: - [AWDMetricManagerSoft postMetricWithId:AWDMetricId_MDNSResponder_ServicesStats integerValue:max_num_regservices]; + [AWDMetricManagerSoft postMetricWithId:AWDMetricId_MDNSResponder_ServicesStats unsignedIntegerValue:max_num_regservices]; KQueueLock(&mDNSStorage); // reset the no of max services since we want to collect the max no of services registered per AWD submission period max_num_regservices = curr_num_regservices; KQueueUnlock(&mDNSStorage, "SubmitAWDSimpleMetricServiceStats"); + err = mStatus_NoError; break; default: @@ -1530,8 +1499,7 @@ mDNSlocal mStatus SubmitAWDMetric(UInt32 inMetricID) break; } - if (err) - LogMsg("SubmitAWDMetric for metric ID 0x%08X failed with error %d", inMetricID, err); + if (err) LogMsg("SubmitAWDMetric for metric ID 0x%08X failed with error %d", inMetricID, err); return (err); } @@ -1552,9 +1520,8 @@ mDNSlocal mStatus SubmitAWDMetricQueryStats(void) err = CreateDomainStatsList(&newDomainStatsList); require_noerr_quiet(err, exit); - domainStatsList = gDomainStatsList; - KQueueLock(&mDNSStorage); + domainStatsList = gDomainStatsList; gDomainStatsList = newDomainStatsList; KQueueUnlock(&mDNSStorage, "SubmitAWDMetricQueryStats"); @@ -1611,10 +1578,9 @@ mDNSlocal mStatus SubmitAWDMetricResolveStats(void) err = CreateResolveStatsList(&newResolveStatsList); require_noerr_quiet(err, exit); + KQueueLock(&mDNSStorage); domainList = gResolveStatsList; serverList = gResolveStatsServerList; - - KQueueLock(&mDNSStorage); gResolveStatsList = newResolveStatsList; gResolveStatsServerList = NULL; gResolveStatsNextServerID = 0; @@ -1762,14 +1728,6 @@ mDNSlocal mStatus AddAWDDNSDomainStats(AWDMDNSResponderDNSStatistics *inMetric, mStatus err; AWDDNSDomainStats * awdStats; - if (inSet->histAny) - { - err = CreateAWDDNSDomainStats(inSet->histAny, inDomain, inForCell, AWDDNSDomainStats_RecordType_Any, &awdStats); - require_noerr_quiet(err, exit); - - [inMetric addStats:awdStats]; - [awdStats release]; - } if (inSet->histA) { err = CreateAWDDNSDomainStats(inSet->histA, inDomain, inForCell, AWDDNSDomainStats_RecordType_A, &awdStats); @@ -1798,7 +1756,6 @@ exit: mDNSlocal void LogDNSHistSet(const DNSHistSet *inSet, const char *inDomain, mDNSBool inForCell) { - if (inSet->histAny) LogDNSHist(inSet->histAny, inDomain, inForCell, "Any"); if (inSet->histA) LogDNSHist(inSet->histA, inDomain, inForCell, "A"); if (inSet->histAAAA) LogDNSHist(inSet->histAAAA, inDomain, inForCell, "AAAA"); } diff --git a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c index c33c1663..d8697fae 100644 --- a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c +++ b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c @@ -1835,7 +1835,7 @@ mDNSlocal int mDNSPlatformGetSocktFd(void *sockCxt, mDNSTransport_Type transType } } -mDNSexport void mDNSPlatformSetSocktOpt(void *sockCxt, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q) +mDNSexport void mDNSPlatformSetSocktOpt(void *sockCxt, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q) { int sockfd; char unenc_name[MAX_ESCAPED_DOMAIN_NAME]; @@ -6966,7 +6966,19 @@ mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNS *const m, mDNSBool setservers, else { LogInfo("mDNSPlatformSetDNSConfig: config->n_resolver = %d, generation %llu, last %llu", config->n_resolver, config->generation, m->p->LastConfigGeneration); - if (m->p->LastConfigGeneration == config->generation) + + // For every network change, the search domain list is updated. + // This update is done without regard for generation number because it is + // not an expensive update and it keeps the search domain list in sync (even when + // a network change occurs, while currently processing a network + // change). + // + // For every DNS configuration change, the DNS server list is updated. + // This update is NOT done every network change because it may involve + // updating cache entries which worst-case is expensive. Setting the generation + // per DNS server list change keeps the list in sync with configd. + + if (setservers && m->p->LastConfigGeneration == config->generation) { LogInfo("mDNSPlatformSetDNSConfig: generation number %llu same, not processing", config->generation); dns_configuration_free(config); @@ -6992,21 +7004,13 @@ mDNSexport mDNSBool mDNSPlatformSetDNSConfig(mDNS *const m, mDNSBool setservers, ConfigResolvers(m, config, kScopeServiceID, setsearch, setservers, &sdc, resolverGroupID); - // Acking provides a hint that we processed this current configuration and - // we will use that from now on, assuming we don't get another one immediately - // after we return from here. + // 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. + // Applications monitoring the notification then know when to re-issue their DNS queries + // after a network change occurs. if (ackConfig) { // Note: We have to set the generation number here when we are acking. - // For every DNS configuration change, we do the following: - // - // 1) Copy dns configuration, handle search domains change - // 2) Copy dns configuration, handle dns server change - // - // If we update the generation number at step (1), we won't process the - // DNS servers the second time because generation number would be the same. - // As we ack only when we process dns servers, we set the generation number - // during acking. m->p->LastConfigGeneration = config->generation; LogInfo("mDNSPlatformSetDNSConfig: Acking configuration setservers %d, setsearch %d", setservers, setsearch); AckConfigd(m, config); diff --git a/mDNSResponder/mDNSPosix/Responder.c b/mDNSResponder/mDNSPosix/Responder.c index 3996b7b9..7a77bcdf 100755 --- a/mDNSResponder/mDNSPosix/Responder.c +++ b/mDNSResponder/mDNSPosix/Responder.c @@ -503,6 +503,7 @@ static mStatus RegisterServicesInFile(const char *filePath) { mStatus status = mStatus_NoError; FILE * fp = fopen(filePath, "r"); + int rv; if (fp == NULL) { return mStatus_UnknownErr; @@ -603,7 +604,8 @@ static mStatus RegisterServicesInFile(const char *filePath) status = mStatus_UnknownErr; } - assert(0 == fclose(fp)); + rv = fclose(fp); + assert(rv == 0); return status; } diff --git a/mDNSResponder/mDNSPosix/mDNSPosix.c b/mDNSResponder/mDNSPosix/mDNSPosix.c index 07633703..857c5832 100755 --- a/mDNSResponder/mDNSPosix/mDNSPosix.c +++ b/mDNSResponder/mDNSPosix/mDNSPosix.c @@ -584,11 +584,20 @@ mDNSexport mDNSu32 mDNSPlatformInterfaceIndexfromInterfaceID(mDNS *const m, mDNS // interface must have already been deregistered with the mDNS core. mDNSlocal void FreePosixNetworkInterface(PosixNetworkInterface *intf) { + int rv; assert(intf != NULL); if (intf->intfName != NULL) free((void *)intf->intfName); - if (intf->multicastSocket4 != -1) assert(close(intf->multicastSocket4) == 0); + if (intf->multicastSocket4 != -1) + { + rv = close(intf->multicastSocket4); + assert(rv == 0); + } #if HAVE_IPV6 - if (intf->multicastSocket6 != -1) assert(close(intf->multicastSocket6) == 0); + if (intf->multicastSocket6 != -1) + { + rv = close(intf->multicastSocket6); + assert(rv == 0); + } #endif // Move interface to the RecentInterfaces list for a minute @@ -851,7 +860,13 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf } // Clean up - if (err != 0 && *sktPtr != -1) { assert(close(*sktPtr) == 0); *sktPtr = -1; } + if (err != 0 && *sktPtr != -1) + { + int rv; + rv = close(*sktPtr); + assert(rv == 0); + *sktPtr = -1; + } assert((err == 0) == (*sktPtr != -1)); return err; } @@ -1353,11 +1368,20 @@ mDNSexport mStatus mDNSPlatformInit(mDNS *const m) // In our case all we need to do is to tear down every network interface. mDNSexport void mDNSPlatformClose(mDNS *const m) { + int rv; assert(m != NULL); ClearInterfaceList(m); - if (m->p->unicastSocket4 != -1) assert(close(m->p->unicastSocket4) == 0); + if (m->p->unicastSocket4 != -1) + { + rv = close(m->p->unicastSocket4); + assert(rv == 0); + } #if HAVE_IPV6 - if (m->p->unicastSocket6 != -1) assert(close(m->p->unicastSocket6) == 0); + if (m->p->unicastSocket6 != -1) + { + rv = close(m->p->unicastSocket6); + assert(rv == 0); + } #endif } @@ -1662,7 +1686,7 @@ mDNSexport mDNSBool mDNSPlatformInterfaceIsD2D(mDNSInterfaceID InterfaceID) return mDNSfalse; } -mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q) +mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q) { (void) sock; (void) transType; diff --git a/mDNSResponder/mDNSPosix/mDNSUNP.c b/mDNSResponder/mDNSPosix/mDNSUNP.c index 3cfeac6e..a7aafb27 100755 --- a/mDNSResponder/mDNSPosix/mDNSUNP.c +++ b/mDNSResponder/mDNSPosix/mDNSUNP.c @@ -199,7 +199,9 @@ gotError: } done: if (sockfd != -1) { - assert(close(sockfd) == 0); + int rv; + rv = close(sockfd); + assert(rv == 0); } if (fp != NULL) { fclose(fp); diff --git a/mDNSResponder/mDNSShared/dns_sd.h b/mDNSResponder/mDNSShared/dns_sd.h index 25a53478..e34c6d91 100644 --- a/mDNSResponder/mDNSShared/dns_sd.h +++ b/mDNSResponder/mDNSShared/dns_sd.h @@ -66,7 +66,7 @@ */ #ifndef _DNS_SD_H -#define _DNS_SD_H 7652004 +#define _DNS_SD_H 7653011 #ifdef __cplusplus extern "C" { diff --git a/mDNSResponder/mDNSWindows/mDNSWin32.c b/mDNSResponder/mDNSWindows/mDNSWin32.c index 011125b9..f2c43190 100755 --- a/mDNSResponder/mDNSWindows/mDNSWin32.c +++ b/mDNSResponder/mDNSWindows/mDNSWin32.c @@ -2152,7 +2152,7 @@ mDNSexport mStatus mDNSPlatformRetrieveTCPInfo(mDNS *const m, mDNSAddr *laddr, m return mStatus_UnsupportedErr; } -mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, DNSQuestion *q) +mDNSexport void mDNSPlatformSetSocktOpt(void *sock, mDNSTransport_Type transType, mDNSAddr_Type addrType, const DNSQuestion *q) { (void) sock; (void) transType; -- cgit v1.2.3