diff --git a/src/lib-sieve/plugins/include/Makefile.am b/src/lib-sieve/plugins/include/Makefile.am index 2e7b9b1040a641324e0613f793e2a29c46656e35..ad69856907131da7d1d98031a8206490d29b7d32 100644 --- a/src/lib-sieve/plugins/include/Makefile.am +++ b/src/lib-sieve/plugins/include/Makefile.am @@ -2,10 +2,11 @@ noinst_LTLIBRARIES = libsieve_ext_include.la AM_CPPFLAGS = \ -I../../ \ + -I../variables \ -I$(dovecot_incdir) \ -I$(dovecot_incdir)/src/lib \ -I$(dovecot_incdir)/src/lib-mail \ - -I$(dovecot_incdir)/src/lib-storage + -I$(dovecot_incdir)/src/lib-storage cmds = \ cmd-include.c \ diff --git a/src/lib-sieve/plugins/include/cmd-export.c b/src/lib-sieve/plugins/include/cmd-export.c index 47ebe809fab0f00b4e1cbfb73fa19c59299ea9e8..713db816595aca5d202f472f600b591b277d5523 100644 --- a/src/lib-sieve/plugins/include/cmd-export.c +++ b/src/lib-sieve/plugins/include/cmd-export.c @@ -6,6 +6,7 @@ #include "sieve-validator.h" #include "sieve-generator.h" #include "sieve-interpreter.h" +#include "sieve-ext-variables.h" #include "ext-include-common.h" @@ -70,6 +71,12 @@ static bool cmd_export_validate return FALSE; } + if ( !sieve_ext_variables_is_active(validator) ) { + sieve_command_validate_error(validator, cmd, + "export command requires that variables extension is active"); + return FALSE; + } + if ( !sieve_validate_positional_argument (validator, cmd, arg, "value", 1, SAAT_STRING_LIST) ) { return FALSE; diff --git a/src/lib-sieve/plugins/include/cmd-import.c b/src/lib-sieve/plugins/include/cmd-import.c index 5ac6b9d67c8a62641072c5b4136ed0e3afc290f2..997cea655df1fca232820d7e8989146ecac306be 100644 --- a/src/lib-sieve/plugins/include/cmd-import.c +++ b/src/lib-sieve/plugins/include/cmd-import.c @@ -6,6 +6,7 @@ #include "sieve-validator.h" #include "sieve-generator.h" #include "sieve-interpreter.h" +#include "sieve-ext-variables.h" #include "ext-include-common.h" @@ -69,6 +70,12 @@ static bool cmd_import_validate return FALSE; } + if ( !sieve_ext_variables_is_active(validator) ) { + sieve_command_validate_error(validator, cmd, + "import command requires that variables extension is active"); + return FALSE; + } + if ( !sieve_validate_positional_argument (validator, cmd, arg, "value", 1, SAAT_STRING_LIST) ) { return FALSE; diff --git a/src/lib-sieve/plugins/include/include-variables-error.sieve b/src/lib-sieve/plugins/include/include-variables-error.sieve new file mode 100644 index 0000000000000000000000000000000000000000..bb2b5bcb427b61c6e177fce4f7b1c6eb86426ff9 --- /dev/null +++ b/src/lib-sieve/plugins/include/include-variables-error.sieve @@ -0,0 +1,5 @@ +require "include"; +require "fileinto"; +export "frop"; + +fileinto "Frop"; diff --git a/src/lib-sieve/plugins/variables/cmd-set.c b/src/lib-sieve/plugins/variables/cmd-set.c index 1e9b77ffad8ef94baf59e8a5bb184b45986e3331..69d49d7e403a76b08ffb3e0acc2b8ee20214b574 100644 --- a/src/lib-sieve/plugins/variables/cmd-set.c +++ b/src/lib-sieve/plugins/variables/cmd-set.c @@ -207,7 +207,7 @@ static bool cmd_set_registered /* Command validation */ static bool cmd_set_pre_validate - (struct sieve_validator *validator, struct sieve_command_context *cmd) + (struct sieve_validator *validator ATTR_UNUSED, struct sieve_command_context *cmd) { pool_t pool = sieve_command_pool(cmd); struct cmd_set_context *sctx = p_new(pool, struct cmd_set_context, 1); diff --git a/src/lib-sieve/plugins/variables/ext-variables-common.c b/src/lib-sieve/plugins/variables/ext-variables-common.c index 99da7ad76a69ed0e056c8a204585c633fc0e7c8a..26691a0dd6fe219fe35de8da37a4a5a66dd2ef56 100644 --- a/src/lib-sieve/plugins/variables/ext-variables-common.c +++ b/src/lib-sieve/plugins/variables/ext-variables-common.c @@ -204,6 +204,11 @@ struct sieve_variable *ext_variables_validator_get_variable return sieve_variable_scope_get_variable(ctx->main_scope, variable); } +bool sieve_ext_variables_is_active(struct sieve_validator *valdtr) +{ + return ( ext_variables_validator_context_get(valdtr) != NULL ); +} + /* Interpreter context */ struct ext_variables_interpreter_context { diff --git a/src/lib-sieve/plugins/variables/sieve-ext-variables.h b/src/lib-sieve/plugins/variables/sieve-ext-variables.h index db95aed75e7ed6230781d9c25c28d6c35cd23244..120df375306a8f5ed26557cae1d986748231bec0 100644 --- a/src/lib-sieve/plugins/variables/sieve-ext-variables.h +++ b/src/lib-sieve/plugins/variables/sieve-ext-variables.h @@ -1,10 +1,18 @@ +/* + * Public interface for other extensions to use + */ + #ifndef __SIEVE_EXT_VARIABLES_H #define __SIEVE_EXT_VARIABLES_H #include "sieve-common.h" #include "sieve-extensions.h" -/* Public interface for other extensions to use */ +bool sieve_ext_variables_is_active(struct sieve_validator *valdtr); + +/* + * Variable scope + */ struct sieve_variable { const char *identifier; @@ -17,6 +25,10 @@ struct sieve_variable_scope *sieve_variable_scope_create(pool_t pool); struct sieve_variable *sieve_variable_scope_get_variable (struct sieve_variable_scope *scope, const char *identifier); +/* + * Variable storage + */ + struct sieve_variable_storage; struct sieve_variable_storage *sieve_variable_storage_create(pool_t pool); @@ -27,7 +39,9 @@ void sieve_variable_assign (struct sieve_variable_storage *storage, unsigned int index, const string_t *value); -/* Extensions */ +/* + * Variable extensions + */ struct sieve_variables_extension { const struct sieve_extension *extension;