Skip to content

Commit

Permalink
Merge branch 'master' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
lawrinn committed Apr 26, 2019
2 parents 6d9ed8c + 38e4205 commit 6c6fb25
Show file tree
Hide file tree
Showing 10 changed files with 213 additions and 186 deletions.
1 change: 1 addition & 0 deletions dsn/odbc_dsn.c
Expand Up @@ -92,6 +92,7 @@ MADB_DsnMap DsnMap[] = {
{&DsnKeys[32], 4, cbTls11, 1, 0},
{&DsnKeys[32], 4, cbTls12, 2, 0},
{&DsnKeys[32], 4, cbTls13, 4, 0},
{&DsnKeys[33], 4, cbForceTls, 0, 0},
{NULL, 0, 0, 0, 0}
};

Expand Down
4 changes: 3 additions & 1 deletion dsn/odbc_dsn.rc
Expand Up @@ -190,7 +190,9 @@ BEGIN
LTEXT "Cipher",IDC_STATIC,15,76,56,8,0,WS_EX_TRANSPARENT
EDITTEXT txtSslCipher,84,76,110,10,ES_AUTOHSCROLL

CONTROL "Verify Certificate",cbSslVerify,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,90,97,10,WS_EX_TRANSPARENT
CONTROL "Verify Certificate",cbSslVerify,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,90,68,10,WS_EX_TRANSPARENT

CONTROL "Force TLS Use",cbForceTls,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,90,97,10,WS_EX_TRANSPARENT

LTEXT "Allowed TLS versions(Not checking any means that all are allowed)",IDC_STATIC,15,104,264,8,0,WS_EX_TRANSPARENT
CONTROL "v.1.1",cbTls11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,115,30,10,WS_EX_TRANSPARENT
Expand Down
Binary file modified dsn/resource.h
Binary file not shown.
34 changes: 18 additions & 16 deletions ma_connection.c
Expand Up @@ -352,7 +352,7 @@ SQLRETURN MADB_DbcGetAttr(MADB_Dbc *Dbc, SQLINTEGER Attribute, SQLPOINTER ValueP
*(SQLUINTEGER *)ValuePtr= 0;
break;
case SQL_ATTR_METADATA_ID:
*(SQLINTEGER *)ValuePtr= Dbc->MetadataId;
*(SQLUINTEGER *)ValuePtr= Dbc->MetadataId;
case SQL_ATTR_ODBC_CURSORS:
*(SQLINTEGER *)ValuePtr= SQL_CUR_USE_ODBC;
break;
Expand Down Expand Up @@ -601,7 +601,7 @@ SQLRETURN MADB_DbcConnectDB(MADB_Dbc *Connection,

if( !MADB_IS_EMPTY(Dsn->ConnCPluginsDir))
{
mysql_options(Connection->mariadb, MYSQL_PLUGIN_DIR, Dsn->ConnCPluginsDir);
mysql_optionsv(Connection->mariadb, MYSQL_PLUGIN_DIR, Dsn->ConnCPluginsDir);
}
else
{
Expand Down Expand Up @@ -649,24 +649,21 @@ SQLRETURN MADB_DbcConnectDB(MADB_Dbc *Connection,
}

/* todo: error handling */
mysql_options(Connection->mariadb, MYSQL_SET_CHARSET_NAME, Connection->Charset.cs_info->csname);
mysql_optionsv(Connection->mariadb, MYSQL_SET_CHARSET_NAME, Connection->Charset.cs_info->csname);

if (Dsn->InitCommand && Dsn->InitCommand[0])
mysql_options(Connection->mariadb, MYSQL_INIT_COMMAND, Dsn->InitCommand);
mysql_optionsv(Connection->mariadb, MYSQL_INIT_COMMAND, Dsn->InitCommand);

if (Dsn->ConnectionTimeout)
mysql_options(Connection->mariadb, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&Dsn->ConnectionTimeout);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&Dsn->ConnectionTimeout);

Connection->Options= Dsn->Options;
/* TODO: set DSN FLags (Options):
Some of them (like reconnect) can be set via mysql_options, some of them are connection
attributes
*/

if (DSN_OPTION(Connection, MADB_OPT_FLAG_AUTO_RECONNECT))
mysql_options(Connection->mariadb, MYSQL_OPT_RECONNECT, &my_reconnect);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_RECONNECT, &my_reconnect);

if (Dsn->IsNamedPipe) /* DSN_OPTION(Connection, MADB_OPT_FLAG_NAMED_PIPE) */
mysql_options(Connection->mariadb, MYSQL_OPT_NAMED_PIPE, (void *)Dsn->ServerName);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_NAMED_PIPE, (void *)Dsn->ServerName);

