From 5f6d04e7db87f56e5c386b6acb656bcb0ce0e944 Mon Sep 17 00:00:00 2001 From: MassimilianoPinto Date: Mon, 29 Sep 2014 16:50:21 +0200 Subject: [PATCH] Match for Class C,B,A in hosts with % Match for Class C,B,A in hosts with % --- server/core/dbusers.c | 8 ++++---- server/modules/protocol/mysql_common.c | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/server/core/dbusers.c b/server/core/dbusers.c index 45251e4d6..0e97aa70b 100644 --- a/server/core/dbusers.c +++ b/server/core/dbusers.c @@ -28,6 +28,8 @@ * 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 * 28/02/2014 Massimiliano Pinto Added Mysql user@host authentication + * 29/07/2014 Massimiliano Pinto Added Mysql user@host authentication with wildcard in IPv4 hosts: + * x.y.z.%, x.y.%.%, x.%.%.% * * @endverbatim */ @@ -342,7 +344,7 @@ getUsers(SERVICE *service, struct users *users) } else { char *tmp; strcpy(ret_ip, row[1]); - tmp = ret_ip+strlen(ret_ip); + tmp = ret_ip+strlen(ret_ip)-1; while(*tmp) { if (*tmp == '%') { @@ -350,16 +352,14 @@ getUsers(SERVICE *service, struct users *users) * avoiding setipadress failure * for Class C address */ + found_range++; if (found_range == 1) *tmp = '1'; else *tmp = '0'; - - found_range++; } tmp--; } - } if (setipaddress(&serv_addr.sin_addr, ret_ip)) { diff --git a/server/modules/protocol/mysql_common.c b/server/modules/protocol/mysql_common.c index f96e3ec9b..1cc43fcc4 100644 --- a/server/modules/protocol/mysql_common.c +++ b/server/modules/protocol/mysql_common.c @@ -31,6 +31,8 @@ * localhost entry should be added for the selected user in the backends. * Setting to 1 allow localhost (127.0.0.1 or socket) to match the any host grant via * user@% + * 29/07/2014 Massimiliano Pinto Added Mysql user@host authentication with wildcard in IPv4 hosts: + * x.y.z.%, x.y.%.%, x.%.%.% * */ @@ -1382,6 +1384,8 @@ int gw_find_mysql_user_password_sha1(char *username, uint8_t *gateway_password, if (strlen(user_password)) gw_hex2bin(gateway_password, user_password, SHA_DIGEST_LENGTH * 2); + fprintf(stderr, "+++ Matched Class C for %s\n", dcb->remote); + return 0; } @@ -1394,6 +1398,8 @@ int gw_find_mysql_user_password_sha1(char *username, uint8_t *gateway_password, if (strlen(user_password)) gw_hex2bin(gateway_password, user_password, SHA_DIGEST_LENGTH * 2); + fprintf(stderr, "++ Matched Class B for %s\n", dcb->remote); + return 0; } @@ -1406,6 +1412,8 @@ int gw_find_mysql_user_password_sha1(char *username, uint8_t *gateway_password, if (strlen(user_password)) gw_hex2bin(gateway_password, user_password, SHA_DIGEST_LENGTH * 2); + fprintf(stderr, "+ Matched Class A for %s\n", dcb->remote); + return 0; } @@ -1438,6 +1446,8 @@ int gw_find_mysql_user_password_sha1(char *username, uint8_t *gateway_password, dcb->remote))); return 1; } + + fprintf(stderr, "%% Matched ANY for %s\n", dcb->remote); } /* user@host found: now check the password