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 /src | |
| 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
Diffstat (limited to 'src')
| -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 | ||
