]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth sql/ldap: Allow using global %variables in iterate_query/filter.
authorTimo Sirainen <tss@iki.fi>
Fri, 26 Nov 2010 18:19:16 +0000 (18:19 +0000)
committerTimo Sirainen <tss@iki.fi>
Fri, 26 Nov 2010 18:19:16 +0000 (18:19 +0000)
No per-query %variables are defined, but e.g. %{hostname} or %{env:*} can
be used.

src/auth/userdb-ldap.c
src/auth/userdb-sql.c

index 34b40d041e78194a7368e90fede9209601163534..ec7c2659dff413c304b03bf93288667bc1bca434 100644 (file)
@@ -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) {
index 18b52714303a29308092be3d5e2631b2b3f5d7a0..447764480d2ac11091dd5bc2fc66f9b16a0bc947 100644 (file)
@@ -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;
 }