From f51c8d8506bf8f98cd7ef8937094f8191e3a328e Mon Sep 17 00:00:00 2001 From: Christopher Batey Date: Mon, 5 Nov 2018 08:41:47 +0000 Subject: [PATCH] Read port/weight/priority as unsigned shorts for SRVRecords (#25842) * Read port/weight/priority as unsigned shorts for SRVRecords * Delete writing code for resource records. Isn't used/tested. * Mima and review feedback --- .../src/test/bind/etc/db.foo.test | 4 +- .../dns/AsyncDnsResolverIntegrationSpec.scala | 8 ++- .../mima-filters/2.5.17.backwards.excludes | 9 +++ .../akka/io/dns/DnsResourceRecords.scala | 67 +------------------ .../akka/io/dns/internal/DnsMessage.scala | 10 ++- 5 files changed, 23 insertions(+), 75 deletions(-) diff --git a/akka-actor-tests/src/test/bind/etc/db.foo.test b/akka-actor-tests/src/test/bind/etc/db.foo.test index 4386b61b66..ce39716ace 100755 --- a/akka-actor-tests/src/test/bind/etc/db.foo.test +++ b/akka-actor-tests/src/test/bind/etc/db.foo.test @@ -72,8 +72,8 @@ many in AAAA 2001:985:965:1:ba27:ebff:fe5f:9d2d many in AAAA 2001:985:965:1:ba27:ebff:fe5f:9d2e many in AAAA 2001:985:965:1:ba27:ebff:fe5f:9d2f -service.tcp 86400 IN SRV 10 60 5060 a-single -service.tcp 86400 IN SRV 10 40 5070 a-double +service.tcp 86400 IN SRV 10 65534 5060 a-single +service.tcp 86400 IN SRV 65533 40 65535 a-double cname-in IN CNAME a-double cname-ext IN CNAME a-single.bar.example. diff --git a/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala b/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala index ac7904ccff..d928ec2bd5 100644 --- a/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/dns/AsyncDnsResolverIntegrationSpec.scala @@ -34,8 +34,10 @@ class AsyncDnsResolverIntegrationSpec extends AkkaSpec( val hostPort = AsyncDnsResolverIntegrationSpec.dockerDnsServerPort "Resolver" must { - if (!dockerAvailable()) + if (!dockerAvailable()) { + system.log.error("Test not run as docker is not available") pending + } "resolve single A record" in { val name = "a-single.foo.test" @@ -122,8 +124,8 @@ class AsyncDnsResolverIntegrationSpec extends AkkaSpec( answer.name shouldEqual name answer.records.collect { case r: SRVRecord ⇒ r }.toSet shouldEqual Set( - SRVRecord("service.tcp.foo.test", 86400, 10, 60, 5060, "a-single.foo.test"), - SRVRecord("service.tcp.foo.test", 86400, 10, 40, 5070, "a-double.foo.test") + SRVRecord("service.tcp.foo.test", 86400, 10, 65534, 5060, "a-single.foo.test"), + SRVRecord("service.tcp.foo.test", 86400, 65533, 40, 65535, "a-double.foo.test") ) } diff --git a/akka-actor/src/main/mima-filters/2.5.17.backwards.excludes b/akka-actor/src/main/mima-filters/2.5.17.backwards.excludes index 7f469c7925..858cad6f04 100644 --- a/akka-actor/src/main/mima-filters/2.5.17.backwards.excludes +++ b/akka-actor/src/main/mima-filters/2.5.17.backwards.excludes @@ -6,3 +6,12 @@ ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.CNameRecord.ttl" ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.AAAARecord.ttl") ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.ResourceRecord.ttl") ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.SRVRecord.ttl") + +# Removal of internal methods #25760 +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.UnknownRecord.write") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.ARecord.write") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.CNameRecord.write") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.AAAARecord.write") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.ResourceRecord.write") +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.io.dns.SRVRecord.write") + diff --git a/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala b/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala index d48b3a3543..388a46b560 100644 --- a/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala +++ b/akka-actor/src/main/scala/akka/io/dns/DnsResourceRecords.scala @@ -16,32 +16,11 @@ import scala.annotation.switch @ApiMayChange sealed abstract class ResourceRecord(val name: String, val ttlInSeconds: Int, val recType: Short, val recClass: Short) extends NoSerializationVerificationNeeded { - - /** - * INTERNAL API - */ - @InternalApi - private[dns] def write(it: ByteStringBuilder): Unit = { - DomainName.write(it, name) - it.putShort(recType) - it.putShort(recClass) - } } @ApiMayChange final case class ARecord(override val name: String, override val ttlInSeconds: Int, ip: InetAddress) extends ResourceRecord(name, ttlInSeconds, RecordType.A.code, RecordClass.IN.code) { - - /** - * INTERNAL API - */ - @InternalApi - private[dns] override def write(it: ByteStringBuilder): Unit = { - super.write(it) - val addr = ip.getAddress - it.putShort(addr.length) - it.putBytes(addr) - } } /** @@ -59,17 +38,6 @@ private[dns] object ARecord { @ApiMayChange final case class AAAARecord(override val name: String, override val ttlInSeconds: Int, ip: Inet6Address) extends ResourceRecord(name, ttlInSeconds, RecordType.AAAA.code, RecordClass.IN.code) { - - /** - * INTERNAL API - */ - @InternalApi - private[dns] override def write(it: ByteStringBuilder): Unit = { - super.write(it) - val addr = ip.getAddress - it.putShort(addr.length) - it.putBytes(addr) - } } /** @@ -92,15 +60,6 @@ private[dns] object AAAARecord { @ApiMayChange final case class CNameRecord(override val name: String, override val ttlInSeconds: Int, canonicalName: String) extends ResourceRecord(name, ttlInSeconds, RecordType.CNAME.code, RecordClass.IN.code) { - /** - * INTERNAL API - */ - @InternalApi - override def write(it: ByteStringBuilder): Unit = { - super.write(it) - it.putShort(DomainName.length(name)) - DomainName.write(it, name) - } } @InternalApi @@ -117,17 +76,6 @@ private[dns] object CNameRecord { @ApiMayChange final case class SRVRecord(override val name: String, override val ttlInSeconds: Int, priority: Int, weight: Int, port: Int, target: String) extends ResourceRecord(name, ttlInSeconds, RecordType.SRV.code, RecordClass.IN.code) { - /** - * INTERNAL API - */ - @InternalApi - override def write(it: ByteStringBuilder): Unit = { - super.write(it) - it.putShort(priority) - it.putShort(weight) - it.putShort(port) - DomainName.write(it, target) - } } /** @@ -140,9 +88,9 @@ private[dns] object SRVRecord { */ @InternalApi def parseBody(name: String, ttlInSeconds: Int, length: Short, it: ByteIterator, msg: ByteString): SRVRecord = { - val priority = it.getShort - val weight = it.getShort - val port = it.getShort + val priority = it.getShort.toInt & 0xFFFF + val weight = it.getShort.toInt & 0xFFFF + val port = it.getShort.toInt & 0xFFFF SRVRecord(name, ttlInSeconds, priority, weight, port, DomainName.parse(it, msg)) } } @@ -151,15 +99,6 @@ private[dns] object SRVRecord { final case class UnknownRecord(override val name: String, override val ttlInSeconds: Int, override val recType: Short, override val recClass: Short, data: ByteString) extends ResourceRecord(name, ttlInSeconds, recType, recClass) { - /** - * INTERNAL API - */ - @InternalApi - override def write(it: ByteStringBuilder): Unit = { - super.write(it) - it.putShort(data.length) - it.append(data) - } } /** diff --git a/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala b/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala index 186596f0be..9cc9b182d8 100644 --- a/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala +++ b/akka-actor/src/main/scala/akka/io/dns/internal/DnsMessage.scala @@ -111,14 +111,12 @@ private[internal] case class Message( ret.putShort(id) .putShort(flags.flags) .putShort(questions.size) - .putShort(answerRecs.size) - .putShort(authorityRecs.size) - .putShort(additionalRecs.size) + // We only send questions, never answers with resource records in + .putShort(0) + .putShort(0) + .putShort(0) questions.foreach(_.write(ret)) - answerRecs.foreach(_.write(ret)) - authorityRecs.foreach(_.write(ret)) - additionalRecs.foreach(_.write(ret)) } }