From d054f5d7bdcb771b1f89d07ada0b8c3c6c1b0e4e Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Fri, 29 Jan 2016 10:54:41 +0200 Subject: [PATCH] Cleanup of dbusers.[h|c] - All functions used only in c-file declared as static. - All module functions declared. - A few camelClase names changed to underscore. --- server/core/dbusers.c | 105 +++++++++++++++++++++------------------ server/include/dbusers.h | 12 +++-- 2 files changed, 64 insertions(+), 53 deletions(-) diff --git a/server/core/dbusers.c b/server/core/dbusers.c index c380aaaae..43078c85e 100644 --- a/server/core/dbusers.c +++ b/server/core/dbusers.c @@ -27,7 +27,8 @@ * 24/06/2013 Massimiliano Pinto Initial implementation * 08/08/2013 Massimiliano Pinto Fixed bug for invalid memory access in row[1]+1 when row[1] is "" * 06/02/2014 Massimiliano Pinto Mysql user root selected based on configuration flag - * 26/02/2014 Massimiliano Pinto Addd: replace_mysql_users() routine may replace users' table based on a checksum + * 26/02/2014 Massimiliano Pinto Addd: replace_mysql_users() routine may replace users' table + * based on a checksum * 28/02/2014 Massimiliano Pinto Added Mysql user@host authentication * 29/09/2014 Massimiliano Pinto Added Mysql user@host authentication with wildcard in IPv4 hosts: * x.y.z.%, x.y.%.%, x.%.%.% @@ -130,26 +131,34 @@ MaxScale authentication will proceed without including database permissions. \ To correct this GRANT SHOW DATABASES ON *.* privilege to the user %s." -static int getUsers(SERVICE *service, USERS *users); +static int add_databases(SERVICE *service, MYSQL *con); +static int add_wildcard_users(USERS *users, char* name, char* host, + char* password, char* anydb, char* db, HASHTABLE* hash); +static void *dbusers_keyread(int fd); +static int dbusers_keywrite(int fd, void *key); +static void *dbusers_valueread(int fd); +static int dbusers_valuewrite(int fd, void *value); +static int get_all_users(SERVICE *service, USERS *users); +static int get_databases(SERVICE *, MYSQL *); +static const char* get_mysql_users_db_count_query(char* server_version); +static const char* get_mysql_users_query(char* server_version, bool include_root); +static int get_users(SERVICE *service, USERS *users); +static int gw_mysql_set_timeouts(MYSQL* handle); +static bool host_has_singlechar_wildcard(const char *host); +static bool host_matches_singlechar_wildcard(const char* user, const char* wild); +static bool is_ipaddress(const char* host); +static char *mysql_format_user_entry(void *data); +static char *mysql_format_user_entry(void *data); +static int normalize_hostname(const char *input_host, char *output_host); +static int resource_add(HASHTABLE *, char *, char *); +static HASHTABLE *resource_alloc(); +static void *resource_fetch(HASHTABLE *, char *); +static void resource_free(HASHTABLE *resource); static int uh_cmpfun(void* v1, void* v2); +static int uh_hfun(void* key); static void *uh_keydup(void* key); static void uh_keyfree(void* key); -static int uh_hfun(void* key); -char *mysql_users_fetch(USERS *users, MYSQL_USER_HOST *key); -char *mysql_format_user_entry(void *data); -int add_mysql_users_with_host_ipv4(USERS *users, char *user, char *host, - char *passwd, char *anydb, char *db); -static int getDatabases(SERVICE *, MYSQL *); -HASHTABLE *resource_alloc(); -void resource_free(HASHTABLE *resource); -void *resource_fetch(HASHTABLE *, char *); -int resource_add(HASHTABLE *, char *, char *); -int resource_hash(char *); -static int normalize_hostname(char *input_host, char *output_host); -int wildcard_db_grant(char* str); -int add_wildcard_users(USERS *users, char* name, char* host, char* password, - char* anydb, char* db, HASHTABLE* hash); -static int gw_mysql_set_timeouts(MYSQL* handle); +static int wildcard_db_grant(char* str); /** * Get the user data query. @@ -157,7 +166,7 @@ static int gw_mysql_set_timeouts(MYSQL* handle); * @param include_root Include root user * @return Users query */ -const char* get_mysql_users_query(char* server_version, bool include_root) +static const char* get_mysql_users_query(char* server_version, bool include_root) { const char* rval; if (strstr(server_version, "5.7.")) @@ -178,7 +187,7 @@ const char* get_mysql_users_query(char* server_version, bool include_root) * @param server_version Server version string * @return User vount query * */ -const char* get_mysq_users_db_count_query(char* server_version) +static const char* get_mysql_users_db_count_query(char* server_version) { return strstr(server_version, "5.7.") ? MYSQL57_USERS_WITH_DB_COUNT : MYSQL_USERS_WITH_DB_COUNT; @@ -191,7 +200,7 @@ const char* get_mysq_users_db_count_query(char* server_version) * @param wildcardhost Host address in the grant * @return True if the host address matches */ -bool host_matches_singlechar_wildcard(const char* user, const char* wild) +static bool host_matches_singlechar_wildcard(const char* user, const char* wild) { while (*user != '\0' && *wild != '\0') { @@ -215,7 +224,7 @@ bool host_matches_singlechar_wildcard(const char* user, const char* wild) int load_mysql_users(SERVICE *service) { - return getUsers(service, service->users); + return get_users(service, service->users); } /** @@ -239,7 +248,7 @@ reload_mysql_users(SERVICE *service) oldresources = service->resources; - i = getUsers(service, newusers); + i = get_users(service, newusers); spinlock_acquire(&service->spin); oldusers = service->users; @@ -279,7 +288,7 @@ replace_mysql_users(SERVICE *service) oldresources = service->resources; /* load db users ad db grants */ - i = getUsers(service, newusers); + i = get_users(service, newusers); if (i <= 0) { @@ -332,7 +341,7 @@ replace_mysql_users(SERVICE *service) * @param host IP address to check * @return True if the address is a valid, MySQL type IP address */ -bool is_ipaddress(const char* host) +static bool is_ipaddress(const char* host) { while (*host != '\0') { @@ -351,7 +360,7 @@ bool is_ipaddress(const char* host) * @param host Hostname to check * @return True if the hostname is a valid IP address with a single character wildcard */ -bool host_has_singlechar_wildcard(const char *host) +static bool host_has_singlechar_wildcard(const char *host) { const char* chrptr = host; bool retval = false; @@ -388,8 +397,8 @@ bool host_has_singlechar_wildcard(const char *host) * @return 1 on success, 0 on failure and -1 on duplicate user */ -int add_mysql_users_with_host_ipv4(USERS *users, char *user, char *host, - char *passwd, char *anydb, char *db) +int add_mysql_users_with_host_ipv4(USERS *users, const char *user, const char *host, + char *passwd, const char *anydb, const char *db) { struct sockaddr_in serv_addr; MYSQL_USER_HOST key; @@ -504,7 +513,7 @@ int add_mysql_users_with_host_ipv4(USERS *users, char *user, char *host, * @return -1 on any error or the number of users inserted (0 means no users at all) */ static int -addDatabases(SERVICE *service, MYSQL *con) +add_databases(SERVICE *service, MYSQL *con) { MYSQL_ROW row; MYSQL_RES *result = NULL; @@ -609,7 +618,7 @@ addDatabases(SERVICE *service, MYSQL *con) * @return -1 on any error or the number of users inserted (0 means no users at all) */ static int -getDatabases(SERVICE *service, MYSQL *con) +get_databases(SERVICE *service, MYSQL *con) { MYSQL_ROW row; MYSQL_RES *result = NULL; @@ -715,7 +724,7 @@ getDatabases(SERVICE *service, MYSQL *con) * @return -1 on any error or the number of users inserted */ static int -getAllUsers(SERVICE *service, USERS *users) +get_all_users(SERVICE *service, USERS *users) { MYSQL *con = NULL; MYSQL_ROW row; @@ -819,7 +828,7 @@ getAllUsers(SERVICE *service, USERS *users) goto cleanup; } - addDatabases(service, con); + add_databases(service, con); mysql_close(con); server = server->next; } @@ -881,7 +890,7 @@ getAllUsers(SERVICE *service, USERS *users) } } /** Count users. Start with users and db grants for users */ - const char *user_with_db_count = get_mysq_users_db_count_query(server->server->server_string); + const char *user_with_db_count = get_mysql_users_db_count_query(server->server->server_string); if (mysql_query(con, user_with_db_count)) { if (mysql_errno(con) != ER_TABLEACCESS_DENIED_ERROR) @@ -1244,7 +1253,7 @@ cleanup: * @return -1 on any error or the number of users inserted */ static int -getUsers(SERVICE *service, USERS *users) +get_users(SERVICE *service, USERS *users) { MYSQL *con = NULL; MYSQL_ROW row; @@ -1276,7 +1285,7 @@ getUsers(SERVICE *service, USERS *users) if (service->users_from_all) { - return getAllUsers(service, users); + return get_all_users(service, users); } con = mysql_init(NULL); @@ -1383,7 +1392,7 @@ getUsers(SERVICE *service, USERS *users) } } - const char *user_with_db_count = get_mysq_users_db_count_query(server->server->server_string); + const char *user_with_db_count = get_mysql_users_db_count_query(server->server->server_string); /** Count users. Start with users and db grants for users */ if (mysql_query(con, user_with_db_count)) { @@ -1524,7 +1533,7 @@ getUsers(SERVICE *service, USERS *users) if (db_grants) { /* load all mysql database names */ - dbnames = getDatabases(service, con); + dbnames = get_databases(service, con); MXS_DEBUG("Loaded %d MySQL Database Names for service [%s]", dbnames, service->name); } @@ -1999,7 +2008,7 @@ static void uh_keyfree(void* key) * @param data Input data * @return the MySQL user@host */ -char *mysql_format_user_entry(void *data) +static char *mysql_format_user_entry(void *data) { MYSQL_USER_HOST *entry; char *mysql_user; @@ -2068,7 +2077,7 @@ char *mysql_format_user_entry(void *data) * * @param resources The resources table to remove */ -void +static void resource_free(HASHTABLE *resources) { if (resources) @@ -2082,7 +2091,7 @@ resource_free(HASHTABLE *resources) * * @return The database names table */ -HASHTABLE * +static HASHTABLE * resource_alloc() { HASHTABLE *resources; @@ -2106,7 +2115,7 @@ resource_alloc() * @param value The value for resource (not used) * @return The number of resources dded to the table */ -int +static int resource_add(HASHTABLE *resources, char *key, char *value) { return hashtable_add(resources, key, value); @@ -2119,7 +2128,7 @@ resource_add(HASHTABLE *resources, char *key, char *value) * @param key The database name to fetch * @return The database esists or NULL if not found */ -void * +static void * resource_fetch(HASHTABLE *resources, char *key) { return hashtable_fetch(resources, key); @@ -2139,7 +2148,7 @@ resource_fetch(HASHTABLE *resources, char *key) * @param output_host The normalized hostname (buffer must be preallocated) * @return The calculated netmask or -1 on failure */ -static int normalize_hostname(char *input_host, char *output_host) +static int normalize_hostname(const char *input_host, char *output_host) { int netmask, bytes, bits = 0, found_wildcard = 0; char *p, *lasts, *tmp; @@ -2448,7 +2457,7 @@ dbusers_valueread(int fd) * @return The number of entries saved */ int -dbusers_save(USERS *users, char *filename) +dbusers_save(USERS *users, const char *filename) { return hashtable_save(users->data, filename, dbusers_keywrite, dbusers_valuewrite); } @@ -2461,7 +2470,7 @@ dbusers_save(USERS *users, char *filename) * @return The number of entries loaded */ int -dbusers_load(USERS *users, char *filename) +dbusers_load(USERS *users, const char *filename) { return hashtable_load(users->data, filename, dbusers_keyread, dbusers_valueread); } @@ -2471,7 +2480,7 @@ dbusers_load(USERS *users, char *filename) * @param str Database grant * @return 1 if the name contains the '%' wildcard character, 0 if it does not */ -int wildcard_db_grant(char* str) +static int wildcard_db_grant(char* str) { char* ptr = str; @@ -2498,8 +2507,8 @@ int wildcard_db_grant(char* str) * @param hash Hashtable with all database names * @return number of unique grants generated from wildcard database name */ -int add_wildcard_users(USERS *users, char* name, char* host, char* password, - char* anydb, char* db, HASHTABLE* hash) +static int add_wildcard_users(USERS *users, char* name, char* host, char* password, + char* anydb, char* db, HASHTABLE* hash) { HASHITERATOR* iter; HASHTABLE* ht = hash; diff --git a/server/include/dbusers.h b/server/include/dbusers.h index 17e5b97ef..f45f8daa0 100644 --- a/server/include/dbusers.h +++ b/server/include/dbusers.h @@ -65,14 +65,16 @@ typedef struct mysql_user_host_key { char hostname[MYSQL_HOST_MAXLEN + 1]; } MYSQL_USER_HOST; +extern int add_mysql_users_with_host_ipv4(USERS *users, const char *user, const char *host, + char *passwd, const char *anydb, const char *db); +extern bool check_service_permissions(SERVICE* service); +extern int dbusers_load(USERS *, const char *filename); +extern int dbusers_save(USERS *, const char *filename); extern int load_mysql_users(SERVICE *service); -extern int reload_mysql_users(SERVICE *service); extern int mysql_users_add(USERS *users, MYSQL_USER_HOST *key, char *auth); -extern int add_mysql_users_with_host_ipv4(USERS *users, char *user, char *host, char *passwd, char *anydb, char *db); extern USERS *mysql_users_alloc(); extern char *mysql_users_fetch(USERS *users, MYSQL_USER_HOST *key); +extern int reload_mysql_users(SERVICE *service); extern int replace_mysql_users(SERVICE *service); -extern int dbusers_save(USERS *, char *); -extern int dbusers_load(USERS *, char *); -bool check_service_permissions(SERVICE* service); + #endif