Fix and simplify check for whether we're running as Windows service.
authorHeikki Linnakangas
Fri, 17 Mar 2017 09:14:01 +0000 (11:14 +0200)
committerHeikki Linnakangas
Fri, 17 Mar 2017 09:14:49 +0000 (11:14 +0200)
commit6b584c36a40ca68bd7f1943eb34ce1507b16bb2c
tree7038929653c502b30c5ba9ecb00fe34ecef57876
parent269efd052922489cf91fd0bc5a80c2008f553b49
Fix and simplify check for whether we're running as Windows service.

If the process token contains SECURITY_SERVICE_RID, but it has been
disabled by the SE_GROUP_USE_FOR_DENY_ONLY attribute, win32_is_service()
would incorrectly report that we're running as a service. That situation
arises, e.g. if postmaster is launched with a restricted security token,
with the "Log in as Service" privilege explicitly removed.

Replace the broken code with CheckProcessTokenMembership(), which does
this correctly. Also replace similar code in win32_is_admin(), even
though it got this right, for simplicity and consistency.

Per bug #13755, reported by Breen Hagan. Back-patch to all supported
versions. Patch by Takayuki Tsunakawa, reviewed by Michael Paquier.

Discussion: https://www.postgresql.org/message-id/20151104062315.2745.67143%40wrigleys.postgresql.org
src/backend/port/win32/security.c