diff options
author | Nir Bar <nir.bar@panel-sw.co.il> | 2023-06-05 13:27:56 +0300 |
---|---|---|
committer | Bob Arnson <github@bobs.org> | 2024-01-20 22:27:41 -0500 |
commit | dfea4478a4938ce738fd49282350d36c73fb9a35 (patch) | |
tree | 8445e774b7a79a76f239ed523c6689f445961da2 | |
parent | cde596e1bb9288f8cebb447a5f8cb79ca684cfe1 (diff) | |
download | wix-dfea4478a4938ce738fd49282350d36c73fb9a35.tar.gz wix-dfea4478a4938ce738fd49282350d36c73fb9a35.tar.bz2 wix-dfea4478a4938ce738fd49282350d36c73fb9a35.zip |
Fixes wixtoolset/issues#5220: Automatically add logging flag for any burn ExePackage, BundlePackage, and related bundles
-rw-r--r-- | src/burn/engine/bundlepackageengine.cpp | 3 | ||||
-rw-r--r-- | src/burn/engine/core.cpp | 60 | ||||
-rw-r--r-- | src/burn/engine/core.h | 7 | ||||
-rw-r--r-- | src/burn/engine/exeengine.cpp | 6 | ||||
-rw-r--r-- | src/burn/engine/logging.cpp | 13 | ||||
-rw-r--r-- | src/burn/engine/pseudobundle.cpp | 14 |
6 files changed, 102 insertions, 1 deletions
diff --git a/src/burn/engine/bundlepackageengine.cpp b/src/burn/engine/bundlepackageengine.cpp index 61911fb4..d3f59e5d 100644 --- a/src/burn/engine/bundlepackageengine.cpp +++ b/src/burn/engine/bundlepackageengine.cpp | |||
@@ -1000,6 +1000,9 @@ static HRESULT ExecuteBundle( | |||
1000 | ExitOnFailure(hr, "Failed to allocate obfuscated bundle command."); | 1000 | ExitOnFailure(hr, "Failed to allocate obfuscated bundle command."); |
1001 | } | 1001 | } |
1002 | 1002 | ||
1003 | // Append logging to command line if it doesn't contain '-log' | ||
1004 | CoreAppendLogToCommandLine(&sczBaseCommand, &sczCommandObfuscated, fRollback, pVariables, pPackage); | ||
1005 | |||
1003 | // Log obfuscated command, which won't include raw hidden variable values or protocol specific arguments to avoid exposing secrets. | 1006 | // Log obfuscated command, which won't include raw hidden variable values or protocol specific arguments to avoid exposing secrets. |
1004 | LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(action), sczExecutablePath, sczCommandObfuscated ? sczCommandObfuscated : sczBaseCommand); | 1007 | LogId(REPORT_STANDARD, MSG_APPLYING_PACKAGE, LoggingRollbackOrExecute(fRollback), pPackage->sczId, LoggingActionStateToString(action), sczExecutablePath, sczCommandObfuscated ? sczCommandObfuscated : sczBaseCommand); |
1005 | 1008 | ||
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index 6d6d99d5..ca2e41c2 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp | |||
@@ -1301,6 +1301,66 @@ LExit: | |||
1301 | return hr; | 1301 | return hr; |
1302 | } | 1302 | } |
1303 | 1303 | ||
1304 | HRESULT CoreAppendLogToCommandLine( | ||
1305 | __deref_inout_z LPWSTR* psczCommandLine, | ||
1306 | __deref_inout_z_opt LPWSTR* psczObfuscatedCommandLine, | ||
1307 | __in BOOL fRollback, | ||
1308 | __in BURN_VARIABLES* pVariables, | ||
1309 | __in BURN_PACKAGE *pPackage | ||
1310 | ) | ||
1311 | { | ||
1312 | HRESULT hr = S_OK; | ||
1313 | INT ccArgs = 0; | ||
1314 | LPWSTR* rgszArgs = nullptr; | ||
1315 | LPWSTR szLogArg = nullptr; | ||
1316 | LPWSTR szLogArgFormatted = nullptr; | ||
1317 | LPCWSTR szLogVar = fRollback ? pPackage->sczRollbackLogPathVariable : pPackage->sczLogPathVariable; | ||
1318 | |||
1319 | if (!szLogVar || !*szLogVar) | ||
1320 | { | ||
1321 | ExitFunction1(hr = S_FALSE); | ||
1322 | } | ||
1323 | |||
1324 | hr = AppParseCommandLine(*psczCommandLine, &ccArgs, &rgszArgs); | ||
1325 | ExitOnFailure(hr, "Failed parsing command line"); | ||
1326 | |||
1327 | // Log flag already present? | ||
1328 | for (INT i = 0; i < ccArgs; ++i) | ||
1329 | { | ||
1330 | if (rgszArgs[i][0] == L'-' || rgszArgs[i][0] == L'/') | ||
1331 | { | ||
1332 | // Now looking for 'log' or 'l' | ||
1333 | if ((CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &rgszArgs[i][1], -1, L"log", -1)) | ||
1334 | || (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &rgszArgs[i][1], -1, L"l", -1))) | ||
1335 | { | ||
1336 | ExitFunction1(hr = S_FALSE); | ||
1337 | } | ||
1338 | } | ||
1339 | } | ||
1340 | |||
1341 | hr = StrAllocFormatted(&szLogArg, L" -log \"[%ls]\"", szLogVar); | ||
1342 | ExitOnFailure(hr, "Failed creating log argument"); | ||
1343 | |||
1344 | hr = VariableFormatString(pVariables, szLogArg, &szLogArgFormatted, NULL); | ||
1345 | ExitOnFailure(hr, "Failed to format argument string."); | ||
1346 | |||
1347 | hr = StrAllocConcat(psczCommandLine, szLogArgFormatted, 0); | ||
1348 | ExitOnFailure(hr, "Failed concatenating '-log' to command line"); | ||
1349 | |||
1350 | hr = StrAllocConcat(psczObfuscatedCommandLine, szLogArgFormatted, 0); | ||
1351 | ExitOnFailure(hr, "Failed concatenating '-log' to obfuscated command line"); | ||
1352 | |||
1353 | LExit: | ||
1354 | if (rgszArgs) | ||
1355 | { | ||
1356 | AppFreeCommandLineArgs(rgszArgs); | ||
1357 | } | ||
1358 | ReleaseStr(szLogArg); | ||
1359 | ReleaseStr(szLogArgFormatted); | ||
1360 | |||
1361 | return hr; | ||
1362 | } | ||
1363 | |||
1304 | extern "C" HRESULT CoreAppendSplashScreenWindowToCommandLine( | 1364 | extern "C" HRESULT CoreAppendSplashScreenWindowToCommandLine( |
1305 | __in_opt HWND hwndSplashScreen, | 1365 | __in_opt HWND hwndSplashScreen, |
1306 | __deref_inout_z LPWSTR* psczCommandLine | 1366 | __deref_inout_z LPWSTR* psczCommandLine |
diff --git a/src/burn/engine/core.h b/src/burn/engine/core.h index 186b49ca..1e672651 100644 --- a/src/burn/engine/core.h +++ b/src/burn/engine/core.h | |||
@@ -306,6 +306,13 @@ HRESULT CoreAppendFileHandleSelfToCommandLine( | |||
306 | __deref_inout_z LPWSTR* psczCommandLine, | 306 | __deref_inout_z LPWSTR* psczCommandLine, |
307 | __deref_inout_z_opt LPWSTR* psczObfuscatedCommandLine | 307 | __deref_inout_z_opt LPWSTR* psczObfuscatedCommandLine |
308 | ); | 308 | ); |
309 | HRESULT CoreAppendLogToCommandLine( | ||
310 | __deref_inout_z LPWSTR* psczCommandLine, | ||
311 | __deref_inout_z_opt LPWSTR* psczObfuscatedCommandLine, | ||
312 | __in BOOL fRollback, | ||
313 | __in BURN_VARIABLES* pVariables, | ||
314 | __in BURN_PACKAGE *pPackage | ||
315 | ); | ||
309 | HRESULT CoreAppendSplashScreenWindowToCommandLine( | 316 | HRESULT CoreAppendSplashScreenWindowToCommandLine( |
310 | __in_opt HWND hwndSplashScreen, | 317 | __in_opt HWND hwndSplashScreen, |
311 | __deref_inout_z LPWSTR* psczCommandLine | 318 | __deref_inout_z LPWSTR* psczCommandLine |
diff --git a/src/burn/engine/exeengine.cpp b/src/burn/engine/exeengine.cpp index c0bab254..85168943 100644 --- a/src/burn/engine/exeengine.cpp +++ b/src/burn/engine/exeengine.cpp | |||
@@ -624,6 +624,12 @@ extern "C" HRESULT ExeEngineExecutePackage( | |||
624 | ExitOnFailure(hr, "Failed to append %ls", BURN_COMMANDLINE_SWITCH_FILEHANDLE_SELF); | 624 | ExitOnFailure(hr, "Failed to append %ls", BURN_COMMANDLINE_SWITCH_FILEHANDLE_SELF); |
625 | } | 625 | } |
626 | 626 | ||
627 | // For bundles, append logging to command line if it doesn't contain '-log' | ||
628 | if (pPackage->Exe.fBundle || BURN_EXE_PROTOCOL_TYPE_BURN == pPackage->Exe.protocol) | ||
629 | { | ||
630 | CoreAppendLogToCommandLine(&sczBaseCommand, &sczCommandObfuscated, fRollback, pVariables, pPackage); | ||
631 | } | ||
632 | |||
627 | // build user args | 633 | // build user args |
628 | if (sczUnformattedUserArgs && *sczUnformattedUserArgs) | 634 | if (sczUnformattedUserArgs && *sczUnformattedUserArgs) |
629 | { | 635 | { |
diff --git a/src/burn/engine/logging.cpp b/src/burn/engine/logging.cpp index a16e82b0..630598ae 100644 --- a/src/burn/engine/logging.cpp +++ b/src/burn/engine/logging.cpp | |||
@@ -325,6 +325,19 @@ extern "C" HRESULT LoggingSetPackageVariable( | |||
325 | ExitFunction(); | 325 | ExitFunction(); |
326 | } | 326 | } |
327 | 327 | ||
328 | // For burn packages we'll add logging even it it wasn't explictly specified | ||
329 | if (BURN_PACKAGE_TYPE_BUNDLE == pPackage->type || (BURN_PACKAGE_TYPE_EXE == pPackage->type && BURN_EXE_PROTOCOL_TYPE_BURN == pPackage->Exe.protocol)) | ||
330 | { | ||
331 | if (!fRollback && (!pPackage->sczLogPathVariable || !*pPackage->sczLogPathVariable)) | ||
332 | { | ||
333 | StrAllocFormatted(&pPackage->sczLogPathVariable, L"WixBundleLog_%ls", pPackage->sczId); | ||
334 | } | ||
335 | else if (fRollback && (!pPackage->sczRollbackLogPathVariable || !*pPackage->sczRollbackLogPathVariable)) | ||
336 | { | ||
337 | StrAllocFormatted(&pPackage->sczRollbackLogPathVariable, L"WixBundleRollbackLog_%ls", pPackage->sczId); | ||
338 | } | ||
339 | } | ||
340 | |||
328 | if ((!fRollback && pPackage->sczLogPathVariable && *pPackage->sczLogPathVariable) || | 341 | if ((!fRollback && pPackage->sczLogPathVariable && *pPackage->sczLogPathVariable) || |
329 | (fRollback && pPackage->sczRollbackLogPathVariable && *pPackage->sczRollbackLogPathVariable)) | 342 | (fRollback && pPackage->sczRollbackLogPathVariable && *pPackage->sczRollbackLogPathVariable)) |
330 | { | 343 | { |
diff --git a/src/burn/engine/pseudobundle.cpp b/src/burn/engine/pseudobundle.cpp index 8b30ebfc..f0d67068 100644 --- a/src/burn/engine/pseudobundle.cpp +++ b/src/burn/engine/pseudobundle.cpp | |||
@@ -27,7 +27,7 @@ extern "C" HRESULT PseudoBundleInitializeRelated( | |||
27 | ExitOnNull(pPackage->payloads.rgItems, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload group inside of related bundle struct"); | 27 | ExitOnNull(pPackage->payloads.rgItems, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload group inside of related bundle struct"); |
28 | pPackage->payloads.cItems = 1; | 28 | pPackage->payloads.cItems = 1; |
29 | 29 | ||
30 | pPayload = (BURN_PAYLOAD*)MemAlloc(sizeof(BURN_PAYLOAD), TRUE); | 30 | pPayload = (BURN_PAYLOAD*)MemAlloc(sizeof(BURN_PAYLOAD), TRUE); |
31 | ExitOnNull(pPayload, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload inside of related bundle struct"); | 31 | ExitOnNull(pPayload, hr, E_OUTOFMEMORY, "Failed to allocate space for burn payload inside of related bundle struct"); |
32 | pPackage->payloads.rgItems[0].pPayload = pPayload; | 32 | pPackage->payloads.rgItems[0].pPayload = pPayload; |
33 | pPayload->packaging = BURN_PAYLOAD_PACKAGING_EXTERNAL; | 33 | pPayload->packaging = BURN_PAYLOAD_PACKAGING_EXTERNAL; |
@@ -59,6 +59,10 @@ extern "C" HRESULT PseudoBundleInitializeRelated( | |||
59 | hr = StrAllocString(&pPackage->sczCacheId, wzId, 0); | 59 | hr = StrAllocString(&pPackage->sczCacheId, wzId, 0); |
60 | ExitOnFailure(hr, "Failed to copy cache id for pseudo bundle."); | 60 | ExitOnFailure(hr, "Failed to copy cache id for pseudo bundle."); |
61 | 61 | ||
62 | // Log variables - best effort | ||
63 | StrAllocFormatted(&pPackage->sczLogPathVariable, L"WixBundleLog_%ls", pPackage->sczId); | ||
64 | StrAllocFormatted(&pPackage->sczRollbackLogPathVariable, L"WixBundleRollbackLog_%ls", pPackage->sczId); | ||
65 | |||
62 | if (pDependencyProvider) | 66 | if (pDependencyProvider) |
63 | { | 67 | { |
64 | pPackage->rgDependencyProviders = (BURN_DEPENDENCY_PROVIDER*)MemAlloc(sizeof(BURN_DEPENDENCY_PROVIDER), TRUE); | 68 | pPackage->rgDependencyProviders = (BURN_DEPENDENCY_PROVIDER*)MemAlloc(sizeof(BURN_DEPENDENCY_PROVIDER), TRUE); |
@@ -122,6 +126,10 @@ extern "C" HRESULT PseudoBundleInitializePassthrough( | |||
122 | hr = StrAllocString(&pPassthroughPackage->sczCacheId, pPackage->sczCacheId, 0); | 126 | hr = StrAllocString(&pPassthroughPackage->sczCacheId, pPackage->sczCacheId, 0); |
123 | ExitOnFailure(hr, "Failed to copy cache id for passthrough pseudo bundle."); | 127 | ExitOnFailure(hr, "Failed to copy cache id for passthrough pseudo bundle."); |
124 | 128 | ||
129 | // Log variables - best effort | ||
130 | StrAllocFormatted(&pPackage->sczLogPathVariable, L"WixBundleLog_%ls", pPackage->sczId); | ||
131 | StrAllocFormatted(&pPackage->sczRollbackLogPathVariable, L"WixBundleRollbackLog_%ls", pPackage->sczId); | ||
132 | |||
125 | hr = CoreCreatePassthroughBundleCommandLine(&sczArguments, pInternalCommand, pCommand); | 133 | hr = CoreCreatePassthroughBundleCommandLine(&sczArguments, pInternalCommand, pCommand); |
126 | ExitOnFailure(hr, "Failed to create command-line arguments."); | 134 | ExitOnFailure(hr, "Failed to create command-line arguments."); |
127 | 135 | ||
@@ -207,6 +215,10 @@ extern "C" HRESULT PseudoBundleInitializeUpdateBundle( | |||
207 | hr = StrAllocString(&pPackage->sczCacheId, wzCacheId, 0); | 215 | hr = StrAllocString(&pPackage->sczCacheId, wzCacheId, 0); |
208 | ExitOnFailure(hr, "Failed to copy cache id for update bundle."); | 216 | ExitOnFailure(hr, "Failed to copy cache id for update bundle."); |
209 | 217 | ||
218 | // Log variables - best effort | ||
219 | StrAllocFormatted(&pPackage->sczLogPathVariable, L"WixBundleLog_%ls", pPackage->sczId); | ||
220 | StrAllocFormatted(&pPackage->sczRollbackLogPathVariable, L"WixBundleRollbackLog_%ls", pPackage->sczId); | ||
221 | |||
210 | hr = StrAllocString(&pPackage->Exe.sczInstallArguments, wzInstallArguments, 0); | 222 | hr = StrAllocString(&pPackage->Exe.sczInstallArguments, wzInstallArguments, 0); |
211 | ExitOnFailure(hr, "Failed to copy install arguments for update bundle package"); | 223 | ExitOnFailure(hr, "Failed to copy install arguments for update bundle package"); |
212 | 224 | ||