DNS: force authorative answers

pull/214/head
M66B 7 months ago
parent 12d8de8b54
commit 06097775b4

@ -55,6 +55,7 @@ import org.minidns.record.Record;
import org.minidns.record.SRV; import org.minidns.record.SRV;
import org.minidns.record.TXT; import org.minidns.record.TXT;
import org.minidns.source.AbstractDnsDataSource; import org.minidns.source.AbstractDnsDataSource;
import org.minidns.source.DnsDataSource;
import org.minidns.util.MultipleIoException; import org.minidns.util.MultipleIoException;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -194,6 +195,8 @@ public class DnsHelper {
client.getDataSource().setTimeout(timeout * 1000); client.getDataSource().setTimeout(timeout * 1000);
client.setDataSource(new AuthoritiveDataSource(client.getDataSource()));
// https://github.com/MiniDNS/minidns/issues/102 // https://github.com/MiniDNS/minidns/issues/102
if (client instanceof DnssecClient && dns_custom) if (client instanceof DnssecClient && dns_custom)
((DnssecClient) client).setUseHardcodedDnsServers(false); ((DnssecClient) client).setUseHardcodedDnsServers(false);
@ -207,8 +210,7 @@ public class DnsHelper {
try { try {
data.throwIfErrorResponse(); data.throwIfErrorResponse();
} catch (Throwable ex) { } catch (Throwable ex) {
Log.e("DNS error message=" + ex.getMessage()); Log.i("DNS error message=" + ex.getMessage());
Log.e(ex);
throw ex; 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 { static class DnsRecord {
String query; String query;
String response; String response;

Loading…
Cancel
Save