if (DSN_OPTION(Connection, MADB_OPT_FLAG_NO_SCHEMA))
client_flags|= CLIENT_NO_SCHEMA;
Expand All @@ -681,12 +678,12 @@ SQLRETURN MADB_DbcConnectDB(MADB_Dbc *Connection,
client_flags|= CLIENT_MULTI_STATEMENTS;

/* enable truncation reporting */
mysql_options(Connection->mariadb, MYSQL_REPORT_DATA_TRUNCATION, &ReportDataTruncation);
mysql_optionsv(Connection->mariadb, MYSQL_REPORT_DATA_TRUNCATION, &ReportDataTruncation);

if (Dsn->Socket)
{
int protocol= MYSQL_PROTOCOL_SOCKET;
mysql_options(Connection->mariadb, MYSQL_OPT_PROTOCOL, (void*)&protocol);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_PROTOCOL, (void*)&protocol);
}

{
Expand Down Expand Up @@ -756,19 +753,24 @@ SQLRETURN MADB_DbcConnectDB(MADB_Dbc *Connection,
if (Dsn->SslVerify)
{
const unsigned int verify= 0x01010101;
mysql_options(Connection->mariadb, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, (const char*)&verify);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, (const char*)&verify);
}
else
{
const unsigned int verify= 0;
mysql_options(Connection->mariadb, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, (const char*)&verify);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, (const char*)&verify);
}
}

if (Dsn->ForceTls != '\0')
{
const unsigned int ForceTls= 0x01010101;
mysql_optionsv(Connection->mariadb, MYSQL_OPT_SSL_ENFORCE, (const char*)&ForceTls);
}

if (!MADB_IS_EMPTY(Dsn->SslCrlPath))
{
mysql_options(Connection->mariadb, MYSQL_OPT_SSL_CRLPATH, Dsn->SslCrlPath);
mysql_optionsv(Connection->mariadb, MYSQL_OPT_SSL_CRLPATH, Dsn->SslCrlPath);
}

