mirror of https://github.com/M66B/FairEmail.git
DNS: force authorative answers
This commit is contained in:
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…
Reference in New Issue