changeset 11490:48ac56ad4768 HEAD

auth: Fixed prefetch userdb interaction with passdb changing username. If userdb_* fields were set before user was changed, prefetch returned the unchanged username.
author Timo Sirainen <tss@iki.fi>
date Mon, 07 Jun 2010 18:53:42 +0100
parents c73ddaa39ca4
children 2f084e625f09
files src/auth/auth-request.c
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-request.c	Mon Jun 07 17:48:51 2010 +0100
+++ b/src/auth/auth-request.c	Mon Jun 07 18:53:42 2010 +0100
@@ -31,6 +31,7 @@
 
 static void get_log_prefix(string_t *str, struct auth_request *auth_request,
 			   const char *subsystem);
+static void auth_request_userdb_reply_update_user(struct auth_request *request);
 
 struct auth_request *
 auth_request_new(const struct mech_module *mech,
@@ -1096,6 +1097,10 @@
 				request->user, value);
 			request->user = p_strdup(request->pool, value);
 		}
+
+		if (request->userdb_reply != NULL)
+			auth_request_userdb_reply_update_user(request);
+
 		/* restore the original value so it gets saved correctly to
 		   cache. */
 		value = orig_value;
@@ -1172,6 +1177,20 @@
 	auth_stream_reply_add(request->userdb_reply, NULL, request->user);
 }
 
+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));
+
+	auth_stream_reply_reset(request->userdb_reply);
+	auth_stream_reply_add(request->userdb_reply, NULL, request->user);
+
+	p = strchr(str, '\t');
+	if (p != NULL)
+		auth_stream_reply_import(request->userdb_reply, p + 1);
+}
+
 static void
 auth_request_change_userdb_user(struct auth_request *request, const char *user)
 {