summaryrefslogtreecommitdiffstats
path: root/g10/tofu.h
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@g10code.com>2016-11-21 22:47:30 +0100
committerNeal H. Walfield <neal@g10code.com>2016-11-21 22:47:30 +0100
commit037f9de09298a31026ea2ab5fbd4a599b11cc34f (patch)
tree001dddfff8d6557ce9e24c8d1decb0ae692de8ff /g10/tofu.h
parentg10: Correctly parameterize ngettext. (diff)
downloadgnupg2-037f9de09298a31026ea2ab5fbd4a599b11cc34f.tar.xz
gnupg2-037f9de09298a31026ea2ab5fbd4a599b11cc34f.zip
g10: Cache the effective policy. Recompute it when required.
* g10/tofu.c (initdb): Add column effective_policy to the bindings table. (record_binding): New parameters effective_policy and set_conflict. Save the effective policy. If SET_CONFLICT is set, then set conflict according to CONFLICT. Otherwise, preserve the current value of conflict. Update callers. (get_trust): Don't compute the effective policy here... (get_policy): ... do it here, if it was not cached. Take new parameters, PK, the public key, and NOW, the time that the operation started. Update callers. (show_statistics): New parameter PK. Pass it to get_policy. Update callers. (tofu_notice_key_changed): New function. * g10/gpgv.c (tofu_notice_key_changed): New stub. * g10/import.c (import_revoke_cert): Take additional argument CTRL. Pass it to keydb_update_keyblock. * g10/keydb.c (keydb_update_keyblock): Take additional argument CTRL. Update callers. [USE_TOFU]: Call tofu_notice_key_changed. * g10/test-stubs.c (tofu_notice_key_changed): New stub. * tests/openpgp/tofu.scm: Assume that manually setting a binding's policy to auto does not cause the tofu engine to forget about any conflict. -- Signed-off-by: Neal H. Walfield <neal@g10code.com> We now store the computed policy in the tofu DB (in the effective_policy column of the bindings table) to avoid computing it every time, which is expensive. Further, policy is never overridden in case of a conflict. Instead, we detect a conflict if CONFLICT is not empty. This change is backwards compatible to existing DBs. The only minor incompatibility is that unresolved conflicts won't be automatically resolved in case we import a direct signature, or cross signatures.
Diffstat (limited to 'g10/tofu.h')
-rw-r--r--g10/tofu.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/g10/tofu.h b/g10/tofu.h
index f114443bc..3ee2f41b4 100644
--- a/g10/tofu.h
+++ b/g10/tofu.h
@@ -139,4 +139,9 @@ void tofu_end_batch_update (ctrl_t ctrl);
/* Release all of the resources associated with a DB meta-handle. */
void tofu_closedbs (ctrl_t ctrl);
+/* Whenever a key is modified (e.g., a user id is added or revoked, a
+ * new signature, etc.), this function should be called to cause TOFU
+ * to update its world view. */
+gpg_error_t tofu_notice_key_changed (ctrl_t ctrl, kbnode_t kb);
+
#endif /*G10_TOFU_H*/