Commit 21f07a48 authored by Mygod's avatar Mygod

Prevent querying PTR on custom Network

parent 9b51f91e
...@@ -121,7 +121,7 @@ sealed class DnsResolverCompat { ...@@ -121,7 +121,7 @@ sealed class DnsResolverCompat {
override suspend fun resolveOnActiveNetwork(host: String) = override suspend fun resolveOnActiveNetwork(host: String) =
GlobalScope.async(unboundedIO) { InetAddress.getAllByName(host) }.await() GlobalScope.async(unboundedIO) { InetAddress.getAllByName(host) }.await()
private suspend fun resolveRaw(query: ByteArray, private suspend fun resolveRaw(query: ByteArray, networkSpecified: Boolean = true,
hostResolver: suspend (String) -> Array<InetAddress>): ByteArray { hostResolver: suspend (String) -> Array<InetAddress>): ByteArray {
val request = try { val request = try {
Message(query) Message(query)
...@@ -137,12 +137,13 @@ sealed class DnsResolverCompat { ...@@ -137,12 +137,13 @@ sealed class DnsResolverCompat {
Type.A -> false Type.A -> false
Type.AAAA -> true Type.AAAA -> true
Type.PTR -> { Type.PTR -> {
// Android does not provide a PTR lookup API for Network prior to Android 10
if (networkSpecified) throw UnsupportedOperationException()
val ip = try { val ip = try {
ReverseMap.fromName(question.name) ReverseMap.fromName(question.name)
} catch (e: IOException) { } catch (e: IOException) {
throw UnsupportedOperationException(e) // unrecognized PTR name throw UnsupportedOperationException(e) // unrecognized PTR name
} }
// Android does not provide a PTR lookup API for Network prior to Android 10
val hostname = Name.fromString(GlobalScope.async(unboundedIO) { ip.hostName }.await()) val hostname = Name.fromString(GlobalScope.async(unboundedIO) { ip.hostName }.await())
return prepareDnsResponse(request).apply { return prepareDnsResponse(request).apply {
addRecord(PTRRecord(question.name, DClass.IN, TTL, hostname), Section.ANSWER) addRecord(PTRRecord(question.name, DClass.IN, TTL, hostname), Section.ANSWER)
...@@ -164,7 +165,7 @@ sealed class DnsResolverCompat { ...@@ -164,7 +165,7 @@ sealed class DnsResolverCompat {
override suspend fun resolveRaw(network: Network, query: ByteArray) = override suspend fun resolveRaw(network: Network, query: ByteArray) =
resolveRaw(query) { resolve(network, it) } resolveRaw(query) { resolve(network, it) }
override suspend fun resolveRawOnActiveNetwork(query: ByteArray) = override suspend fun resolveRawOnActiveNetwork(query: ByteArray) =
resolveRaw(query, this::resolveOnActiveNetwork) resolveRaw(query, false, this::resolveOnActiveNetwork)
} }
@TargetApi(23) @TargetApi(23)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment