DNS: force authorative answers

This commit is contained in:
M66B 2024-01-30 20:42:33 +01:00
parent 12d8de8b54
commit 06097775b4
1 changed files with 22 additions and 2 deletions

View File

@ -55,6 +55,7 @@ import org.minidns.record.Record;
import org.minidns.record.SRV;
import org.minidns.record.TXT;
import org.minidns.source.AbstractDnsDataSource;
import org.minidns.source.DnsDataSource;
import org.minidns.util.MultipleIoException;
import java.io.ByteArrayOutputStream;
@ -194,6 +195,8 @@ public class DnsHelper {
client.getDataSource().setTimeout(timeout * 1000);
client.setDataSource(new AuthoritiveDataSource(client.getDataSource()));
// https://github.com/MiniDNS/minidns/issues/102
if (client instanceof DnssecClient && dns_custom)
((DnssecClient) client).setUseHardcodedDnsServers(false);
@ -207,8 +210,7 @@ public class DnsHelper {
try {
data.throwIfErrorResponse();
} catch (Throwable ex) {
Log.e("DNS error message=" + ex.getMessage());
Log.e(ex);
Log.i("DNS error message=" + ex.getMessage());
throw ex;
}
@ -628,6 +630,24 @@ public class DnsHelper {
}
}
private static class AuthoritiveDataSource extends AbstractDnsDataSource {
private final DnsDataSource delegate;
AuthoritiveDataSource(DnsDataSource delegate) {
this.delegate = delegate;
}
@Override
public DnsQueryResult query(DnsMessage message, InetAddress address, int port) throws IOException {
DnsQueryResult result = delegate.query(message, address, port);
DnsMessage answer = new DnsMessage(result.response.toArray())
.asBuilder()
.setRecursionAvailable(true)
.build();
return new StandardDnsQueryResult(address, port, result.queryMethod, result.query, answer);
}
}
static class DnsRecord {
String query;
String response;