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