]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Allow using userdb_userdb_import in passdb query to set multiple userdb fields.
authorTimo Sirainen <tss@iki.fi>
Sun, 31 Mar 2013 14:40:12 +0000 (17:40 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 31 Mar 2013 14:40:12 +0000 (17:40 +0300)
src/auth/auth-request.c

index 96da927a0326cb58e15b847e4443538270cac7bd..9ceeeae24e4a0db1f95034fc25fe170cdfebe956 100644 (file)
@@ -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);