From fcc318e39a353c4e992a18b59749c107db9c942f Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Tue, 20 Nov 2007 11:27:17 +0100
Subject: [PATCH] Added validat_context method to command arguments for the
 to-be-implemented argument context validation.

---
 src/lib-sieve/plugins/vacation/ext-vacation.c | 53 ++++++++++++++-----
 src/lib-sieve/sieve-address-parts.c           |  3 +-
 src/lib-sieve/sieve-commands.c                |  6 +--
 src/lib-sieve/sieve-commands.h                |  6 ++-
 src/lib-sieve/sieve-comparators.c             |  9 +++-
 src/lib-sieve/sieve-match-types.c             |  1 +
 src/lib-sieve/sieve-validator.c               |  2 +-
 src/lib-sieve/tst-size.c                      |  4 +-
 8 files changed, 62 insertions(+), 22 deletions(-)

diff --git a/src/lib-sieve/plugins/vacation/ext-vacation.c b/src/lib-sieve/plugins/vacation/ext-vacation.c
index 7238bf0bc..492e61007 100644
--- a/src/lib-sieve/plugins/vacation/ext-vacation.c
+++ b/src/lib-sieve/plugins/vacation/ext-vacation.c
@@ -223,18 +223,47 @@ static bool cmd_vacation_validate_handle_tag
 
 /* Command registration */
 
