diff options
author | mar-v-in <github@rvin.mooo.com> | 2014-06-24 11:35:59 +0200 |
---|---|---|
committer | mar-v-in <github@rvin.mooo.com> | 2014-06-24 11:35:59 +0200 |
commit | 38823b73a31ae0fb82d7e385c141f1170127c4dd (patch) | |
tree | fec3fd3ac257d1755388d021dbf0d48133dee40e /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport | |
parent | 9e7e0be82cafc6dc98bbc31099ce0efc36a789a0 (diff) | |
parent | c865de4002a9751928969ef30a3a5a6f943249cc (diff) | |
download | open-keychain-38823b73a31ae0fb82d7e385c141f1170127c4dd.tar.gz open-keychain-38823b73a31ae0fb82d7e385c141f1170127c4dd.tar.bz2 open-keychain-38823b73a31ae0fb82d7e385c141f1170127c4dd.zip |
Merge branch 'master' into improve-file-more
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport')
2 files changed, 20 insertions, 10 deletions
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 2ec9e1c07..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; @@ -316,6 +316,12 @@ public class HkpKeyserver extends Keyserver { while (uidMatcher.find()) { String tmp = uidMatcher.group(1).trim(); if (tmp.contains("%")) { + if(tmp.contains("%%")) { + // This is a fix for issue #683 + // The server encodes a percent sign as %%, so it is swapped out with its + // urlencoded counterpart to prevent errors + tmp = tmp.replace("%%", "%25"); + } try { // converts Strings like "Universit%C3%A4t" to a proper encoding form "Universität". tmp = (URLDecoder.decode(tmp, "UTF8")); @@ -396,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<Record>() { @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/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java index 29ab06264..0ca6f07fd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/KeybaseKeyserver.java @@ -42,6 +42,9 @@ public class KeybaseKeyserver extends Keyserver { // cut off "0x" if a user is searching for a key id query = query.substring(2); } + if (query.isEmpty()) { + throw new QueryTooShortException(); + } mQuery = query; try { |