diff options
Diffstat (limited to 'mDNSResponder/mDNSShared')
-rw-r--r-- | mDNSResponder/mDNSShared/dns_sd.h | 62 | ||||
-rw-r--r-- | mDNSResponder/mDNSShared/dns_sd_private.h | 8 | ||||
-rw-r--r-- | mDNSResponder/mDNSShared/dnssd_clientlib.c | 16 | ||||
-rw-r--r-- | mDNSResponder/mDNSShared/dnssd_clientstub.c | 1 | ||||
-rw-r--r-- | mDNSResponder/mDNSShared/mDNSDebug.c | 3 | ||||
-rw-r--r-- | mDNSResponder/mDNSShared/uds_daemon.c | 114 |
6 files changed, 137 insertions, 67 deletions
diff --git a/mDNSResponder/mDNSShared/dns_sd.h b/mDNSResponder/mDNSShared/dns_sd.h index 0e5c35ee..a1f5a573 100644 --- a/mDNSResponder/mDNSShared/dns_sd.h +++ b/mDNSResponder/mDNSShared/dns_sd.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2003-2015 Apple Inc. All rights reserved. + * Copyright (c) 2003-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: @@ -66,7 +66,7 @@ */ #ifndef _DNS_SD_H -#define _DNS_SD_H 8787002 +#define _DNS_SD_H 8800035 #ifdef __cplusplus extern "C" { @@ -75,9 +75,11 @@ extern "C" { /* Set to 1 if libdispatch is supported * Note: May also be set by project and/or Makefile */ -#ifndef _DNS_SD_LIBDISPATCH +#if defined(__APPLE__) +#define _DNS_SD_LIBDISPATCH 1 +#else #define _DNS_SD_LIBDISPATCH 0 -#endif /* ndef _DNS_SD_LIBDISPATCH */ +#endif /* standard calling convention under Win32 is __stdcall */ /* Note: When compiling Intel EFI (Extensible Firmware Interface) under MS Visual Studio, the */ @@ -88,6 +90,12 @@ extern "C" { #define DNSSD_API #endif +#if (defined(__GNUC__) && (__GNUC__ >= 4)) +#define DNSSD_EXPORT __attribute__((visibility("default"))) +#else +#define DNSSD_EXPORT +#endif + #if defined(_WIN32) #include <winsock2.h> typedef SOCKET dnssd_sock_t; @@ -526,11 +534,25 @@ enum * This flag is private and should not be used. */ - kDNSServiceFlagsPrivateFour = 0x40000000 + kDNSServiceFlagsPrivateFour = 0x40000000, /* * This flag is private and should not be used. */ + kDNSServiceFlagsAllowExpiredAnswers = 0x80000000, + /* + * When kDNSServiceFlagsAllowExpiredAnswers is passed to DNSServiceQueryRecord or DNSServiceGetAddrInfo, + * if there are matching expired records still in the cache, then they are immediately returned to the + * client, and in parallel a network query for that name is issued. All returned records from the query will + * remain in the cache after expiration. + */ + + kDNSServiceFlagsExpiredAnswer = 0x80000000 + /* + * When kDNSServiceFlagsAllowExpiredAnswers is passed to DNSServiceQueryRecord or DNSServiceGetAddrInfo, + * an expired answer will have this flag set. + */ + }; #define kDNSServiceOutputFlags (kDNSServiceFlagsValidate | kDNSServiceFlagsValidateOptional | kDNSServiceFlagsMoreComing | kDNSServiceFlagsAdd | kDNSServiceFlagsDefault) @@ -871,6 +893,7 @@ typedef int32_t DNSServiceErrorType; * if the daemon (or "system service" on Windows) is not running. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceGetProperty ( const char *property, /* Requested property (i.e. kDNSServiceProperty_DaemonVersion) */ @@ -930,6 +953,7 @@ DNSServiceErrorType DNSSD_API DNSServiceGetProperty * error. */ +DNSSD_EXPORT dnssd_sock_t DNSSD_API DNSServiceRefSockFD(DNSServiceRef sdRef); @@ -951,6 +975,7 @@ dnssd_sock_t DNSSD_API DNSServiceRefSockFD(DNSServiceRef sdRef); * an error code indicating the specific failure that occurred. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceProcessResult(DNSServiceRef sdRef); @@ -978,6 +1003,7 @@ DNSServiceErrorType DNSSD_API DNSServiceProcessResult(DNSServiceRef sdRef); * */ +DNSSD_EXPORT void DNSSD_API DNSServiceRefDeallocate(DNSServiceRef sdRef); @@ -1062,6 +1088,7 @@ typedef void (DNSSD_API *DNSServiceDomainEnumReply) * is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceEnumerateDomains ( DNSServiceRef *sdRef, @@ -1252,6 +1279,7 @@ typedef void (DNSSD_API *DNSServiceRegisterReply) * is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceRegister ( DNSServiceRef *sdRef, @@ -1307,6 +1335,7 @@ DNSServiceErrorType DNSSD_API DNSServiceRegister * error code indicating the error that occurred (the RecordRef is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceAddRecord ( DNSServiceRef sdRef, @@ -1348,6 +1377,7 @@ DNSServiceErrorType DNSSD_API DNSServiceAddRecord * error code indicating the error that occurred. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceUpdateRecord ( DNSServiceRef sdRef, @@ -1380,6 +1410,7 @@ DNSServiceErrorType DNSSD_API DNSServiceUpdateRecord * error code indicating the error that occurred. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceRemoveRecord ( DNSServiceRef sdRef, @@ -1485,6 +1516,7 @@ typedef void (DNSSD_API *DNSServiceBrowseReply) * is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceBrowse ( DNSServiceRef *sdRef, @@ -1613,6 +1645,7 @@ typedef void (DNSSD_API *DNSServiceResolveReply) * is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceResolve ( DNSServiceRef *sdRef, @@ -1730,6 +1763,7 @@ typedef void (DNSSD_API *DNSServiceQueryRecordReply) * is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceQueryRecord ( DNSServiceRef *sdRef, @@ -1834,6 +1868,7 @@ typedef void (DNSSD_API *DNSServiceGetAddrInfoReply) * the error that occurred. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceGetAddrInfo ( DNSServiceRef *sdRef, @@ -1870,6 +1905,7 @@ DNSServiceErrorType DNSSD_API DNSServiceGetAddrInfo * case the DNSServiceRef is not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceCreateConnection(DNSServiceRef *sdRef); /* DNSServiceRegisterRecord @@ -1952,6 +1988,7 @@ typedef void (DNSSD_API *DNSServiceRegisterRecordReply) * not initialized). */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceRegisterRecord ( DNSServiceRef sdRef, @@ -2001,6 +2038,7 @@ DNSServiceErrorType DNSSD_API DNSServiceRegisterRecord * */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceReconfirmRecord ( DNSServiceFlags flags, @@ -2184,6 +2222,7 @@ typedef void (DNSSD_API *DNSServiceNATPortMappingReply) * display) then pass zero for protocol, internalPort, externalPort and ttl. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceNATPortMappingCreate ( DNSServiceRef *sdRef, @@ -2230,6 +2269,7 @@ DNSServiceErrorType DNSSD_API DNSServiceNATPortMappingCreate * */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceConstructFullName ( char * const fullName, @@ -2310,6 +2350,7 @@ typedef union _TXTRecordRef_t { char PrivateData[16]; char *ForceNaturalAlignmen * the TXTRecordRef. */ +DNSSD_EXPORT void DNSSD_API TXTRecordCreate ( TXTRecordRef *txtRecord, @@ -2328,6 +2369,7 @@ void DNSSD_API TXTRecordCreate * */ +DNSSD_EXPORT void DNSSD_API TXTRecordDeallocate ( TXTRecordRef *txtRecord @@ -2371,6 +2413,7 @@ void DNSSD_API TXTRecordDeallocate * exceed the available storage. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API TXTRecordSetValue ( TXTRecordRef *txtRecord, @@ -2394,6 +2437,7 @@ DNSServiceErrorType DNSSD_API TXTRecordSetValue * exist in the TXTRecordRef. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API TXTRecordRemoveValue ( TXTRecordRef *txtRecord, @@ -2413,6 +2457,7 @@ DNSServiceErrorType DNSSD_API TXTRecordRemoveValue * Returns 0 if the TXTRecordRef is empty. */ +DNSSD_EXPORT uint16_t DNSSD_API TXTRecordGetLength ( const TXTRecordRef *txtRecord @@ -2430,6 +2475,7 @@ uint16_t DNSSD_API TXTRecordGetLength * to DNSServiceUpdateRecord(). */ +DNSSD_EXPORT const void * DNSSD_API TXTRecordGetBytesPtr ( const TXTRecordRef *txtRecord @@ -2484,6 +2530,7 @@ const void * DNSSD_API TXTRecordGetBytesPtr * Otherwise, it returns 0. */ +DNSSD_EXPORT int DNSSD_API TXTRecordContainsKey ( uint16_t txtLen, @@ -2513,6 +2560,7 @@ int DNSSD_API TXTRecordContainsKey * For non-empty value, valueLen will be length of value data. */ +DNSSD_EXPORT const void * DNSSD_API TXTRecordGetValuePtr ( uint16_t txtLen, @@ -2535,6 +2583,7 @@ const void * DNSSD_API TXTRecordGetValuePtr * */ +DNSSD_EXPORT uint16_t DNSSD_API TXTRecordGetCount ( uint16_t txtLen, @@ -2580,6 +2629,7 @@ uint16_t DNSSD_API TXTRecordGetCount * TXTRecordGetCount()-1. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API TXTRecordGetItemAtIndex ( uint16_t txtLen, @@ -2632,6 +2682,7 @@ DNSServiceErrorType DNSSD_API TXTRecordGetItemAtIndex * queue param is invalid */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceSetDispatchQueue ( DNSServiceRef service, @@ -2646,6 +2697,7 @@ typedef void (DNSSD_API *DNSServiceSleepKeepaliveReply) DNSServiceErrorType errorCode, void *context ); +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceSleepKeepalive ( DNSServiceRef *sdRef, diff --git a/mDNSResponder/mDNSShared/dns_sd_private.h b/mDNSResponder/mDNSShared/dns_sd_private.h index 4d023686..2d429733 100644 --- a/mDNSResponder/mDNSShared/dns_sd_private.h +++ b/mDNSResponder/mDNSShared/dns_sd_private.h @@ -1,11 +1,12 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2015 Apple Inc. All rights reserved. + * Copyright (c) 2015-2018 Apple Inc. All rights reserved. */ #ifndef _DNS_SD_PRIVATE_H #define _DNS_SD_PRIVATE_H +#include <dns_sd.h> // Private flags (kDNSServiceFlagsPrivateOne, kDNSServiceFlagsPrivateTwo, kDNSServiceFlagsPrivateThree, kDNSServiceFlagsPrivateFour) from dns_sd.h enum @@ -58,6 +59,7 @@ enum * returned to indicate that the calling process does not have entitlements * to use this API. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceCreateDelegateConnection(DNSServiceRef *sdRef, int32_t pid, uuid_t uuid); #endif @@ -77,12 +79,16 @@ DNSServiceErrorType DNSSD_API DNSServiceCreateDelegateConnection(DNSServiceRef * * if the daemon is not running. The value of the pid is undefined if the return * value has error. */ +DNSSD_EXPORT DNSServiceErrorType DNSSD_API DNSServiceGetPID ( uint16_t srcport, int32_t *pid ); +DNSSD_EXPORT +DNSServiceErrorType DNSSD_API DNSServiceSetDefaultDomainForUser(DNSServiceFlags flags, const char *domain); + #define kDNSServiceCompPrivateDNS "PrivateDNS" #define kDNSServiceCompMulticastDNS "MulticastDNS" diff --git a/mDNSResponder/mDNSShared/dnssd_clientlib.c b/mDNSResponder/mDNSShared/dnssd_clientlib.c index cfc1d424..2a1f5ed4 100644 --- a/mDNSResponder/mDNSShared/dnssd_clientlib.c +++ b/mDNSResponder/mDNSShared/dnssd_clientlib.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2004-2011 Apple Inc. All rights reserved. + * Copyright (c) 2004-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: @@ -31,10 +31,6 @@ #include "dns_sd.h" -#if MDNS_BUILDINGSHAREDLIBRARY || MDNS_BUILDINGSTUBLIBRARY -#pragma export on -#endif - #if defined(_WIN32) // disable warning "conversion from <data> to uint16_t" #pragma warning(disable:4244) @@ -361,6 +357,14 @@ DNSServiceErrorType DNSSD_API TXTRecordGetItemAtIndex #define STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s) # s #define STRINGIFY(s) STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s) +// The "used" variable attribute prevents a non-exported variable from being stripped, even if its visibility is hidden, +// e.g., when compiling with -fvisibility=hidden. +#if defined(__GNUC__) +#define DNSSD_USED __attribute__((used)) +#else +#define DNSSD_USED +#endif + // NOT static -- otherwise the compiler may optimize it out // The "@(#) " pattern is a special prefix the "what" command looks for -const char VersionString_SCCS_libdnssd[] = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")"; +const char VersionString_SCCS_libdnssd[] DNSSD_USED = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")"; diff --git a/mDNSResponder/mDNSShared/dnssd_clientstub.c b/mDNSResponder/mDNSShared/dnssd_clientstub.c index 27e90eee..e8600cba 100644 --- a/mDNSResponder/mDNSShared/dnssd_clientstub.c +++ b/mDNSResponder/mDNSShared/dnssd_clientstub.c @@ -1584,7 +1584,6 @@ DNSServiceErrorType DNSSD_API DNSServiceBrowse return err; } -DNSServiceErrorType DNSSD_API DNSServiceSetDefaultDomainForUser(DNSServiceFlags flags, const char *domain); DNSServiceErrorType DNSSD_API DNSServiceSetDefaultDomainForUser(DNSServiceFlags flags, const char *domain) { DNSServiceErrorType err; diff --git a/mDNSResponder/mDNSShared/mDNSDebug.c b/mDNSResponder/mDNSShared/mDNSDebug.c index 1243ae77..dfe77a1d 100644 --- a/mDNSResponder/mDNSShared/mDNSDebug.c +++ b/mDNSResponder/mDNSShared/mDNSDebug.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2003-2015 Apple Inc. All rights reserved. + * Copyright (c) 2003-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. @@ -77,6 +77,7 @@ void LogMsg_(const char *format, ...) LOG_HELPER_BODY(MDNS_LOG_MSG) void LogOperation_(const char *format, ...) LOG_HELPER_BODY(MDNS_LOG_OPERATION) void LogSPS_(const char *format, ...) LOG_HELPER_BODY(MDNS_LOG_SPS) void LogInfo_(const char *format, ...) LOG_HELPER_BODY(MDNS_LOG_INFO) +void LogDebug_(const char *format, ...) LOG_HELPER_BODY(MDNS_LOG_DEBUG) #endif #if MDNS_DEBUGMSGS diff --git a/mDNSResponder/mDNSShared/uds_daemon.c b/mDNSResponder/mDNSShared/uds_daemon.c index 946ad162..d1fbc7f2 100644 --- a/mDNSResponder/mDNSShared/uds_daemon.c +++ b/mDNSResponder/mDNSShared/uds_daemon.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4 -*- * - * Copyright (c) 2003-2015 Apple Inc. All rights reserved. + * Copyright (c) 2003-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. @@ -41,6 +41,9 @@ // not fully qualified) with any number of labels e.g., moon, moon.cs, moon.cs.be, etc. mDNSBool AlwaysAppendSearchDomains = mDNSfalse; +// Control enabling ioptimistic DNS +mDNSBool EnableAllowExpired = mDNStrue; + // Apple-specific functionality, not required for other platforms #if APPLE_OSX_mDNSResponder #include <sys/ucred.h> @@ -325,8 +328,8 @@ mDNSlocal void abort_request(request_state *req) // Now, if this request_state is not subordinate to some other primary, close file descriptor and discard replies if (!req->primary) { - if (req->errsd != req->sd) LogOperation("%3d: Removing FD and closing errsd %d", req->sd, req->errsd); - else LogOperation("%3d: Removing FD", req->sd); + if (req->errsd != req->sd) LogDebug("%3d: Removing FD and closing errsd %d", req->sd, req->errsd); + else LogDebug("%3d: Removing FD", req->sd); udsSupportRemoveFDFromEventLoop(req->sd, req->platform_data); // Note: This also closes file descriptor req->sd for us if (req->errsd != req->sd) { dnssd_close(req->errsd); req->errsd = req->sd; } @@ -1077,7 +1080,7 @@ mDNSlocal void connection_termination(request_state *request) mDNSlocal void handle_cancel_request(request_state *request) { request_state **req = &all_requests; - LogOperation("%3d: Cancel %08X %08X", request->sd, request->hdr.client_context.u32[1], request->hdr.client_context.u32[0]); + LogDebug("%3d: Cancel %08X %08X", request->sd, request->hdr.client_context.u32[1], request->hdr.client_context.u32[0]); while (*req) { if ((*req)->primary == request && @@ -1689,7 +1692,7 @@ mDNSlocal mStatus register_service_instance(request_state *request, const domain &request->u.servicereg.name, &request->u.servicereg.type, domain, request->u.servicereg.host.c[0] ? &request->u.servicereg.host : NULL, request->u.servicereg.port, - request->u.servicereg.txtdata, request->u.servicereg.txtlen, + mDNSNULL, request->u.servicereg.txtdata, request->u.servicereg.txtlen, instance->subtypes, request->u.servicereg.num_subtypes, interfaceID, regservice_callback, instance, request->flags); @@ -2166,7 +2169,7 @@ mDNSlocal mStatus add_domain_to_browser(request_state *info, const domainname *d { domainname tmp; ConstructServiceName(&tmp, NULL, &info->u.browser.regtype, &b->domain); - LogInfo("add_domain_to_browser: calling external_start_browsing_for_service()"); + LogDebug("add_domain_to_browser: calling external_start_browsing_for_service()"); external_start_browsing_for_service(info->u.browser.interface_id, &tmp, kDNSType_PTR, info->flags); } } @@ -3162,7 +3165,7 @@ mDNSlocal mDNSBool RetryQuestionWithSearchDomains(DNSQuestion *question, request } else { - LogInfo("%3d: RetryQuestionWithSearchDomains: Not appending search domains - SuppressQuery %d, SearchListIndex %d, AppendSearchDomains %d", req->sd, AddRecord, question->SearchListIndex, question->AppendSearchDomains); + LogDebug("%3d: RetryQuestionWithSearchDomains: Not appending search domains - SuppressQuery %d, SearchListIndex %d, AppendSearchDomains %d", req->sd, AddRecord, question->SearchListIndex, question->AppendSearchDomains); } return mDNSfalse; } @@ -3178,10 +3181,11 @@ mDNSlocal void queryrecord_result_reply(mDNS *const m, request_state *req, DNSQu ConvertDomainNameToCString(answer->name, name); - LogOperation("%3d: %s(%##s, %s) RESULT %s interface %d: %s", req->sd, + LogOperation("%3d: %s(%##s, %s) RESULT %s interface %d: (%s)%s", req->sd, req->hdr.op == query_request ? "DNSServiceQueryRecord" : "DNSServiceGetAddrInfo", question->qname.c, DNSTypeName(question->qtype), AddRecord ? "ADD" : "RMV", - mDNSPlatformInterfaceIndexfromInterfaceID(m, answer->InterfaceID, mDNSfalse), RRDisplayString(m, answer)); + mDNSPlatformInterfaceIndexfromInterfaceID(m, answer->InterfaceID, mDNSfalse), + MortalityDisplayString(answer->mortality), RRDisplayString(m, answer)); len = sizeof(DNSServiceFlags); // calculate reply data length len += sizeof(mDNSu32); // interface index @@ -3195,6 +3199,8 @@ mDNSlocal void queryrecord_result_reply(mDNS *const m, request_state *req, DNSQu if (AddRecord) flags |= kDNSServiceFlagsAdd; + if (answer->mortality == Mortality_Ghost) + flags |= kDNSServiceFlagsExpiredAnswer; if (question->ValidationStatus != 0) { error = kDNSServiceErr_NoError; @@ -3452,7 +3458,7 @@ mDNSlocal void queryrecord_result_callback(mDNS *const m, DNSQuestion *question, // the "core" needs to temporarily turn off SuppressQuery to answer this query. if (AddRecord == QC_suppressed) { - LogInfo("queryrecord_result_callback: Suppressed question %##s (%s)", question->qname.c, DNSTypeName(question->qtype)); + LogDebug("queryrecord_result_callback: Suppressed question %##s (%s)", question->qname.c, DNSTypeName(question->qtype)); queryrecord_result_reply(m, req, question, answer, AddRecord, kDNSServiceErr_NoSuchRecord); return; } @@ -3517,7 +3523,7 @@ mDNSlocal void queryrecord_result_callback(mDNS *const m, DNSQuestion *question, // appended .local, we need to see if we need to send an additional query. This should // normally happen just once because after we append .local, we ignore all negative // responses for .local above. - LogInfo("queryrecord_result_callback: Retrying question %##s (%s) after appending search domains", question->qname.c, DNSTypeName(question->qtype)); + LogDebug("queryrecord_result_callback: Retrying question %##s (%s) after appending search domains", question->qname.c, DNSTypeName(question->qtype)); if (RetryQuestionWithSearchDomains(question, req, AddRecord)) { // Note: We need to call SendAdditionalQuery every time after appending a search domain as .local could @@ -3646,34 +3652,35 @@ mDNSlocal mStatus handle_queryrecord_request(request_state *request) request->interfaceIndex = interfaceIndex; mDNSPlatformMemZero(&request->u.queryrecord, sizeof(request->u.queryrecord)); - q->InterfaceID = InterfaceID; - q->flags = flags; - q->Target = zeroAddr; + q->InterfaceID = InterfaceID; + q->flags = flags; + q->Target = zeroAddr; if (!MakeDomainNameFromDNSNameString(&q->qname, name)) return(mStatus_BadParamErr); #if 0 if (!AuthorizedDomain(request, &q->qname, AutoBrowseDomains)) return (mStatus_NoError); #endif - q->qtype = rrtype; - q->qclass = rrclass; - q->LongLived = (flags & kDNSServiceFlagsLongLivedQuery ) != 0; - q->ExpectUnique = mDNSfalse; - q->ForceMCast = (flags & kDNSServiceFlagsForceMulticast ) != 0; - q->ReturnIntermed = (flags & kDNSServiceFlagsReturnIntermediates) != 0; - q->SuppressUnusable = (flags & kDNSServiceFlagsSuppressUnusable ) != 0; - q->TimeoutQuestion = (flags & kDNSServiceFlagsTimeout ) != 0; - q->WakeOnResolve = 0; + q->qtype = rrtype; + q->qclass = rrclass; + q->LongLived = (flags & kDNSServiceFlagsLongLivedQuery ) != 0; + q->ExpectUnique = mDNSfalse; + q->ForceMCast = (flags & kDNSServiceFlagsForceMulticast ) != 0; + q->ReturnIntermed = (flags & kDNSServiceFlagsReturnIntermediates) != 0; + q->SuppressUnusable = (flags & kDNSServiceFlagsSuppressUnusable ) != 0; + q->TimeoutQuestion = (flags & kDNSServiceFlagsTimeout ) != 0; + q->allowExpired = (EnableAllowExpired && (flags & kDNSServiceFlagsAllowExpiredAnswers) != 0) ? AllowExpired_AllowExpiredAnswers : AllowExpired_None; + q->WakeOnResolve = 0; q->UseBackgroundTrafficClass = (flags & kDNSServiceFlagsBackgroundTrafficClass) != 0; if ((flags & kDNSServiceFlagsValidate) != 0) q->ValidationRequired = DNSSEC_VALIDATION_SECURE; else if ((flags & kDNSServiceFlagsValidateOptional) != 0) q->ValidationRequired = DNSSEC_VALIDATION_SECURE_OPTIONAL; q->ValidatingResponse = 0; - q->ProxyQuestion = 0; + q->ProxyQuestion = 0; q->AnonInfo = mDNSNULL; - q->QuestionCallback = queryrecord_result_callback; - q->QuestionContext = request; - q->SearchListIndex = 0; - q->StopTime = 0; + q->QuestionCallback = queryrecord_result_callback; + q->QuestionContext = request; + q->SearchListIndex = 0; + q->StopTime = 0; q->DNSSECAuthInfo = mDNSNULL; q->DAIFreeCallback = mDNSNULL; @@ -3737,7 +3744,7 @@ mDNSlocal mStatus handle_queryrecord_request(request_state *request) LogMcastQ(q, request, q_start); if (callExternalHelpers(q->InterfaceID, &q->qname, q->flags)) { - LogInfo("handle_queryrecord_request: calling external_start_browsing_for_service()"); + LogDebug("handle_queryrecord_request: calling external_start_browsing_for_service()"); external_start_browsing_for_service(q->InterfaceID, &q->qname, q->qtype, q->flags); } } @@ -4258,7 +4265,7 @@ mDNSlocal void addrinfo_termination_callback(request_state *request) if (callExternalHelpers(request->u.addrinfo.interface_id, &request->u.addrinfo.q4.qname, request->flags)) { - LogInfo("addrinfo_termination_callback: calling external_stop_browsing_for_service() for kDNSServiceType_A record"); + LogInfo("addrinfo_termination_callback: calling external_stop_browsing_for_service() for A record"); external_stop_browsing_for_service(request->u.addrinfo.interface_id, &request->u.addrinfo.q4.qname, kDNSServiceType_A, request->flags); } } @@ -4293,7 +4300,7 @@ mDNSlocal void addrinfo_termination_callback(request_state *request) if (callExternalHelpers(request->u.addrinfo.interface_id, &request->u.addrinfo.q6.qname, request->flags)) { - LogInfo("addrinfo_termination_callback: calling external_stop_browsing_for_service() for kDNSServiceType_AAAA record"); + LogInfo("addrinfo_termination_callback: calling external_stop_browsing_for_service() for AAAA record"); external_stop_browsing_for_service(request->u.addrinfo.interface_id, &request->u.addrinfo.q6.qname, kDNSServiceType_AAAA, request->flags); } } @@ -4423,19 +4430,20 @@ mDNSlocal mStatus handle_addrinfo_request(request_state *request) request->u.addrinfo.protocol = (kDNSServiceProtocol_IPv4 | kDNSServiceProtocol_IPv6); } - request->u.addrinfo.q4.InterfaceID = request->u.addrinfo.q6.InterfaceID = request->u.addrinfo.interface_id; - request->u.addrinfo.q4.ServiceID = request->u.addrinfo.q6.ServiceID = serviceIndex; - request->u.addrinfo.q4.flags = request->u.addrinfo.q6.flags = flags; - request->u.addrinfo.q4.Target = request->u.addrinfo.q6.Target = zeroAddr; - request->u.addrinfo.q4.qname = request->u.addrinfo.q6.qname = d; - request->u.addrinfo.q4.qclass = request->u.addrinfo.q6.qclass = kDNSServiceClass_IN; - request->u.addrinfo.q4.LongLived = request->u.addrinfo.q6.LongLived = (flags & kDNSServiceFlagsLongLivedQuery ) != 0; - request->u.addrinfo.q4.ExpectUnique = request->u.addrinfo.q6.ExpectUnique = mDNSfalse; - request->u.addrinfo.q4.ForceMCast = request->u.addrinfo.q6.ForceMCast = (flags & kDNSServiceFlagsForceMulticast ) != 0; - request->u.addrinfo.q4.ReturnIntermed = request->u.addrinfo.q6.ReturnIntermed = (flags & kDNSServiceFlagsReturnIntermediates) != 0; - request->u.addrinfo.q4.SuppressUnusable = request->u.addrinfo.q6.SuppressUnusable = (flags & kDNSServiceFlagsSuppressUnusable ) != 0; - request->u.addrinfo.q4.TimeoutQuestion = request->u.addrinfo.q6.TimeoutQuestion = (flags & kDNSServiceFlagsTimeout ) != 0; - request->u.addrinfo.q4.WakeOnResolve = request->u.addrinfo.q6.WakeOnResolve = 0; + request->u.addrinfo.q4.InterfaceID = request->u.addrinfo.q6.InterfaceID = request->u.addrinfo.interface_id; + request->u.addrinfo.q4.ServiceID = request->u.addrinfo.q6.ServiceID = serviceIndex; + request->u.addrinfo.q4.flags = request->u.addrinfo.q6.flags = flags; + request->u.addrinfo.q4.Target = request->u.addrinfo.q6.Target = zeroAddr; + request->u.addrinfo.q4.qname = request->u.addrinfo.q6.qname = d; + request->u.addrinfo.q4.qclass = request->u.addrinfo.q6.qclass = kDNSServiceClass_IN; + request->u.addrinfo.q4.LongLived = request->u.addrinfo.q6.LongLived = (flags & kDNSServiceFlagsLongLivedQuery ) != 0; + request->u.addrinfo.q4.ExpectUnique = request->u.addrinfo.q6.ExpectUnique = mDNSfalse; + request->u.addrinfo.q4.ForceMCast = request->u.addrinfo.q6.ForceMCast = (flags & kDNSServiceFlagsForceMulticast ) != 0; + request->u.addrinfo.q4.ReturnIntermed = request->u.addrinfo.q6.ReturnIntermed = (flags & kDNSServiceFlagsReturnIntermediates) != 0; + request->u.addrinfo.q4.SuppressUnusable = request->u.addrinfo.q6.SuppressUnusable = (flags & kDNSServiceFlagsSuppressUnusable ) != 0; + request->u.addrinfo.q4.TimeoutQuestion = request->u.addrinfo.q6.TimeoutQuestion = (flags & kDNSServiceFlagsTimeout ) != 0; + request->u.addrinfo.q4.allowExpired = request->u.addrinfo.q6.allowExpired = (EnableAllowExpired && (flags & kDNSServiceFlagsAllowExpiredAnswers) != 0) ? AllowExpired_AllowExpiredAnswers : AllowExpired_None; + request->u.addrinfo.q4.WakeOnResolve = request->u.addrinfo.q6.WakeOnResolve = 0; request->u.addrinfo.q4.UseBackgroundTrafficClass = request->u.addrinfo.q6.UseBackgroundTrafficClass = (flags & kDNSServiceFlagsBackgroundTrafficClass) != 0; if ((flags & kDNSServiceFlagsValidate) != 0) request->u.addrinfo.q4.ValidationRequired = request->u.addrinfo.q6.ValidationRequired = DNSSEC_VALIDATION_SECURE; @@ -4497,7 +4505,7 @@ mDNSlocal mStatus handle_addrinfo_request(request_state *request) LogMcastQ(&request->u.addrinfo.q6, request, q_start); if (callExternalHelpers(InterfaceID, &d, flags)) { - LogInfo("handle_addrinfo_request: calling external_start_browsing_for_service() for kDNSServiceType_AAAA record"); + LogDebug("handle_addrinfo_request: calling external_start_browsing_for_service() for AAAA record"); external_start_browsing_for_service(InterfaceID, &d, kDNSServiceType_AAAA, flags); } } @@ -4539,7 +4547,7 @@ mDNSlocal mStatus handle_addrinfo_request(request_state *request) if (callExternalHelpers(InterfaceID, &d, flags)) { - LogInfo("addrinfo_termination_callback: calling external_stop_browsing_for_service() for kDNSServiceType_AAAA record"); + LogInfo("addrinfo_termination_callback: calling external_stop_browsing_for_service() for AAAA record"); external_stop_browsing_for_service(InterfaceID, &d, kDNSServiceType_AAAA, flags); } } @@ -4553,7 +4561,7 @@ mDNSlocal mStatus handle_addrinfo_request(request_state *request) LogMcastQ(&request->u.addrinfo.q4, request, q_start); if (callExternalHelpers(InterfaceID, &d, flags)) { - LogInfo("handle_addrinfo_request: calling external_start_browsing_for_service() for kDNSServiceType_A record"); + LogDebug("handle_addrinfo_request: calling external_start_browsing_for_service() for A record"); external_start_browsing_for_service(InterfaceID, &d, kDNSServiceType_A, flags); } } @@ -4753,7 +4761,7 @@ mDNSlocal void read_msg(request_state *req) #if !defined(USE_TCP_LOOPBACK) got_errfd: #endif - LogOperation("%3d: Result code socket %d created %08X %08X", req->sd, req->errsd, req->hdr.client_context.u32[1], req->hdr.client_context.u32[0]); + LogDebug("%3d: Result code socket %d created %08X %08X", req->sd, req->errsd, req->hdr.client_context.u32[1], req->hdr.client_context.u32[0]); #if defined(_WIN32) if (ioctlsocket(req->errsd, FIONBIO, &opt) != 0) #else @@ -4952,8 +4960,8 @@ mDNSlocal void request_callback(int fd, short filter, void *info) send_all(req->errsd, (const char *)&err_netorder, sizeof(err_netorder)); if (req->errsd != req->sd) { - LogOperation("%3d: Result code socket %d closed %08X %08X (%d)", - req->sd, req->errsd, req->hdr.client_context.u32[1], req->hdr.client_context.u32[0], err); + LogDebug("%3d: Result code socket %d closed %08X %08X (%d)", + req->sd, req->errsd, req->hdr.client_context.u32[1], req->hdr.client_context.u32[0], err); dnssd_close(req->errsd); req->errsd = req->sd; // Also need to reset the parent's errsd, if this is a subordinate operation @@ -5024,7 +5032,7 @@ mDNSlocal void connect_callback(int fd, short filter, void *info) debugf("LOCAL_PEERCRED %d %u %u %d", xucredlen, x.cr_version, x.cr_uid, x.cr_ngroups); #endif // APPLE_OSX_mDNSResponder - LogOperation("%3d: connect_callback: Adding FD for uid %u", request->sd, request->uid); + LogDebug("%3d: connect_callback: Adding FD for uid %u", request->sd, request->uid); udsSupportAddFDToEventLoop(sd, request_callback, request, &request->platform_data); } } @@ -6254,10 +6262,10 @@ struct CompileTimeAssertionChecks_uds_daemon // 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_request_state [(sizeof(request_state) <= 2954) ? 1 : -1]; + char sizecheck_request_state [(sizeof(request_state) <= 3696) ? 1 : -1]; char sizecheck_registered_record_entry[(sizeof(registered_record_entry) <= 60) ? 1 : -1]; char sizecheck_service_instance [(sizeof(service_instance) <= 6552) ? 1 : -1]; - char sizecheck_browser_t [(sizeof(browser_t) <= 1202) ? 1 : -1]; + char sizecheck_browser_t [(sizeof(browser_t) <= 1432) ? 1 : -1]; char sizecheck_reply_hdr [(sizeof(reply_hdr) <= 12) ? 1 : -1]; char sizecheck_reply_state [(sizeof(reply_state) <= 64) ? 1 : -1]; }; |