Don't leak admin group SID memory

This commit is contained in:
Joseph C. Lehner 2017-01-18 13:22:31 +01:00
parent eafbf90d15
commit 84dbd934bf

13
main.c
View file

@ -84,22 +84,23 @@ void usage(FILE *fp)
void require_admin() void require_admin()
{ {
SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY; SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;
PSID adminGroup = NULL; PSID group = NULL;
BOOL success = AllocateAndInitializeSid( BOOL admin, success = AllocateAndInitializeSid(
&auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, &auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, &adminGroup 0, 0, 0, 0, 0, 0, &group
); );
if (success) { if (success) {
if (CheckTokenMembership(NULL, adminGroup, &success)) { success = CheckTokenMembership(NULL, group, &admin);
if (!success) { FreeSid(group);
if (success) {
if (!admin) {
fprintf(stderr, "Error: must be run as administrator\n"); fprintf(stderr, "Error: must be run as administrator\n");
exit(1); exit(1);
} else { } else {
return; return;
} }
} }
FreeSid(adminGroup);
} }
fprintf(stderr, "Warning: failed to check administrator privileges\n"); fprintf(stderr, "Warning: failed to check administrator privileges\n");