From f4156454927bab5e8dd10da1f75ea8ee4ad0d7c0 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Fri, 22 Feb 2008 22:29:08 +0100
Subject: [PATCH] Variables: activated 'quotewildcard' set modifier and fixed a
 bug.

---
 src/lib-sieve/plugins/variables/cmd-set.c     | 24 ++++++++++++++++++-
 .../plugins/variables/ext-variables-common.c  |  2 ++
 .../plugins/variables/variables.sieve         |  2 ++
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/lib-sieve/plugins/variables/cmd-set.c b/src/lib-sieve/plugins/variables/cmd-set.c
index 5e739cbbd..ba7480995 100644
--- a/src/lib-sieve/plugins/variables/cmd-set.c
+++ b/src/lib-sieve/plugins/variables/cmd-set.c
@@ -131,6 +131,7 @@ bool mod_upper_modify(string_t *in, string_t **result);
 bool mod_lowerfirst_modify(string_t *in, string_t **result);
 bool mod_upperfirst_modify(string_t *in, string_t **result);
 bool mod_length_modify(string_t *in, string_t **result);
+bool mod_quotewildcard_modify(string_t *in, string_t **result);
 
 const struct ext_variables_set_modifier lower_modifier = {
 	"lower", 
@@ -164,7 +165,7 @@ const struct ext_variables_set_modifier quotewildcard_modifier = {
 	"quotewildcard",
 	EXT_VARIABLES_SET_MODIFIER_QUOTEWILDCARD,
 	20,
-	NULL
+	mod_quotewildcard_modify
 };
 
 const struct ext_variables_set_modifier length_modifier = {
@@ -440,5 +441,26 @@ bool mod_length_modify(string_t *in, string_t **result)
 	return TRUE;
 }
 
+bool mod_quotewildcard_modify(string_t *in, string_t **result)
+{
+	unsigned int i;
+	const char *content;
+	
+	*result = t_str_new(str_len(in) * 2);
+	content = (const char *) str_data(in);
+	
+	for ( i = 0; i < str_len(in); i++ ) {
+		if ( content[i] == '*' || content[i] == '?' || content[i] == '\\' ) {
+			str_append_c(*result, '\\');
+		}
+		str_append_c(*result, content[i]);
+	}
+	
+	return TRUE;
+}
+
+
+
+
 
 
diff --git a/src/lib-sieve/plugins/variables/ext-variables-common.c b/src/lib-sieve/plugins/variables/ext-variables-common.c
index e71cf7c80..4014e1d0b 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-common.c
+++ b/src/lib-sieve/plugins/variables/ext-variables-common.c
@@ -549,6 +549,8 @@ static bool opr_variable_read_value
 		
 	if (sieve_binary_read_integer(renv->sbin, address, &index) ) {
 		sieve_variable_get(storage, index, str);
+		
+		if ( *str == NULL ) *str = t_str_new(0);
 
 		return TRUE;
 	}
diff --git a/src/lib-sieve/plugins/variables/variables.sieve b/src/lib-sieve/plugins/variables/variables.sieve
index 2e5bb7e2a..8e443232a 100644
--- a/src/lib-sieve/plugins/variables/variables.sieve
+++ b/src/lib-sieve/plugins/variables/variables.sieve
@@ -15,7 +15,9 @@ set "friep" "it is ${foo} but not ${bar}!";
 set "frop" "van je ${hutse} en ${piep}!";
 
 set :length "len_frop" "${frop}";
+set :quotewildcard "quote_friep" "frop*friep\\frml?";
 
 fileinto "${friep}";
 fileinto "${frop}";
 fileinto "LEN-${len_frop}";
+fileinto "${quote_friep}";
-- 
GitLab