summaryrefslogtreecommitdiffstats
path: root/sql/sql_acl.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 13:22:53 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 13:22:53 +0000
commit347c164c35eddab388009470e6848cb361ac93f8 (patch)
tree2c0c44eac690f510bb0a35b2a13b36d606b77b6b /sql/sql_acl.cc
parentReleasing progress-linux version 1:10.11.7-4~progress7.99u1. (diff)
downloadmariadb-347c164c35eddab388009470e6848cb361ac93f8.tar.xz
mariadb-347c164c35eddab388009470e6848cb361ac93f8.zip
Merging upstream version 1:10.11.8.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sql/sql_acl.cc')
-rw-r--r--sql/sql_acl.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index c6080e5b..0fbf11ce 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -2951,6 +2951,7 @@ bool acl_reload(THD *thd)
}
acl_cache->clear(0);
+ mysql_mutex_record_order(&acl_cache->lock, &LOCK_status);
mysql_mutex_lock(&acl_cache->lock);
old_acl_hosts= acl_hosts;
@@ -7631,7 +7632,7 @@ static bool can_grant_role(THD *thd, ACL_ROLE *role)
{
Security_context *sctx= thd->security_ctx;
- if (!sctx->user) // replication
+ if (!sctx->is_user_defined()) // galera
return true;
ACL_USER *grantee= find_user_exact(sctx->priv_host, sctx->priv_user);
@@ -13354,8 +13355,27 @@ static bool send_server_handshake_packet(MPVIO_EXT *mpvio,
*end++= 0;
int2store(end, thd->client_capabilities);
+
+ CHARSET_INFO *handshake_cs= default_charset_info;
+ if (handshake_cs->number > 0xFF)
+ {
+ /*
+ A workaround for a 2-byte collation ID: translate it into
+ the ID of the primary collation of this character set.
+ */
+ CHARSET_INFO *cs= get_charset_by_csname(handshake_cs->cs_name.str,
+ MY_CS_PRIMARY, MYF(MY_WME));
+ /*
+ cs should not normally be NULL, however it may be possible
+ with a dynamic character set incorrectly defined in Index.xml.
+ For safety let's fallback to latin1 in case cs is NULL.
+ */
+ handshake_cs= cs ? cs : &my_charset_latin1;
+ }
+
/* write server characteristics: up to 16 bytes allowed */
- end[2]= (char) default_charset_info->number;
+ end[2]= (char) handshake_cs->number;
+
int2store(end+3, mpvio->auth_info.thd->server_status);
int2store(end+5, thd->client_capabilities >> 16);
end[7]= data_len;