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