From 2bdac88b0b913d0cf90d6346bac762f470bb4887 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Fri, 23 Mar 2018 15:17:05 +0200 Subject: [PATCH] MXS-1738 Copy AF_UNIX data from listener to client dcb We need to copy some data from a AF_UNIX based listener dcb to the accepted client dcb, to prevent assertion violation in dcb_get_port(). Further, to be able to log the path in the case of an authentication error we need to copy that as well. --- server/core/dcb.cc | 4 +++- server/modules/authenticator/MySQLAuth/mysql_auth.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/server/core/dcb.cc b/server/core/dcb.cc index 4ba29913b..718f06853 100644 --- a/server/core/dcb.cc +++ b/server/core/dcb.cc @@ -1235,7 +1235,7 @@ void dcb_final_close(DCB* dcb) MXS_DEBUG("Closed socket %d on dcb %p.", dcb->fd, dcb); } - if (dcb->path) + if (dcb->path && (dcb->dcb_role == DCB_ROLE_SERVICE_LISTENER)) { if (unlink(dcb->path) != 0) { @@ -2396,7 +2396,9 @@ dcb_accept(DCB *dcb) if (client_conn.ss_family == AF_UNIX) { // client address + client_dcb->ip.ss_family = AF_UNIX; client_dcb->remote = MXS_STRDUP_A("localhost"); + client_dcb->path = MXS_STRDUP_A(dcb->path); } else { diff --git a/server/modules/authenticator/MySQLAuth/mysql_auth.c b/server/modules/authenticator/MySQLAuth/mysql_auth.c index 6116a2c83..d1665bdf6 100644 --- a/server/modules/authenticator/MySQLAuth/mysql_auth.c +++ b/server/modules/authenticator/MySQLAuth/mysql_auth.c @@ -304,8 +304,16 @@ mysql_auth_authenticate(DCB *dcb) } else if (dcb->service->log_auth_warnings) { - MXS_WARNING("%s: login attempt for user '%s'@[%s]:%d, authentication failed.", - dcb->service->name, client_data->user, dcb->remote, dcb_get_port(dcb)); + if (dcb->path) + { + MXS_WARNING("%s: login attempt for user '%s'@[%s]:%s, authentication failed.", + dcb->service->name, client_data->user, dcb->remote, dcb->path); + } + else + { + MXS_WARNING("%s: login attempt for user '%s'@[%s]:%d, authentication failed.", + dcb->service->name, client_data->user, dcb->remote, dcb_get_port(dcb)); + } if (is_localhost_address(&dcb->ip) && !dcb->service->localhost_match_wildcard_host)