-static const struct sieve_argument vacation_days_tag = 
-	{ "days", NULL, cmd_vacation_validate_days_tag, NULL };
-static const struct sieve_argument vacation_subject_tag =
-	{ "subject", NULL, cmd_vacation_validate_subject_tag, NULL };
-static const struct sieve_argument vacation_from_tag = 
-	{ "from", NULL, cmd_vacation_validate_from_tag, NULL };
-static const struct sieve_argument vacation_addresses_tag = 
-	{ "addresses", NULL, cmd_vacation_validate_addresses_tag, NULL };
-static const struct sieve_argument vacation_mime_tag = 
-	{ "mime", NULL, cmd_vacation_validate_mime_tag, NULL };
-static const struct sieve_argument vacation_handle_tag = 
-	{ "handle", NULL, cmd_vacation_validate_handle_tag, NULL };
+static const struct sieve_argument vacation_days_tag = { 
+	"days", 
+	NULL, 
+	cmd_vacation_validate_days_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_subject_tag = { 
+	"subject", 
+	NULL, 
+	cmd_vacation_validate_subject_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_from_tag = { 
+	"from", 
+	NULL, 
+	cmd_vacation_validate_from_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_addresses_tag = { 
+	"addresses", 
+	NULL, 
+	cmd_vacation_validate_addresses_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_mime_tag = { 
+	"mime",
+	NULL, 
+	cmd_vacation_validate_mime_tag, 
+	NULL, NULL 
+};
+
+static const struct sieve_argument vacation_handle_tag = { 
+	"handle", 
+	NULL, 
+	cmd_vacation_validate_handle_tag, 
+	NULL, NULL 
+};
 
 enum cmd_vacation_optional {
 	OPT_DAYS,
diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c
index 5e36260bb..77e5e39da 100644
--- a/src/lib-sieve/sieve-address-parts.c
+++ b/src/lib-sieve/sieve-address-parts.c
@@ -412,7 +412,8 @@ bool sieve_address_match_stringlist
 const struct sieve_argument address_part_tag = { 
 	NULL,
 	tag_address_part_is_instance_of, 
-	tag_address_part_validate, 
+	tag_address_part_validate,
+	NULL, 
 	tag_address_part_generate 
 };
  
diff --git a/src/lib-sieve/sieve-commands.c b/src/lib-sieve/sieve-commands.c
index de201d1ed..9f063177e 100644
--- a/src/lib-sieve/sieve-commands.c
+++ b/src/lib-sieve/sieve-commands.c
@@ -22,11 +22,11 @@ static bool arg_string_list_generate
 	struct sieve_command_context *context);
 
 const struct sieve_argument number_argument =
-	{ "@number", NULL, NULL, arg_number_generate };
+	{ "@number", NULL, NULL, NULL, arg_number_generate };
 const struct sieve_argument string_argument =
-	{ "@string", NULL, NULL, arg_string_generate };
+	{ "@string", NULL, NULL, NULL, arg_string_generate };
 const struct sieve_argument string_list_argument =
-	{ "@string-list", NULL, NULL, arg_string_list_generate };	
+	{ "@string-list", NULL, NULL, NULL, arg_string_list_generate };	
 
 static bool arg_number_generate
 (struct sieve_generator *generator, struct sieve_ast_argument *arg, 
diff --git a/src/lib-sieve/sieve-commands.h b/src/lib-sieve/sieve-commands.h
index 3675bb52f..30c7c6ae4 100644
--- a/src/lib-sieve/sieve-commands.h
+++ b/src/lib-sieve/sieve-commands.h
@@ -15,7 +15,11 @@ struct sieve_argument {
 	
 	bool (*is_instance_of)(struct sieve_validator *validator, const char *tag);
 	
-	bool (*validate)(struct sieve_validator *validator, struct sieve_ast_argument **arg, 
+	bool (*validate)
+	(struct sieve_validator *validator, struct sieve_ast_argument **arg, 
+		struct sieve_command_context *context);
+	bool (*validate_context)
+	(struct sieve_validator *validator, struct sieve_ast_argument *arg, 
 		struct sieve_command_context *context);
 		
 	bool (*generate)(struct sieve_generator *generator, struct sieve_ast_argument *arg, 
diff --git a/src/lib-sieve/sieve-comparators.c b/src/lib-sieve/sieve-comparators.c
index e1f2f6253..2dfdf6e10 100644
--- a/src/lib-sieve/sieve-comparators.c
+++ b/src/lib-sieve/sieve-comparators.c
@@ -228,8 +228,13 @@ static bool tag_comparator_generate
 	(struct sieve_generator *generator, struct sieve_ast_argument *arg, 
 	struct sieve_command_context *cmd);
 
-const struct sieve_argument comparator_tag = 
-	{ "comparator", NULL, tag_comparator_validate, tag_comparator_generate };
+const struct sieve_argument comparator_tag = { 
+	"comparator", 
+	NULL, 
+	tag_comparator_validate, 
+	NULL,
+	tag_comparator_generate 
+};
 
 static bool tag_comparator_validate
 	(struct sieve_validator *validator, struct sieve_ast_argument **arg, 
diff --git a/src/lib-sieve/sieve-match-types.c b/src/lib-sieve/sieve-match-types.c
index 11efc5874..7b81d7253 100644
--- a/src/lib-sieve/sieve-match-types.c
+++ b/src/lib-sieve/sieve-match-types.c
@@ -459,6 +459,7 @@ const struct sieve_argument match_type_tag = {
 	NULL,
 	tag_match_type_is_instance_of, 
 	tag_match_type_validate, 
+	NULL,
 	tag_match_type_generate 
 };
  
diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c
index afd08f38e..c884a1bdd 100644
--- a/src/lib-sieve/sieve-validator.c
+++ b/src/lib-sieve/sieve-validator.c
@@ -203,7 +203,7 @@ static bool _unknown_tag_validate
 }
 
 static const struct sieve_argument _unknown_tag = 
-	{ "", NULL, _unknown_tag_validate, NULL };
+	{ "", NULL, _unknown_tag_validate, NULL, NULL };
 
 static void _sieve_validator_register_tag
 	(struct sieve_validator *validator, struct sieve_command_registration *cmd_reg, 
diff --git a/src/lib-sieve/tst-size.c b/src/lib-sieve/tst-size.c
index 171c67175..3e85a3958 100644
--- a/src/lib-sieve/tst-size.c
+++ b/src/lib-sieve/tst-size.c
@@ -101,9 +101,9 @@ static bool tst_size_validate_under_tag
 /* Test registration */
 
 static const struct sieve_argument size_over_tag = 
-	{ "over", NULL, tst_size_validate_over_tag, NULL };
+	{ "over", NULL, tst_size_validate_over_tag, NULL, NULL };
 static const struct sieve_argument size_under_tag = 
-	{ "under", NULL, tst_size_validate_under_tag, NULL };
+	{ "under", NULL, tst_size_validate_under_tag, NULL, NULL };
 
 static bool tst_size_registered
 	(struct sieve_validator *validator, struct sieve_command_registration *cmd_reg) 
-- 
GitLab