summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSMacOSX
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSMacOSX')
-rw-r--r--mDNSResponder/mDNSMacOSX/BATS/mDNSResponder.plist627
-rw-r--r--mDNSResponder/mDNSMacOSX/dnssdutil-entitlements.plist12
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSMacOSX.c19
-rw-r--r--mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj29
4 files changed, 680 insertions, 7 deletions
diff --git a/mDNSResponder/mDNSMacOSX/BATS/mDNSResponder.plist b/mDNSResponder/mDNSMacOSX/BATS/mDNSResponder.plist
new file mode 100644
index 00000000..66a8c49d
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/BATS/mDNSResponder.plist
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Project</key>
+ <string>mDNSResponder</string>
+ <key>RadarComponents</key>
+ <dict>
+ <key>Name</key>
+ <string>mDNSResponder</string>
+ <key>Version</key>
+ <string>all</string>
+ </dict>
+ <key>Tests</key>
+ <array>
+ <dict>
+ <key>TestName</key>
+ <string>GAIPerf Advanced</string>
+ <key>Description</key>
+ <string>Tests correctness of resolving hostnames via DNS using the GAIPerf Advanced test suite.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <false/>
+ <key>Timeout</key>
+ <integer>600</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>gaiperf</string>
+ <string>--suite</string>
+ <string>advanced</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--skipPathEval</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 1-1-1</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of one service instance with a one-byte TXT record and one pair of A and AAAA records.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>1</string>
+ <string>--txtSize</string>
+ <string>1</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>1</string>
+ <string>--countAAAA</string>
+ <string>1</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 1-1-1 (No Additionals)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of one service instance with a one-byte TXT record and one pair of A and AAAA records. Responses from mdnsreplier contain no additional answers.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>1</string>
+ <string>--txtSize</string>
+ <string>1</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>1</string>
+ <string>--countAAAA</string>
+ <string>1</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--noAdditionals</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 10-100-2</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of ten service instances with 100-byte TXT records and two pairs of A and AAAA records.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>10</string>
+ <string>--txtSize</string>
+ <string>100</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>2</string>
+ <string>--countAAAA</string>
+ <string>2</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 10-100-2 (No Additionals)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of ten service instances with 100-byte TXT records and two pairs of A and AAAA records. Responses from mdnsreplier contain no additonal answers.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>10</string>
+ <string>--txtSize</string>
+ <string>100</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>2</string>
+ <string>--countAAAA</string>
+ <string>2</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--noAdditionals</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 100-500-5</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of 100 service instances with 500-byte TXT records and five pairs of A and AAAA records.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>100</string>
+ <string>--txtSize</string>
+ <string>500</string>
+ <string>--browseTime</string>
+ <string>5</string>
+ <string>--countA</string>
+ <string>5</string>
+ <string>--countAAAA</string>
+ <string>5</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 100-500-5 (No Additionals)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of 100 service instances with 500-byte TXT records and five pairs of A and AAAA records. Responses from mdnsreplier contain no additonal answers.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>100</string>
+ <string>--txtSize</string>
+ <string>500</string>
+ <string>--browseTime</string>
+ <string>5</string>
+ <string>--countA</string>
+ <string>5</string>
+ <string>--countAAAA</string>
+ <string>5</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--noAdditionals</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 1-1-1 (No Cache Flush)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of one service instance with a one-byte TXT record and one pair of A and AAAA records. Cache is not flushed beforehand.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>1</string>
+ <string>--txtSize</string>
+ <string>1</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>1</string>
+ <string>--countAAAA</string>
+ <string>1</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 1-1-1 (No Cache Flush, No Additionals)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of one service instance with a one-byte TXT record and one pair of A and AAAA records. Cache is not flushed beforehand. Responses from mdnsreplier contain no additional answers.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>1</string>
+ <string>--txtSize</string>
+ <string>1</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>1</string>
+ <string>--countAAAA</string>
+ <string>1</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--noAdditionals</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 10-100-2 (No Cache Flush)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of ten service instances with 100-byte TXT records and two pairs of A and AAAA records. Cache is not flushed beforehand.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>10</string>
+ <string>--txtSize</string>
+ <string>100</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>2</string>
+ <string>--countAAAA</string>
+ <string>2</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 10-100-2 (No Cache Flush, No Additionals)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of ten service instances with 100-byte TXT records and two pairs of A and AAAA records. Cache is not flushed beforehand. Responses from mdnsreplier contain no additional answers.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>10</string>
+ <string>--txtSize</string>
+ <string>100</string>
+ <string>--browseTime</string>
+ <string>3</string>
+ <string>--countA</string>
+ <string>2</string>
+ <string>--countAAAA</string>
+ <string>2</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--noAdditionals</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 100-500-5 (No Cache Flush)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of 100 service instances with 500-byte TXT records and five pairs of A and AAAA records. Cache is not flushed beforehand.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>100</string>
+ <string>--txtSize</string>
+ <string>500</string>
+ <string>--browseTime</string>
+ <string>5</string>
+ <string>--countA</string>
+ <string>5</string>
+ <string>--countAAAA</string>
+ <string>5</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery 100-500-5 (No Cache Flush, No Additionals)</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of 100 service instances with 500-byte TXT records and five pairs of A and AAAA records. Cache is not flushed beforehand. Responses from mdnsreplier contain no additional answers.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>100</string>
+ <string>--txtSize</string>
+ <string>500</string>
+ <string>--browseTime</string>
+ <string>5</string>
+ <string>--countA</string>
+ <string>5</string>
+ <string>--countAAAA</string>
+ <string>5</string>
+ <string>--ipv4</string>
+ <string>--ipv6</string>
+ <string>--noAdditionals</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery w/Packet Drops 10</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of ten service instances with 100-byte TXT records and two pairs of A and AAAA records. The first three responses per service instance are subject to a 0.5 probability of being dropped to test query retries.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>30</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>10</string>
+ <string>--txtSize</string>
+ <string>100</string>
+ <string>--browseTime</string>
+ <string>16</string>
+ <string>--countA</string>
+ <string>2</string>
+ <string>--countAAAA</string>
+ <string>2</string>
+ <string>--ipv6</string>
+ <string>--udrop</string>
+ <string>0.5</string>
+ <string>--mdrop</string>
+ <string>0.5</string>
+ <string>--maxDropCount</string>
+ <string>3</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNS Discovery w/Packet Drops 100</string>
+ <key>Description</key>
+ <string>Tests mDNS discovery and resolution of 100 service instances with 100-byte TXT records and two pairs of A and AAAA records. The first three responses per service instance are subject to a 0.5 probability of being dropped to test query retries.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>30</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>mdnsdiscovery</string>
+ <string>--instanceCount</string>
+ <string>100</string>
+ <string>--txtSize</string>
+ <string>100</string>
+ <string>--browseTime</string>
+ <string>18</string>
+ <string>--countA</string>
+ <string>2</string>
+ <string>--countAAAA</string>
+ <string>2</string>
+ <string>--ipv6</string>
+ <string>--udrop</string>
+ <string>0.5</string>
+ <string>--mdrop</string>
+ <string>0.5</string>
+ <string>--maxDropCount</string>
+ <string>3</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--flushCache</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>DotLocal Queries</string>
+ <key>Description</key>
+ <string>Tests DNS and mDNS queries for domain names in the local domain.</string>
+ <key>AsRoot</key>
+ <false/>
+ <key>RequiresWiFi</key>
+ <true/>
+ <key>Timeout</key>
+ <integer>40</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>dotlocal</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>TCP Fallback</string>
+ <key>Description</key>
+ <string>Tests mDNSResponder&apos;s TCP fallback mechanism, which is triggered by UDP responses with invalid message IDs that would otherwise be acceptable.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <false/>
+ <key>Timeout</key>
+ <integer>60</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/dnssdutil</string>
+ <string>test</string>
+ <string>gaiperf</string>
+ <string>--suite</string>
+ <string>basic</string>
+ <string>--format</string>
+ <string>json</string>
+ <string>--appendNewLine</string>
+ <string>--skipPathEval</string>
+ <string>--badUDPMode</string>
+ </array>
+ </dict>
+ <dict>
+ <key>TestName</key>
+ <string>mDNSResponder Leaks</string>
+ <key>Description</key>
+ <string>Checks mDNSResponder for memory leaks.</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>RequiresWiFi</key>
+ <false/>
+ <key>Timeout</key>
+ <integer>10</integer>
+ <key>IgnoreOutput</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/bin/leaks</string>
+ <string>mDNSResponder</string>
+ </array>
+ </dict>
+ </array>
+</dict>
+</plist>
diff --git a/mDNSResponder/mDNSMacOSX/dnssdutil-entitlements.plist b/mDNSResponder/mDNSMacOSX/dnssdutil-entitlements.plist
new file mode 100644
index 00000000..750f16a2
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/dnssdutil-entitlements.plist
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.security.network.client</key>
+ <true/>
+ <key>com.apple.security.network.server</key>
+ <true/>
+ <key>com.apple.SystemConfiguration.SCDynamicStore-write-access</key>
+ <true/>
+</dict>
+</plist>
diff --git a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
index 51fc67a8..47142935 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
+++ b/mDNSResponder/mDNSMacOSX/mDNSMacOSX.c
@@ -6875,7 +6875,7 @@ typedef struct
#include <IOKit/IOKitLib.h>
#include <dns_util.h>
-mDNSlocal mDNSu16 GetPortArray(int trans, mDNSIPPort *portarray)
+mDNSlocal mDNSu16 GetPortArray(int trans, mDNSIPPort *portarray, mDNSBool TCPKAOnly, mDNSBool supportsTCPKA)
{
mDNS *const m = &mDNSStorage;
const domainlabel *const tp = (trans == mDNSTransport_UDP) ? (const domainlabel *)"\x4_udp" : (const domainlabel *)"\x4_tcp";
@@ -6884,6 +6884,14 @@ mDNSlocal mDNSu16 GetPortArray(int trans, mDNSIPPort *portarray)
AuthRecord *rr;
for (rr = m->ResourceRecords; rr; rr=rr->next)
{
+ mDNSBool isKeepAliveRecord = mDNS_KeepaliveRecord(&rr->resrec);
+ // Skip over all other records if we are registering TCP KeepAlive records only
+ // Skip over TCP KeepAlive records if the policy prohibits it or if the interface does not support TCP Keepalive
+ // supportsTCPKA is set to true if both policy and interface allow TCP Keepalive
+ if ((TCPKAOnly && !isKeepAliveRecord) || (isKeepAliveRecord && !supportsTCPKA)) {
+ continue;
+ }
+
if (rr->resrec.rrtype == kDNSType_SRV && SameDomainLabel(ThirdLabel(rr->resrec.name)->c, tp->c))
{
if (!portarray)
@@ -7013,6 +7021,7 @@ mDNSlocal void GetProxyRecords(DNSMessage *const msg, uint32_t *const numbytes,
// Skip over all other records if we are registering TCP KeepAlive records only
// Skip over TCP KeepAlive records if the policy prohibits it or if the interface does not support TCP Keepalive
+ // supportsTCPKA is set to true if both policy and interface allow TCP Keepalive
if ((TCPKAOnly && !isKeepAliveRecord) || (isKeepAliveRecord && !supportsTCPKA))
continue;
@@ -7134,8 +7143,8 @@ mDNSexport mStatus ActivateLocalProxy(NetworkInterfaceInfo *const intf, mDNSBool
mDNSOffloadCmd cmd;
mDNSPlatformMemZero(&cmd, sizeof(cmd)); // When compiling 32-bit, make sure top 32 bits of 64-bit pointers get initialized to zero
cmd.command = cmd_mDNSOffloadRR;
- cmd.numUDPPorts = GetPortArray(mDNSTransport_UDP, mDNSNULL);
- cmd.numTCPPorts = GetPortArray(mDNSTransport_TCP, mDNSNULL);
+ cmd.numUDPPorts = GetPortArray(mDNSTransport_UDP, mDNSNULL, TCPKAOnly, supportsTCPKA);
+ cmd.numTCPPorts = GetPortArray(mDNSTransport_TCP, mDNSNULL, TCPKAOnly, supportsTCPKA);
cmd.numRRRecords = CountProxyRecords(&cmd.rrBufferSize, intf, TCPKAOnly, supportsTCPKA);
cmd.compression = sizeof(DNSMessageHeader);
@@ -7151,8 +7160,8 @@ mDNSexport mStatus ActivateLocalProxy(NetworkInterfaceInfo *const intf, mDNSBool
cmd.tcpPorts.ptr, cmd.numTCPPorts);
if (msg && cmd.rrRecords.ptr) GetProxyRecords(msg, &cmd.rrBufferSize, cmd.rrRecords.ptr, TCPKAOnly, supportsTCPKA);
- if (cmd.udpPorts.ptr) cmd.numUDPPorts = GetPortArray(mDNSTransport_UDP, cmd.udpPorts.ptr);
- if (cmd.tcpPorts.ptr) cmd.numTCPPorts = GetPortArray(mDNSTransport_TCP, cmd.tcpPorts.ptr);
+ if (cmd.udpPorts.ptr) cmd.numUDPPorts = GetPortArray(mDNSTransport_UDP, cmd.udpPorts.ptr, TCPKAOnly, supportsTCPKA);
+ if (cmd.tcpPorts.ptr) cmd.numTCPPorts = GetPortArray(mDNSTransport_TCP, cmd.tcpPorts.ptr, TCPKAOnly, supportsTCPKA);
char outputData[2];
size_t outputDataSize = sizeof(outputData);
diff --git a/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj b/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
index bbbd12ff..8067d931 100644
--- a/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
+++ b/mDNSResponder/mDNSMacOSX/mDNSResponder.xcodeproj/project.pbxproj
@@ -347,6 +347,7 @@
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 */; };
+ 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 */; };
D284BE590ADD80740027CCDF /* uDNS.c in Sources */ = {isa = PBXBuildFile; fileRef = 7F18A9F70587CEF6001880B3 /* uDNS.c */; };
@@ -774,6 +775,17 @@
name = "Copy AppleInternal Logging Profile";
runOnlyForDeploymentPostprocessing = 1;
};
+ BDF8BB8A2208E09D00419B62 /* Copy BATS test plist */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /AppleInternal/CoreOS/BATS/unit_tests;
+ dstSubfolderSpec = 0;
+ files = (
+ BDF8BB902208E2A800419B62 /* mDNSResponder.plist in Copy BATS test plist */,
+ );
+ name = "Copy BATS test plist";
+ runOnlyForDeploymentPostprocessing = 1;
+ };
D284BE6A0ADD80740027CCDF /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -1006,6 +1018,7 @@
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>"; };
+ 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; };
D284BEBE0ADD809A0027CCDF /* libjdns_sd.jnilib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libjdns_sd.jnilib; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1297,6 +1310,7 @@
BD9BA7561EAF929C00658CCF /* Frameworks */,
BDB61842206ADB7700AFF600 /* LoggingProfiles */,
BD28AE8D207B88F600F0B257 /* Scripts */,
+ BDF8BB8E2208E26E00419B62 /* BATS */,
);
name = mDNSResponder;
sourceTree = "<group>";
@@ -1656,6 +1670,14 @@
path = AppleInternal;
sourceTree = "<group>";
};
+ BDF8BB8E2208E26E00419B62 /* BATS */ = {
+ isa = PBXGroup;
+ children = (
+ BDF8BB8F2208E26E00419B62 /* mDNSResponder.plist */,
+ );
+ path = BATS;
+ sourceTree = "<group>";
+ };
DB2CC4420662DCE500335AB3 /* Java Support */ = {
isa = PBXGroup;
children = (
@@ -2203,6 +2225,7 @@
8418673D15AB8BFF00BB7F70 /* Copy Base Logging Profile */,
BD75E93F206ADEAD00656ED3 /* Copy AppleInternal Logging Profile */,
BD28AE8C207B888E00F0B257 /* Copy diagnose scripts */,
+ BDF8BB8A2208E09D00419B62 /* Copy BATS test plist */,
);
buildRules = (
);
@@ -3718,7 +3741,6 @@
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
@@ -3763,7 +3785,6 @@
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
@@ -4611,6 +4632,8 @@
CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;
+ CODE_SIGN_ENTITLEMENTS = "dnssdutil-entitlements.plist";
+ CODE_SIGN_IDENTITY = "-";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
@@ -4676,6 +4699,8 @@
CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;
+ CODE_SIGN_ENTITLEMENTS = "dnssdutil-entitlements.plist";
+ CODE_SIGN_IDENTITY = "-";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",