Skip to content
Snippets Groups Projects
Commit 7b49dde4 authored by Stephan Bosch's avatar Stephan Bosch
Browse files

Fixed unnecessary reporting of dummy extensions in ManageSieve SIEVE capability.

parent c1362376
No related branches found
No related tags found
No related merge requests found
...@@ -22,6 +22,10 @@ static void sieve_extension_registry_deinit(struct sieve_instance *svinst); ...@@ -22,6 +22,10 @@ static void sieve_extension_registry_deinit(struct sieve_instance *svinst);
static void sieve_capability_registry_init(struct sieve_instance *svinst); static void sieve_capability_registry_init(struct sieve_instance *svinst);
static void sieve_capability_registry_deinit(struct sieve_instance *svinst); static void sieve_capability_registry_deinit(struct sieve_instance *svinst);
static struct sieve_extension *_sieve_extension_register
(struct sieve_instance *svinst, const struct sieve_extension_def *extdef,
bool load, bool required);
/* /*
* Instance global context * Instance global context
*/ */
...@@ -103,12 +107,17 @@ extern const struct sieve_extension_def virustest_extension; ...@@ -103,12 +107,17 @@ extern const struct sieve_extension_def virustest_extension;
* List of native extensions * List of native extensions
*/ */
const struct sieve_extension_def *sieve_dummy_extensions[] = {
/* Dummy extensions */
&comparator_i_octet_extension, &comparator_i_ascii_casemap_extension
};
const unsigned int sieve_dummy_extensions_count =
N_ELEMENTS(sieve_dummy_extensions);
/* Core */ /* Core */
const struct sieve_extension_def *sieve_core_extensions[] = { const struct sieve_extension_def *sieve_core_extensions[] = {
/* Dummy extensions */
&comparator_i_octet_extension, &comparator_i_ascii_casemap_extension,
/* Core extensions */ /* Core extensions */
&fileinto_extension, &reject_extension, &envelope_extension, &fileinto_extension, &reject_extension, &envelope_extension,
&encoded_character_extension, &encoded_character_extension,
...@@ -179,6 +188,7 @@ bool sieve_extensions_init(struct sieve_instance *svinst) ...@@ -179,6 +188,7 @@ bool sieve_extensions_init(struct sieve_instance *svinst)
struct sieve_extension_registry *ext_reg = struct sieve_extension_registry *ext_reg =
p_new(svinst->pool, struct sieve_extension_registry, 1); p_new(svinst->pool, struct sieve_extension_registry, 1);
const char *extensions; const char *extensions;
struct sieve_extension *ext;
svinst->ext_reg = ext_reg; svinst->ext_reg = ext_reg;
...@@ -201,6 +211,15 @@ bool sieve_extensions_init(struct sieve_instance *svinst) ...@@ -201,6 +211,15 @@ bool sieve_extensions_init(struct sieve_instance *svinst)
array_append(&ext_reg->preloaded_extensions, array_append(&ext_reg->preloaded_extensions,
&ext_reg->address_part_extension, 1); &ext_reg->address_part_extension, 1);
/* 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)) == NULL )
return FALSE;
ext->dummy = TRUE;
}
/* Pre-load core extensions */ /* Pre-load core extensions */
for ( i = 0; i < sieve_core_extensions_count; i++ ) { for ( i = 0; i < sieve_core_extensions_count; i++ ) {
if ( sieve_extension_register if ( sieve_extension_register
...@@ -456,7 +475,7 @@ const char *sieve_extensions_get_string(struct sieve_instance *svinst) ...@@ -456,7 +475,7 @@ const char *sieve_extensions_get_string(struct sieve_instance *svinst)
/* Find first listable extension */ /* Find first listable extension */
while ( i < ext_count && while ( i < ext_count &&
!( exts[i].enabled && exts[i].def != NULL && !( exts[i].enabled && exts[i].def != NULL &&
*(exts[i].def->name) != '@' ) ) *(exts[i].def->name) != '@' && !exts[i].dummy ) )
i++; i++;
if ( i < ext_count ) { if ( i < ext_count ) {
...@@ -467,7 +486,7 @@ const char *sieve_extensions_get_string(struct sieve_instance *svinst) ...@@ -467,7 +486,7 @@ const char *sieve_extensions_get_string(struct sieve_instance *svinst)
/* Add others */ /* Add others */
for ( ; i < ext_count; i++ ) { 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].def->name) != '@' && !exts[i].dummy ) {
str_append_c(extstr, ' '); str_append_c(extstr, ' ');
str_append(extstr, exts[i].def->name); str_append(extstr, exts[i].def->name);
} }
......
...@@ -74,6 +74,7 @@ struct sieve_extension { ...@@ -74,6 +74,7 @@ struct sieve_extension {
unsigned int required:1; unsigned int required:1;
unsigned int loaded:1; unsigned int loaded:1;
unsigned int enabled:1; unsigned int enabled:1;
unsigned int dummy:1;
}; };
#define sieve_extension_name(ext) \ #define sieve_extension_name(ext) \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment

Consent

On this website, we use the web analytics service Matomo to analyze and review the use of our website. Through the collected statistics, we can improve our offerings and make them more appealing for you. Here, you can decide whether to allow us to process your data and set corresponding cookies for these purposes, in addition to technically necessary cookies. Further information on data protection—especially regarding "cookies" and "Matomo"—can be found in our privacy policy. You can withdraw your consent at any time.