From: Timo Sirainen Date: Thu, 11 Jun 2026 19:31:45 +0000 (+0000) Subject: [PATCH 1/2] lib-sieve: actions - Split mailbox creation into sieve_act_store_create_m... X-Git-Tag: archive/raspbian/1%2.4.1+dfsg1-6+rpi1+deb13u7^2~102 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=76995ab1630508d91995b8661999b4b46e5d362c;p=dovecot.git [PATCH 1/2] lib-sieve: actions - Split mailbox creation into sieve_act_store_create_mailbox() 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 --- diff --git a/pigeonhole/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c b/pigeonhole/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c index f3c64cf..4ddb673 100644 --- a/pigeonhole/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c +++ b/pigeonhole/src/lib-sieve/plugins/mailbox/tag-mailbox-create.c @@ -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); } diff --git a/pigeonhole/src/lib-sieve/sieve-actions.c b/pigeonhole/src/lib-sieve/sieve-actions.c index b2d3110..342c68a 100644 --- a/pigeonhole/src/lib-sieve/sieve-actions.c +++ b/pigeonhole/src/lib-sieve/sieve-actions.c @@ -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, diff --git a/pigeonhole/src/lib-sieve/sieve-actions.h b/pigeonhole/src/lib-sieve/sieve-actions.h index f1a447f..10f5daa 100644 --- a/pigeonhole/src/lib-sieve/sieve-actions.h +++ b/pigeonhole/src/lib-sieve/sieve-actions.h @@ -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 */