diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c index 296364fb324fbdc0d6bdd811b62f4cda8a42954f..3f3598d844612065c0d81a29b586c3b393dc0d5e 100644 --- a/src/lib-sieve-tool/sieve-tool.c +++ b/src/lib-sieve-tool/sieve-tool.c @@ -275,9 +275,8 @@ sieve_tool_init_finish(struct sieve_tool *tool, bool init_mailstore, svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST; /* Initialize Sieve Engine */ - tool->svinst = sieve_init(&svenv, &sieve_tool_callbacks, tool, - tool->debug); - if (tool->svinst == NULL) + if (sieve_init(&svenv, &sieve_tool_callbacks, tool, tool->debug, + &tool->svinst) < 0) i_fatal("Failed to initialize Sieve"); /* Load Sieve plugins */ diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index 4e2b4fd08709b893029218712431ba90a19b81cd..1ee5336bc697b545beafdc3fbdb7e2777fd03d35 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -51,14 +51,16 @@ struct event_category event_category_sieve = { * Main Sieve library interface */ -struct sieve_instance * -sieve_init(const struct sieve_environment *env, - const struct sieve_callbacks *callbacks, void *context, bool debug) +int sieve_init(const struct sieve_environment *env, + const struct sieve_callbacks *callbacks, void *context, + bool debug, struct sieve_instance **svinst_r) { struct sieve_instance *svinst; const char *domain; pool_t pool; + *svinst_r = NULL; + /* Create Sieve engine instance */ pool = pool_alloconly_create("sieve", 8192); svinst = p_new(pool, struct sieve_instance, 1); @@ -117,7 +119,7 @@ sieve_init(const struct sieve_environment *env, /* Initialize extensions */ if (!sieve_extensions_init(svinst)) { sieve_deinit(&svinst); - return NULL; + return -1; } /* Initialize storage classes */ @@ -129,7 +131,8 @@ sieve_init(const struct sieve_environment *env, /* Configure extensions */ sieve_extensions_configure(svinst); - return svinst; + *svinst_r = svinst; + return 0; } void sieve_deinit(struct sieve_instance **_svinst) diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h index 5f23f230408af42d3ac81e36deff25ab20e9ccf4..2ee15a6ed84993717fd62a723b02d0619d2c326d 100644 --- a/src/lib-sieve/sieve.h +++ b/src/lib-sieve/sieve.h @@ -14,9 +14,9 @@ struct sieve_binary; /* Initialize the sieve engine. Must be called before any sieve functionality is used. */ -struct sieve_instance * -sieve_init(const struct sieve_environment *env, - const struct sieve_callbacks *callbacks, void *context, bool debug); +int sieve_init(const struct sieve_environment *env, + const struct sieve_callbacks *callbacks, void *context, + bool debug, struct sieve_instance **svinst_r); /* Free all memory allocated by the sieve engine. */ void sieve_deinit(struct sieve_instance **_svinst); diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c index 34d9fadd7ef159765a9330cbccfcc6a7dbeadc2d..ddac5a4d091967153f3ab49a8c3f0ebfbce80280 100644 --- a/src/managesieve/managesieve-capabilities.c +++ b/src/managesieve/managesieve-capabilities.c @@ -77,9 +77,8 @@ void managesieve_capabilities_dump(void) i_zero(&svenv); svenv.home_dir = "/tmp"; - svinst = sieve_init(&svenv, &sieve_callbacks, - (void *) global_plugin_settings, FALSE); - if (svinst == NULL) + if (sieve_init(&svenv, &sieve_callbacks, (void *)global_plugin_settings, + FALSE, &svinst) < 0) i_fatal("Failed to initialize Sieve"); /* Dump capabilities */ diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c index 1ae8e1e6d62d246019337f43c5f9b16be6df96a0..f6627d8acceee04b712786c73ca06e2805d2cdd6 100644 --- a/src/managesieve/managesieve-client.c +++ b/src/managesieve/managesieve-client.c @@ -125,9 +125,8 @@ int client_create(int fd_in, int fd_out, const char *session_id, svenv.event_parent = event; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; - svinst = sieve_init(&svenv, &managesieve_sieve_callbacks, - user, set->mail_debug); - if (svinst == NULL) { + if (sieve_init(&svenv, &managesieve_sieve_callbacks, user, + set->mail_debug, &svinst) < 0) { *error_r = "Failed to initialize Sieve interpreter"; return -1; } diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c index a5cedb4965a1b9b01913df76e25a9deb30d93f2e..c851e5f28e0c847cbd702f4c5c2a7273ec4b51ba 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c @@ -112,9 +112,8 @@ doveadm_sieve_cmd_run(struct doveadm_mail_cmd_context *_ctx, svenv.base_dir = user->set->base_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; - ctx->svinst = sieve_init(&svenv, &sieve_callbacks, ctx, - user->set->mail_debug); - if (ctx->svinst == NULL) + if (sieve_init(&svenv, &sieve_callbacks, ctx, + user->set->mail_debug, &ctx->svinst) < 0) return -1; ctx->storage = sieve_storage_create_personal( diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c index 05abee587146e9890570115979bbdad987303dd0..2606e3f271dd680e3e7b1d0bbda2058fe0abad87 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c @@ -93,9 +93,8 @@ mail_sieve_user_init(struct mail_user *user, struct sieve_storage **svstorage_r) svenv.base_dir = user->set->base_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; - suser->svinst = sieve_init(&svenv, &mail_sieve_callbacks, - user, user->set->mail_debug); - if (suser->svinst == NULL) + if (sieve_init(&svenv, &mail_sieve_callbacks, user, + user->set->mail_debug, &suser->svinst) < 0) return -1; suser->sieve_storage = diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c index c275d90eb5adb8ae46b40cd6552ef8c0b5267024..95bd45fa21d8edee5f66ed90eee522b94fbe9cd4 100644 --- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c +++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c @@ -96,9 +96,8 @@ imap_filter_sieve_get_svinst(struct imap_filter_sieve_context *sctx) svenv.location = SIEVE_ENV_LOCATION_MS; svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST; - ifsuser->svinst = sieve_init(&svenv, &imap_filter_sieve_callbacks, - ifsuser, debug); - if (ifsuser->svinst == NULL) + if (sieve_init(&svenv, &imap_filter_sieve_callbacks, ifsuser, debug, + &ifsuser->svinst) < 0) return NULL; ifsuser->master_ehandler = diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 0aaf363c1bf6e8852988d3d2323d4d1c1aab6b7f..88f456b3f792b570e0bd4cef66aae284c64bfb2c 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -88,9 +88,8 @@ struct imap_sieve *imap_sieve_init(struct client *client) isieve->home_dir = p_strdup(pool, svenv.home_dir); - isieve->svinst = sieve_init(&svenv, &mail_sieve_callbacks, isieve, - debug); - if (isieve->svinst == NULL) + if (sieve_init(&svenv, &mail_sieve_callbacks, isieve, + debug, &isieve->svinst) < 0) return isieve; isieve->ext_imapsieve = sieve_extension_replace( diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c index 66bd0e8590e60110db089afa9c7547644b6df36a..cc5e3c088d290d049404ae5043a900e4dba771e6 100644 --- a/src/plugins/lda-sieve/lda-sieve-plugin.c +++ b/src/plugins/lda-sieve/lda-sieve-plugin.c @@ -1069,8 +1069,8 @@ lda_sieve_deliver_mail(struct mail_deliver_context *mdctx, svenv.location = SIEVE_ENV_LOCATION_MDA; svenv.delivery_phase = SIEVE_DELIVERY_PHASE_DURING; - srctx.svinst = sieve_init(&svenv, &lda_sieve_callbacks, mdctx, debug); - if (srctx.svinst == NULL) + if (sieve_init(&svenv, &lda_sieve_callbacks, mdctx, debug, + &srctx.svinst) < 0) return -1; /* Initialize master error handler */