dovecot-2.0: Log login pid/id for internal failures to allow mat...

dovecot at dovecot.org dovecot at dovecot.org
Fri Dec 3 12:05:42 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/c6b0e643d2dc
changeset: 12504:c6b0e643d2dc
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Dec 03 10:05:38 2010 +0000
description:
Log login pid/id for internal failures to allow matching errors between processes.

diffstat:

 src/lib-master/master-login-auth.c |  46 ++++++++++++++--------
 src/login-common/client-common.c   |   4 +-
 2 files changed, 32 insertions(+), 18 deletions(-)

diffs (108 lines):

diff -r 4455f79f964d -r c6b0e643d2dc src/lib-master/master-login-auth.c
--- a/src/lib-master/master-login-auth.c	Fri Dec 03 09:10:12 2010 +0000
+++ b/src/lib-master/master-login-auth.c	Fri Dec 03 10:05:38 2010 +0000
@@ -76,19 +76,27 @@
 	return auth;
 }
 
+static void
+request_internal_failure(struct master_login_auth_request *request,
+			 const char *reason)
+{
+	i_error("%s (client-pid=%u client-id=%u)",
+		reason, request->client_pid, request->auth_id);
+	request->callback(NULL, MASTER_AUTH_ERRMSG_INTERNAL_FAILURE,
+			  request->context);
+}
+
 void master_login_auth_disconnect(struct master_login_auth *auth)
 {
 	struct master_login_auth_request *request;
 
-	if (auth->request_head != NULL)
-		i_error("Disconnected from auth server, aborting requests");
 	while (auth->request_head != NULL) {
 		request = auth->request_head;
 		DLLIST2_REMOVE(&auth->request_head,
 			       &auth->request_tail, request);
 
-		request->callback(NULL, MASTER_AUTH_ERRMSG_INTERNAL_FAILURE,
-				  request->context);
+		request_internal_failure(request,
+			"Disconnected from auth server, aborting");
 		i_free(request);
 	}
 	hash_table_clear(auth->requests, FALSE);
@@ -143,6 +151,7 @@
 static void master_login_auth_timeout(struct master_login_auth *auth)
 {
 	struct master_login_auth_request *request;
+	const char *reason;
 
 	while (auth->request_head != NULL &&
 	       auth_get_next_timeout_secs(auth) == 0) {
@@ -151,10 +160,10 @@
 			       &auth->request_tail, request);
 		hash_table_remove(auth->requests, POINTER_CAST(request->id));
 
-		i_error("Auth server request timed out after %u secs",
+		reason = t_strdup_printf(
+			"Auth server request timed out after %u secs",
 			(unsigned int)(ioloop_time - request->create_stamp));
-		request->callback(NULL, MASTER_AUTH_ERRMSG_INTERNAL_FAILURE,
-				  request->context);
+		request_internal_failure(request, reason);
 		i_free(request);
 	}
 	timeout_remove(&auth->to);
@@ -247,9 +256,10 @@
 
 	request = master_login_auth_lookup_request(auth, id);
 	if (request != NULL) {
-		i_error("Authenticated user not found from userdb (id=%u)", id);
-		request->callback(NULL, MASTER_AUTH_ERRMSG_INTERNAL_FAILURE,
-				  request->context);
+		const char *reason = t_strdup_printf(
+			"Authenticated user not found from userdb, "
+			"auth lookup id=%u", id);
+		request_internal_failure(request, reason);
 		i_free(request);
 	}
 	return TRUE;
@@ -275,13 +285,15 @@
 
 	request = master_login_auth_lookup_request(auth, id);
 	if (request != NULL) {
-		if (error == NULL)
-			i_error("Internal auth failure");
-		else
-			i_error("Internal auth failure: %s", error);
-		request->callback(NULL, error != NULL ? error :
-				  MASTER_AUTH_ERRMSG_INTERNAL_FAILURE,
-				  request->context);
+		if (error == NULL) {
+			request_internal_failure(request,
+						 "Internal auth failure");
+		} else {
+			i_error("Internal tuah failure: %s "
+				"(client-pid=%u client-id=%u)",
+				error, request->client_pid, request->auth_id);
+			request->callback(NULL, error, request->context);
+		}
 		i_free(request);
 	}
 	return TRUE;
diff -r 4455f79f964d -r c6b0e643d2dc src/login-common/client-common.c
--- a/src/login-common/client-common.c	Fri Dec 03 09:10:12 2010 +0000
+++ b/src/login-common/client-common.c	Fri Dec 03 10:05:38 2010 +0000
@@ -171,7 +171,9 @@
 	client_send_line(client, CLIENT_CMD_REPLY_AUTH_FAIL_TEMP,
 			 "Internal login failure. "
 			 "Refer to server log for more information.");
-	client_destroy(client, "Internal login failure");
+	client_destroy(client, t_strdup_printf(
+		"Internal login failure (pid=%s id=%u)",
+		my_pid, client->master_auth_id));
 }
 
 void client_ref(struct client *client)


More information about the dovecot-cvs mailing list