new resolver fall back to normal dns if dnssec verfication fails
This commit is contained in:
parent
cbce73c301
commit
2c5250a82c
|
@ -14,7 +14,9 @@ import de.measite.minidns.DNSClient;
|
|||
import de.measite.minidns.DNSName;
|
||||
import de.measite.minidns.Question;
|
||||
import de.measite.minidns.Record;
|
||||
import de.measite.minidns.dnssec.DNSSECValidationFailedException;
|
||||
import de.measite.minidns.hla.DnssecResolverApi;
|
||||
import de.measite.minidns.hla.ResolverApi;
|
||||
import de.measite.minidns.hla.ResolverResult;
|
||||
import de.measite.minidns.record.A;
|
||||
import de.measite.minidns.record.AAAA;
|
||||
|
@ -39,13 +41,13 @@ public class Resolver {
|
|||
List<Result> results = new ArrayList<>();
|
||||
try {
|
||||
results.addAll(resolveSrv(domain,true));
|
||||
} catch (IOException e) {
|
||||
//ignore
|
||||
} catch (Throwable t) {
|
||||
Log.d(Config.LOGTAG,Resolver.class.getSimpleName()+": "+t.getMessage());
|
||||
}
|
||||
try {
|
||||
results.addAll(resolveSrv(domain,false));
|
||||
} catch (IOException e) {
|
||||
//ignore
|
||||
} catch (Throwable t) {
|
||||
Log.d(Config.LOGTAG,Resolver.class.getSimpleName()+": "+t.getMessage());
|
||||
}
|
||||
if (results.size() == 0) {
|
||||
results.add(Result.createDefault(domain));
|
||||
|
@ -56,7 +58,13 @@ public class Resolver {
|
|||
|
||||
private static List<Result> resolveSrv(String domain, final boolean directTls) throws IOException {
|
||||
Question question = new Question((directTls ? DIRECT_TLS_SERVICE : STARTTLS_SERICE)+"._tcp."+domain,Record.TYPE.SRV);
|
||||
ResolverResult<Data> result = DnssecResolverApi.INSTANCE.resolve(question);
|
||||
ResolverResult<Data> result;
|
||||
try {
|
||||
result = DnssecResolverApi.INSTANCE.resolve(question);
|
||||
} catch (DNSSECValidationFailedException e) {
|
||||
Log.d(Config.LOGTAG,Resolver.class.getSimpleName()+": error resolving SRV record with DNSSEC. Trying DNS instead "+e.getMessage());
|
||||
result = ResolverApi.INSTANCE.resolve(question);
|
||||
}
|
||||
List<Result> results = new ArrayList<>();
|
||||
for(Data record : result.getAnswersOrEmptySet()) {
|
||||
if (record instanceof SRV) {
|
||||
|
@ -76,16 +84,21 @@ public class Resolver {
|
|||
private static <D extends InternetAddressRR> List<Result> resolveIp(SRV srv, Class<D> type, boolean authenticated, boolean directTls) {
|
||||
List<Result> list = new ArrayList<>();
|
||||
try {
|
||||
ResolverResult<D> results = DnssecResolverApi.INSTANCE.resolve(srv.name, type);
|
||||
ResolverResult<D> results;
|
||||
try {
|
||||
results = DnssecResolverApi.INSTANCE.resolve(srv.name, type);
|
||||
} catch (DNSSECValidationFailedException e) {
|
||||
Log.d(Config.LOGTAG,Resolver.class.getSimpleName()+": error resolving "+type.getSimpleName()+" with DNSSEC. Trying DNS instead "+e.getMessage());
|
||||
results = ResolverApi.INSTANCE.resolve(srv.name,type);
|
||||
}
|
||||
for (D record : results.getAnswersOrEmptySet()) {
|
||||
Result resolverResult = Result.fromRecord(srv, directTls);
|
||||
resolverResult.authenticated = results.isAuthenticData() && authenticated;
|
||||
resolverResult.ip = record.getInetAddress();
|
||||
list.add(resolverResult);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.d(Config.LOGTAG,e.getMessage());
|
||||
//ignore. will add default record later
|
||||
} catch (Throwable t) {
|
||||
Log.d(Config.LOGTAG,Resolver.class.getSimpleName()+": error resolving "+type.getSimpleName()+" "+t.getMessage());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue