diff --git a/lib/MySQL_Protocol.cpp b/lib/MySQL_Protocol.cpp index b12eceb15..61d03c0f1 100644 --- a/lib/MySQL_Protocol.cpp +++ b/lib/MySQL_Protocol.cpp @@ -2013,7 +2013,15 @@ __do_auth: password=GloMyAuth->lookup(backend_username, USERNAME_BACKEND, &_ret_use_ssl, &default_hostgroup, &default_schema, &schema_locked, &transaction_persistent, &fast_forward, &max_connections, &sha1_pass, &attributes); if (password) { (*myds)->sess->default_hostgroup=default_hostgroup; + // Free the previously set 'default_schema' by 'GloMyLdapAuth' + if ((*myds)->sess->default_schema) { + free((*myds)->sess->default_schema); + } (*myds)->sess->default_schema=default_schema; // just the pointer is passed + // Free the previously set 'user_attributes' by 'GloMyLdapAuth' + if ((*myds)->sess->user_attributes) { + free((*myds)->sess->user_attributes); + } (*myds)->sess->user_attributes = attributes; // just the pointer is passed #ifdef DEBUG proxy_info("Attributes for user %s: %s\n" , user, attributes); @@ -2024,6 +2032,8 @@ __do_auth: (*myds)->sess->user_max_connections=max_connections; char *tmp_user=strdup((const char *)user); userinfo->set(backend_username, NULL, NULL, NULL); + // 'MySQL_Connection_userinfo::set' duplicates the supplied information, 'free' is required. + free(backend_username); if (sha1_pass==NULL) { // currently proxysql doesn't know any sha1_pass for that specific user, let's set it! GloMyAuth->set_SHA1((char *)userinfo->username, USERNAME_FRONTEND,reply);