dovecot-2.0-pigeonhole: Imap4flags: previous change was inadequate.

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Tue May 10 22:36:55 EEST 2011


details:   http://hg.rename-it.nl/dovecot-2.0-pigeonhole/rev/cc25d9fa8183
changeset: 1498:cc25d9fa8183
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Tue May 10 21:36:47 2011 +0200
description:
Imap4flags: previous change was inadequate.

diffstat:

 src/lib-sieve/sieve-extensions.c |  59 ++++++++++++++---------------
 src/lib-sieve/sieve-extensions.h |   3 +-
 src/lib-sieve/sieve-validator.c  |  10 ++--
 3 files changed, 35 insertions(+), 37 deletions(-)

diffs (259 lines):

diff -r ef58ace33b47 -r cc25d9fa8183 src/lib-sieve/sieve-extensions.c
--- a/src/lib-sieve/sieve-extensions.c	Mon May 09 20:56:08 2011 +0200
+++ b/src/lib-sieve/sieve-extensions.c	Tue May 10 21:36:47 2011 +0200
@@ -24,7 +24,7 @@
 
 static struct sieve_extension *_sieve_extension_register
 	(struct sieve_instance *svinst, const struct sieve_extension_def *extdef, 
-		bool load, bool required, bool implied);
+		bool load, bool required);
 
 /*
  * Instance global context
@@ -216,7 +216,7 @@
 	/* Pre-load dummy extensions */
 	for ( i = 0; i < sieve_dummy_extensions_count; i++ ) {
 		if ( (ext=_sieve_extension_register
-			(svinst, sieve_dummy_extensions[i], TRUE, FALSE, FALSE)) == NULL )
+			(svinst, sieve_dummy_extensions[i], TRUE, FALSE)) == NULL )
 			return FALSE;
 	
 		ext->dummy = TRUE;
@@ -347,7 +347,7 @@
 
 static struct sieve_extension *_sieve_extension_register
 (struct sieve_instance *svinst, const struct sieve_extension_def *extdef,
-	bool load, bool required, bool implied)
+	bool load, bool required)
 {
 	struct sieve_extension_registry *ext_reg = svinst->ext_reg;
 	struct sieve_extension *ext = (struct sieve_extension *)	
@@ -378,8 +378,8 @@
 	}
 
 	/* Enable extension */
-	if ( load ) {
-		ext->enabled = TRUE;
+	if ( load || required ) {
+		ext->enabled = ( ext->enabled || load );
 
 		/* Call load handler if extension was not loaded already */
 		if ( !ext->loaded ) {
@@ -391,7 +391,6 @@
 	}
 
 	ext->required = ( ext->required || required );
-	ext->implied = ( ext->implied || implied );
 
 	return ext;
 }
@@ -400,7 +399,7 @@
 (struct sieve_instance *svinst, const struct sieve_extension_def *extdef,
 	bool load)
 {
-	return _sieve_extension_register(svinst, extdef, load, FALSE, FALSE);
+	return _sieve_extension_register(svinst, extdef, load, FALSE);
 }
 
 void sieve_extension_unregister(const struct sieve_extension *ext)
@@ -421,9 +420,9 @@
 
 const struct sieve_extension *sieve_extension_require
 (struct sieve_instance *svinst, const struct sieve_extension_def *extdef,
-	bool implied)
+	bool load)
 {
-	return _sieve_extension_register(svinst, extdef, TRUE, TRUE, implied);
+	return _sieve_extension_register(svinst, extdef, load, TRUE);
 }
 
 int sieve_extensions_get_count(struct sieve_instance *svinst)
@@ -438,14 +437,14 @@
 {
 	struct sieve_extension_registry *ext_reg = svinst->ext_reg;
 	struct sieve_extension * const *ext;
-	
+
 	if ( ext_id < array_count(&ext_reg->extensions) ) {
 		ext = array_idx(&ext_reg->extensions, ext_id);
 
-		if ( (*ext)->def != NULL && (*ext)->enabled )
+		if ( (*ext)->def != NULL && ((*ext)->enabled || (*ext)->required) )
 			return *ext;
 	}
-	
+
 	return NULL;
 }
 
@@ -454,16 +453,16 @@
 {
 	struct sieve_extension_registry *ext_reg = svinst->ext_reg;
 	const struct sieve_extension *ext;
-	
+
 	if ( *name == '@' )
-		return NULL;	
-		
-	ext = (const struct sieve_extension *) 
+		return NULL;
+
+	ext = (const struct sieve_extension *)
 		hash_table_lookup(ext_reg->extension_index, name);
 
-	if ( ext == NULL || ext->def == NULL || !ext->enabled )
+	if ( ext == NULL || ext->def == NULL || (!ext->enabled && !ext->required))
 		return NULL;
-		
+
 	return ext;
 }
 
@@ -472,15 +471,15 @@
 	struct sieve_extension_registry *ext_reg = svinst->ext_reg;
 	string_t *extstr = t_str_new(256);
 	struct sieve_extension * const *exts;
