From: Timo Sirainen Date: Sun, 31 Mar 2013 14:40:12 +0000 (+0300) Subject: auth: Allow using userdb_userdb_import in passdb query to set multiple userdb fields. X-Git-Tag: 2.1.16~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ca88ca580187da2eb7a26308f1d471921318e7a;p=thirdparty%2Fdovecot%2Fcore.git auth: Allow using userdb_userdb_import in passdb query to set multiple userdb fields. --- diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 96da927a03..9ceeeae24e 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -1242,6 +1242,22 @@ auth_request_try_update_username(struct auth_request *request, 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 @@ void auth_request_set_field(struct auth_request *request, 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);