1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

Merge branch '3.0' into 3.1

This commit is contained in:
Georg Richter
2019-03-03 14:03:20 +01:00
5 changed files with 53 additions and 11 deletions

View File

@@ -171,8 +171,8 @@ IF(MAJOR_VERSION)
SET(MARIADB_CLIENT_VERSION_PATCH ${PATCH_VERSION}) SET(MARIADB_CLIENT_VERSION_PATCH ${PATCH_VERSION})
ELSE() ELSE()
SET(MARIADB_CLIENT_VERSION_MAJOR "10") SET(MARIADB_CLIENT_VERSION_MAJOR "10")
SET(MARIADB_CLIENT_VERSION_MINOR "3") SET(MARIADB_CLIENT_VERSION_MINOR "4")
SET(MARIADB_CLIENT_VERSION_PATCH "6") SET(MARIADB_CLIENT_VERSION_PATCH "3")
ENDIF() ENDIF()
SET(MARIADB_CLIENT_VERSION "${MARIADB_CLIENT_VERSION_MAJOR}.${MARIADB_CLIENT_VERSION_MINOR}.${MARIADB_CLIENT_VERSION_PATCH}") SET(MARIADB_CLIENT_VERSION "${MARIADB_CLIENT_VERSION_MAJOR}.${MARIADB_CLIENT_VERSION_MINOR}.${MARIADB_CLIENT_VERSION_PATCH}")
SET(MARIADB_BASE_VERSION "mariadb-${MARIADB_CLIENT_VERSION_MAJOR}.${MARIADB_CLIENT_VERSION_MINOR}") SET(MARIADB_BASE_VERSION "mariadb-${MARIADB_CLIENT_VERSION_MAJOR}.${MARIADB_CLIENT_VERSION_MINOR}")

View File

