diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-06-03 17:50:22 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-06-07 19:44:36 -0500 |
commit | 8810aa8908ed7887616d86dd5fb821fcfa92f444 (patch) | |
tree | 8bc05667c36cc0d3db73504c867e85b01f1a79b0 /src/burn | |
parent | 266b097c0b0a13dd4934f55f61cad62ffcbb953d (diff) | |
download | wix-8810aa8908ed7887616d86dd5fb821fcfa92f444.tar.gz wix-8810aa8908ed7887616d86dd5fb821fcfa92f444.tar.bz2 wix-8810aa8908ed7887616d86dd5fb821fcfa92f444.zip |
Update Burn algorithm for picking elevated temp path to use SystemTemp.
Diffstat (limited to 'src/burn')
-rw-r--r-- | src/burn/engine/cache.cpp | 19 | ||||
-rw-r--r-- | src/burn/engine/precomp.h | 1 | ||||
-rw-r--r-- | src/burn/stub/stub.vcxproj | 4 | ||||
-rw-r--r-- | src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj | 2 | ||||
-rw-r--r-- | src/burn/test/BurnUnitTest/CacheTest.cpp | 2 |
5 files changed, 22 insertions, 6 deletions
diff --git a/src/burn/engine/cache.cpp b/src/burn/engine/cache.cpp index 7fca8cc7..5eacb20d 100644 --- a/src/burn/engine/cache.cpp +++ b/src/burn/engine/cache.cpp | |||
@@ -1389,6 +1389,8 @@ static HRESULT CalculatePotentialBaseWorkingFolders( | |||
1389 | Assert(!pCache->rgsczPotentialBaseWorkingFolders && !pCache->cPotentialBaseWorkingFolders); | 1389 | Assert(!pCache->rgsczPotentialBaseWorkingFolders && !pCache->cPotentialBaseWorkingFolders); |
1390 | HRESULT hr = S_OK; | 1390 | HRESULT hr = S_OK; |
1391 | LPWSTR sczTemp = NULL; | 1391 | LPWSTR sczTemp = NULL; |
1392 | LPWSTR sczPolicy = NULL; | ||
1393 | BOOL fNeedsExpansion = FALSE; | ||
1392 | 1394 | ||
1393 | hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pCache->rgsczPotentialBaseWorkingFolders), 6, sizeof(LPWSTR), 6); | 1395 | hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pCache->rgsczPotentialBaseWorkingFolders), 6, sizeof(LPWSTR), 6); |
1394 | ExitOnFailure(hr, "Failed to initialize array."); | 1396 | ExitOnFailure(hr, "Failed to initialize array."); |
@@ -1408,12 +1410,22 @@ static HRESULT CalculatePotentialBaseWorkingFolders( | |||
1408 | // but only use it if elevated because it should be secured against non-admin users. | 1410 | // but only use it if elevated because it should be secured against non-admin users. |
1409 | if (pInternalCommand->fInitiallyElevated) | 1411 | if (pInternalCommand->fInitiallyElevated) |
1410 | { | 1412 | { |
1411 | hr = PolcReadString(POLICY_BURN_REGISTRY_PATH, L"EngineWorkingDirectory", NULL, &sczTemp); | 1413 | hr = PolcReadUnexpandedString(POLICY_BURN_REGISTRY_PATH, L"EngineWorkingDirectory", NULL, &fNeedsExpansion, &sczPolicy); |
1412 | ExitOnFailure(hr, "Failed to read EngineWorkingDirectory policy directory."); | 1414 | ExitOnFailure(hr, "Failed to read EngineWorkingDirectory policy directory."); |
1413 | 1415 | ||
1414 | if (sczTemp) | 1416 | if (S_FALSE != hr) |
1415 | { | 1417 | { |
1416 | // PolcReadString is supposed to automatically expand REG_EXPAND_SZ values. | 1418 | if (fNeedsExpansion) |
1419 | { | ||
1420 | hr = EnvExpandEnvironmentStringsForUser(NULL, sczPolicy, &sczTemp, NULL); | ||
1421 | ExitOnFailure(hr, "Failed to expand EngineWorkingDirectory policy directory."); | ||
1422 | } | ||
1423 | else | ||
1424 | { | ||
1425 | sczTemp = sczPolicy; | ||
1426 | sczPolicy = NULL; | ||
1427 | } | ||
1428 | |||
1417 | pCache->rgsczPotentialBaseWorkingFolders[pCache->cPotentialBaseWorkingFolders] = sczTemp; | 1429 | pCache->rgsczPotentialBaseWorkingFolders[pCache->cPotentialBaseWorkingFolders] = sczTemp; |
1418 | sczTemp = NULL; | 1430 | sczTemp = NULL; |
1419 | ++pCache->cPotentialBaseWorkingFolders; | 1431 | ++pCache->cPotentialBaseWorkingFolders; |
@@ -1438,6 +1450,7 @@ static HRESULT CalculatePotentialBaseWorkingFolders( | |||
1438 | 1450 | ||
1439 | LExit: | 1451 | LExit: |
1440 | ReleaseStr(sczTemp); | 1452 | ReleaseStr(sczTemp); |
1453 | ReleaseStr(sczPolicy); | ||
1441 | 1454 | ||
1442 | return hr; | 1455 | return hr; |
1443 | } | 1456 | } |
diff --git a/src/burn/engine/precomp.h b/src/burn/engine/precomp.h index 19a6d48b..bc7046f6 100644 --- a/src/burn/engine/precomp.h +++ b/src/burn/engine/precomp.h | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <certutil.h> | 31 | #include <certutil.h> |
32 | #include <cryputil.h> | 32 | #include <cryputil.h> |
33 | #include <dirutil.h> | 33 | #include <dirutil.h> |
34 | #include <envutil.h> | ||
34 | #include <fileutil.h> | 35 | #include <fileutil.h> |
35 | #include <guidutil.h> | 36 | #include <guidutil.h> |
36 | #include <logutil.h> | 37 | #include <logutil.h> |
diff --git a/src/burn/stub/stub.vcxproj b/src/burn/stub/stub.vcxproj index d73b9f49..0a2e1cae 100644 --- a/src/burn/stub/stub.vcxproj +++ b/src/burn/stub/stub.vcxproj | |||
@@ -55,14 +55,14 @@ | |||
55 | 55 | ||
56 | <PropertyGroup> | 56 | <PropertyGroup> |
57 | <ProjectAdditionalIncludeDirectories>$(ProjectDir)..\engine\inc</ProjectAdditionalIncludeDirectories> | 57 | <ProjectAdditionalIncludeDirectories>$(ProjectDir)..\engine\inc</ProjectAdditionalIncludeDirectories> |
58 | <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;wuguid.lib;engine.res</ProjectAdditionalLinkLibraries> | 58 | <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;userenv.lib;wininet.lib;wintrust.lib;wuguid.lib;engine.res</ProjectAdditionalLinkLibraries> |
59 | </PropertyGroup> | 59 | </PropertyGroup> |
60 | 60 | ||
61 | <ItemDefinitionGroup> | 61 | <ItemDefinitionGroup> |
62 | <Link> | 62 | <Link> |
63 | <SwapRunFromCD>true</SwapRunFromCD> | 63 | <SwapRunFromCD>true</SwapRunFromCD> |
64 | <SwapRunFromNET>true</SwapRunFromNET> | 64 | <SwapRunFromNET>true</SwapRunFromNET> |
65 | <DelayLoadDLLs>cabinet.dll;crypt32.dll;msi.dll;shlwapi.dll;version.dll;wininet.dll;wintrust.dll</DelayLoadDLLs> | 65 | <DelayLoadDLLs>cabinet.dll;crypt32.dll;msi.dll;shlwapi.dll;userenv.dll;version.dll;wininet.dll;wintrust.dll</DelayLoadDLLs> |
66 | </Link> | 66 | </Link> |
67 | </ItemDefinitionGroup> | 67 | </ItemDefinitionGroup> |
68 | 68 | ||
diff --git a/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj b/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj index b05666b2..e1a28712 100644 --- a/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj +++ b/src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj | |||
@@ -40,7 +40,7 @@ | |||
40 | 40 | ||
41 | <PropertyGroup> | 41 | <PropertyGroup> |
42 | <ProjectAdditionalIncludeDirectories>$(ProjectAdditionalIncludeDirectories);$(BurnGeneratedHeaderDirectory);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc</ProjectAdditionalIncludeDirectories> | 42 | <ProjectAdditionalIncludeDirectories>$(ProjectAdditionalIncludeDirectories);$(BurnGeneratedHeaderDirectory);..\..\engine;..\..\..\api\burn\WixToolset.BootstrapperCore.Native\inc;..\..\..\libs\dutil\WixToolset.Dutil\inc</ProjectAdditionalIncludeDirectories> |
43 | <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib;engine.res</ProjectAdditionalLinkLibraries> | 43 | <ProjectAdditionalLinkLibraries>cabinet.lib;crypt32.lib;msi.lib;rpcrt4.lib;shlwapi.lib;userenv.lib;wininet.lib;wintrust.lib;$(RootBuildFolder)libs\$(Configuration)\$(WixNativeSdkLibraryToolset)\$(PlatformTarget)\dutil.lib;engine.res</ProjectAdditionalLinkLibraries> |
44 | </PropertyGroup> | 44 | </PropertyGroup> |
45 | 45 | ||
46 | <ItemGroup> | 46 | <ItemGroup> |
diff --git a/src/burn/test/BurnUnitTest/CacheTest.cpp b/src/burn/test/BurnUnitTest/CacheTest.cpp index eb0b31ab..2bec05fe 100644 --- a/src/burn/test/BurnUnitTest/CacheTest.cpp +++ b/src/burn/test/BurnUnitTest/CacheTest.cpp | |||
@@ -92,6 +92,8 @@ namespace Bootstrapper | |||
92 | VerifyBaseWorkingFolder(L"B:\\TEST\\TMP\\", cache.rgsczPotentialBaseWorkingFolders[0]); | 92 | VerifyBaseWorkingFolder(L"B:\\TEST\\TMP\\", cache.rgsczPotentialBaseWorkingFolders[0]); |
93 | CacheUninitialize(&cache); | 93 | CacheUninitialize(&cache); |
94 | 94 | ||
95 | // First fallback is impractical to mock out - %windir%\SystemTemp on Win11 when running as SYSTEM. | ||
96 | |||
95 | hr = RegCreate(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Policies\\WiX\\Burn", GENERIC_WRITE, &hkBurnPolicy); | 97 | hr = RegCreate(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Policies\\WiX\\Burn", GENERIC_WRITE, &hkBurnPolicy); |
96 | NativeAssert::Succeeded(hr, "Failed to create Burn policy key."); | 98 | NativeAssert::Succeeded(hr, "Failed to create Burn policy key."); |
97 | 99 | ||