if (!mysql_real_connect(Connection->mariadb,
Expand Down
1 change: 1 addition & 0 deletions ma_dsn.c
Expand Up @@ -68,6 +68,7 @@ MADB_DsnKey DsnKeys[]=
{"SAVEFILE", offsetof(MADB_Dsn, SaveFile), DSN_TYPE_STRING, 0, 0}, /* 30 */
{"USE_MYCNF", offsetof(MADB_Dsn, ReadMycnf), DSN_TYPE_OPTION, MADB_OPT_FLAG_USE_CNF, 0},
{"TLSVERSION", offsetof(MADB_Dsn, TlsVersion), DSN_TYPE_CBOXGROUP, 0, 0},
{"FORCETLS", offsetof(MADB_Dsn, ForceTls), DSN_TYPE_BOOL, 0, 0},
/* Aliases. Here offset is index of aliased key */
{"SERVERNAME", DSNKEY_SERVER_INDEX, DSN_TYPE_STRING, 0, 1},
{"USER", DSNKEY_UID_INDEX, DSN_TYPE_STRING, 0, 1},
Expand Down
1 change: 1 addition & 0 deletions ma_dsn.h
Expand Up @@ -131,6 +131,7 @@ typedef struct st_madb_dsn
char *SslFpList;
my_bool SslVerify;
char TlsVersion;
my_bool ForceTls;
char *SaveFile;
my_bool ReadMycnf;
/* --- Internal --- */
Expand Down
2 changes: 1 addition & 1 deletion ma_odbc.h
Expand Up @@ -237,7 +237,7 @@ typedef struct
void* BookmarkPtr;
SQLLEN BookmarkLength;
SQLSMALLINT BookmarkType;
SQLUINTEGER MetadataId;
SQLULEN MetadataId;
SQLULEN SimulateCursor;
} MADB_StmtOptions;

Expand Down
50 changes: 33 additions & 17 deletions ma_statement.c
Expand Up @@ -50,6 +50,7 @@ SQLRETURN MADB_StmtInit(MADB_Dbc *Connection, SQLHANDLE *pHStmt)
/* default behaviour is SQL_CURSOR_STATIC */
Stmt->Options.CursorType= SQL_CURSOR_STATIC;
Stmt->Options.UseBookmarks= SQL_UB_OFF;
Stmt->Options.MetadataId= Connection->MetadataId;

Stmt->Apd= Stmt->IApd;
Stmt->Ard= Stmt->IArd;
Expand Down Expand Up @@ -2441,7 +2442,7 @@ SQLRETURN MADB_StmtSetAttr(MADB_Stmt *Stmt, SQLINTEGER Attribute, SQLPOINTER Val
Stmt->Options.MaxRows= (SQLULEN)ValuePtr;
break;
case SQL_ATTR_METADATA_ID:
Stmt->Options.MetadataId=(SQLUINTEGER)(SQLULEN)ValuePtr;
Stmt->Options.MetadataId= (SQLULEN)ValuePtr;
break;
case SQL_ATTR_NOSCAN:
if ((SQLULEN)ValuePtr != SQL_NOSCAN_ON)
Expand Down Expand Up @@ -3339,12 +3340,12 @@ SQLRETURN MADB_StmtTablePrivileges(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLI
/* }}} */

/* {{{ MADB_StmtTables */
SQLRETURN MADB_StmtTables(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLength1,
char *SchemaName, SQLSMALLINT NameLength2, char *TableName,
SQLSMALLINT NameLength3, char *TableType, SQLSMALLINT NameLength4)
SQLRETURN MADB_StmtTables(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT CatalogNameLength,
char *SchemaName, SQLSMALLINT SchemaNameLength, char *TableName,
SQLSMALLINT TableNameLength, char *TableType, SQLSMALLINT TableTypeLength)
{
MADB_DynString StmtStr;
char Quote[2];
char Quote[2];
SQLRETURN ret;

/*
Expand All @@ -3360,11 +3361,12 @@ SQLRETURN MADB_StmtTables(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLe

MDBUG_C_ENTER(Stmt->Connection, "MADB_StmtTables");

ADJUST_LENGTH(CatalogName, NameLength1);
ADJUST_LENGTH(TableName, NameLength3);
ADJUST_LENGTH(TableType, NameLength4);
ADJUST_LENGTH(CatalogName, CatalogNameLength);
ADJUST_LENGTH(SchemaName, SchemaNameLength);
ADJUST_LENGTH(TableName, TableNameLength);
ADJUST_LENGTH(TableType, TableTypeLength);

if (NameLength1 > 64 || NameLength3 > 64)
if (CatalogNameLength > 64 || TableNameLength > 64)
{
MADB_SetError(&Stmt->Error, MADB_ERR_HY090, "Table and catalog names are limited to 64 chars", 0);
return Stmt->Error.ReturnValue;
Expand All @@ -3375,7 +3377,8 @@ SQLRETURN MADB_StmtTables(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLe
the result set contains a list of valid catalogs for the data source.
(All columns except the TABLE_CAT column contain NULLs
*/
if (CatalogName && NameLength1 && !NameLength3 && !strcmp(CatalogName, SQL_ALL_TABLE_TYPES))
if (CatalogName && CatalogNameLength && TableName != NULL && !TableNameLength &&
SchemaName != NULL && SchemaNameLength == 0 && !strcmp(CatalogName, SQL_ALL_CATALOGS))
{
MADB_InitDynamicString(&StmtStr, "SELECT SCHEMA_NAME AS TABLE_CAT, CONVERT(NULL,CHAR(64)) AS TABLE_SCHEM, "
"CONVERT(NULL,CHAR(64)) AS TABLE_NAME, NULL AS TABLE_TYPE, NULL AS REMARKS "
Expand All @@ -3388,7 +3391,8 @@ SQLRETURN MADB_StmtTables(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLe
the result set contains a list of valid table types for the data source.
(All columns except the TABLE_TYPE column contain NULLs.)
*/
else if (!NameLength1 && !NameLength3 && TableType && NameLength4 &&
else if (CatalogName != NULL && !CatalogNameLength && TableName != NULL && !TableNameLength &&
SchemaName != NULL && SchemaNameLength == 0 && TableType && TableTypeLength &&
!strcmp(TableType, SQL_ALL_TABLE_TYPES))
{
MADB_InitDynamicString(&StmtStr, "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "
Expand All @@ -3400,36 +3404,48 @@ SQLRETURN MADB_StmtTables(MADB_Stmt *Stmt, char *CatalogName, SQLSMALLINT NameLe
"SELECT NULL, NULL, NULL, 'SYSTEM VIEW', NULL FROM DUAL",
8192, 512);
}
/* Since we treat our databases as catalogs, the only acceptable value for schema is NULL or "%"
if that is not the special case of call for schemas list. Otherwise we return empty resultset*/
else if (SchemaName &&
(!strcmp(SchemaName,SQL_ALL_SCHEMAS) && CatalogName && CatalogNameLength == 0 && TableName && TableNameLength == 0 ||
strcmp(SchemaName, SQL_ALL_SCHEMAS)))
{
MADB_InitDynamicString(&StmtStr, "SELECT NULL AS TABLE_CAT, NULL AS TABLE_SCHEM, "
"NULL AS TABLE_NAME, NULL AS TABLE_TYPE, NULL AS REMARKS "
"FROM DUAL WHERE 1=0", 8192, 512);
}
else
{
MADB_InitDynamicString(&StmtStr, "SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME, "
"if(TABLE_TYPE='BASE TABLE','TABLE',TABLE_TYPE) AS TABLE_TYPE ,"
"TABLE_COMMENT AS REMARKS FROM INFORMATION_SCHEMA.TABLES WHERE 1=1 ",
8192, 512);
if (Stmt->Options.MetadataId== SQL_TRUE)
{
strcpy(Quote, "`");
}
else
{
strcpy(Quote, "'");
}

MADB_DynstrAppend(&StmtStr, " AND TABLE_SCHEMA ");
if (CatalogName && NameLength1)
if (CatalogName)
{
MADB_DynstrAppend(&StmtStr, " AND TABLE_SCHEMA ");
MADB_DynstrAppend(&StmtStr, "LIKE ");
MADB_DynstrAppend(&StmtStr, Quote);
MADB_DynstrAppend(&StmtStr, CatalogName);
MADB_DynstrAppend(&StmtStr, Quote);
}
else
MADB_DynstrAppend(&StmtStr, "= DATABASE() ");

if (TableName && NameLength3)
if (TableName && TableNameLength)
{
MADB_DynstrAppend(&StmtStr, " AND TABLE_NAME LIKE ");
MADB_DynstrAppend(&StmtStr, Quote);
MADB_DynstrAppend(&StmtStr, TableName);
MADB_DynstrAppend(&StmtStr, Quote);
}
if (TableType && NameLength4 && strcmp(TableType, SQL_ALL_TABLE_TYPES) != 0)
if (TableType && TableTypeLength && strcmp(TableType, SQL_ALL_TABLE_TYPES) != 0)
{
unsigned int i;
char *myTypes[3]= {"TABLE", "VIEW", "SYNONYM"};
Expand Down

0 comments on commit 6c6fb25

Please sign in to comment.