]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm mailbox cryptokey generate: Fix memory leak
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 10 Feb 2017 10:33:01 +0000 (12:33 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 10 Feb 2017 11:34:54 +0000 (13:34 +0200)
dest_user was set to NULL, but never freed.

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

index 6be6ef81b280185843c6e6010d1e9e92d69c36e9..5d022f41e768eca85d213145222688ab8909b729 100644 (file)
@@ -100,6 +100,7 @@ mcp_update_shared_key(struct mailbox_transaction_context *t,
        struct mail_storage_service_user *dest_service_user;
        struct ioloop_context *cur_ioloop_ctx;
        struct dcrypt_public_key *pkey;
+       const char *dest_username;
        int ret = 0;
 
        bool disallow_insecure = mail_crypt_acl_secure_sharing_enabled(user);
@@ -116,6 +117,8 @@ mcp_update_shared_key(struct mailbox_transaction_context *t,
                        target_uid, error);
        } else {
                i_assert(dest_user != NULL);
+               dest_username = dest_user->username;
+
                /* get public key from target user */
                if ((ret = mail_crypt_user_get_public_key(dest_user,
                                                          &pkey, error_r)) <= 0) {
@@ -125,7 +128,7 @@ mcp_update_shared_key(struct mailbox_transaction_context *t,
                                ret = -1;
                        } else if (ret == 0) {
                                /* perform insecure sharing */
-                               dest_user = NULL;
+                               dest_username = NULL;
                                pkey = NULL;
                                ret = 1;
                        }
@@ -136,9 +139,7 @@ mcp_update_shared_key(struct mailbox_transaction_context *t,
                        t_array_init(&keys, 1);
                        array_append(&keys, &key, 1);
                        ret = mail_crypt_box_share_private_keys(t, pkey,
-                                                               dest_user == NULL ?
-                                                                       NULL :
-                                                                       dest_user->username,
+                                                               dest_username,
                                                                &keys, error_r);
                }
                
@@ -148,8 +149,7 @@ mcp_update_shared_key(struct mailbox_transaction_context *t,
        mail_storage_service_io_deactivate_user(user->_service_user);
        mail_storage_service_io_activate_user(dest_service_user);
 
-       if (dest_user != NULL)
-               mail_user_unref(&dest_user);
+       mail_user_unref(&dest_user);
        if (dest_service_user != NULL)
                mail_storage_service_user_free(&dest_service_user);