]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Don't keep username duplicated in userdb_reply string.
authorTimo Sirainen <tss@iki.fi>
Fri, 4 Jan 2013 22:37:26 +0000 (00:37 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 4 Jan 2013 22:37:26 +0000 (00:37 +0200)
This fixes bugs where userdb_reply is accessed via auth_stream_*() functions
that remove/replace existing fields, which may have ended up
removing/replacing the username.

src/auth/auth-master-connection.c
src/auth/auth-request-handler.c
src/auth/auth-request.c

index 4b9e3fb77003a5547a009a5b468c4a3530081fe7..4b94cad73358fd4861ef27225ca3bde730b849b0 100644 (file)
@@ -276,6 +276,8 @@ user_callback(enum userdb_result result,
                break;
        case USERDB_RESULT_OK:
                str_printfa(str, "USER\t%u\t", auth_request->id);
+               str_append_tabescaped(str, auth_request->user);
+               str_append_c(str, '\t');
                str_append(str, auth_stream_reply_export(reply));
                break;
        }
index a05eda04a94050751b4fa22de1ff01b62445a4c0..7dd7c7037e6f21fbdd7c88c47fd331880587d2b9 100644 (file)
@@ -661,8 +661,6 @@ static void userdb_callback(enum userdb_result result,
                auth_stream_reply_add(reply, NULL, dec2str(request->id));
                break;
        case USERDB_RESULT_OK:
-               auth_stream_reply_add(reply, "USER", NULL);
-               auth_stream_reply_add(reply, NULL, dec2str(request->id));
                if (request->master_user != NULL &&
                    auth_stream_reply_find(request->userdb_reply,
                                           "master_user") == NULL) {
@@ -680,6 +678,9 @@ static void userdb_callback(enum userdb_result result,
                                              "anonymous", NULL);
                }
 
+               auth_stream_reply_add(reply, "USER", NULL);
+               auth_stream_reply_add(reply, NULL, dec2str(request->id));
+               auth_stream_reply_add(reply, NULL, request->user);
                auth_stream_reply_import(reply,
                        auth_stream_reply_export(request->userdb_reply));
 
index 1bc5a494bac654563c1ea6f24830efdff48ec609..2579e16279eee1514e7ec418885217f12876424f 100644 (file)
@@ -438,22 +438,6 @@ static void auth_request_save_cache(struct auth_request *request,
                          result == PASSDB_RESULT_OK);
 }
 
-static void auth_request_userdb_reply_update_user(struct auth_request *request)
-{
-       const char *str, *p;
-
-       str = t_strdup(auth_stream_reply_export(request->userdb_reply));
-
-       /* reset the reply and add the new username */
-       auth_stream_reply_reset(request->userdb_reply);
-       auth_stream_reply_add(request->userdb_reply, NULL, request->user);
-
-       /* add the rest */
-       p = strchr(str, '\t');
-       if (p != NULL)
-               auth_stream_reply_import(request->userdb_reply, p + 1);
-}
-
 static bool auth_request_master_lookup_finish(struct auth_request *request)
 {
        struct auth_passdb *passdb;
@@ -468,8 +452,6 @@ static bool auth_request_master_lookup_finish(struct auth_request *request)
        request->master_user = request->user;
        request->user = request->requested_login_user;
        request->requested_login_user = NULL;
-       if (request->userdb_reply != NULL)
-               auth_request_userdb_reply_update_user(request);
 
        request->skip_password_check = TRUE;
        request->passdb_password = NULL;
@@ -1261,8 +1243,6 @@ auth_request_try_update_username(struct auth_request *request,
                                       "username changed %s -> %s",
                                       request->user, new_value);
                request->user = p_strdup(request->pool, new_value);
-               if (request->userdb_reply != NULL)
-                       auth_request_userdb_reply_update_user(request);
        }
        return TRUE;
 }
@@ -1367,8 +1347,6 @@ void auth_request_init_userdb_reply(struct auth_request *request)
        struct userdb_module *module = request->userdb->userdb;
 
        request->userdb_reply = auth_stream_reply_init(request->pool);
-       auth_stream_reply_add(request->userdb_reply, NULL, request->user);
-
        userdb_template_export(module->default_fields_tmpl, request);
 }