From: Aki Tuomi Date: Mon, 28 Nov 2016 13:15:21 +0000 (+0200) Subject: doveadm-mail-crypt: Skip existing keys properly X-Git-Tag: 2.3.0.rc1~2490 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7a8b59bce67058e44f3f9ef5b942ec03dc36ca15;p=thirdparty%2Fdovecot%2Fcore.git doveadm-mail-crypt: Skip existing keys properly When generating new keypairs, handle existing keys correctly when skipping them. --- diff --git a/src/plugins/mail-crypt/doveadm-mail-crypt.c b/src/plugins/mail-crypt/doveadm-mail-crypt.c index 56e69eda4f..c9671d7ea7 100644 --- a/src/plugins/mail-crypt/doveadm-mail-crypt.c +++ b/src/plugins/mail-crypt/doveadm-mail-crypt.c @@ -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;