Skip to content

Commit

Permalink
lib-master: Add auth connect & handshake times to master_login_auth_r…
Browse files Browse the repository at this point in the history
…equest errors
  • Loading branch information
sirainen committed Jun 8, 2018
1 parent 9d00608 commit e8cddeb
Showing 1 changed file with 30 additions and 12 deletions.
42 changes: 30 additions & 12 deletions src/lib-master/master-login-auth.c
Expand Up @@ -42,6 +42,8 @@ struct master_login_auth {
const char *auth_socket_path;
int refcount;

struct timeval connect_time, handshake_time;

int fd;
struct io *io;
struct istream *input;
Expand Down Expand Up @@ -81,21 +83,32 @@ master_login_auth_init(const char *auth_socket_path, bool request_auth_token)
return auth;
}

static void request_failure(struct master_login_auth_request *request,
static void request_failure(struct master_login_auth *auth,
struct master_login_auth_request *request,
const char *log_reason, const char *client_reason)
{
i_error("%s (Request took %u msecs, client-pid=%u client-id=%u)",
log_reason,
timeval_diff_msecs(&ioloop_timeval, &request->create_stamp),
request->client_pid, request->auth_id);
string_t *str = t_str_new(128);

str_printfa(str, "auth connected %u msecs ago",
timeval_diff_msecs(&ioloop_timeval, &auth->connect_time));
if (auth->handshake_time.tv_sec != 0) {
str_printfa(str, ", handshake %u msecs ago",
timeval_diff_msecs(&ioloop_timeval, &auth->handshake_time));
}
str_printfa(str, ", request took %u msecs, client-pid=%u client-id=%u",
timeval_diff_msecs(&ioloop_timeval, &request->create_stamp),
request->client_pid, request->auth_id);

i_error("%s (%s)", log_reason, str_c(str));
request->callback(NULL, client_reason, request->context);
}

static void
request_internal_failure(struct master_login_auth_request *request,
request_internal_failure(struct master_login_auth *auth,
struct master_login_auth_request *request,
const char *reason)
{
request_failure(request, reason, MASTER_AUTH_ERRMSG_INTERNAL_FAILURE);
request_failure(auth, request, reason, MASTER_AUTH_ERRMSG_INTERNAL_FAILURE);
}

void master_login_auth_disconnect(struct master_login_auth *auth)
Expand All @@ -107,7 +120,7 @@ void master_login_auth_disconnect(struct master_login_auth *auth)
DLLIST2_REMOVE(&auth->request_head,
&auth->request_tail, request);

request_internal_failure(request,
request_internal_failure(auth, request,
"Disconnected from auth server, aborting");
i_free(request);
}
Expand All @@ -123,6 +136,8 @@ void master_login_auth_disconnect(struct master_login_auth *auth)
auth->fd = -1;
}
auth->version_received = FALSE;
i_zero(&auth->connect_time);
i_zero(&auth->handshake_time);
}

static void master_login_auth_unref(struct master_login_auth **_auth)
Expand Down Expand Up @@ -173,7 +188,7 @@ static void master_login_auth_timeout(struct master_login_auth *auth)
reason = t_strdup_printf(
"Auth server request timed out after %u secs",
(unsigned int)(ioloop_time - request->create_stamp.tv_sec));
request_internal_failure(request, reason);
request_internal_failure(auth, request, reason);
i_free(request);
}
timeout_remove(&auth->to);
Expand Down Expand Up @@ -269,7 +284,7 @@ master_login_auth_input_notfound(struct master_login_auth *auth,
const char *reason = t_strdup_printf(
"Authenticated user not found from userdb, "
"auth lookup id=%u", id);
request_internal_failure(request, reason);
request_internal_failure(auth, request, reason);
i_free(request);
}
return TRUE;
Expand All @@ -296,12 +311,12 @@ master_login_auth_input_fail(struct master_login_auth *auth,
request = master_login_auth_lookup_request(auth, id);
if (request != NULL) {
if (error == NULL) {
request_internal_failure(request,
request_internal_failure(auth, request,
"Internal auth failure");
} else {
const char *log_reason = t_strdup_printf(
"Internal auth failure: %s", error);
request_failure(request, log_reason, error);
request_failure(auth, request, log_reason, error);
}
i_free(request);
}
Expand Down Expand Up @@ -345,6 +360,7 @@ static void master_login_auth_input(struct master_login_auth *auth)
return;
}
auth->version_received = TRUE;
auth->handshake_time = ioloop_timeval;
}
if (!auth->spid_received) {
line = i_stream_next_line(auth->input);
Expand Down Expand Up @@ -394,6 +410,8 @@ master_login_auth_connect(struct master_login_auth *auth)
auth->auth_socket_path);
return -1;
}
io_loop_time_refresh();
auth->connect_time = ioloop_timeval;
auth->fd = fd;
auth->input = i_stream_create_fd(fd, AUTH_MAX_INBUF_SIZE);
auth->output = o_stream_create_fd(fd, (size_t)-1);
Expand Down

0 comments on commit e8cddeb

Please sign in to comment.