From: Timo Sirainen Date: Fri, 4 May 2018 11:03:46 +0000 (+0300) Subject: lib-master: Use more exact timestamp in master_login_auth_request failures X-Git-Tag: 2.3.9~1890 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7108b2a3d0052655bed39fb7cd425676ba06b6de;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Use more exact timestamp in master_login_auth_request failures --- diff --git a/src/lib-master/master-login-auth.c b/src/lib-master/master-login-auth.c index 30f6fa48e2..b613c2d043 100644 --- a/src/lib-master/master-login-auth.c +++ b/src/lib-master/master-login-auth.c @@ -11,6 +11,7 @@ #include "hash.h" #include "str.h" #include "strescape.h" +#include "time-util.h" #include "master-interface.h" #include "master-service.h" #include "master-auth.h" @@ -23,7 +24,7 @@ struct master_login_auth_request { struct master_login_auth_request *prev, *next; unsigned int id; - time_t create_stamp; + struct timeval create_stamp; pid_t auth_pid; unsigned int auth_id; @@ -145,7 +146,7 @@ static unsigned int auth_get_next_timeout_secs(struct master_login_auth *auth) { time_t expires; - expires = auth->request_head->create_stamp + + expires = auth->request_head->create_stamp.tv_sec + MASTER_AUTH_LOOKUP_TIMEOUT_SECS; return expires <= ioloop_time ? 0 : expires - ioloop_time; } @@ -164,7 +165,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)); + (unsigned int)(ioloop_time - request->create_stamp.tv_sec)); request_internal_failure(request, reason); i_free(request); } @@ -292,9 +293,10 @@ master_login_auth_input_fail(struct master_login_auth *auth, "Internal auth failure"); } else { i_error("Internal auth failure: %s " - "(Request took %"PRIdTIME_T" secs, " + "(Request took %u msecs, " "client-pid=%u client-id=%u)", - error, ioloop_time - request->create_stamp, + error, timeval_diff_msecs(&ioloop_timeval, + &request->create_stamp), request->client_pid, request->auth_id); request->callback(NULL, error, request->context); } @@ -474,8 +476,9 @@ void master_login_auth_request(struct master_login_auth *auth, if (id == 0) id++; + io_loop_time_refresh(); login_req = i_new(struct master_login_auth_request, 1); - login_req->create_stamp = ioloop_time; + login_req->create_stamp = ioloop_timeval; login_req->id = id; login_req->auth_pid = req->auth_pid; login_req->client_pid = req->client_pid;