]> dgit.raspbian.org Git - dovecot.git/commitdiff
[PATCH 1/2] lib-sieve: actions - Split mailbox creation into sieve_act_store_create_m...
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 11 Jun 2026 19:31:45 +0000 (19:31 +0000)
committerNoah Meyerhans <noahm@debian.org>
Wed, 16 Sep 2026 19:06:35 +0000 (15:06 -0400)
Pure refactoring with no functional change: move the mailbox_create() /
subscribe / reopen sequence out of the "mailbox" extension's :create side
effect (seff_mailbox_create_pre_execute) into a new reusable
sieve_act_store_create_mailbox() helper.

Gbp-Pq: Name 0001-lib-sieve-actions-Split-mailbox-creation-into-sieve_.patch

pigeonhole/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c
pigeonhole/src/lib-sieve/sieve-actions.c
pigeonhole/src/lib-sieve/sieve-actions.h

index f3c64cfefa880c11fc1432baa79417a34e27f457..4ddb67388f0aa33006dbd70a57c9f67c9b794ddd 100644 (file)
@@ -150,36 +150,8 @@ seff_mailbox_create_pre_execute(
                return SIEVE_EXEC_FAILURE;
        }
 
-       trans->error = NULL;
-       trans->error_code = MAIL_ERROR_NONE;
-
-       /* Create mailbox */
-       if (mailbox_create(box, NULL, FALSE) < 0) {
-               sieve_act_store_get_storage_error(aenv, trans);
-               if (trans->error_code == MAIL_ERROR_EXISTS) {
-                       trans->error = NULL;
-                       trans->error_code = MAIL_ERROR_NONE;
-               } else {
-                       return (trans->error_code == MAIL_ERROR_TEMP ?
-                               SIEVE_EXEC_TEMP_FAILURE : SIEVE_EXEC_FAILURE);
-               }
-       }
-
-       /* Subscribe to it if necessary */
-       if (eenv->scriptenv->mailbox_autosubscribe) {
-               (void)mailbox_list_set_subscribed(
-                       mailbox_get_namespace(box)->list,
-                       mailbox_get_name(box), TRUE);
-       }
-
-       /* Try opening again */
-       if (mailbox_open(box) < 0) {
-               /* Failed definitively */
-               sieve_act_store_get_storage_error(aenv, trans);
-               return (trans->error_code == MAIL_ERROR_TEMP ?
-                       SIEVE_EXEC_TEMP_FAILURE : SIEVE_EXEC_FAILURE);
-       }
-       return SIEVE_EXEC_OK;
+       /* Create the mailbox */
+       return sieve_act_store_create_mailbox(aenv, trans);
 }
 
 
index b2d3110dcbb1284dc6945bc3516a5410b526331d..342c68a223888243f43b051ac2b50bb5f06569bd 100644 (file)
@@ -372,6 +372,44 @@ void sieve_act_store_get_storage_error(const struct sieve_action_exec_env *aenv,
                                                &trans->error_code));
 }
 
+int sieve_act_store_create_mailbox(const struct sieve_action_exec_env *aenv,
+                                  struct act_store_transaction *trans)
+{
+       const struct sieve_execute_env *eenv = aenv->exec_env;
+       struct mailbox *box = trans->box;
+
+       trans->error = NULL;
+       trans->error_code = MAIL_ERROR_NONE;
+
+       /* Create mailbox */
+       if (mailbox_create(box, NULL, FALSE) < 0) {
+               sieve_act_store_get_storage_error(aenv, trans);
+               if (trans->error_code == MAIL_ERROR_EXISTS) {
+                       trans->error = NULL;
+                       trans->error_code = MAIL_ERROR_NONE;
+               } else {
+                       return (trans->error_code == MAIL_ERROR_TEMP ?
+                               SIEVE_EXEC_TEMP_FAILURE : SIEVE_EXEC_FAILURE);
+               }
+       }
+
+       /* Subscribe to it if necessary */
+       if (eenv->scriptenv->mailbox_autosubscribe) {
+               (void)mailbox_list_set_subscribed(
+                       mailbox_get_namespace(box)->list,
+                       mailbox_get_name(box), TRUE);
+       }
+
+       /* Try opening again */
+       if (mailbox_open(box) < 0) {
+               /* Failed definitively */
+               sieve_act_store_get_storage_error(aenv, trans);
+               return (trans->error_code == MAIL_ERROR_TEMP ?
+                       SIEVE_EXEC_TEMP_FAILURE : SIEVE_EXEC_FAILURE);
+       }
+       return SIEVE_EXEC_OK;
+}
+
 static bool
 act_store_mailbox_alloc(const struct sieve_action_exec_env *aenv,
                        const char *mailbox, struct mailbox **box_r,
index f1a447fc3bc245392e9905ca27ed52371394c2dc..10f5daa306e0d30852ab81455b1aa02900c85559 100644 (file)
@@ -246,6 +246,11 @@ void sieve_act_store_add_flags(const struct sieve_action_exec_env *aenv,
 void sieve_act_store_get_storage_error(const struct sieve_action_exec_env *aenv,
                                       struct act_store_transaction *trans);
 
+/* Create the target mailbox of the store transaction (and subscribe to it
+   when configured). */
+int sieve_act_store_create_mailbox(const struct sieve_action_exec_env *aenv,
+                                  struct act_store_transaction *trans);
+
 /*
  * Redirect action
  */