aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorNir Bar <nir.bar@panel-sw.co.il>2023-06-05 13:27:56 +0300
committerBob Arnson <github@bobs.org>2024-01-20 22:27:41 -0500
commitdfea4478a4938ce738fd49282350d36c73fb9a35 (patch)
tree8445e774b7a79a76f239ed523c6689f445961da2 /src/burn
parentcde596e1bb9288f8cebb447a5f8cb79ca684cfe1 (diff)
downloadwix-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/burn')
-rw-r--r--src/burn/engine/bundlepackageengine.cpp3
-rw-r--r--src/burn/engine/core.cpp60
-rw-r--r--src/burn/engine/core.h7
-rw-r--r--src/burn/engine/exeengine.cpp6
-rw-r--r--src/burn/engine/logging.cpp13
-rw-r--r--src/burn/engine/pseudobundle.cpp14
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
1304HRESULT 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
1353LExit:
1354 if (rgszArgs)
1355 {
1356 AppFreeCommandLineArgs(rgszArgs);
1357 }
1358 ReleaseStr(szLogArg);
1359 ReleaseStr(szLogArgFormatted);
1360
1361 return hr;
1362}
1363
1304extern "C" HRESULT CoreAppendSplashScreenWindowToCommandLine( 1364extern "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 );
309HRESULT 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 );
309HRESULT CoreAppendSplashScreenWindowToCommandLine( 316HRESULT 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