mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-15 13:25:06 -05:00
Retry canonicalization with pubkey self certs if first attempt failed
Fixes #974
This commit is contained in:
parent
74bac3ea36
commit
33738b1f52
@ -351,6 +351,7 @@ public abstract class OperationResult implements Parcelable {
|
|||||||
MSG_IS_ERROR_IO_EXC(LogLevel.DEBUG, R.string.msg_is_error_io_exc),
|
MSG_IS_ERROR_IO_EXC(LogLevel.DEBUG, R.string.msg_is_error_io_exc),
|
||||||
MSG_IS_MERGE_PUBLIC (LogLevel.DEBUG, R.string.msg_is_merge_public),
|
MSG_IS_MERGE_PUBLIC (LogLevel.DEBUG, R.string.msg_is_merge_public),
|
||||||
MSG_IS_MERGE_SECRET (LogLevel.DEBUG, R.string.msg_is_merge_secret),
|
MSG_IS_MERGE_SECRET (LogLevel.DEBUG, R.string.msg_is_merge_secret),
|
||||||
|
MSG_IS_MERGE_SPECIAL (LogLevel.DEBUG, R.string.msg_is_merge_special),
|
||||||
MSG_IS_IMPORTING_SUBKEYS (LogLevel.DEBUG, R.string.msg_is_importing_subkeys),
|
MSG_IS_IMPORTING_SUBKEYS (LogLevel.DEBUG, R.string.msg_is_importing_subkeys),
|
||||||
MSG_IS_PUBRING_GENERATE (LogLevel.DEBUG, R.string.msg_is_pubring_generate),
|
MSG_IS_PUBRING_GENERATE (LogLevel.DEBUG, R.string.msg_is_pubring_generate),
|
||||||
MSG_IS_SUBKEY_NONEXISTENT (LogLevel.DEBUG, R.string.msg_is_subkey_nonexistent),
|
MSG_IS_SUBKEY_NONEXISTENT (LogLevel.DEBUG, R.string.msg_is_subkey_nonexistent),
|
||||||
|
@ -135,9 +135,7 @@ public class ProviderHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void clearLog() {
|
public void clearLog() {
|
||||||
if (mLog != null) {
|
mLog = new OperationLog();
|
||||||
mLog.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we ever switch to api level 11, we can ditch this whole mess!
|
// If we ever switch to api level 11, we can ditch this whole mess!
|
||||||
@ -866,9 +864,23 @@ public class ProviderHelper {
|
|||||||
// Canonicalize this keyring, to assert a number of assumptions made about it.
|
// Canonicalize this keyring, to assert a number of assumptions made about it.
|
||||||
// This is a safe cast, because we made sure this is a secret ring above
|
// This is a safe cast, because we made sure this is a secret ring above
|
||||||
canSecretRing = (CanonicalizedSecretKeyRing) secretRing.canonicalize(mLog, mIndent);
|
canSecretRing = (CanonicalizedSecretKeyRing) secretRing.canonicalize(mLog, mIndent);
|
||||||
|
if (canSecretRing == null) {
|
||||||
|
|
||||||
|
// Special case: If keyring canonicalization failed, try again after adding
|
||||||
|
// all self-certificates from the public key.
|
||||||
|
try {
|
||||||
|
log(LogType.MSG_IS_MERGE_SPECIAL);
|
||||||
|
UncachedKeyRing oldPublicRing = getCanonicalizedPublicKeyRing(masterKeyId).getUncachedKeyRing();
|
||||||
|
secretRing = secretRing.merge(oldPublicRing, mLog, mIndent);
|
||||||
|
canSecretRing = (CanonicalizedSecretKeyRing) secretRing.canonicalize(mLog, mIndent);
|
||||||
|
} catch (NotFoundException e2) {
|
||||||
|
// nothing, this is handled right in the next line
|
||||||
|
}
|
||||||
|
|
||||||
if (canSecretRing == null) {
|
if (canSecretRing == null) {
|
||||||
return new SaveKeyringResult(SaveKeyringResult.RESULT_ERROR, mLog, null);
|
return new SaveKeyringResult(SaveKeyringResult.RESULT_ERROR, mLog, null);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,6 +688,7 @@
|
|||||||
<string name="msg_is_error_io_exc">"Error encoding keyring"</string>
|
<string name="msg_is_error_io_exc">"Error encoding keyring"</string>
|
||||||
<string name="msg_is_merge_public">"Merging imported data into existing public keyring"</string>
|
<string name="msg_is_merge_public">"Merging imported data into existing public keyring"</string>
|
||||||
<string name="msg_is_merge_secret">"Merging imported data into existing public keyring"</string>
|
<string name="msg_is_merge_secret">"Merging imported data into existing public keyring"</string>
|
||||||
|
<string name="msg_is_merge_special">"Merging in self-certificates data from public keyring"</string>
|
||||||
<string name="msg_is_pubring_generate">"Generating public keyring from secret keyring"</string>
|
<string name="msg_is_pubring_generate">"Generating public keyring from secret keyring"</string>
|
||||||
<string name="msg_is_subkey_nonexistent">"Subkey %s unavailable in secret key"</string>
|
<string name="msg_is_subkey_nonexistent">"Subkey %s unavailable in secret key"</string>
|
||||||
<string name="msg_is_subkey_ok">"Marked secret subkey %s as available"</string>
|
<string name="msg_is_subkey_ok">"Marked secret subkey %s as available"</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user