dovecot-2.2-pigeonhole: lib-smtp: storage: Fixed small problem i...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Tue May 12 20:51:24 UTC 2015
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/3fab77ef9302
changeset: 2060:3fab77ef9302
user: Stephan Bosch <stephan at rename-it.nl>
date: Tue May 12 22:51:12 2015 +0200
description:
lib-smtp: storage: Fixed small problem in handling of default script.
When the default was first overriden, then deactivated and finally overriden again, it would erroneously implicitly re-activate.
diffstat:
src/lib-sieve/sieve-storage.c | 44 +++++++++++++++++++++++++++++++++++++-----
1 files changed, 38 insertions(+), 6 deletions(-)
diffs (89 lines):
diff -r 9308f3f2e4d4 -r 3fab77ef9302 src/lib-sieve/sieve-storage.c
--- a/src/lib-sieve/sieve-storage.c Tue May 12 20:53:46 2015 +0200
+++ b/src/lib-sieve/sieve-storage.c Tue May 12 22:51:12 2015 +0200
@@ -673,11 +673,10 @@
* Script access
*/
-struct sieve_script *sieve_storage_get_script
+static struct sieve_script *sieve_storage_get_script_direct
(struct sieve_storage *storage, const char *name,
enum sieve_error *error_r)
{
- struct sieve_instance *svinst = storage->svinst;
struct sieve_script *script;
if ( error_r != NULL )
@@ -697,7 +696,18 @@
i_assert(storage->v.get_script != NULL);
script = storage->v.get_script(storage, name);
+ return script;
+}
+struct sieve_script *sieve_storage_get_script
+(struct sieve_storage *storage, const char *name,
+ enum sieve_error *error_r)
+{
+ struct sieve_instance *svinst = storage->svinst;
+ struct sieve_script *script;
+
+ script = sieve_storage_get_script_direct
+ (storage, name, error_r);
if ( script == NULL ) {
/* Error */
if ( storage->error_code == SIEVE_ERROR_NOT_FOUND &&
@@ -768,6 +778,26 @@
return script;
}
+static int sieve_storage_check_script_direct
+(struct sieve_storage *storage, const char *name,
+ enum sieve_error *error_r) ATTR_NULL(3)
+{
+ struct sieve_script *script;
+ enum sieve_error error;
+ int ret;
+
+ if ( error_r == NULL )
+ error_r = &error;
+
+ script = sieve_storage_get_script_direct(storage, name, error_r);
+ if ( script == NULL )
+ return ( *error_r == SIEVE_ERROR_NOT_FOUND ? 0 : -1 );
+
+ ret = sieve_script_open(script, error_r);
+ return ( ret >= 0 ? 1 :
+ ( *error_r == SIEVE_ERROR_NOT_FOUND ? 0 : -1 ) );
+}
+
int sieve_storage_check_script
(struct sieve_storage *storage, const char *name,
enum sieve_error *error_r)
@@ -775,12 +805,12 @@
struct sieve_script *script;
enum sieve_error error;
- if (error_r == NULL)
+ if ( error_r == NULL )
error_r = &error;
script = sieve_storage_open_script(storage, name, error_r);
- if (script == NULL)
- return ( *error_r == SIEVE_ERROR_NOT_FOUND ? 0 : -1);
+ if ( script == NULL )
+ return ( *error_r == SIEVE_ERROR_NOT_FOUND ? 0 : -1 );
sieve_script_unref(&script);
return 1;
@@ -1117,7 +1147,9 @@
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_save_will_activate(sctx) &&
+ sieve_storage_check_script_direct
+ (storage, storage->default_name, NULL) <= 0 )
default_activate = TRUE;
scriptname = t_strdup(sctx->scriptname);
More information about the dovecot-cvs
mailing list