changeset 3088:441759ac4f6a HEAD

Support variables in LDAP base setting.
author Timo Sirainen <tss@iki.fi>
date Tue, 11 Jan 2005 02:13:46 +0200
parents 769e2e2bf1d5
children a171aa34f0e8
files doc/dovecot-ldap.conf src/auth/passdb-ldap.c src/auth/userdb-ldap.c
diffstat 3 files changed, 21 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/doc/dovecot-ldap.conf	Tue Jan 11 01:44:40 2005 +0200
+++ b/doc/dovecot-ldap.conf	Tue Jan 11 02:13:46 2005 +0200
@@ -21,7 +21,7 @@
 # LDAP protocol version to use. Likely 2 or 3.
 #ldap_version = 2
 
-# LDAP base
+# LDAP base. %variables can be used here.
 base = uid=someone, dc=foo, dc=bar, dc=org
 
 # Dereference: never, searching, finding, always
--- a/src/auth/passdb-ldap.c	Tue Jan 11 01:44:40 2005 +0200
+++ b/src/auth/passdb-ldap.c	Tue Jan 11 02:13:46 2005 +0200
@@ -152,19 +152,23 @@
 			     struct ldap_request *ldap_request)
 {
 	struct ldap_connection *conn = passdb_ldap_conn->conn;
+        const struct var_expand_table *vars;
 	const char **attr_names = (const char **)passdb_ldap_conn->attr_names;
-	const char *filter;
+	const char *filter, *base;
 	string_t *str;
 
+	vars = auth_request_get_var_expand_table(auth_request, ldap_escape);
+
+	str = t_str_new(512);
+	var_expand(str, conn->set.base, vars);
+	base = t_strdup(str_c(str));
+
 	if (conn->set.pass_filter == NULL) {
 		filter = t_strdup_printf("(&(objectClass=posixAccount)(%s=%s))",
 					 attr_names[ATTR_VIRTUAL_USER],
 					 ldap_escape(auth_request->user));
 	} else {
-		str = t_str_new(512);
-		var_expand(str, conn->set.pass_filter,
-			   auth_request_get_var_expand_table(auth_request,
-							     ldap_escape));
+		var_expand(str, conn->set.pass_filter, vars);
 		filter = str_c(str);
 	}
 
@@ -177,7 +181,7 @@
 			       conn->set.base, conn->set.scope, filter,
 			       t_strarray_join(attr_names, ","));
 
-	db_ldap_search(conn, conn->set.base, conn->set.ldap_scope,
+	db_ldap_search(conn, base, conn->set.ldap_scope,
 		       filter, passdb_ldap_conn->attr_names,
 		       ldap_request);
 }
--- a/src/auth/userdb-ldap.c	Tue Jan 11 01:44:40 2005 +0200
+++ b/src/auth/userdb-ldap.c	Tue Jan 11 02:13:46 2005 +0200
@@ -164,20 +164,24 @@
 			       userdb_callback_t *callback, void *context)
 {
 	struct ldap_connection *conn = userdb_ldap_conn->conn;
+        const struct var_expand_table *vars;
 	const char **attr_names = (const char **)userdb_ldap_conn->attr_names;
 	struct userdb_ldap_request *request;
-	const char *filter;
+	const char *filter, *base;
 	string_t *str;
 
+	vars = auth_request_get_var_expand_table(auth_request, ldap_escape);
+
+	str = t_str_new(512);
+	var_expand(str, conn->set.base, vars);
+	base = t_strdup(str_c(str));
+
 	if (conn->set.user_filter == NULL) {
 		filter = t_strdup_printf("(&(objectClass=posixAccount)(%s=%s))",
 					 attr_names[ATTR_VIRTUAL_USER],
 					 ldap_escape(auth_request->user));
 	} else {
-		str = t_str_new(512);
-		var_expand(str, conn->set.user_filter,
-			   auth_request_get_var_expand_table(auth_request,
-							     ldap_escape));
+		var_expand(str, conn->set.user_filter, vars);
 		filter = str_c(str);
 	}
 
@@ -192,7 +196,7 @@
 			       conn->set.base, conn->set.scope, filter,
 			       t_strarray_join(attr_names, ","));
 
-	db_ldap_search(conn, conn->set.base, conn->set.ldap_scope,
+	db_ldap_search(conn, base, conn->set.ldap_scope,
 		       filter, userdb_ldap_conn->attr_names,
 		       &request->request);
 }