diff --git a/src/lib-sieve/ext-encoded-character.c b/src/lib-sieve/ext-encoded-character.c index 5105e40f37a07b25dd1eaf09f1a63eabf5aa59d4..c58c189a291f2c1f512306ac8096cb9c0a71a384 100644 --- a/src/lib-sieve/ext-encoded-character.c +++ b/src/lib-sieve/ext-encoded-character.c @@ -31,6 +31,7 @@ static int ext_my_id; struct sieve_extension encoded_character_extension = { "encoded-character", + &ext_my_id, ext_encoded_character_load, ext_encoded_character_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/ext-envelope.c b/src/lib-sieve/ext-envelope.c index 1ccb0c7595b44061653502b952195abc8f95f807..98c14f77b394220aa930fa9e606fe4cd1edd9ec3 100644 --- a/src/lib-sieve/ext-envelope.c +++ b/src/lib-sieve/ext-envelope.c @@ -45,6 +45,7 @@ static bool ext_envelope_validator_load(struct sieve_validator *validator); const struct sieve_extension envelope_extension = { "envelope", + &ext_my_id, ext_envelope_load, ext_envelope_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/ext-fileinto.c b/src/lib-sieve/ext-fileinto.c index 07d0ab088011101450a02f32d99e42e12d106720..68a1ba06d40ec54bd2e8354ee64193507ac8ca82 100644 --- a/src/lib-sieve/ext-fileinto.c +++ b/src/lib-sieve/ext-fileinto.c @@ -41,6 +41,7 @@ static bool ext_fileinto_validator_load(struct sieve_validator *validator); const struct sieve_extension fileinto_extension = { "fileinto", + &ext_my_id, ext_fileinto_load, ext_fileinto_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/ext-reject.c b/src/lib-sieve/ext-reject.c index faecfc279485192310c7bb38fdb5b3e1f30a9209..2435305f30804830ce342d18d08579d00d35ec97 100644 --- a/src/lib-sieve/ext-reject.c +++ b/src/lib-sieve/ext-reject.c @@ -49,6 +49,7 @@ static bool ext_reject_validator_load(struct sieve_validator *validator); struct sieve_extension reject_extension = { "reject", + &ext_my_id, ext_reject_load, ext_reject_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/body/ext-body.c b/src/lib-sieve/plugins/body/ext-body.c index 1b6d218ac496c23c95543aa426c0947569b816f3..0fa141e68aaac7b0b188d799cb9677de3006edf0 100644 --- a/src/lib-sieve/plugins/body/ext-body.c +++ b/src/lib-sieve/plugins/body/ext-body.c @@ -64,6 +64,7 @@ static bool ext_body_validator_load(struct sieve_validator *validator); const struct sieve_extension body_extension = { "body", + &ext_body_my_id, ext_body_load, ext_body_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c b/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c index 35de40f837a68cbe46bec0fde1fbeadf5e4c32c6..f2e069d32e8c819e4640bf1a5cf391b48cf7aba9 100644 --- a/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c +++ b/src/lib-sieve/plugins/comparator-i-ascii-numeric/ext-cmp-i-ascii-numeric.c @@ -37,6 +37,7 @@ static int ext_my_id; const struct sieve_extension comparator_i_ascii_numeric_extension = { "comparator-i;ascii-numeric", + &ext_my_id, ext_cmp_i_ascii_numeric_load, ext_cmp_i_ascii_numeric_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/copy/ext-copy.c b/src/lib-sieve/plugins/copy/ext-copy.c index f1810f2b0dc0f2027ed488e010cab839549431a0..9153ce98092d7d00fac3dfb588687be9f325bcaa 100644 --- a/src/lib-sieve/plugins/copy/ext-copy.c +++ b/src/lib-sieve/plugins/copy/ext-copy.c @@ -34,6 +34,7 @@ static int ext_my_id; const struct sieve_extension copy_extension = { "copy", + &ext_my_id, ext_copy_load, ext_copy_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/imapflags/ext-imapflags.c b/src/lib-sieve/plugins/imapflags/ext-imapflags.c index e14c6cab5581b636f5675d06fb758b6b8299ad69..3a785f4281814e8b65c8ebf60074217afd13250a 100644 --- a/src/lib-sieve/plugins/imapflags/ext-imapflags.c +++ b/src/lib-sieve/plugins/imapflags/ext-imapflags.c @@ -60,6 +60,7 @@ int ext_imapflags_my_id; const struct sieve_extension imapflags_extension = { "imap4flags", + &ext_imapflags_my_id, ext_imapflags_load, ext_imapflags_validator_load, NULL, NULL, diff --git a/src/lib-sieve/plugins/include/ext-include.c b/src/lib-sieve/plugins/include/ext-include.c index 4592de5885666d85e1332a62e600d5a00b07d8a8..47e9bb778c7b6e62b11f46defaece288bd3bd83f 100644 --- a/src/lib-sieve/plugins/include/ext-include.c +++ b/src/lib-sieve/plugins/include/ext-include.c @@ -51,6 +51,7 @@ int ext_include_my_id; const struct sieve_extension include_extension = { "include", + &ext_include_my_id, ext_include_load, ext_include_validator_load, ext_include_generator_load, diff --git a/src/lib-sieve/plugins/regex/ext-regex.c b/src/lib-sieve/plugins/regex/ext-regex.c index 0117b15c90fc4c2f1fce515ceb9c6705590280fc..c62cb95da26baf83bae2f749f9d21cdc853abb90 100644 --- a/src/lib-sieve/plugins/regex/ext-regex.c +++ b/src/lib-sieve/plugins/regex/ext-regex.c @@ -47,6 +47,7 @@ static int ext_my_id; const struct sieve_extension regex_extension = { "regex", + &ext_my_id, ext_regex_load, ext_regex_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/relational/ext-relational.c b/src/lib-sieve/plugins/relational/ext-relational.c index 8f93092c4baea82af1a1b2c5be5cf6b8aecea425..6555777b8d95c4a0d111145162a43a4f696b963e 100644 --- a/src/lib-sieve/plugins/relational/ext-relational.c +++ b/src/lib-sieve/plugins/relational/ext-relational.c @@ -38,6 +38,7 @@ int ext_relational_my_id; const struct sieve_extension relational_extension = { "relational", + &ext_relational_my_id, ext_relational_load, ext_relational_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/subaddress/ext-subaddress.c b/src/lib-sieve/plugins/subaddress/ext-subaddress.c index 5538979ec78db8e6bb0224ad923044d42eb7da93..d7489640d4f05d29ffdaed7614ecbcac99f1c728 100644 --- a/src/lib-sieve/plugins/subaddress/ext-subaddress.c +++ b/src/lib-sieve/plugins/subaddress/ext-subaddress.c @@ -40,6 +40,7 @@ static int ext_my_id; const struct sieve_extension subaddress_extension = { "subaddress", + &ext_my_id, ext_subaddress_load, ext_subaddress_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/vacation/ext-vacation.c b/src/lib-sieve/plugins/vacation/ext-vacation.c index dad01342ce18cad281593f4e701f51d0a01f7147..582da44c61ac225ccefd284bf95524cbc5d37388 100644 --- a/src/lib-sieve/plugins/vacation/ext-vacation.c +++ b/src/lib-sieve/plugins/vacation/ext-vacation.c @@ -36,7 +36,8 @@ static bool ext_vacation_validator_load(struct sieve_validator *validator); int ext_vacation_my_id; const struct sieve_extension vacation_extension = { - "vacation", + "vacation", + &ext_vacation_my_id, ext_vacation_load, ext_vacation_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/plugins/variables/ext-variables.c b/src/lib-sieve/plugins/variables/ext-variables.c index b831c7936e5a671509c55e99227c3ea52a450cef..b7b66a99bea5a16cae64032911d836569b1633b9 100644 --- a/src/lib-sieve/plugins/variables/ext-variables.c +++ b/src/lib-sieve/plugins/variables/ext-variables.c @@ -66,6 +66,7 @@ int ext_variables_my_id; struct sieve_extension variables_extension = { "variables", + &ext_variables_my_id, ext_variables_load, ext_variables_validator_load, NULL, diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c index 594278fc1cf8327c9e9b2cc3245f7dd41f03bdae..e5801fe7dec52bd7dfe17341b6e0ffd64f472710 100644 --- a/src/lib-sieve/sieve-actions.c +++ b/src/lib-sieve/sieve-actions.c @@ -26,28 +26,6 @@ const char *sieve_get_new_message_id count++, senv->hostname); } -/* - * Side-effects 'extension' - */ - -static int ext_my_id = -1; - -static bool seffect_extension_load(int ext_id); - -const struct sieve_extension side_effects_extension = { - "@side-effects", - seffect_extension_load, - NULL, NULL, NULL, NULL, NULL, NULL, - SIEVE_EXT_DEFINE_NO_OPERATIONS, /* Opcode is hardcoded */ - SIEVE_EXT_DEFINE_NO_OPERANDS -}; - -static bool seffect_extension_load(int ext_id) -{ - ext_my_id = ext_id; - return TRUE; -} - /* * Side-effect operand */ diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c index 9a5faec29f8f23a68b2ad4c54bdf114b7b70e898..d9bccee5de7f7d292d83cae0687cc64ec2c0ed7d 100644 --- a/src/lib-sieve/sieve-address-parts.c +++ b/src/lib-sieve/sieve-address-parts.c @@ -44,6 +44,7 @@ static bool addrp_validator_load(struct sieve_validator *validator); const struct sieve_extension address_part_extension = { "@address-parts", + &ext_my_id, addrp_extension_load, addrp_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/sieve-comparators.c b/src/lib-sieve/sieve-comparators.c index 479d0466b1ec227a24cd81d2730f636c77cb8447..1affea88a8cdb5294b6d2a239f563e7b7f7e9c89 100644 --- a/src/lib-sieve/sieve-comparators.c +++ b/src/lib-sieve/sieve-comparators.c @@ -49,6 +49,7 @@ static bool cmp_validator_load(struct sieve_validator *validator); const struct sieve_extension comparator_extension = { "@comparators", + &ext_my_id, cmp_extension_load, cmp_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c index bbb6944813c7a574f04b4c617dce54dac50295c8..543f382b2a0e175649b848ce0635ad759727e81a 100644 --- a/src/lib-sieve/sieve-extensions.c +++ b/src/lib-sieve/sieve-extensions.c @@ -17,11 +17,9 @@ static void sieve_extensions_deinit_registry(void); extern const struct sieve_extension comparator_extension; extern const struct sieve_extension match_type_extension; extern const struct sieve_extension address_part_extension; -extern const struct sieve_extension side_effects_extension; const struct sieve_extension *sieve_preloaded_extensions[] = { - &comparator_extension, &match_type_extension, &address_part_extension, - &side_effects_extension + &comparator_extension, &match_type_extension, &address_part_extension }; const unsigned int sieve_preloaded_extensions_count = @@ -30,15 +28,15 @@ const unsigned int sieve_preloaded_extensions_count = /* Dummy extensions */ static const struct sieve_extension comparator_i_octet_extension = { - "comparator-i;octet", - NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "comparator-i;octet", + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, SIEVE_EXT_DEFINE_NO_OPERATIONS, SIEVE_EXT_DEFINE_NO_OPERANDS }; static const struct sieve_extension comparator_i_ascii_casemap_extension = { - "comparator-i;ascii-casemap", - NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "comparator-i;ascii-casemap", + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, SIEVE_EXT_DEFINE_NO_OPERATIONS, SIEVE_EXT_DEFINE_NO_OPERANDS }; @@ -66,7 +64,6 @@ extern const struct sieve_extension variables_extension; const struct sieve_extension *sieve_core_extensions[] = { /* Preloaded 'extensions' */ &comparator_extension, &match_type_extension, &address_part_extension, - &side_effects_extension, /* Dummy extensions */ &comparator_i_octet_extension, &comparator_i_ascii_casemap_extension, @@ -200,16 +197,7 @@ int sieve_extension_get_id(const struct sieve_extension *extension) static bool _list_extension(const struct sieve_extension *ext) { - if ( *ext->name == '@' ) return FALSE; - - if ( ext->validator_load == NULL && ext->generator_load == NULL && - ext->binary_load == NULL && ext->interpreter_load == NULL && - ext->runtime_load == NULL && ext->load == NULL && - ext->operations.count == 0 && ext->operands.count == 0 ) { - return FALSE; - } - - return TRUE; + return ( ext->id != NULL && *ext->name != '@' ); } const char *sieve_extensions_get_string(void) diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h index d60dc9067d4bec3cf07bff1e4ac01092a24201de..20d065845b9251a80883882b37ffa52da6a71e42 100644 --- a/src/lib-sieve/sieve-extensions.h +++ b/src/lib-sieve/sieve-extensions.h @@ -15,6 +15,7 @@ struct sieve_extension_obj_registry { struct sieve_extension { const char *name; + const int *id; bool (*load)(int ext_id); diff --git a/src/lib-sieve/sieve-match-types.c b/src/lib-sieve/sieve-match-types.c index d860e94a5feceb444c02ab78c57c8a771c17865f..4e6ad7fdce9e7726eb3507da269c34dd1c392038 100644 --- a/src/lib-sieve/sieve-match-types.c +++ b/src/lib-sieve/sieve-match-types.c @@ -49,6 +49,7 @@ static bool mtch_validator_load(struct sieve_validator *validator); const struct sieve_extension match_type_extension = { "@match-types", + &ext_my_id, mtch_extension_load, mtch_validator_load, NULL, NULL, NULL, NULL, NULL, diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c index b7be9fd2f0b0b691f1cdc96718b3c5b3bc086e59..dc7eb66d255468f637831786f48ef77049199cbc 100644 --- a/src/lib-sieve/sieve-validator.c +++ b/src/lib-sieve/sieve-validator.c @@ -126,7 +126,7 @@ struct sieve_validator *sieve_validator_create const struct sieve_extension *ext = sieve_preloaded_extensions[i]; if ( ext->validator_load != NULL ) - (void)ext->validator_load(validator); + (void)ext->validator_load(validator); } return validator; diff --git a/src/testsuite/ext-testsuite.c b/src/testsuite/ext-testsuite.c index bc2ccaec44479167c49a69dea0d53ab992375531..2d493b3debc53d894587adad71d71e59b6ea08c5 100644 --- a/src/testsuite/ext-testsuite.c +++ b/src/testsuite/ext-testsuite.c @@ -59,6 +59,7 @@ int ext_testsuite_my_id; const struct sieve_extension testsuite_extension = { "vnd.dovecot.testsuite", + &ext_testsuite_my_id, ext_testsuite_load, ext_testsuite_validator_load, ext_testsuite_generator_load,