changeset 20632:6c40ae42ba14

auth-db-dict: Allow key name expansion This allows expansion of dictionary keys based on userdb variables on dict lookup mapping. Example: key userdb { key = %{userdb:nspace:default}/userdb format = json }
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Wed, 13 Jul 2016 09:51:08 +0300
parents c085a469d8d6
children d54651ba988a
files src/auth/db-dict.c
diffstat 1 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/db-dict.c	Tue Aug 09 11:48:10 2016 +0300
+++ b/src/auth/db-dict.c	Wed Jul 13 09:51:08 2016 +0300
@@ -457,7 +457,14 @@
 	p_array_init(&iter->keys, pool, array_count(&conn->set.keys));
 	array_foreach(&conn->set.keys, key) {
 		iterkey = array_append_space(&iter->keys);
-		iterkey->key = key;
+		struct db_dict_key *new_key = p_new(iter->pool, struct db_dict_key, 1);
+		memcpy(new_key, key, sizeof(struct db_dict_key));
+		string_t *expanded_key = str_new(iter->pool, strlen(key->key));
+		auth_request_var_expand_with_table(expanded_key, key->key, auth_request,
+						   iter->var_expand_table,
+						   NULL);
+		new_key->key = str_c(expanded_key);
+		iterkey->key = new_key;
 	}
 	T_BEGIN {
 		db_dict_iter_find_used_keys(iter);