changeset 22592:8dc7e629897a

doveadm-mail-crypt: Print existing folder key hash when aborting generate
author Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
date Fri, 06 Oct 2017 12:47:06 +0300
parents dafc46a5c6e5
children 7bb07a5745d4
files src/plugins/mail-crypt/doveadm-mail-crypt.c
diffstat 1 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/mail-crypt/doveadm-mail-crypt.c	Fri Oct 06 11:07:23 2017 +0300
+++ b/src/plugins/mail-crypt/doveadm-mail-crypt.c	Fri Oct 06 12:47:06 2017 +0300
@@ -251,7 +251,22 @@
 
 	if ((ret = mail_crypt_box_get_public_key(t, &pair.pub, error_r)) < 0) {
 		ret = -1;
-	} else if (ret == 1 && (!ctx->force || ctx->recrypt_box_keys)) {
+	} else if (ret == 1 && !ctx->force) {
+		i_info("Folder key exists. Use -f to generate a new one");
+		buffer_t *key_id = t_str_new(MAIL_CRYPT_HASH_BUF_SIZE);
+		const char *error;
+		if (!dcrypt_key_id_public(pair.pub,
+					MAIL_CRYPT_KEY_ID_ALGORITHM,
+					key_id, &error)) {
+			i_error("dcrypt_key_id_public() failed: %s",
+				error);
+			return -1;
+		}
+		*pubid_r = p_strdup(ctx->ctx.pool, binary_to_hex(key_id->data,
+								 key_id->used));
+		*pair_r = pair;
+		return 1;
+	} else if (ret == 1 && ctx->recrypt_box_keys) {
 		/* do nothing, because force isn't being used *OR*
 		   we are recrypting box keys and force refers to
 		   user keypair.
@@ -413,7 +428,10 @@
 			T_BEGIN {
 				mcp_update_shared_keys(box, user, pubid, pair.priv);
 			} T_END;
-			dcrypt_keypair_unref(&pair);
+			if (pair.pub != NULL)
+				dcrypt_key_unref_public(&pair.pub);
+			if (pair.priv != NULL)
+				dcrypt_key_unref_private(&pair.priv);
 			ctx->matched_keys++;
 		}
 		mailbox_free(&box);