diff --git a/unixODBC-2.2.12-locking_fix.patch b/unixODBC-2.2.12-locking_fix.patch new file mode 100644 index 0000000..de8a4c9 --- /dev/null +++ b/unixODBC-2.2.12-locking_fix.patch @@ -0,0 +1,273 @@ +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLAllocHandle.c unixODBC-2.2.12/DriverManager/SQLAllocHandle.c +--- unixODBC-2.2.12.orig/DriverManager/SQLAllocHandle.c 2010-09-03 13:22:09.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLAllocHandle.c 2010-09-03 13:26:23.000000000 -0700 +@@ -1235,6 +1235,8 @@ + if ( __validate_env( (DMHENV) input_handle )) + { + DMHENV environment = (DMHENV) input_handle; ++ ++ thread_protect( SQL_HANDLE_ENV, environment ); + __post_internal_error( &environment -> error, + ERROR_HY092, NULL, + environment -> requested_version ); +@@ -1244,6 +1246,8 @@ + else if ( __validate_dbc( (DMHDBC) input_handle )) + { + DMHDBC connection = (DMHDBC) input_handle; ++ ++ thread_protect( SQL_HANDLE_DBC, connection ); + __post_internal_error( &connection -> error, + ERROR_HY092, NULL, + connection -> environment -> requested_version ); +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnect.c unixODBC-2.2.12/DriverManager/SQLBrowseConnect.c +--- unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnect.c 2005-11-21 09:25:43.000000000 -0800 ++++ unixODBC-2.2.12/DriverManager/SQLBrowseConnect.c 2010-09-03 13:26:23.000000000 -0700 +@@ -259,7 +259,7 @@ + ERROR_08002, NULL, + connection -> environment -> requested_version ); + +- return function_return( -1, connection, SQL_ERROR ); ++ return function_return( IGNORE_THREAD, connection, SQL_ERROR ); + } + + thread_protect( SQL_HANDLE_DBC, connection ); +@@ -578,7 +578,7 @@ + + if( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_DBC, connection, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, connection, ret, TRUE ); + } + + if ( !__connect_part_two( connection )) +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnectW.c unixODBC-2.2.12/DriverManager/SQLBrowseConnectW.c +--- unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnectW.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLBrowseConnectW.c 2010-09-03 13:26:23.000000000 -0700 +@@ -595,7 +595,7 @@ + + if( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_DBC, connection, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, connection, ret, TRUE ); + } + + if ( !__connect_part_two( connection )) +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColAttribute.c unixODBC-2.2.12/DriverManager/SQLColAttribute.c +--- unixODBC-2.2.12.orig/DriverManager/SQLColAttribute.c 2006-03-08 01:18:41.000000000 -0800 ++++ unixODBC-2.2.12/DriverManager/SQLColAttribute.c 2010-09-03 13:30:30.000000000 -0700 +@@ -314,7 +314,7 @@ + __post_internal_error( &statement -> error, + ERROR_07009, NULL, + statement -> connection -> environment -> requested_version ); +- return function_return( statement, SQL_ERROR ); ++ return function_return( SQL_HANDLE_STMT, statement, SQL_ERROR ); + } + + */ +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColAttributeW.c unixODBC-2.2.12/DriverManager/SQLColAttributeW.c +--- unixODBC-2.2.12.orig/DriverManager/SQLColAttributeW.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLColAttributeW.c 2010-09-03 13:31:01.000000000 -0700 +@@ -180,7 +180,7 @@ + __post_internal_error( &statement -> error, + ERROR_07009, NULL, + statement -> connection -> environment -> requested_version ); +- return function_return( statement, SQL_ERROR ); ++ return function_return( SQL_HANDLE_STMT, statement, SQL_ERROR ); + } + + */ +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColumns.c unixODBC-2.2.12/DriverManager/SQLColumns.c +--- unixODBC-2.2.12.orig/DriverManager/SQLColumns.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLColumns.c 2010-09-03 13:26:23.000000000 -0700 +@@ -371,7 +371,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColumnsW.c unixODBC-2.2.12/DriverManager/SQLColumnsW.c +--- unixODBC-2.2.12.orig/DriverManager/SQLColumnsW.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLColumnsW.c 2010-09-03 13:26:23.000000000 -0700 +@@ -284,7 +284,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLDisconnect.c unixODBC-2.2.12/DriverManager/SQLDisconnect.c +--- unixODBC-2.2.12.orig/DriverManager/SQLDisconnect.c 2006-02-21 03:59:22.000000000 -0800 ++++ unixODBC-2.2.12/DriverManager/SQLDisconnect.c 2010-09-03 13:26:23.000000000 -0700 +@@ -321,7 +321,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_DBC, connection, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, connection, ret, TRUE ); + } + + /* +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLExecDirect.c unixODBC-2.2.12/DriverManager/SQLExecDirect.c +--- unixODBC-2.2.12.orig/DriverManager/SQLExecDirect.c 2006-04-11 03:22:56.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLExecDirect.c 2010-09-03 13:26:23.000000000 -0700 +@@ -431,7 +431,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + local_ret = SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLExecDirectW.c unixODBC-2.2.12/DriverManager/SQLExecDirectW.c +--- unixODBC-2.2.12.orig/DriverManager/SQLExecDirectW.c 2006-04-11 03:22:56.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLExecDirectW.c 2010-09-03 13:26:23.000000000 -0700 +@@ -333,7 +333,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + local_ret = SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLExecute.c unixODBC-2.2.12/DriverManager/SQLExecute.c +--- unixODBC-2.2.12.orig/DriverManager/SQLExecute.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLExecute.c 2010-09-03 13:26:23.000000000 -0700 +@@ -294,7 +294,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + local_ret = SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLForeignKeys.c unixODBC-2.2.12/DriverManager/SQLForeignKeys.c +--- unixODBC-2.2.12.orig/DriverManager/SQLForeignKeys.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLForeignKeys.c 2010-09-03 13:26:23.000000000 -0700 +@@ -407,7 +407,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLForeignKeysW.c unixODBC-2.2.12/DriverManager/SQLForeignKeysW.c +--- unixODBC-2.2.12.orig/DriverManager/SQLForeignKeysW.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLForeignKeysW.c 2010-09-03 13:26:23.000000000 -0700 +@@ -315,7 +315,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLFreeHandle.c unixODBC-2.2.12/DriverManager/SQLFreeHandle.c +--- unixODBC-2.2.12.orig/DriverManager/SQLFreeHandle.c 2006-04-21 07:25:55.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLFreeHandle.c 2010-09-03 13:27:41.000000000 -0700 +@@ -226,8 +226,6 @@ + ERROR_HY010, NULL, + environment -> requested_version ); + +- thread_release( SQL_HANDLE_ENV, environment ); +- + return function_return( SQL_HANDLE_ENV, environment, SQL_ERROR ); + } + +@@ -293,8 +291,6 @@ + ERROR_HY010, NULL, + connection -> environment -> requested_version ); + +- thread_release( SQL_HANDLE_ENV, environment ); +- + return function_return( SQL_HANDLE_ENV, environment, SQL_ERROR ); + } + +@@ -396,8 +392,6 @@ + ERROR_HY010, NULL, + statement -> connection -> environment -> requested_version ); + +- thread_release( SQL_HANDLE_STMT, statement ); +- + return function_return( SQL_HANDLE_STMT, statement, SQL_ERROR ); + } + +@@ -525,8 +519,6 @@ + ERROR_IM001, NULL, + connection -> environment -> requested_version ); + +- thread_release( SQL_HANDLE_DESC, descriptor ); +- + return function_return( SQL_HANDLE_DESC, descriptor, SQL_ERROR ); + } + else +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLMoreResults.c unixODBC-2.2.12/DriverManager/SQLMoreResults.c +--- unixODBC-2.2.12.orig/DriverManager/SQLMoreResults.c 2006-03-08 01:18:41.000000000 -0800 ++++ unixODBC-2.2.12/DriverManager/SQLMoreResults.c 2010-09-03 13:26:23.000000000 -0700 +@@ -249,7 +249,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLParamData.c unixODBC-2.2.12/DriverManager/SQLParamData.c +--- unixODBC-2.2.12.orig/DriverManager/SQLParamData.c 2005-11-21 09:25:43.000000000 -0800 ++++ unixODBC-2.2.12/DriverManager/SQLParamData.c 2010-09-03 13:26:23.000000000 -0700 +@@ -261,7 +261,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + local_ret = SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeys.c unixODBC-2.2.12/DriverManager/SQLPrimaryKeys.c +--- unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeys.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLPrimaryKeys.c 2010-09-03 13:26:23.000000000 -0700 +@@ -364,7 +364,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeysW.c unixODBC-2.2.12/DriverManager/SQLPrimaryKeysW.c +--- unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeysW.c 2005-09-27 08:44:06.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLPrimaryKeysW.c 2010-09-03 13:26:23.000000000 -0700 +@@ -287,7 +287,7 @@ + + if ( ret == SQL_SUCCESS_WITH_INFO ) + { +- function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE ); ++ function_return_ex( IGNORE_THREAD, statement, ret, TRUE ); + } + + SQLNUMRESULTCOLS( statement -> connection, +diff -urN unixODBC-2.2.12.orig/DriverManager/SQLTransact.c unixODBC-2.2.12/DriverManager/SQLTransact.c +--- unixODBC-2.2.12.orig/DriverManager/SQLTransact.c 2006-05-31 10:35:34.000000000 -0700 ++++ unixODBC-2.2.12/DriverManager/SQLTransact.c 2010-09-03 13:26:23.000000000 -0700 +@@ -434,8 +434,6 @@ + ERROR_HY012, NULL, + environment -> requested_version ); + +- thread_release( SQL_HANDLE_ENV, environment ); +- + return function_return( SQL_HANDLE_ENV, environment, SQL_ERROR ); + } + diff --git a/unixODBC.changes b/unixODBC.changes index ac3d5c0..4b859c0 100644 --- a/unixODBC.changes +++ b/unixODBC.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Jun 20 17:03:39 CEST 2011 - mhrusecky@suse.cz + +- fixed mutex locking (bnc#637115) + - patch by Petr Vandrovec + ------------------------------------------------------------------- Mon Jun 13 11:17:49 CEST 2011 - mhrusecky@suse.cz diff --git a/unixODBC.spec b/unixODBC.spec index 68c2a3c..22c63d2 100644 --- a/unixODBC.spec +++ b/unixODBC.spec @@ -50,6 +50,7 @@ Patch11: %{name}-%{version}-flex.patch Patch12: %{name}-%{version}-sqp.patch Patch13: %{name}-%{version}-uninitialized.patch Patch14: unixODBC-2.2.12-CVE-2011-1145.patch +Patch15: unixODBC-2.2.12-locking_fix.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %package devel @@ -99,6 +100,7 @@ Authors: %patch12 %patch13 %patch14 -p1 +%patch15 -p1 install -m 644 %{S:1} . %build