aboutsummaryrefslogtreecommitdiffstats
path: root/src/key.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2016-08-23 13:22:28 +0000
committerWerner Koch <[email protected]>2016-08-23 13:24:10 +0000
commitbe4ff75d7d5ac6ed15feb245ef3cec59b4bad561 (patch)
tree67dffdf32235e3e459aa52cd1b248420a6dc480f /src/key.c
parentcore: Extend gpgme_user_id_t with 'address'. (diff)
downloadgpgme-be4ff75d7d5ac6ed15feb245ef3cec59b4bad561.tar.gz
gpgme-be4ff75d7d5ac6ed15feb245ef3cec59b4bad561.zip
core: Change the way TOFU information are represented.
* src/gpgme.h.in (struct _gpgme_signature): Remove field 'tofu'. Add field 'key'. (struct _gpgme_key): Add field 'fpr'. (struct _gpgme_user_id): Add field 'tofu'. (struct _gpgme_tofu_info): Remove fields 'address' and 'fpr'. * src/key.c (gpgme_key_unref): Release TOFU and FPR. * src/keylist.c (keylist_colon_handler): Store the fingerprint of the first subkey also in KEY. * src/verify.c (release_tofu_info): Remove. (release_op_data): Release KEY. (parse_tofu_user): Rewrite for new data structure. (parse_tofu_stats): Ditto. (parse_tofu_stats_long): Ditto. * tests/run-verify.c (print_result): Ditto. * tests/run-keylist.c (main): Print more fields. -- TOFU information are now associated with the user ID and not with a separate object. Note that this breaks code relying on the former non-released TOFU feature. The C++ bindings won't work right now. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/key.c')
-rw-r--r--src/key.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/key.c b/src/key.c
index f642501b..38acc712 100644
--- a/src/key.c
+++ b/src/key.c
@@ -356,6 +356,7 @@ gpgme_key_unref (gpgme_key_t key)
{
gpgme_user_id_t next_uid = uid->next;
gpgme_key_sig_t keysig = uid->signatures;
+ gpgme_tofu_info_t tofu = uid->tofu;
while (keysig)
{
@@ -373,8 +374,21 @@ gpgme_key_unref (gpgme_key_t key)
free (keysig);
keysig = next_keysig;
}
+
+ while (tofu)
+ {
+ /* NB: The ->next is currently not used but we are prepared
+ * for it. */
+ gpgme_tofu_info_t tofu_next = tofu->next;
+
+ free (tofu->description);
+ free (tofu);
+ tofu = tofu_next;
+ }
+
if (uid->address && uid->address != uid->email)
free (uid->address);
+
free (uid);
uid = next_uid;
}
@@ -386,10 +400,13 @@ gpgme_key_unref (gpgme_key_t key)
if (key->chain_id)
free (key->chain_id);
+ if (key->fpr)
+ free (key->fpr);
free (key);
}
+
/* Support functions. */