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