From: Timo Sirainen Date: Thu, 7 Mar 2024 07:33:38 +0000 (+0200) Subject: lib: var-expand - Add support for escaping variables X-Git-Tag: 2.4.0~675 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a92e1b367006cdb13053644550e5eb0fab60845;p=thirdparty%2Fdovecot%2Fcore.git lib: var-expand - Add support for escaping variables --- diff --git a/src/lib/var-expand.c b/src/lib/var-expand.c index 33b98c8ec7..51d7938f91 100644 --- a/src/lib/var-expand.c +++ b/src/lib/var-expand.c @@ -766,6 +766,11 @@ int var_expand(string_t *dest, const char *str, if (final_ret > ret) final_ret = ret; + if (params->escape_func != NULL) { + var = params->escape_func(var, + params->escape_context); + } + if (ret <= 0) str_append(dest, var); else { diff --git a/src/lib/var-expand.h b/src/lib/var-expand.h index 7272efe5c5..d5c1e88781 100644 --- a/src/lib/var-expand.h +++ b/src/lib/var-expand.h @@ -1,6 +1,8 @@ #ifndef VAR_EXPAND_H #define VAR_EXPAND_H +typedef const char *var_expand_escape_t(const char *str, void *context); + struct var_expand_table { char key; const char *value; @@ -21,6 +23,10 @@ struct var_expand_params_func { }; struct var_expand_params { + /* If non-NULL, all variables are escaped with this function. */ + var_expand_escape_t *escape_func; + void *escape_context; + /* Single table: */ const struct var_expand_table *table; const struct var_expand_func_table *func_table;