]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm-mail-crypt: Skip existing keys properly
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 28 Nov 2016 13:15:21 +0000 (15:15 +0200)
committerGitLab <gitlab@git.dovecot.net>
Mon, 28 Nov 2016 16:24:22 +0000 (18:24 +0200)
When generating new keypairs, handle existing keys
correctly when skipping them.

src/plugins/mail-crypt/doveadm-mail-crypt.c

index 56e69eda4fb85f383cc324b7532722f30d545f68..c9671d7ea7c7ef0cde03a10d8064189d468c9595 100644 (file)
@@ -242,7 +242,12 @@ static int mcp_keypair_generate(struct mcp_cmd_context *ctx,
        if ((ret = mail_crypt_box_get_public_key(box, &pair.pub, error_r)) < 0) {
                ret = -1;
        } else if (ret == 1 && (!ctx->force || ctx->recrypt_box_keys)) {
-               /* do nothing */
+               /* do nothing, because force isn't being used *OR*
+                  we are recrypting box keys and force refers to
+                  user keypair.
+
+                  FIXME: this could be less confusing altogether */
+               ret = 0;
        } else {
                if ((ret = mail_crypt_box_generate_keypair(box, &pair,
                                                user_key, pubid_r, error_r)) < 0) {
@@ -363,7 +368,10 @@ static int mcp_keypair_generate_run(struct doveadm_mail_cmd_context *_ctx,
                        res->name = p_strdup(_ctx->pool, info->vname);
                        res->success = FALSE;
                        res->error = p_strdup(_ctx->pool, error);
-               } else if (ret >= 0) {
+               } else if (ret == 0) {
+                       /* nothing happened because key already existed and
+                          force wasn't used, skip */
+               } else if (ret > 0) {
                        res = array_append_space(result);
                        res->name = p_strdup(_ctx->pool, info->vname);
                        res->success = TRUE;