diff --git a/src/port/win32security.c b/src/port/win32security.c index 2c9ca15..e329eb0 100644 --- a/src/port/win32security.c +++ b/src/port/win32security.c @@ -122,12 +122,9 @@ pgwin32_is_admin(void) } /* - * We consider ourselves running as a service if one of the following is - * true: - * - * 1) We are running as Local System (only used by services) - * 2) Our token contains SECURITY_SERVICE_RID (automatically added to the - * process token by the SCM when starting a service) + * We consider ourselves running as a service if our token contains + * SECURITY_SERVICE_RID, which is automatically added to the process token + * by the SCM when starting a service. * * Return values: * 0 = Not service @@ -147,9 +144,7 @@ pgwin32_is_service(void) char *InfoBuffer = NULL; char errbuf[256]; PTOKEN_GROUPS Groups; - PTOKEN_USER User; PSID ServiceSid; - PSID LocalSystemSid; SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY}; UINT x; @@ -164,37 +159,6 @@ pgwin32_is_service(void) return -1; } - /* First check for local system */ - if (!pgwin32_get_dynamic_tokeninfo(AccessToken, TokenUser, &InfoBuffer, - errbuf, sizeof(errbuf))) - { - fprintf(stderr, "%s", errbuf); - return -1; - } - - User = (PTOKEN_USER) InfoBuffer; - - if (!AllocateAndInitializeSid(&NtAuthority, 1, - SECURITY_LOCAL_SYSTEM_RID, 0, 0, 0, 0, 0, 0, 0, - &LocalSystemSid)) - { - fprintf(stderr, "could not get SID for local system account\n"); - CloseHandle(AccessToken); - return -1; - } - - if (EqualSid(LocalSystemSid, User->User.Sid)) - { - FreeSid(LocalSystemSid); - free(InfoBuffer); - CloseHandle(AccessToken); - _is_service = 1; - return _is_service; - } - - FreeSid(LocalSystemSid); - free(InfoBuffer); - /* Now check for group SID */ if (!pgwin32_get_dynamic_tokeninfo(AccessToken, TokenGroups, &InfoBuffer, errbuf, sizeof(errbuf))) @@ -218,7 +182,8 @@ pgwin32_is_service(void) _is_service = 0; for (x = 0; x < Groups->GroupCount; x++) { - if (EqualSid(ServiceSid, Groups->Groups[x].Sid)) + if (EqualSid(ServiceSid, Groups->Groups[x].Sid) && + (Groups->Groups[x].Attributes & SE_GROUP_ENABLED)) { _is_service = 1; break;