]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mail-crypt-acl: Fix error handling
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 10 Feb 2017 10:41:28 +0000 (12:41 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 10 Feb 2017 11:34:54 +0000 (13:34 +0200)
Don't crash if mail_user creation failed.

src/plugins/mail-crypt/mail-crypt-acl-plugin.c

index 58f7acca626207462631b1e014c821b75d0fa88b..ac62dc6f2d36ab3bcaf038c4665a5872cffed23c 100644 (file)
@@ -280,7 +280,8 @@ static int mail_crypt_acl_object_update(struct acl_object *aclobj,
                                                 &dest_service_user, &error);
 
                /* to make sure we get correct logging context */
-               mail_storage_service_io_deactivate_user(dest_service_user);
+               if (ret > 0)
+                       mail_storage_service_io_deactivate_user(dest_service_user);
                mail_storage_service_io_activate_user(
                        aclobj->backend->list->ns->user->_service_user
                );
@@ -289,6 +290,7 @@ static int mail_crypt_acl_object_update(struct acl_object *aclobj,
                        i_error("mail-crypt-acl-plugin: "
                                "Cannot initialize destination user %s: %s",
                                username, error);
+                       break;
                } else {
                        i_assert(dest_user != NULL);
                        if ((ret = mailbox_open(box)) < 0) {
@@ -314,10 +316,8 @@ static int mail_crypt_acl_object_update(struct acl_object *aclobj,
                );
                mail_storage_service_io_activate_user(dest_service_user);
 
-               if (dest_user != NULL)
-                       mail_user_unref(&dest_user);
-               if (dest_service_user != NULL)
-                       mail_storage_service_user_free(&dest_service_user);
+               mail_user_unref(&dest_user);
+               mail_storage_service_user_free(&dest_service_user);
 
                if ((cur_ioloop_ctx = io_loop_get_current_context(current_ioloop)) != NULL)
                        io_loop_context_deactivate(cur_ioloop_ctx);