From: Timo Sirainen Date: Fri, 26 Nov 2010 18:19:16 +0000 (+0000) Subject: auth sql/ldap: Allow using global %variables in iterate_query/filter. X-Git-Tag: 2.0.8~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7af2a19a89c1c9da8848c570190d36570afd09e6;p=thirdparty%2Fdovecot%2Fcore.git auth sql/ldap: Allow using global %variables in iterate_query/filter. No per-query %variables are defined, but e.g. %{hostname} or %{env:*} can be used. --- diff --git a/src/auth/userdb-ldap.c b/src/auth/userdb-ldap.c index 34b40d041e..ec7c2659df 100644 --- a/src/auth/userdb-ldap.c +++ b/src/auth/userdb-ldap.c @@ -188,12 +188,17 @@ static struct userdb_iterate_context * userdb_ldap_iterate_init(struct userdb_module *userdb, userdb_iter_callback_t *callback, void *context) { + static struct var_expand_table static_tab[] = { + /* nothing for now, but e.g. %{hostname} can be used */ + { '\0', NULL, NULL } + }; struct ldap_userdb_module *module = (struct ldap_userdb_module *)userdb; struct ldap_connection *conn = module->conn; struct ldap_userdb_iterate_context *ctx; struct userdb_iter_ldap_request *request; const char **attr_names = (const char **)conn->iterate_attr_names; + string_t *str; ctx = i_new(struct ldap_userdb_iterate_context, 1); ctx->ctx.userdb = userdb; @@ -205,7 +210,12 @@ userdb_ldap_iterate_init(struct userdb_module *userdb, request->request.request.auth_request = auth_request_new_dummy(); request->request.base = conn->set.base; - request->request.filter = conn->set.iterate_filter; + + str = t_str_new(512); + var_expand(str, conn->set.iterate_filter, static_tab); + request->request.filter = + p_strdup(request->request.request.auth_request->pool, + str_c(str)); request->request.attributes = conn->iterate_attr_names; if (global_auth_settings->debug) { diff --git a/src/auth/userdb-sql.c b/src/auth/userdb-sql.c index 18b5271430..447764480d 100644 --- a/src/auth/userdb-sql.c +++ b/src/auth/userdb-sql.c @@ -143,16 +143,24 @@ static struct userdb_iterate_context * userdb_sql_iterate_init(struct userdb_module *userdb, userdb_iter_callback_t *callback, void *context) { + static struct var_expand_table static_tab[] = { + /* nothing for now, but e.g. %{hostname} can be used */ + { '\0', NULL, NULL } + }; struct sql_userdb_module *module = (struct sql_userdb_module *)userdb; struct sql_userdb_iterate_context *ctx; + string_t *query; + + query = t_str_new(512); + var_expand(query, module->conn->set.iterate_query, static_tab); ctx = i_new(struct sql_userdb_iterate_context, 1); ctx->ctx.userdb = userdb; ctx->ctx.callback = callback; ctx->ctx.context = context; - sql_query(module->conn->db, module->conn->set.iterate_query, + sql_query(module->conn->db, str_c(query), sql_iter_query_callback, ctx); return &ctx->ctx; }