From 4569c1ab96c170641422c8ce082ed373b62c47af Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 29 May 2013 16:09:10 +0000 Subject: [PATCH] [SAMSRV] Set default group membership for new users. svn path=/trunk/; revision=59107 --- reactos/dll/win32/samsrv/samrpc.c | 36 +++++++++++++++++++++++++++++-- reactos/dll/win32/samsrv/setup.c | 14 +++++++++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index 6173c83f937..afc7122c324 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -2096,6 +2096,7 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, SAM_USER_FIXED_DATA FixedUserData; PSAM_DB_OBJECT DomainObject; PSAM_DB_OBJECT UserObject; + GROUP_MEMBERSHIP GroupMembership; UCHAR LogonHours[23]; ULONG ulSize; ULONG ulRid; @@ -2365,7 +2366,22 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, return Status; } - /* FIXME: Set Groups attribute*/ + /* Set Groups attribute*/ + GroupMembership.RelativeId = DOMAIN_GROUP_RID_USERS; + GroupMembership.Attributes = SE_GROUP_MANDATORY | + SE_GROUP_ENABLED | + SE_GROUP_ENABLED_BY_DEFAULT; + + Status = SampSetObjectAttribute(UserObject, + L"Groups", + REG_BINARY, + &GroupMembership, + sizeof(GROUP_MEMBERSHIP)); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } /* Set LMPwd attribute*/ Status = SampSetObjectAttribute(UserObject, @@ -7638,6 +7654,7 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, SAM_USER_FIXED_DATA FixedUserData; PSAM_DB_OBJECT DomainObject; PSAM_DB_OBJECT UserObject; + GROUP_MEMBERSHIP GroupMembership; UCHAR LogonHours[23]; ULONG ulSize; ULONG ulRid; @@ -7914,7 +7931,22 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, return Status; } - /* FIXME: Set Groups attribute*/ + /* Set Groups attribute*/ + GroupMembership.RelativeId = DOMAIN_GROUP_RID_USERS; + GroupMembership.Attributes = SE_GROUP_MANDATORY | + SE_GROUP_ENABLED | + SE_GROUP_ENABLED_BY_DEFAULT; + + Status = SampSetObjectAttribute(UserObject, + L"Groups", + REG_BINARY, + &GroupMembership, + sizeof(GROUP_MEMBERSHIP)); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } /* Set LMPwd attribute*/ Status = SampSetObjectAttribute(UserObject, diff --git a/reactos/dll/win32/samsrv/setup.c b/reactos/dll/win32/samsrv/setup.c index 416551ced5a..1000e830609 100644 --- a/reactos/dll/win32/samsrv/setup.c +++ b/reactos/dll/win32/samsrv/setup.c @@ -168,6 +168,7 @@ SampSetupCreateUserAccount(HKEY hDomainKey, ULONG UserAccountControl) { SAM_USER_FIXED_DATA FixedUserData; + GROUP_MEMBERSHIP GroupMembership; UCHAR LogonHours[23]; LPWSTR lpEmptyString = L""; DWORD dwDisposition; @@ -294,7 +295,18 @@ SampSetupCreateUserAccount(HKEY hDomainKey, (LPVOID)LogonHours, sizeof(LogonHours)); - /* FIXME: Set Groups attribute*/ + /* Set Groups attribute*/ + GroupMembership.RelativeId = DOMAIN_GROUP_RID_USERS; + GroupMembership.Attributes = SE_GROUP_MANDATORY | + SE_GROUP_ENABLED | + SE_GROUP_ENABLED_BY_DEFAULT; + + RegSetValueEx(hAccountKey, + L"Groups", + 0, + REG_BINARY, + (LPVOID)&GroupMembership, + sizeof(GROUP_MEMBERSHIP)); /* Set LMPwd attribute*/ RegSetValueEx(hAccountKey,