diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index b40a221eb8898f67884148347c745832cf1f423c..1467d99175e07b285e9e7322bc19ebe3932e71a2 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -1254,6 +1254,28 @@ bool sieve_storage_save_will_activate(struct sieve_storage_save_context *sctx) strcmp(sctx->scriptname, sctx->active_scriptname) == 0); } +static int +sieve_storage_save_is_activating_default( + struct sieve_storage_save_context *sctx) +{ + struct sieve_storage *storage = sctx->storage; + + if (storage->default_name == NULL || storage->default_location == NULL) + return 0; + if ((storage->flags & SIEVE_STORAGE_FLAG_SYNCHRONIZING) != 0) + return 0; + if (!sieve_storage_save_will_activate(sctx)) + return 0; + + if (strcmp(sctx->scriptname, storage->default_name) != 0 || + !sieve_storage_save_will_activate(sctx)) + return 0; + if (sieve_storage_check_script_direct(storage, storage->default_name, + NULL) > 0) + return 0; + return 1; +} + int sieve_storage_save_commit(struct sieve_storage_save_context **_sctx) { struct sieve_storage_save_context *sctx = *_sctx; @@ -1275,14 +1297,10 @@ int sieve_storage_save_commit(struct sieve_storage_save_context **_sctx) i_assert(sctx->scriptname != NULL); /* Check whether we're replacing the default active script */ - if (storage->default_name != NULL && - storage->default_location != NULL && - (storage->flags & SIEVE_STORAGE_FLAG_SYNCHRONIZING) == 0 && - strcmp(sctx->scriptname, storage->default_name) == 0 && - sieve_storage_save_will_activate(sctx) && - sieve_storage_check_script_direct(storage, storage->default_name, - NULL) <= 0) - default_activate = TRUE; + ret = sieve_storage_save_is_activating_default(sctx); + if (ret < 0) + return -1; + default_activate = (ret > 0); sieve_storage_save_cleanup(sctx);