From c6e94477ad526e83ed98d2093828db743a92f822 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Mon, 24 Mar 2008 01:01:05 +0100 Subject: [PATCH] Include: made import and export commands check whether the variables extension is active. --- src/lib-sieve/plugins/include/Makefile.am | 3 ++- src/lib-sieve/plugins/include/cmd-export.c | 7 +++++++ src/lib-sieve/plugins/include/cmd-import.c | 7 +++++++ .../include/include-variables-error.sieve | 5 +++++ src/lib-sieve/plugins/variables/cmd-set.c | 2 +- .../plugins/variables/ext-variables-common.c | 5 +++++ .../plugins/variables/sieve-ext-variables.h | 18 ++++++++++++++++-- 7 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/lib-sieve/plugins/include/include-variables-error.sieve diff --git a/src/lib-sieve/plugins/include/Makefile.am b/src/lib-sieve/plugins/include/Makefile.am index 2e7b9b104..ad6985690 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 47ebe809f..713db8165 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 5ac6b9d67..997cea655 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 000000000..bb2b5bcb4 --- /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 1e9b77ffa..69d49d7e4 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 99da7ad76..26691a0dd 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 db95aed75..120df3753 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; -- GitLab