From: Timo Sirainen Date: Fri, 3 Dec 2010 10:05:38 +0000 (+0000) Subject: Log login pid/id for internal failures to allow matching errors between processes. X-Git-Tag: 2.0.8~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bdb9f7f7fbf828fb85a393bd2803167b1bb8ff0d;p=thirdparty%2Fdovecot%2Fcore.git Log login pid/id for internal failures to allow matching errors between processes. --- diff --git a/src/lib-master/master-login-auth.c b/src/lib-master/master-login-auth.c index adbc6cbca4..69463e3047 100644 --- a/src/lib-master/master-login-auth.c +++ b/src/lib-master/master-login-auth.c @@ -76,19 +76,27 @@ struct master_login_auth *master_login_auth_init(const char *auth_socket_path) 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 unsigned int auth_get_next_timeout_secs(struct master_login_auth *auth) 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 @@ static void master_login_auth_timeout(struct master_login_auth *auth) &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 @@ master_login_auth_input_notfound(struct master_login_auth *auth, 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 @@ master_login_auth_input_fail(struct master_login_auth *auth, 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 --git a/src/login-common/client-common.c b/src/login-common/client-common.c index f2f2ca4ba9..9979efa022 100644 --- a/src/login-common/client-common.c +++ b/src/login-common/client-common.c @@ -171,7 +171,9 @@ void client_destroy_internal_failure(struct client *client) 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)