diff --git a/.gitmodules b/.gitmodules index 6b1646b89..f18a8731b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,9 +28,9 @@ [submodule "extern/SuperToasts"] path = extern/SuperToasts url = https://github.com/open-keychain/SuperToasts.git -[submodule "extern/dnsjava"] - path = extern/dnsjava - url = https://github.com/open-keychain/dnsjava.git [submodule "extern/KeybaseLib"] path = extern/KeybaseLib url = https://github.com/timbray/KeybaseLib.git +[submodule "extern/minidns"] + path = extern/minidns + url = https://github.com/open-keychain/minidns.git diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index c18c4865c..fd0c4c6ba 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -19,7 +19,7 @@ dependencies { compile project(':extern:spongycastle:prov') compile project(':extern:AppMsg:library') compile project(':extern:SuperToasts:supertoasts') - compile project(':extern:dnsjava') + compile project(':extern:minidns') compile project(':extern:KeybaseLib:Lib') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java index 80f52f914..5d281d5b0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/helper/EmailKeyHelper.java @@ -57,11 +57,13 @@ public class EmailKeyHelper { } } - // Most users don't have the SRV record, so ask a default server as well - String[] servers = Preferences.getPreferences(context).getKeyServers(); - if (servers != null && servers.length != 0) { - HkpKeyserver hkp = new HkpKeyserver(servers[0]); - keys.addAll(getEmailKeys(mail, hkp)); + if (keys.isEmpty()) { + // Most users don't have the SRV record, so ask a default server as well + String[] servers = Preferences.getPreferences(context).getKeyServers(); + if (servers != null && servers.length != 0) { + HkpKeyserver hkp = new HkpKeyserver(servers[0]); + keys.addAll(getEmailKeys(mail, hkp)); + } } return new ArrayList(keys); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java index df1a7e937..e49085a0e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/HkpKeyserver.java @@ -18,6 +18,10 @@ package org.sufficientlysecure.keychain.keyimport; +import de.measite.minidns.Client; +import de.measite.minidns.Question; +import de.measite.minidns.Record; +import de.measite.minidns.record.SRV; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; @@ -33,10 +37,6 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.pgp.PgpHelper; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; import org.sufficientlysecure.keychain.util.Log; -import org.xbill.DNS.Lookup; -import org.xbill.DNS.Record; -import org.xbill.DNS.SRVRecord; -import org.xbill.DNS.Type; import java.io.IOException; import java.io.InputStream; @@ -402,19 +402,20 @@ public class HkpKeyserver extends Keyserver { */ public static HkpKeyserver resolve(String domain) { try { - Record[] records = new Lookup("_hkp._tcp." + domain, Type.SRV).run(); + Record[] records = new Client().query(new Question("_hkp._tcp." + domain, Record.TYPE.SRV)).getAnswers(); if (records.length > 0) { Arrays.sort(records, new Comparator() { @Override public int compare(Record lhs, Record rhs) { - if (!(lhs instanceof SRVRecord)) return 1; - if (!(rhs instanceof SRVRecord)) return -1; - return ((SRVRecord) lhs).getPriority() - ((SRVRecord) rhs).getPriority(); + if (lhs.getPayload().getType() != Record.TYPE.SRV) return 1; + if (rhs.getPayload().getType() != Record.TYPE.SRV) return -1; + return ((SRV) lhs.getPayload()).getPriority() - ((SRV) rhs.getPayload()).getPriority(); } }); Record record = records[0]; // This is our best choice - if (record instanceof SRVRecord) { - return new HkpKeyserver(((SRVRecord) record).getTarget().toString(), (short) ((SRVRecord) record).getPort()); + if (record.getPayload().getType() == Record.TYPE.SRV) { + return new HkpKeyserver(((SRV) record.getPayload()).getName(), + (short) ((SRV) record.getPayload()).getPort()); } } } catch (Exception ignored) { diff --git a/extern/dnsjava b/extern/dnsjava deleted file mode 160000 index 71c8a9e56..000000000 --- a/extern/dnsjava +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 71c8a9e56b19b34907e7e2e810ca15b57e3edc2b diff --git a/extern/minidns b/extern/minidns new file mode 160000 index 000000000..dcf62a8ac --- /dev/null +++ b/extern/minidns @@ -0,0 +1 @@ +Subproject commit dcf62a8ac59d84072e66e71ec8a5d137784e760d diff --git a/settings.gradle b/settings.gradle index 24eb03490..4776ae5ee 100644 --- a/settings.gradle +++ b/settings.gradle @@ -12,5 +12,5 @@ include ':extern:spongycastle:pkix' include ':extern:spongycastle:prov' include ':extern:AppMsg:library' include ':extern:SuperToasts:supertoasts' -include ':extern:dnsjava' +include ':extern:minidns' include ':extern:KeybaseLib:Lib'