From 51821162b1df9a8a9398b8b64ceca410b9cc3092 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 30 Apr 2010 14:39:32 +0300 Subject: [PATCH] auth: passdb/userdb checkpassword args now supports %variable expansion --HG-- branch : HEAD --- src/auth/db-checkpassword.c | 13 +++++++++++++ src/auth/db-checkpassword.h | 4 ++++ src/auth/passdb-checkpassword.c | 6 +++--- src/auth/userdb-checkpassword.c | 6 +++--- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/auth/db-checkpassword.c b/src/auth/db-checkpassword.c index e324c4d5a2..05d65b4ea7 100644 --- a/src/auth/db-checkpassword.c +++ b/src/auth/db-checkpassword.c @@ -4,6 +4,7 @@ #if defined(PASSDB_CHECKPASSWORD) || defined(USERDB_CHECKPASSWORD) +#include "var-expand.h" #include "db-checkpassword.h" static void env_put_extra_fields(const char *extra_fields) @@ -129,6 +130,18 @@ void checkpassword_setup_env(struct auth_request *request) } } +const char * +checkpassword_get_cmd(struct auth_request *request, const char *args, + const char *checkpassword_reply_path) +{ + string_t *str; + + str = t_str_new(256); + var_expand(str, args, + auth_request_get_var_expand_table(request, NULL)); + return t_strconcat(str_c(str), " ", checkpassword_reply_path, NULL); +} + void checkpassword_child_input(struct chkpw_auth_request *request) { unsigned char buf[1024]; diff --git a/src/auth/db-checkpassword.h b/src/auth/db-checkpassword.h index 25de9d34b2..5ea7de9a61 100644 --- a/src/auth/db-checkpassword.h +++ b/src/auth/db-checkpassword.h @@ -48,6 +48,10 @@ enum checkpassword_sigchld_handler_result checkpassword_sigchld_handler(const struct child_wait_status *child_wait_status, struct chkpw_auth_request *request); void checkpassword_setup_env(struct auth_request *request); +const char * +checkpassword_get_cmd(struct auth_request *request, const char *args, + const char *checkpassword_reply_path); + void checkpassword_child_input(struct chkpw_auth_request *request); void checkpassword_child_output(struct chkpw_auth_request *request); diff --git a/src/auth/passdb-checkpassword.c b/src/auth/passdb-checkpassword.c index 8af65e68e2..e064ae22c2 100644 --- a/src/auth/passdb-checkpassword.c +++ b/src/auth/passdb-checkpassword.c @@ -136,12 +136,12 @@ checkpassword_verify_plain_child(struct auth_request *request, "dup2() failed: %m"); } else { checkpassword_setup_env(request); - /* very simple argument splitting. */ - cmd = t_strconcat(module->checkpassword_path, " ", - module->checkpassword_reply_path, NULL); + cmd = checkpassword_get_cmd(request, module->checkpassword_path, + module->checkpassword_reply_path); auth_request_log_debug(request, "checkpassword", "execute: %s", cmd); + /* very simple argument splitting. */ args = t_strsplit(cmd, " "); execv_const(args[0], args); } diff --git a/src/auth/userdb-checkpassword.c b/src/auth/userdb-checkpassword.c index d6f044625d..5bc3651b69 100644 --- a/src/auth/userdb-checkpassword.c +++ b/src/auth/userdb-checkpassword.c @@ -121,12 +121,12 @@ checkpassword_lookup_child(struct auth_request *request, handle this. */ env_put("AUTHORIZED=1"); checkpassword_setup_env(request); - /* very simple argument splitting. */ - cmd = t_strconcat(module->checkpassword_path, " ", - module->checkpassword_reply_path, NULL); + cmd = checkpassword_get_cmd(request, module->checkpassword_path, + module->checkpassword_reply_path); auth_request_log_debug(request, "userdb-checkpassword", "execute: %s", cmd); + /* very simple argument splitting. */ args = t_strsplit(cmd, " "); execv_const(args[0], args); } -- 2.47.3