Skip to content

Commit

Permalink
mDNSResponder-107.3
Browse files Browse the repository at this point in the history
Imported from mDNSResponder-107.3.tar.gz
  • Loading branch information
AppleOSSDistributions committed Oct 6, 2021
1 parent 178a33b commit 80515f0
Show file tree
Hide file tree
Showing 24 changed files with 3,959 additions and 1,306 deletions.
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -16,7 +16,7 @@

include /Developer/Makefiles/pb_makefiles/platform.make

MVERS = "mDNSResponder-107"
MVERS = "mDNSResponder-107.3"

install:
cd "$(SRCROOT)/mDNSMacOSX"; xcodebuild install OBJROOT=$(OBJROOT) SYMROOT=$(SYMROOT) DSTROOT=$(DSTROOT) MVERS=$(MVERS)
Expand Down
31 changes: 20 additions & 11 deletions mDNSCore/DNSCommon.c
Expand Up @@ -23,6 +23,15 @@
Change History (most recent first):
$Log: DNSCommon.c,v $
Revision 1.90 2005/03/21 00:33:51 shersche
<rdar://problem/4021486> Fix build warnings on Win32 platform
Revision 1.89 2005/03/17 18:59:38 ksekar
<rdar://problem/4012279> Properly parse multiple LLQ Options per packet on Windows
Revision 1.88 2005/03/16 00:42:32 ksekar
<rdar://problem/4012279> Long-lived queries not working on Windows
Revision 1.87 2005/02/25 04:21:00 cheshire
<rdar://problem/4015377> mDNS -F returns the same domain multiple times with different casing
Expand Down Expand Up @@ -1028,7 +1037,7 @@ mDNSexport void AppendLabelSuffix(domainlabel *name, mDNSu32 val, mDNSBool RichT

while (val >= divisor * 10) { divisor *= 10; chars++; }

name->c[0] = TruncateUTF8ToLength(name->c+1, name->c[0], MAX_DOMAIN_LABEL - chars);
name->c[0] = (mDNSu8) TruncateUTF8ToLength(name->c+1, name->c[0], MAX_DOMAIN_LABEL - chars);

if (RichText) { name->c[++name->c[0]] = ' '; name->c[++name->c[0]] = '('; }
else { name->c[++name->c[0]] = '-'; }
Expand Down Expand Up @@ -1342,14 +1351,14 @@ mDNSlocal mDNSu8 *putOptRData(mDNSu8 *ptr, const mDNSu8 *limit, ResourceRecord *
nput += 2 * sizeof(mDNSu16);
if (opt->opt == kDNSOpt_LLQ)
{
if (ptr + sizeof(LLQOptData) > limit) goto space_err;
if (ptr + LLQ_OPTLEN > limit) goto space_err;
ptr = putVal16(ptr, opt->OptData.llq.vers);
ptr = putVal16(ptr, opt->OptData.llq.llqOp);
ptr = putVal16(ptr, opt->OptData.llq.err);
mDNSPlatformMemCopy(opt->OptData.llq.id, ptr, 8); // 8-byte id
ptr += 8;
ptr = putVal32(ptr, opt->OptData.llq.lease);
nput += sizeof(LLQOptData);
nput += LLQ_OPTLEN;
}
else if (opt->opt == kDNSOpt_Lease)
{
Expand Down Expand Up @@ -1377,19 +1386,18 @@ mDNSlocal mDNSu16 getVal16(const mDNSu8 **ptr)
mDNSlocal const mDNSu8 *getOptRdata(const mDNSu8 *ptr, const mDNSu8 *limit, ResourceRecord *rr, mDNSu16 pktRDLen)
{
int nread = 0;
rdataOpt *opt;
while (nread < pktRDLen)
rdataOpt *opt = (rdataOpt *)rr->rdata->u.data;

while (nread < pktRDLen && (mDNSu8 *)opt < rr->rdata->u.data + MaximumRDSize - sizeof(rdataOpt))
{
opt = (rdataOpt *)(rr->rdata->u.data + nread);
// space for opt + optlen
if (nread + (2 * sizeof(mDNSu16)) > rr->rdata->MaxRDLength) goto space_err;
opt->opt = getVal16(&ptr);
opt->optlen = getVal16(&ptr);
nread += 2 * sizeof(mDNSu16);
if (opt->opt == kDNSOpt_LLQ)
{
if ((unsigned)(limit - ptr) < sizeof(LLQOptData)) goto space_err;
if ((unsigned)(limit - ptr) < LLQ_OPTLEN) goto space_err;
opt->OptData.llq.vers = getVal16(&ptr);
opt->OptData.llq.llqOp = getVal16(&ptr);
opt->OptData.llq.err = getVal16(&ptr);
Expand All @@ -1399,7 +1407,7 @@ mDNSlocal const mDNSu8 *getOptRdata(const mDNSu8 *ptr, const mDNSu8 *limit, Reso
if (opt->OptData.llq.lease > 0x70000000UL / mDNSPlatformOneSecond)
opt->OptData.llq.lease = 0x70000000UL / mDNSPlatformOneSecond;
ptr += sizeof(mDNSOpaque32);
nread += sizeof(LLQOptData);
nread += LLQ_OPTLEN;
}
else if (opt->opt == kDNSOpt_Lease)
{
Expand All @@ -1412,6 +1420,7 @@ mDNSlocal const mDNSu8 *getOptRdata(const mDNSu8 *ptr, const mDNSu8 *limit, Reso
nread += sizeof(mDNSs32);
}
else { LogMsg("ERROR: getOptRdata - unknown opt %d", opt->opt); return mDNSNULL; }
opt++; // increment pointer into rdatabody
}

rr->rdlength = pktRDLen;
Expand Down Expand Up @@ -1629,8 +1638,8 @@ mDNSexport mDNSu8 *putUpdateLease(DNSMessage *msg, mDNSu8 *end, mDNSu32 lease)

opt->RecordType = kDNSRecordTypeKnownUnique; // to avoid warnings in other layers
opt->rrtype = kDNSType_OPT;
opt->rdlength = LEASE_OPT_SIZE;
opt->rdestimate = LEASE_OPT_SIZE;
opt->rdlength = LEASE_OPT_RDLEN;
opt->rdestimate = LEASE_OPT_RDLEN;

optRD = &rr.resrec.rdata->u.opt;
optRD->opt = kDNSOpt_Lease;
Expand Down
5 changes: 4 additions & 1 deletion mDNSCore/DNSCommon.h
Expand Up @@ -23,6 +23,9 @@
Change History (most recent first):
$Log: DNSCommon.h,v $
Revision 1.32 2005/03/21 00:33:51 shersche
<rdar://problem/4021486> Fix build warnings on Win32 platform
Revision 1.31 2005/02/18 00:43:11 cheshire
<rdar://problem/4010245> mDNSResponder should auto-truncate service names that are too long
Expand Down Expand Up @@ -314,7 +317,7 @@ extern const mDNSu8 *getDomainName(const DNSMessage *const msg, const mDNSu8 *pt
extern const mDNSu8 *skipResourceRecord(const DNSMessage *msg, const mDNSu8 *ptr, const mDNSu8 *end);

extern const mDNSu8 *GetLargeResourceRecord(mDNS *const m, const DNSMessage * const msg, const mDNSu8 *ptr,
const mDNSu8 * const end, const mDNSInterfaceID InterfaceID, mDNSu8 RecordType, LargeCacheRecord *largecr);
const mDNSu8 * end, const mDNSInterfaceID InterfaceID, mDNSu8 RecordType, LargeCacheRecord *largecr);

extern const mDNSu8 *skipQuestion(const DNSMessage *msg, const mDNSu8 *ptr, const mDNSu8 *end);

Expand Down
42 changes: 30 additions & 12 deletions mDNSCore/mDNSEmbeddedAPI.h
Expand Up @@ -60,6 +60,15 @@
Change History (most recent first):
$Log: mDNSEmbeddedAPI.h,v $
Revision 1.284 2005/07/29 18:04:22 ksekar
<rdar://problem/4137930> Hostname registration should register IPv6 AAAA record with DNS Update
Revision 1.283 2005/05/13 20:45:09 ksekar
<rdar://problem/4074400> Rapid wide-area txt record updates don't work
Revision 1.282 2005/03/16 00:42:32 ksekar
<rdar://problem/4012279> Long-lived queries not working on Windows
Revision 1.281 2005/02/25 17:47:44 ksekar
<rdar://problem/4021868> SendServiceRegistration fails on wake from sleep
Expand Down Expand Up @@ -1367,6 +1376,11 @@ typedef packedstruct
mDNSu32 lease;
} LLQOptData;

#define LLQ_OPTLEN ((3 * sizeof(mDNSu16)) + 8 + sizeof(mDNSu32))
// Windows adds pad bytes to sizeof(LLQOptData). Use this macro when setting length fields or validating option rdata from
// off the wire. Use sizeof(LLQOptData) when dealing with structures (e.g. memcpy). Never memcpy between on-the-wire
// representation and a structure

// NOTE: rdataOpt format may be repeated an arbitrary number of times in a single resource record
typedef packedstruct
{
Expand Down Expand Up @@ -1501,10 +1515,11 @@ typedef struct
mDNSBool SRVChanged; // temporarily deregistered service because its SRV target or port changed

// uDNS_UpdateRecord support fields
mDNSBool UpdateQueued; // Update the rdata once the current pending operation completes
RData *UpdateRData; // Pointer to new RData while a record update is in flight
mDNSu16 UpdateRDLen; // length of above field
mDNSRecordUpdateCallback *UpdateRDCallback; // client callback to free old rdata
RData *OrigRData; mDNSu16 OrigRDLen; // previously registered, being deleted
RData *InFlightRData; mDNSu16 InFlightRDLen; // currently being registered
RData *QueuedRData; mDNSu16 QueuedRDLen; // if the client call Update while an update is in flight, we must finish the
// pending operation (re-transmitting if necessary) THEN register the queued update
mDNSRecordUpdateCallback *UpdateRDCallback; // client callback to free old rdata
} uDNS_RegInfo;

struct AuthRecord_struct
Expand Down Expand Up @@ -1622,7 +1637,9 @@ typedef struct
typedef struct uDNS_HostnameInfo
{
struct uDNS_HostnameInfo *next;
AuthRecord *ar; // registered address record
domainname fqdn;
AuthRecord *arv4; // registered IPv4 address record
AuthRecord *arv6; // registered IPv6 address record
mDNSRecordCallback *StatusCallback; // callback to deliver success or error code to client layer
const void *StatusContext; // Client Context
} uDNS_HostnameInfo;
Expand Down Expand Up @@ -1773,8 +1790,8 @@ typedef struct
#define kLLQOp_Refresh 2
#define kLLQOp_Event 3

#define LLQ_OPT_SIZE (2 * sizeof(mDNSu16)) + sizeof(LLQOptData)
#define LEASE_OPT_SIZE (2 * sizeof(mDNSu16)) + sizeof(mDNSs32)
#define LLQ_OPT_RDLEN ((2 * sizeof(mDNSu16)) + LLQ_OPTLEN)
#define LEASE_OPT_RDLEN (2 * sizeof(mDNSu16)) + sizeof(mDNSs32)

// LLQ Errror Codes
enum
Expand Down Expand Up @@ -2005,8 +2022,9 @@ typedef struct
mDNSu16 NextMessageID;
DNSServer *Servers; // list of DNS servers
mDNSAddr Router;
mDNSAddr PrimaryIP; // Address of primary interface
mDNSAddr MappedPrimaryIP; // Cache of public address if PrimaryIP is behind a NAT
mDNSAddr AdvertisedV4; // IPv4 address pointed to by hostname
mDNSAddr MappedV4; // Cache of public address if PrimaryIP is behind a NAT
mDNSAddr AdvertisedV6; // IPv6 address pointed to by hostname
NATTraversalInfo *LLQNatInfo; // Nat port mapping to receive LLQ events
domainname ServiceRegDomain; // (going away w/ multi-user support)
struct uDNS_AuthInfo *AuthInfoList; // list of domains requiring authentication for updates.
Expand Down Expand Up @@ -2506,10 +2524,10 @@ extern mStatus mDNS_SetSecretForZone(mDNS *m, const domainname *zone, const doma

// Hostname/Unicast Interface Configuration

// All hostnames advertised point to a single IP address, set via SetPrimaryInterfaceInfo. Invoking this routine
// All hostnames advertised point to one IPv4 address and/or one IPv6 address, set via SetPrimaryInterfaceInfo. Invoking this routine
// updates all existing hostnames to point to the new address.

// A hostname is added via AddDynDNSHostName, which points to the primary interface's IP address.
// A hostname is added via AddDynDNSHostName, which points to the primary interface's v4 and/or v6 addresss

// The status callback is invoked to convey success or failure codes - the callback should not modify the AuthRecord or free memory.
// Added hostnames may be removed (deregistered) via mDNS_RemoveDynDNSHostName.
Expand All @@ -2527,7 +2545,7 @@ extern mStatus mDNS_SetSecretForZone(mDNS *m, const domainname *zone, const doma

extern void mDNS_AddDynDNSHostName(mDNS *m, const domainname *fqdn, mDNSRecordCallback *StatusCallback, const void *StatusContext);
extern void mDNS_RemoveDynDNSHostName(mDNS *m, const domainname *fqdn);
extern void mDNS_SetPrimaryInterfaceInfo(mDNS *m, const mDNSAddr *addr, const mDNSAddr *router);
extern void mDNS_SetPrimaryInterfaceInfo(mDNS *m, const mDNSAddr *v4addr, const mDNSAddr *v6addr, const mDNSAddr *router);
extern void mDNS_UpdateLLQs(mDNS *m);
extern void mDNS_AddDNSServer(mDNS *const m, const mDNSAddr *dnsAddr, const domainname *domain);
extern void mDNS_DeleteDNSServers(mDNS *const m);
Expand Down

0 comments on commit 80515f0

Please sign in to comment.