From: Timo Sirainen Date: Wed, 17 Jan 2024 21:45:26 +0000 (-0500) Subject: auth: Support expanding variables for passdb/userdb settings X-Git-Tag: 2.4.1~1102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1e5f84f177a0e85d6d2bd9808f7169a4706d3d5;p=thirdparty%2Fdovecot%2Fcore.git auth: Support expanding variables for passdb/userdb settings --- diff --git a/src/auth/auth-request-var-expand.c b/src/auth/auth-request-var-expand.c index 85b3d62a37..7dbf439fd9 100644 --- a/src/auth/auth-request-var-expand.c +++ b/src/auth/auth-request-var-expand.c @@ -3,6 +3,7 @@ #include "auth-common.h" #include "str.h" #include "strescape.h" +#include "settings.h" #include "auth-request.h" struct auth_request_var_expand_ctx { @@ -308,3 +309,29 @@ int t_auth_request_var_expand(const char *str, *value_r = str_c(dest); return ret; } + +static void +auth_request_event_var_expand_callback(struct event *event, + const struct var_expand_table **tab_r, + const struct var_expand_func_table **func_tab_r) +{ + struct auth_request_var_expand_ctx *ctx = + event_get_ptr(event, SETTINGS_EVENT_VAR_EXPAND_FUNC_CONTEXT); + + *tab_r = auth_request_get_var_expand_table(ctx->auth_request, + ctx->escape_func); + *func_tab_r = auth_request_var_funcs_table; +} + +void auth_request_event_set_var_expand(struct auth_request *auth_request) +{ + struct auth_request_var_expand_ctx *ctx = + p_new(auth_request->pool, struct auth_request_var_expand_ctx, 1); + ctx->auth_request = auth_request; + ctx->escape_func = escape_none; + + event_set_ptr(auth_request->event, SETTINGS_EVENT_VAR_EXPAND_CALLBACK, + auth_request_event_var_expand_callback); + event_set_ptr(auth_request->event, + SETTINGS_EVENT_VAR_EXPAND_FUNC_CONTEXT, ctx); +} diff --git a/src/auth/auth-request-var-expand.h b/src/auth/auth-request-var-expand.h index 0c2897c37d..ab34b3143c 100644 --- a/src/auth/auth-request-var-expand.h +++ b/src/auth/auth-request-var-expand.h @@ -41,4 +41,6 @@ int t_auth_request_var_expand(const char *str, const char *auth_request_str_escape(const char *string, const struct auth_request *request); +void auth_request_event_set_var_expand(struct auth_request *auth_request); + #endif diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 8e06ce3eda..5c7fba1f86 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -146,6 +146,7 @@ auth_request_post_alloc_init(struct auth_request *request, event_add_category(request->event, &event_category_auth); event_set_log_prefix_callback(request->event, TRUE, get_log_prefix, request); + auth_request_event_set_var_expand(request); p_array_init(&request->authdb_event, request->pool, 2); }