@@ -1213,11 +1213,6 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
if (!mysql->methods) if (!mysql->methods)
mysql->methods= &MARIADB_DEFAULT_METHODS; mysql->methods= &MARIADB_DEFAULT_METHODS;
if (!host || !host[0])
host = mysql->options.host;
ma_set_connect_attrs(mysql, host);
if (net->pvio) /* check if we are already connected */ if (net->pvio) /* check if we are already connected */
{ {
SET_CLIENT_ERROR(mysql, CR_ALREADY_CONNECTED, SQLSTATE_UNKNOWN, 0); SET_CLIENT_ERROR(mysql, CR_ALREADY_CONNECTED, SQLSTATE_UNKNOWN, 0);
@@ -1236,6 +1231,11 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
mysql->options.my_cnf_file=mysql->options.my_cnf_group=0; mysql->options.my_cnf_file=mysql->options.my_cnf_group=0;
} }
if (!host || !host[0])
host = mysql->options.host;
ma_set_connect_attrs(mysql, host);
#ifndef WIN32 #ifndef WIN32
if (mysql->options.protocol > MYSQL_PROTOCOL_SOCKET) if (mysql->options.protocol > MYSQL_PROTOCOL_SOCKET)
{ {
@@ -2032,7 +2032,8 @@ int ma_read_ok_packet(MYSQL *mysql, uchar *pos, ulong length)
case SESSION_TRACK_STATE_CHANGE: case SESSION_TRACK_STATE_CHANGE:
case SESSION_TRACK_TRANSACTION_CHARACTERISTICS: case SESSION_TRACK_TRANSACTION_CHARACTERISTICS:
case SESSION_TRACK_SYSTEM_VARIABLES: case SESSION_TRACK_SYSTEM_VARIABLES:
net_field_length(&pos); /* ignore total length, item length will follow next */ if (si_type != SESSION_TRACK_STATE_CHANGE)
net_field_length(&pos); /* ignore total length, item length will follow next */
plen= net_field_length(&pos); plen= net_field_length(&pos);
if (!ma_multi_malloc(0, if (!ma_multi_malloc(0,
&session_item, sizeof(LIST), &session_item, sizeof(LIST),

View File

@@ -8,7 +8,7 @@
typedef struct st_mysql_client_plugin_AUTHENTICATION auth_plugin_t; typedef struct st_mysql_client_plugin_AUTHENTICATION auth_plugin_t;
static int client_mpvio_write_packet(struct st_plugin_vio*, const uchar*, size_t); static int client_mpvio_write_packet(struct st_plugin_vio*, const uchar*, size_t);
static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql);
static int dummy_fallback_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); static int dummy_fallback_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql __attribute__((unused)));
extern void read_user_name(char *name); extern void read_user_name(char *name);
extern char *ma_send_connect_attr(MYSQL *mysql, unsigned char *buffer); extern char *ma_send_connect_attr(MYSQL *mysql, unsigned char *buffer);
extern int ma_read_ok_packet(MYSQL *mysql, uchar *pos, ulong length); extern int ma_read_ok_packet(MYSQL *mysql, uchar *pos, ulong length);
@@ -112,7 +112,7 @@ auth_plugin_t dummy_fallback_client_plugin=
}; };
static int dummy_fallback_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) static int dummy_fallback_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql __attribute__((unused)))
{ {
char last_error[MYSQL_ERRMSG_SIZE]; char last_error[MYSQL_ERRMSG_SIZE];
unsigned int i, last_errno= ((MCPVIO_EXT *)vio)->mysql->net.last_errno; unsigned int i, last_errno= ((MCPVIO_EXT *)vio)->mysql->net.last_errno;

View File

@@ -1345,6 +1345,10 @@ static int test_expired_pw(MYSQL *my)
my_test_connect(mysql, hostname, "foo", "foo", schema, my_test_connect(mysql, hostname, "foo", "foo", schema,
port, socketname, 0); port, socketname, 0);
/* we should be in sandbox mode now, only set commands should be allowed */
rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
FAIL_IF(!rc, "Error expected (we are in sandbox mode");
diag("error: %d %s", mysql_errno(mysql), mysql_error(mysql)); diag("error: %d %s", mysql_errno(mysql), mysql_error(mysql));
FAIL_IF(mysql_errno(mysql) != ER_MUST_CHANGE_PASSWORD && FAIL_IF(mysql_errno(mysql) != ER_MUST_CHANGE_PASSWORD &&
mysql_errno(mysql) != ER_MUST_CHANGE_PASSWORD_LOGIN, "Error 1820/1862 expected"); mysql_errno(mysql) != ER_MUST_CHANGE_PASSWORD_LOGIN, "Error 1820/1862 expected");
@@ -1610,6 +1614,13 @@ static int test_conc366(MYSQL *mysql)
return SKIP; return SKIP;
} }
/* check if ed25519 plugin is available */
if (!mysql_client_find_plugin(mysql, "client_ed25519", 3))
{
diag("client_ed25519 plugin not available");
return SKIP;
}
rc= mysql_query(mysql, "INSTALL SONAME 'auth_ed25519'"); rc= mysql_query(mysql, "INSTALL SONAME 'auth_ed25519'");
if (rc) if (rc)
{ {
@@ -1639,13 +1650,40 @@ static int test_conc366(MYSQL *mysql)
sprintf(query, "UNINSTALL SONAME 'auth_ed25519'"); sprintf(query, "UNINSTALL SONAME 'auth_ed25519'");
rc= mysql_query(mysql, query); rc= mysql_query(mysql, query);
check_mysql_rc(rc, mysql); check_mysql_rc(rc, mysql);
return OK;
}
static int test_conc392(MYSQL *mysql)
{
int rc;
const char *data;
size_t len;
ulong capabilities= 0;
mariadb_get_infov(mysql, MARIADB_CONNECTION_SERVER_CAPABILITIES, &capabilities);
if (!(capabilities & CLIENT_SESSION_TRACKING))
{
diag("Server doesn't support session tracking (cap=%lu)", mysql->server_capabilities);
return SKIP;
}
rc= mysql_query(mysql, "set session_track_state_change=1");
check_mysql_rc(rc, mysql);
if (mysql_session_track_get_first(mysql, SESSION_TRACK_STATE_CHANGE, &data, &len))
{
diag("session_track_get_first failed");
return FAIL;
}
FAIL_IF(len != 1, "Expected length 1");
return OK; return OK;
} }
struct my_tests_st my_tests[] = { struct my_tests_st my_tests[] = {
{"test_conc366", test_conc366, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"test_conc366", test_conc366, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc392", test_conc392, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc312", test_conc312, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"test_conc312", test_conc312, TEST_CONNECTION_DEFAULT, 0, NULL, NULL},
{"test_conc351", test_conc351, TEST_CONNECTION_NONE, 0, NULL, NULL}, {"test_conc351", test_conc351, TEST_CONNECTION_NONE, 0, NULL, NULL},
{"test_conc332", test_conc332, TEST_CONNECTION_NONE, 0, NULL, NULL}, {"test_conc332", test_conc332, TEST_CONNECTION_NONE, 0, NULL, NULL},

View File

@@ -239,6 +239,7 @@ static int test_parse_error_and_bad_length(MYSQL *mysql)
{ {
MYSQL_STMT *stmt; MYSQL_STMT *stmt;
int rc; int rc;
char stmt_str[128];
/* check that we get 4 syntax errors over the 4 calls */ /* check that we get 4 syntax errors over the 4 calls */
@@ -254,7 +255,9 @@ static int test_parse_error_and_bad_length(MYSQL *mysql)
mysql_stmt_close(stmt); mysql_stmt_close(stmt);
stmt= mysql_stmt_init(mysql); stmt= mysql_stmt_init(mysql);
FAIL_UNLESS(stmt, ""); FAIL_UNLESS(stmt, "");
rc= mysql_stmt_prepare(stmt, "SHOW DATABASES", 100); memset(stmt_str, 0, 100);
strcpy(stmt_str, "SHOW DATABASES");
rc= mysql_stmt_prepare(stmt, stmt_str, 99);
FAIL_IF(!rc, "Error expected"); FAIL_IF(!rc, "Error expected");
mysql_stmt_close(stmt); mysql_stmt_close(stmt);
return OK; return OK;