-	unsigned int i, ext_count;	
+	unsigned int i, ext_count;
 
 	exts = array_get(&ext_reg->extensions, &ext_count);
 
 	if ( ext_count > 0 ) {
 		i = 0;
-		
+
 		/* Find first listable extension */
-		while ( i < ext_count && 
+		while ( i < ext_count &&
 			!( exts[i]->enabled && exts[i]->def != NULL &&
 			*(exts[i]->def->name) != '@' && !exts[i]->dummy ) )
 			i++;
@@ -488,11 +487,11 @@
 		if ( i < ext_count ) {
 			/* Add first to string */
 			str_append(extstr, exts[i]->def->name);
-			i++;	 
+			i++;
 
 	 		/* Add others */
 			for ( ; i < ext_count; i++ ) {
-				if ( exts[i]->enabled && exts[i]->def != NULL && 
+				if ( exts[i]->enabled && exts[i]->def != NULL &&
 					*(exts[i]->def->name) != '@' && !exts[i]->dummy ) {
 					str_append_c(extstr, ' ');
 					str_append(extstr, exts[i]->def->name);
@@ -507,7 +506,7 @@
 static void sieve_extension_enable(struct sieve_extension *ext)
 {
 	ext->enabled = TRUE;
-	
+
 	if ( !ext->loaded ) {
 		(void)_sieve_extension_load(ext);
 	}
@@ -536,7 +535,7 @@
 	if ( ext_string == NULL ) {
 		/* Enable all */
 		exts = array_get_modifiable(&ext_reg->extensions, &ext_count);
-		
+
 		for ( i = 0; i < ext_count; i++ )
 			sieve_extension_enable(exts[i]);
 
@@ -557,7 +556,7 @@
 			if ( *name != '\0' ) {
 				const struct sieve_extension *ext;
 				char op = '\0'; /* No add/remove operation */
-	
+
 				if ( *name == '+' 		/* Add to existing config */
 					|| *name == '-' ) {	/* Remove from existing config */
 				 	op = *name++;
@@ -569,7 +568,7 @@
 				else
 					ext = (const struct sieve_extension *) 
 						hash_table_lookup(ext_reg->extension_index, name);
-	
+
 				if ( ext == NULL || ext->def == NULL ) {
 					sieve_sys_warning(svinst,
 						"ignored unknown extension '%s' while configuring "
@@ -617,19 +616,19 @@
 			} 
 
 			/* Enable if listed with '+' or no prefix */
-	
+
 			for ( j = 0; j < ena_count; j++ ) {
 				if ( ext_enabled[j]->def == exts[i]->def ) {
 					disabled = FALSE;
 					break;
-				}		
+				}
 			}
 
 			/* Perform actual activation/deactivation */
 
 			if ( exts[i]->id >= 0 && exts[i]->def != NULL && 
 				*(exts[i]->def->name) != '@' ) {
-				if ( disabled && !exts[i]->implied )
+				if ( disabled )
 					sieve_extension_disable(exts[i]);
 				else
 					sieve_extension_enable(exts[i]);
diff -r ef58ace33b47 -r cc25d9fa8183 src/lib-sieve/sieve-extensions.h
--- a/src/lib-sieve/sieve-extensions.h	Mon May 09 20:56:08 2011 +0200
+++ b/src/lib-sieve/sieve-extensions.h	Tue May 10 21:36:47 2011 +0200
@@ -74,7 +74,6 @@
 	unsigned int required:1;
 	unsigned int loaded:1;
 	unsigned int enabled:1;
-	unsigned int implied:1;
 	unsigned int dummy:1;
 };
 
@@ -118,7 +117,7 @@
 		bool load);
 const struct sieve_extension *sieve_extension_require
 	(struct sieve_instance *svinst, const struct sieve_extension_def *extension, 
-		bool implied);
+		bool load);
 bool sieve_extension_reload(const struct sieve_extension *ext);
 
 void sieve_extension_unregister(const struct sieve_extension *ext);
diff -r ef58ace33b47 -r cc25d9fa8183 src/lib-sieve/sieve-validator.c
--- a/src/lib-sieve/sieve-validator.c	Mon May 09 20:56:08 2011 +0200
+++ b/src/lib-sieve/sieve-validator.c	Tue May 10 21:36:47 2011 +0200
@@ -546,8 +546,8 @@
 	}
 
 	ext = sieve_extension_get_by_name(valdtr->svinst, name); 
-	
-	if ( ext == NULL || ext->def == NULL ) {
+
+	if ( ext == NULL || ext->def == NULL || !ext->enabled ) {
 		unsigned int i;
 		bool core_test = FALSE;
 		bool core_command = FALSE;
@@ -576,7 +576,7 @@
 		}
 		return NULL;
 	}
-	
+
 	sieve_ast_extension_link(valdtr->ast, ext);
 
 	extdef = ext->def;
@@ -609,10 +609,10 @@
 	const struct sieve_extension_def *extdef;
 
 	ext = sieve_extension_get_by_name(valdtr->svinst, ext_name); 
-	
+
 	if ( ext == NULL || ext->def == NULL )
 		return NULL;
-	
+
 	sieve_ast_extension_link(valdtr->ast, ext);
 
 	extdef = ext->def;


More information about the dovecot-cvs mailing list