Hans Leidekker : msi: Don' t try to install or remove ODBC drivers if the component is disabled.

Alexandre Julliard julliard at winehq.org
Thu Dec 9 12:26:24 CST 2010


Module: wine
Branch: master
Commit: b376f41766301b3a52fd552658332efcc0b3fb2e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b376f41766301b3a52fd552658332efcc0b3fb2e

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Thu Dec  9 10:27:56 2010 +0100

msi: Don't try to install or remove ODBC drivers if the component is disabled.

---

 dlls/msi/action.c |   84 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 78 insertions(+), 6 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 15c04c9..2cccdc9 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -5953,8 +5953,9 @@ static UINT ITERATE_InstallODBCDriver( MSIRECORD *rec, LPVOID param )
     LPWSTR driver, driver_path, ptr;
     WCHAR outpath[MAX_PATH];
     MSIFILE *driver_file = NULL, *setup_file = NULL;
+    MSICOMPONENT *comp;
     MSIRECORD *uirow;
-    LPCWSTR desc, file_key;
+    LPCWSTR desc, file_key, component;
     DWORD len, usage;
     UINT r = ERROR_SUCCESS;
 
@@ -5965,6 +5966,17 @@ static UINT ITERATE_InstallODBCDriver( MSIRECORD *rec, LPVOID param )
     static const WCHAR usage_fmt[] = {
         'F','i','l','e','U','s','a','g','e','=','1',0};
 
+    component = MSI_RecordGetString( rec, 2 );
+    comp = get_loaded_component( package, component );
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (!comp->Enabled)
+    {
+        TRACE("component is disabled\n");
+        return ERROR_SUCCESS;
+    }
+
     desc = MSI_RecordGetString(rec, 3);
 
     file_key = MSI_RecordGetString( rec, 4 );
@@ -6035,8 +6047,9 @@ static UINT ITERATE_InstallODBCTranslator( MSIRECORD *rec, LPVOID param )
     LPWSTR translator, translator_path, ptr;
     WCHAR outpath[MAX_PATH];
     MSIFILE *translator_file = NULL, *setup_file = NULL;
+    MSICOMPONENT *comp;
     MSIRECORD *uirow;
-    LPCWSTR desc, file_key;
+    LPCWSTR desc, file_key, component;
     DWORD len, usage;
     UINT r = ERROR_SUCCESS;
 
@@ -6045,6 +6058,17 @@ static UINT ITERATE_InstallODBCTranslator( MSIRECORD *rec, LPVOID param )
     static const WCHAR setup_fmt[] = {
         'S','e','t','u','p','=','%','s',0};
 
+    component = MSI_RecordGetString( rec, 2 );
+    comp = get_loaded_component( package, component );
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (!comp->Enabled)
+    {
+        TRACE("component is disabled\n");
+        return ERROR_SUCCESS;
+    }
+
     desc = MSI_RecordGetString(rec, 3);
 
     file_key = MSI_RecordGetString( rec, 4 );
@@ -6108,8 +6132,9 @@ static UINT ITERATE_InstallODBCTranslator( MSIRECORD *rec, LPVOID param )
 static UINT ITERATE_InstallODBCDataSource( MSIRECORD *rec, LPVOID param )
 {
     MSIPACKAGE *package = param;
+    MSICOMPONENT *comp;
     LPWSTR attrs;
-    LPCWSTR desc, driver;
+    LPCWSTR desc, driver, component;
     WORD request = ODBC_ADD_SYS_DSN;
     INT registration;
     DWORD len;
@@ -6119,6 +6144,17 @@ static UINT ITERATE_InstallODBCDataSource( MSIRECORD *rec, LPVOID param )
     static const WCHAR attrs_fmt[] = {
         'D','S','N','=','%','s',0 };
 
+    component = MSI_RecordGetString( rec, 2 );
+    comp = get_loaded_component( package, component );
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (!comp->Enabled)
+    {
+        TRACE("component is disabled\n");
+        return ERROR_SUCCESS;
+    }
+
     desc = MSI_RecordGetString(rec, 3);
     driver = MSI_RecordGetString(rec, 4);
     registration = MSI_RecordGetInteger(rec, 5);
@@ -6196,9 +6232,21 @@ static UINT ACTION_InstallODBC( MSIPACKAGE *package )
 static UINT ITERATE_RemoveODBCDriver( MSIRECORD *rec, LPVOID param )
 {
     MSIPACKAGE *package = param;
+    MSICOMPONENT *comp;
     MSIRECORD *uirow;
     DWORD usage;
-    LPCWSTR desc;
+    LPCWSTR desc, component;
+
+    component = MSI_RecordGetString( rec, 2 );
+    comp = get_loaded_component( package, component );
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (!comp->Enabled)
+    {
+        TRACE("component is disabled\n");
+        return ERROR_SUCCESS;
+    }
 
     desc = MSI_RecordGetString( rec, 3 );
     if (!SQLRemoveDriverW( desc, FALSE, &usage ))
@@ -6222,9 +6270,21 @@ static UINT ITERATE_RemoveODBCDriver( MSIRECORD *rec, LPVOID param )
 static UINT ITERATE_RemoveODBCTranslator( MSIRECORD *rec, LPVOID param )
 {
     MSIPACKAGE *package = param;
+    MSICOMPONENT *comp;
     MSIRECORD *uirow;
     DWORD usage;
-    LPCWSTR desc;
+    LPCWSTR desc, component;
+
+    component = MSI_RecordGetString( rec, 2 );
+    comp = get_loaded_component( package, component );
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (!comp->Enabled)
+    {
+        TRACE("component is disabled\n");
+        return ERROR_SUCCESS;
+    }
 
     desc = MSI_RecordGetString( rec, 3 );
     if (!SQLRemoveTranslatorW( desc, &usage ))
@@ -6248,9 +6308,10 @@ static UINT ITERATE_RemoveODBCTranslator( MSIRECORD *rec, LPVOID param )
 static UINT ITERATE_RemoveODBCDataSource( MSIRECORD *rec, LPVOID param )
 {
     MSIPACKAGE *package = param;
+    MSICOMPONENT *comp;
     MSIRECORD *uirow;
     LPWSTR attrs;
-    LPCWSTR desc, driver;
+    LPCWSTR desc, driver, component;
     WORD request = ODBC_REMOVE_SYS_DSN;
     INT registration;
     DWORD len;
@@ -6258,6 +6319,17 @@ static UINT ITERATE_RemoveODBCDataSource( MSIRECORD *rec, LPVOID param )
     static const WCHAR attrs_fmt[] = {
         'D','S','N','=','%','s',0 };
 
+    component = MSI_RecordGetString( rec, 2 );
+    comp = get_loaded_component( package, component );
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (!comp->Enabled)
+    {
+        TRACE("component is disabled\n");
+        return ERROR_SUCCESS;
+    }
+
     desc = MSI_RecordGetString( rec, 3 );
     driver = MSI_RecordGetString( rec, 4 );
     registration = MSI_RecordGetInteger( rec, 5 );




More information about the wine-cvs mailing list