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.
|
* Enables or disables the specified privilege.
|
||||||
*/
|
*/
|
||||||
static BOOL
|
static BOOL
|
||||||
win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
win32_enable_privilege(LPTSTR lpszPrivilege)
|
||||||
{
|
{
|
||||||
BOOL bResult;
|
|
||||||
LUID luid;
|
LUID luid;
|
||||||
HANDLE hToken;
|
HANDLE hToken;
|
||||||
TOKEN_PRIVILEGES tokenPrivileges;
|
TOKEN_PRIVILEGES tokenPrivileges;
|
||||||
@@ -937,15 +936,22 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
|||||||
|
|
||||||
tokenPrivileges.PrivilegeCount = 1;
|
tokenPrivileges.PrivilegeCount = 1;
|
||||||
tokenPrivileges.Privileges[0].Luid = luid;
|
tokenPrivileges.Privileges[0].Luid = luid;
|
||||||
tokenPrivileges.Privileges[0].Attributes = bEnable ?
|
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||||
SE_PRIVILEGE_ENABLED : 0;
|
|
||||||
|
|
||||||
bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges,
|
if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, NULL))
|
||||||
sizeof(TOKEN_PRIVILEGES), NULL, NULL);
|
{
|
||||||
|
CloseHandle(hToken);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetLastError() != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
CloseHandle(hToken);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
CloseHandle(hToken);
|
CloseHandle(hToken);
|
||||||
|
return TRUE;
|
||||||
return bResult && GetLastError() == ERROR_SUCCESS;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -961,15 +967,11 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
|
|||||||
void
|
void
|
||||||
PlatformId(void)
|
PlatformId(void)
|
||||||
{
|
{
|
||||||
static int done = FALSE;
|
|
||||||
|
|
||||||
if (done)
|
|
||||||
return;
|
|
||||||
|
|
||||||
OSVERSIONINFO ovi;
|
OSVERSIONINFO ovi;
|
||||||
|
|
||||||
ovi.dwOSVersionInfoSize = sizeof(ovi);
|
ovi.dwOSVersionInfoSize = sizeof(ovi);
|
||||||
GetVersionEx(&ovi);
|
if (!GetVersionEx(&ovi))
|
||||||
|
return;
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d",
|
vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d",
|
||||||
@@ -985,9 +987,9 @@ PlatformId(void)
|
|||||||
|
|
||||||
#ifdef HAVE_ACL
|
#ifdef HAVE_ACL
|
||||||
// Enable privilege for getting or setting SACLs.
|
// Enable privilege for getting or setting SACLs.
|
||||||
win32_enable_privilege(SE_SECURITY_NAME, TRUE);
|
if (!win32_enable_privilege(SE_SECURITY_NAME))
|
||||||
|
return;
|
||||||
#endif
|
#endif
|
||||||
done = TRUE;
|
|
||||||
}
|
}
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# pragma warning(pop)
|
# pragma warning(pop)
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
780,
|
||||||
/**/
|
/**/
|
||||||
779,
|
779,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user