changeset 14941:cd919c490ea6

auth: Allow using userdb_userdb_import in passdb query to set multiple userdb fields.
author Timo Sirainen <tss@iki.fi>
date Sun, 31 Mar 2013 17:40:12 +0300
parents 9d79ef9cf337
children 963c6f616aa4
files src/auth/auth-request.c
diffstat 1 files changed, 21 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-request.c	Sun Mar 31 11:23:42 2013 +0300
+++ b/src/auth/auth-request.c	Sun Mar 31 17:40:12 2013 +0300
@@ -1242,6 +1242,22 @@
 	return TRUE;
 }
 
+static void
+auth_request_userdb_userdb_import(struct auth_request *request,
+				  const char *args, const char *default_scheme)
+{
+	const char *key, *value, *const *arg = t_strsplit(args, "\t");
+
+	for (; *arg != NULL; arg++) {
+		value = strchr(*arg, '=');
+		if (value == NULL)
+			key = *arg;
+		else
+			key = t_strdup_until(*arg, value++);
+		auth_request_set_field(request, key, value, default_scheme);
+	}
+}
+
 void auth_request_set_field(struct auth_request *request,
 			    const char *name, const char *value,
 			    const char *default_scheme)
@@ -1287,6 +1303,11 @@
 		auth_request_validate_networks(request, value);
 	} else if (strncmp(name, "userdb_", 7) == 0) {
 		/* for prefetch userdb */
+		if (strcmp(name, "userdb_userdb_import") == 0) {
+			auth_request_userdb_userdb_import(request, value,
+							  default_scheme);
+			return;
+		}
 		if (request->userdb_reply == NULL)
 			auth_request_init_userdb_reply(request);
 		auth_request_set_userdb_field(request, name + 7, value);