diff options
author | Anel Husakovic <anel@mariadb.org> | 2020-05-28 19:34:27 +0200 |
---|---|---|
committer | Anel Husakovic <anel@mariadb.org> | 2020-05-28 20:18:25 +0200 |
commit | a1b3bebe1f7f7221daf520e35b81e13c1478d189 (patch) | |
tree | f640f2de1692145ed306d194672aec8addafc3ee /sql/sql_acl.cc | |
parent | 957cb7b7ba355184aebf0f5dc91b7f2aa620c0e0 (diff) | |
download | mariadb-git-a1b3bebe1f7f7221daf520e35b81e13c1478d189.tar.gz |
fix pre-definition for embedded server for find_user_or_anon()
Pre-definitions are allowed for non-embedded.
Failur catched with:
```
cmake ../../10.1 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++-9
-DCMAKE_C_COMPILER=gcc-9 -DWITH_EMBEDDED_SERVER=ON -DCMAKE_BUILD_TYPE=Debug
-DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,PERFSCHEMA,SPIDER,SPHINX}=N
-DMYSQL_MAINTAINER_MODE=ON -DNOT_FOR_DISTRIBUTION=ON
```
Alternative fix would be
```
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -201,8 +201,10 @@ LEX_STRING current_user= { C_STRING_WITH_LEN("*current_user") };
LEX_STRING current_role= { C_STRING_WITH_LEN("*current_role") };
LEX_STRING current_user_and_current_role= { C_STRING_WITH_LEN("*current_user_and_current_role") };
+#ifndef EMBEDDED_LIBRARY
class ACL_USER;
static ACL_USER *find_user_or_anon(const char *host, const char *user, const char *ip);
+#endif
```
Diffstat (limited to 'sql/sql_acl.cc')
-rw-r--r-- | sql/sql_acl.cc | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index af8685c458b..6e6135b75bb 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -201,9 +201,6 @@ LEX_STRING current_user= { C_STRING_WITH_LEN("*current_user") }; LEX_STRING current_role= { C_STRING_WITH_LEN("*current_role") }; LEX_STRING current_user_and_current_role= { C_STRING_WITH_LEN("*current_user_and_current_role") }; -class ACL_USER; -static ACL_USER *find_user_or_anon(const char *host, const char *user, const char *ip); - #ifndef NO_EMBEDDED_ACCESS_CHECKS static plugin_ref old_password_plugin; #endif @@ -2047,6 +2044,28 @@ static int check_role_is_granted_callback(ACL_USER_BASE *grantee, void *data) return 0; } +/* + unlike find_user_exact and find_user_wild, + this function finds anonymous users too, it's when a + user is not empty, but priv_user (acl_user->user) is empty. +*/ +static ACL_USER *find_user_or_anon(const char *host, const char *user, const char *ip) +{ + ACL_USER *result= NULL; + mysql_mutex_assert_owner(&acl_cache->lock); + for (uint i=0; i < acl_users.elements; i++) + { + ACL_USER *acl_user_tmp= dynamic_element(&acl_users, i, ACL_USER*); + if ((!acl_user_tmp->user.str || + !strcmp(user, acl_user_tmp->user.str)) && + compare_hostname(&acl_user_tmp->host, host, ip)) + { + result= acl_user_tmp; + break; + } + } + return result; +} static int check_user_can_set_role(THD *thd, const char *user, const char *host, const char *ip, const char *rolename, @@ -3128,31 +3147,6 @@ bool is_acl_user(const char *host, const char *user) return res; } - -/* - unlike find_user_exact and find_user_wild, - this function finds anonymous users too, it's when a - user is not empty, but priv_user (acl_user->user) is empty. -*/ -static ACL_USER *find_user_or_anon(const char *host, const char *user, const char *ip) -{ - ACL_USER *result= NULL; - mysql_mutex_assert_owner(&acl_cache->lock); - for (uint i=0; i < acl_users.elements; i++) - { - ACL_USER *acl_user_tmp= dynamic_element(&acl_users, i, ACL_USER*); - if ((!acl_user_tmp->user.str || - !strcmp(user, acl_user_tmp->user.str)) && - compare_hostname(&acl_user_tmp->host, host, ip)) - { - result= acl_user_tmp; - break; - } - } - return result; -} - - /* Find first entry that matches the specified user@host pair */ |