From 55d88454652543c98d74376977d855e394df6c92 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Mon, 19 Oct 2015 10:34:15 +0200 Subject: [PATCH] gpg: If a conflict occurs in batch mode, record that. * g10/tofu.c (get_trust): If a conflict occurs when MAY_ASK is false, set conflict to the key. When prompting the user, don't show the conflicting key if the conflicting key is the current key. -- Signed-off-by: Neal H. Walfield --- g10/tofu.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/g10/tofu.c b/g10/tofu.c index 9b21d86ce..2d4c738e4 100644 --- a/g10/tofu.c +++ b/g10/tofu.c @@ -1450,7 +1450,10 @@ get_trust (struct db *dbs, const char *fingerprint, const char *email, es_fprintf (fp, _("The binding %s is NOT known. "), binding); binding_shown = 1; } - else if (policy == TOFU_POLICY_ASK && conflict) + else if (policy == TOFU_POLICY_ASK + /* If there the conflict is with itself, then don't + display this message. */ + && conflict && strcmp (conflict, fingerprint) != 0) { es_fprintf (fp, _("%s raised a conflict with this binding. Since this" @@ -1718,11 +1721,22 @@ get_trust (struct db *dbs, const char *fingerprint, const char *email, out: if (change_conflicting_to_ask) { - rc = sqlite3_exec_printf - (db, NULL, NULL, &err, - "update bindings set policy = %d, conflict = %Q" - " where email = %Q and fingerprint != %Q and policy = %d;", - TOFU_POLICY_ASK, fingerprint, email, fingerprint, TOFU_POLICY_AUTO); + if (! may_ask) + /* If we weren't allowed to ask, also update this key as + conflicting with itself. */ + rc = sqlite3_exec_printf + (db, NULL, NULL, &err, + "update bindings set policy = %d, conflict = %Q" + " where email = %Q" + " and (policy = %d or (policy = %d and fingerprint = %Q));", + TOFU_POLICY_ASK, fingerprint, email, TOFU_POLICY_AUTO, + TOFU_POLICY_ASK, fingerprint); + else + rc = sqlite3_exec_printf + (db, NULL, NULL, &err, + "update bindings set policy = %d, conflict = %Q" + " where email = %Q and fingerprint != %Q and policy = %d;", + TOFU_POLICY_ASK, fingerprint, email, fingerprint, TOFU_POLICY_AUTO); if (rc) { log_error (_("error changing TOFU policy: %s\n"), err);