mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
WL #1510 "Implement support for "commercial" binaries on handshake",
client library: - implemented 'check_license' function include/errmsg.h: WL #1510: new error code include/mysql_version.h.in: WL #1510: fallback define for LICENSE libmysql/errmsg.c: WL #1510: error message to print in case when client and server license mismatch. libmysql/libmysql.c: WL#1510: implementation of 'check_license' function sql/set_var.cc: removed unused variable 'license'
This commit is contained in:
parent
d730756649
commit
c6a0599642
5 changed files with 67 additions and 6 deletions
|
@ -63,4 +63,5 @@ extern const char *client_errors[]; /* Error messages */
|
|||
#define CR_PROBE_MASTER_CONNECT 2025
|
||||
#define CR_SSL_CONNECTION_ERROR 2026
|
||||
#define CR_MALFORMED_PACKET 2027
|
||||
#define CR_WRONG_LICENSE 2028
|
||||
|
||||
|
|
|
@ -26,4 +26,9 @@
|
|||
#define MYSQL_CHARSET "@default_charset@"
|
||||
#endif /* MYSQL_CHARSET */
|
||||
#endif /* _CUSTOMCONFIG_ */
|
||||
|
||||
#ifndef LICENSE
|
||||
#define LICENSE "GPL"
|
||||
#endif /* LICENSE */
|
||||
|
||||
#endif /* _mysql_version_h */
|
||||
|
|
|
@ -51,7 +51,8 @@ const char *client_errors[]=
|
|||
"Error connecting to slave:",
|
||||
"Error connecting to master:",
|
||||
"SSL connection error",
|
||||
"Malformed packet"
|
||||
"Malformed packet",
|
||||
"This client library is licensed only for use with MySQL servers having '%s' license"
|
||||
};
|
||||
|
||||
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
|
||||
|
@ -86,7 +87,8 @@ const char *client_errors[]=
|
|||
"Error connecting to slave:",
|
||||
"Error connecting to master:",
|
||||
"SSL connection error",
|
||||
"Malformed packet"
|
||||
"Malformed packet",
|
||||
"This client library is licensed only for use with MySQL servers having '%s' license"
|
||||
};
|
||||
|
||||
#else /* ENGLISH */
|
||||
|
@ -119,7 +121,8 @@ const char *client_errors[]=
|
|||
"Error connecting to slave:",
|
||||
"Error connecting to master:",
|
||||
"SSL connection error",
|
||||
"Malformed packet"
|
||||
"Malformed packet",
|
||||
"This client library is licensed only for use with MySQL servers having '%s' license"
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1612,6 +1612,56 @@ mysql_connect(MYSQL *mysql,const char *host,
|
|||
#endif
|
||||
|
||||
|
||||
#ifdef CHECK_LICENSE
|
||||
/*
|
||||
Check server side variable 'license'.
|
||||
If the variable does not exist or does not contain 'Commercial',
|
||||
we're talking to non-commercial server from commercial client.
|
||||
SYNOPSIS
|
||||
check_license()
|
||||
RETURN VALUE
|
||||
0 success
|
||||
!0 network error or the server is not commercial.
|
||||
Error code is saved in mysql->net.last_errno.
|
||||
*/
|
||||
|
||||
static int check_license(MYSQL *mysql)
|
||||
{
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *res;
|
||||
NET *net= &mysql->net;
|
||||
static const char query[]= "SELECT @@license";
|
||||
static const char required_license[]= LICENSE;
|
||||
|
||||
if (mysql_real_query(mysql, query, sizeof(query)-1))
|
||||
{
|
||||
if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE)
|
||||
{
|
||||
net->last_errno= CR_WRONG_LICENSE;
|
||||
sprintf(net->last_error, ER(net->last_errno), required_license);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if (!(res= mysql_use_result(mysql)))
|
||||
return 1;
|
||||
row= mysql_fetch_row(res);
|
||||
/*
|
||||
If no rows in result set, or column value is NULL (none of these
|
||||
two is ever true for server variables now), or column value
|
||||
mismatch, set wrong license error.
|
||||
*/
|
||||
if (!net->last_errno &&
|
||||
(!row || !row[0] ||
|
||||
strncmp(row[0], required_license, sizeof(required_license))))
|
||||
{
|
||||
net->last_errno= CR_WRONG_LICENSE;
|
||||
sprintf(net->last_error, ER(net->last_errno), required_license);
|
||||
}
|
||||
mysql_free_result(res);
|
||||
return net->last_errno;
|
||||
}
|
||||
#endif /* CHECK_LICENSE */
|
||||
|
||||
/*
|
||||
The following union is used to force a struct to be double allgined.
|
||||
This is to avoid warings with gethostname_r() on Linux itanium systems
|
||||
|
@ -2048,6 +2098,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||
net->compress=1;
|
||||
if (mysql->options.max_allowed_packet)
|
||||
net->max_packet_size= mysql->options.max_allowed_packet;
|
||||
#ifdef CHECK_LICENSE
|
||||
if (check_license(mysql))
|
||||
goto error;
|
||||
#endif
|
||||
if (db && mysql_select_db(mysql,db))
|
||||
goto error;
|
||||
if (mysql->options.init_command)
|
||||
|
|
|
@ -334,14 +334,12 @@ static sys_var_rand_seed2 sys_rand_seed2("rand_seed2");
|
|||
static sys_var_thd_ulong sys_default_week_format("default_week_format",
|
||||
&SV::default_week_format);
|
||||
|
||||
static const char license[]= "GPL";
|
||||
|
||||
/* Read only variables */
|
||||
|
||||
sys_var_const_str sys_os("version_compile_os", SYSTEM_TYPE);
|
||||
sys_var_const_str sys_license("license", license);
|
||||
|
||||
/* Global read-only variable describing server license */
|
||||
sys_var_const_str sys_license("license", LICENSE);
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue