aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-06-03 17:50:22 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-06-07 19:44:36 -0500
commit8810aa8908ed7887616d86dd5fb821fcfa92f444 (patch)
tree8bc05667c36cc0d3db73504c867e85b01f1a79b0 /src/burn
parent266b097c0b0a13dd4934f55f61cad62ffcbb953d (diff)
downloadwix-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.cpp19
-rw-r--r--src/burn/engine/precomp.h1
-rw-r--r--src/burn/stub/stub.vcxproj4
-rw-r--r--src/burn/test/BurnUnitTest/BurnUnitTest.vcxproj2
-rw-r--r--src/burn/test/BurnUnitTest/CacheTest.cpp2
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
1439LExit: 1451LExit:
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