Index: b/sm/keydb.c =================================================================== --- b/sm/keydb.c +++ b/sm/keydb.c @@ -1110,8 +1110,7 @@ return gpg_error (GPG_ERR_ENOMEM);; } - if (ephemeral) - keydb_set_ephemeral (kh, 1); + keydb_set_ephemeral (kh, 1); rc = lock_all (kh); if (rc) @@ -1125,6 +1124,19 @@ { if (existed) *existed = 1; + if (!ephemeral) + { + /* Remove ephemeral flags from existing certificate to "store" + it permanently. */ + rc = keydb_set_cert_flags (cert, 1, KEYBOX_FLAG_BLOB, 0, + KEYBOX_FLAG_BLOB_EPHEMERAL, 0); + if (rc) + { + log_error ("clearing ephemeral flag failed: %s\n", + gpg_strerror (rc)); + return rc; + } + } return 0; /* okay */ } log_error (_("problem looking for existing certificate: %s\n"), @@ -1132,6 +1144,9 @@ return rc; } + if (!ephemeral) + keydb_set_ephemeral (kh, 0); + rc = keydb_locate_writable (kh, 0); if (rc) {