changeset 12475:8ca8de045df1

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.
author Timo Sirainen <tss@iki.fi>
date Fri, 26 Nov 2010 18:19:16 +0000
parents e9b90ff13910
children 0757f4f5b882
files src/auth/userdb-ldap.c src/auth/userdb-sql.c
diffstat 2 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/userdb-ldap.c	Fri Nov 26 17:46:49 2010 +0000
+++ b/src/auth/userdb-ldap.c	Fri Nov 26 18:19:16 2010 +0000
@@ -188,12 +188,17 @@
 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 @@
 
 	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) {
--- a/src/auth/userdb-sql.c	Fri Nov 26 17:46:49 2010 +0000
+++ b/src/auth/userdb-sql.c	Fri Nov 26 18:19:16 2010 +0000
@@ -143,16 +143,24 @@
 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;
 }