aboutsummaryrefslogtreecommitdiff
path: root/src/dutil/acl2util.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-03-02 14:19:14 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-03-02 15:40:02 -0600
commit10ebf674da5df9224e4eddd3545518434c5b455b (patch)
treeea1f4063edd46e9942eab94dd7adb2f75c6c589e /src/dutil/acl2util.cpp
parent3bbf1347b900ec115a12faf8f46965c9b7649696 (diff)
downloadwix-10ebf674da5df9224e4eddd3545518434c5b455b.tar.gz
wix-10ebf674da5df9224e4eddd3545518434c5b455b.tar.bz2
wix-10ebf674da5df9224e4eddd3545518434c5b455b.zip
Update rest of dutil to use their own source with the Exit* macros.
Fix some CA warnings.
Diffstat (limited to 'src/dutil/acl2util.cpp')
-rw-r--r--src/dutil/acl2util.cpp30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/dutil/acl2util.cpp b/src/dutil/acl2util.cpp
index 2261abe3..5aba60f0 100644
--- a/src/dutil/acl2util.cpp
+++ b/src/dutil/acl2util.cpp
@@ -2,6 +2,20 @@
2 2
3#include "precomp.h" 3#include "precomp.h"
4 4
5// Exit macros
6#define AclExitOnLastError(x, s, ...) ExitOnLastErrorSource(DUTIL_SOURCE_ACLUTIL, x, s, __VA_ARGS__)
7#define AclExitOnLastErrorDebugTrace(x, s, ...) ExitOnLastErrorDebugTraceSource(DUTIL_SOURCE_ACLUTIL, x, s, __VA_ARGS__)
8#define AclExitWithLastError(x, s, ...) ExitWithLastErrorSource(DUTIL_SOURCE_ACLUTIL, x, s, __VA_ARGS__)
9#define AclExitOnFailure(x, s, ...) ExitOnFailureSource(DUTIL_SOURCE_ACLUTIL, x, s, __VA_ARGS__)
10#define AclExitOnRootFailure(x, s, ...) ExitOnRootFailureSource(DUTIL_SOURCE_ACLUTIL, x, s, __VA_ARGS__)
11#define AclExitOnFailureDebugTrace(x, s, ...) ExitOnFailureDebugTraceSource(DUTIL_SOURCE_ACLUTIL, x, s, __VA_ARGS__)
12#define AclExitOnNull(p, x, e, s, ...) ExitOnNullSource(DUTIL_SOURCE_ACLUTIL, p, x, e, s, __VA_ARGS__)
13#define AclExitOnNullWithLastError(p, x, s, ...) ExitOnNullWithLastErrorSource(DUTIL_SOURCE_ACLUTIL, p, x, s, __VA_ARGS__)
14#define AclExitOnNullDebugTrace(p, x, e, s, ...) ExitOnNullDebugTraceSource(DUTIL_SOURCE_ACLUTIL, p, x, e, s, __VA_ARGS__)
15#define AclExitOnInvalidHandleWithLastError(p, x, s, ...) ExitOnInvalidHandleWithLastErrorSource(DUTIL_SOURCE_ACLUTIL, p, x, s, __VA_ARGS__)
16#define AclExitOnWin32Error(e, x, s, ...) ExitOnWin32ErrorSource(DUTIL_SOURCE_ACLUTIL, e, x, s, __VA_ARGS__)
17#define AclExitOnGdipFailure(g, x, s, ...) ExitOnGdipFailureSource(DUTIL_SOURCE_ACLUTIL, g, x, s, __VA_ARGS__)
18
5/******************************************************************** 19/********************************************************************
6AclCalculateServiceSidString - gets the SID string for the given service name 20AclCalculateServiceSidString - gets the SID string for the given service name
7 21
@@ -26,17 +40,17 @@ extern "C" HRESULT DAPI AclCalculateServiceSidString(
26 if (0 == cchServiceName) 40 if (0 == cchServiceName)
27 { 41 {
28 hr = ::StringCchLengthW(wzServiceName, INT_MAX, reinterpret_cast<size_t*>(&cchServiceName)); 42 hr = ::StringCchLengthW(wzServiceName, INT_MAX, reinterpret_cast<size_t*>(&cchServiceName));
29 ExitOnFailure(hr, "Failed to get the length of the service name."); 43 AclExitOnFailure(hr, "Failed to get the length of the service name.");
30 } 44 }
31 45
32 hr = StrAllocStringToUpperInvariant(&sczUpperServiceName, wzServiceName, cchServiceName); 46 hr = StrAllocStringToUpperInvariant(&sczUpperServiceName, wzServiceName, cchServiceName);
33 ExitOnFailure(hr, "Failed to upper case the service name."); 47 AclExitOnFailure(hr, "Failed to upper case the service name.");
34 48
35 pbHash = reinterpret_cast<BYTE*>(MemAlloc(cbHash, TRUE)); 49 pbHash = reinterpret_cast<BYTE*>(MemAlloc(cbHash, TRUE));
36 ExitOnNull(pbHash, hr, E_OUTOFMEMORY, "Failed to allocate hash byte array."); 50 AclExitOnNull(pbHash, hr, E_OUTOFMEMORY, "Failed to allocate hash byte array.");
37 51
38 hr = CrypHashBuffer(reinterpret_cast<BYTE*>(sczUpperServiceName), cchServiceName * 2, PROV_RSA_FULL, CALG_SHA1, pbHash, cbHash); 52 hr = CrypHashBuffer(reinterpret_cast<BYTE*>(sczUpperServiceName), cchServiceName * 2, PROV_RSA_FULL, CALG_SHA1, pbHash, cbHash);
39 ExitOnNull(pbHash, hr, E_OUTOFMEMORY, "Failed to hash the service name."); 53 AclExitOnNull(pbHash, hr, E_OUTOFMEMORY, "Failed to hash the service name.");
40 54
41 hr = StrAllocFormatted(psczSid, L"S-1-5-80-%u-%u-%u-%u-%u", 55 hr = StrAllocFormatted(psczSid, L"S-1-5-80-%u-%u-%u-%u-%u",
42 MAKEDWORD(MAKEWORD(pbHash[0], pbHash[1]), MAKEWORD(pbHash[2], pbHash[3])), 56 MAKEDWORD(MAKEWORD(pbHash[0], pbHash[1]), MAKEWORD(pbHash[2], pbHash[3])),
@@ -80,7 +94,7 @@ extern "C" HRESULT DAPI AclGetAccountSidStringEx(
80 94
81 if (!::ConvertSidToStringSidW(psid, &pwz)) 95 if (!::ConvertSidToStringSidW(psid, &pwz))
82 { 96 {
83 ExitWithLastError(hr, "Failed to convert SID to string for Account: %ls", wzAccount); 97 AclExitWithLastError(hr, "Failed to convert SID to string for Account: %ls", wzAccount);
84 } 98 }
85 99
86 hr = StrAllocString(psczSid, pwz, 0); 100 hr = StrAllocString(psczSid, pwz, 0);
@@ -90,20 +104,20 @@ extern "C" HRESULT DAPI AclGetAccountSidStringEx(
90 if (HRESULT_FROM_WIN32(ERROR_NONE_MAPPED) == hr) 104 if (HRESULT_FROM_WIN32(ERROR_NONE_MAPPED) == hr)
91 { 105 {
92 HRESULT hrLength = ::StringCchLengthW(wzAccount, INT_MAX, reinterpret_cast<size_t*>(&cchAccount)); 106 HRESULT hrLength = ::StringCchLengthW(wzAccount, INT_MAX, reinterpret_cast<size_t*>(&cchAccount));
93 ExitOnFailure(hrLength, "Failed to get the length of the account name."); 107 AclExitOnFailure(hrLength, "Failed to get the length of the account name.");
94 108
95 if (11 < cchAccount && CSTR_EQUAL == CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, L"NT SERVICE\\", 11, wzAccount, 11)) 109 if (11 < cchAccount && CSTR_EQUAL == CompareStringW(LOCALE_NEUTRAL, NORM_IGNORECASE, L"NT SERVICE\\", 11, wzAccount, 11))
96 { 110 {
97 // If the service is not installed then LookupAccountName doesn't resolve the SID, but we can calculate it. 111 // If the service is not installed then LookupAccountName doesn't resolve the SID, but we can calculate it.
98 LPCWSTR wzServiceName = &wzAccount[11]; 112 LPCWSTR wzServiceName = &wzAccount[11];
99 hr = AclCalculateServiceSidString(wzServiceName, cchAccount - 11, &sczSid); 113 hr = AclCalculateServiceSidString(wzServiceName, cchAccount - 11, &sczSid);
100 ExitOnFailure(hr, "Failed to calculate the service SID for %ls", wzServiceName); 114 AclExitOnFailure(hr, "Failed to calculate the service SID for %ls", wzServiceName);
101 115
102 *psczSid = sczSid; 116 *psczSid = sczSid;
103 sczSid = NULL; 117 sczSid = NULL;
104 } 118 }
105 } 119 }
106 ExitOnFailure(hr, "Failed to get SID for account: %ls", wzAccount); 120 AclExitOnFailure(hr, "Failed to get SID for account: %ls", wzAccount);
107 } 121 }
108 122
109LExit: 123LExit: