diff options
3 files changed, 12 insertions, 0 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java index 21527159b..3c29d361a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java @@ -344,6 +344,9 @@ public class PgpKeyOperation {              // 3. If primary user id changed, generate new certificates for both old and new              if (saveParcel.changePrimaryUserId != null) { + +                // keep track if we actually changed one +                boolean ok = false;                  log.add(LogLevel.INFO, LogType.MSG_MF_UID_PRIMARY, indent);                  indent += 1; @@ -395,6 +398,7 @@ public class PgpKeyOperation {                      if (currentCert.hasSubpackets() && currentCert.getHashedSubPackets().isPrimaryUserID()) {                          // if it's the one we want, just leave it as is                          if (userId.equals(saveParcel.changePrimaryUserId)) { +                            ok = true;                              continue;                          }                          // otherwise, generate new non-primary certification @@ -420,6 +424,7 @@ public class PgpKeyOperation {                                  masterPrivateKey, masterPublicKey, userId, true, masterKeyFlags);                          modifiedPublicKey = PGPPublicKey.addCertification(                                  modifiedPublicKey, userId, newCert); +                        ok = true;                      }                      // user id is not primary and is not supposed to be - nothing to do here. @@ -427,6 +432,11 @@ public class PgpKeyOperation {                  }                  indent -= 1; + +                if (!ok) { +                    log.add(LogLevel.ERROR, LogType.MSG_MF_ERROR_NOEXIST_PRIMARY, indent); +                    return null; +                }              }              // Update the secret key ring diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java index ffe640d90..3b62656ef 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java @@ -258,6 +258,7 @@ public class OperationResultParcel implements Parcelable {          MSG_MF_ERROR_FINGERPRINT (R.string.msg_mf_error_fingerprint),          MSG_MF_ERROR_KEYID (R.string.msg_mf_error_keyid),          MSG_MF_ERROR_INTEGRITY (R.string.msg_mf_error_integrity), +        MSG_MF_ERROR_NOEXIST_PRIMARY (R.string.msg_mf_error_noexist_primary),          MSG_MF_ERROR_REVOKED_PRIMARY (R.string.msg_mf_error_revoked_primary),          MSG_MF_ERROR_PGP (R.string.msg_mf_error_pgp),          MSG_MF_ERROR_SIG (R.string.msg_mf_error_sig), diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 601df994a..d6eb6a2fb 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -643,6 +643,7 @@      <string name="msg_mf_error_fingerprint">Actual key fingerprint does not match the expected one!</string>      <string name="msg_mf_error_keyid">No key ID. This is an internal error, please file a bug report!</string>      <string name="msg_mf_error_integrity">Internal error, integrity check failed!</string> +    <string name="msg_mf_error_noexist_primary">Bad primary user id specified!</string>      <string name="msg_mf_error_revoked_primary">Revoked user ids cannot be primary!</string>      <string name="msg_mf_error_pgp">PGP internal exception!</string>      <string name="msg_mf_error_sig">Signature exception!</string> | 
