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