forked from aniani/vim
patch 9.1.0780: MS-Windows: incorrect Win32 error checking
Problem: MS-Windows: incorrect Win32 error checking Solution: fix wrong order of error handling and perform some minor refactoring (Nir Lichtman) In the function that adjusts the process privileges there is a mistake in which GetLastError is called after CloseHandle, though clearly the last error check is meant for the privileges related call before hand and the current state appears like a mistake. So fix this problem, and also perform the following: - Remove the static variable done since the PlatformId is only called during initialization - Fix incorrect parameter passed to the Win32 API privileges function closes: #15845 Signed-off-by: Nir Lichtman <nir@lichtman.org> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
a2aa921f76
commit
b516598092
@@ -918,9 +918,8 @@ null_libintl_wputenv(const wchar_t *envstring UNUSED)
|
||||
* Enables or disables the specified privilege.
|
||||
*/
|
||||
static BOOL
|
||||
win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
||||
win32_enable_privilege(LPTSTR lpszPrivilege)
|
||||
{
|
||||
BOOL bResult;
|
||||
LUID luid;
|
||||
HANDLE hToken;
|
||||
TOKEN_PRIVILEGES tokenPrivileges;
|
||||
@@ -937,15 +936,22 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
||||
|
||||
tokenPrivileges.PrivilegeCount = 1;
|
||||
tokenPrivileges.Privileges[0].Luid = luid;
|
||||
tokenPrivileges.Privileges[0].Attributes = bEnable ?
|
||||
SE_PRIVILEGE_ENABLED : 0;
|
||||
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
|
||||
bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges,
|
||||
sizeof(TOKEN_PRIVILEGES), NULL, NULL);
|
||||
if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, NULL))
|
||||
{
|
||||
CloseHandle(hToken);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (GetLastError() != ERROR_SUCCESS)
|
||||
{
|
||||
CloseHandle(hToken);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CloseHandle(hToken);
|
||||
|
||||
return bResult && GetLastError() == ERROR_SUCCESS;
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -961,15 +967,11 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
||||
void
|
||||
PlatformId(void)
|
||||
{
|
||||
static int done = FALSE;
|
||||
|
||||
if (done)
|
||||
return;
|
||||
|
||||
OSVERSIONINFO ovi;
|
||||
|
||||
ovi.dwOSVersionInfoSize = sizeof(ovi);
|
||||
GetVersionEx(&ovi);
|
||||
if (!GetVersionEx(&ovi))
|
||||
return;
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d",
|
||||
@@ -985,9 +987,9 @@ PlatformId(void)
|
||||
|
||||
#ifdef HAVE_ACL
|
||||
// Enable privilege for getting or setting SACLs.
|
||||
win32_enable_privilege(SE_SECURITY_NAME, TRUE);
|
||||
if (!win32_enable_privilege(SE_SECURITY_NAME))
|
||||
return;
|
||||
#endif
|
||||
done = TRUE;
|
||||
}
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning(pop)
|
||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
780,
|
||||
/**/
|
||||
779,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user