From: Eric Kohl Date: Fri, 4 Oct 2013 22:23:25 +0000 (+0000) Subject: [SAMSRV] X-Git-Tag: ReactOS-0.3.16~1054 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=ae7b8ae784e57496304978e877dc913b7c5d9409 [SAMSRV] SampQueryUserAll: Rewrite the handling of the WhichFields variable in order to simplify the support of trusted user information. svn path=/trunk/; revision=60527 --- diff --git a/reactos/dll/win32/samsrv/samrpc.c b/reactos/dll/win32/samsrv/samrpc.c index ad84df5957f..b011e2f08b2 100644 --- a/reactos/dll/win32/samsrv/samrpc.c +++ b/reactos/dll/win32/samsrv/samrpc.c @@ -6443,9 +6443,42 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, if (!NT_SUCCESS(Status)) goto done; - if (UserObject->Access & USER_READ_GENERAL) + /* Set the fields to be returned */ + if (UserObject->Trusted) + { + InfoBuffer->All.WhichFields = USER_ALL_READ_GENERAL_MASK | + USER_ALL_READ_LOGON_MASK | + USER_ALL_READ_ACCOUNT_MASK | + USER_ALL_READ_PREFERENCES_MASK | + USER_ALL_READ_TRUSTED_MASK; + } + else + { + InfoBuffer->All.WhichFields = 0; + + if (UserObject->Access & USER_READ_GENERAL) + InfoBuffer->All.WhichFields |= USER_ALL_READ_GENERAL_MASK; + + if (UserObject->Access & USER_READ_LOGON) + InfoBuffer->All.WhichFields |= USER_ALL_READ_LOGON_MASK; + + if (UserObject->Access & USER_READ_ACCOUNT) + InfoBuffer->All.WhichFields |= USER_ALL_READ_ACCOUNT_MASK; + + if (UserObject->Access & USER_READ_PREFERENCES) + InfoBuffer->All.WhichFields |= USER_ALL_READ_PREFERENCES_MASK; + } + + /* Fail, if no fields are to be returned */ + if (InfoBuffer->All.WhichFields == 0) + { + Status = STATUS_ACCESS_DENIED; + goto done; + } + + /* Get the UserName attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_USERNAME) { - /* Get the Name string */ Status = SampGetObjectAttributeString(UserObject, L"Name", &InfoBuffer->All.UserName); @@ -6454,8 +6487,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the FullName string */ + /* Get the FullName attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_FULLNAME) + { Status = SampGetObjectAttributeString(UserObject, L"FullName", &InfoBuffer->All.FullName); @@ -6464,14 +6500,23 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the user ID*/ + /* Get the UserId attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_USERID) + { InfoBuffer->All.UserId = FixedData.UserId; + } - /* Get the primary group ID */ + /* Get the PrimaryGroupId attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_PRIMARYGROUPID) + { InfoBuffer->All.PrimaryGroupId = FixedData.PrimaryGroupId; + } - /* Get the AdminComment string */ + /* Get the AdminComment attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_ADMINCOMMENT) + { Status = SampGetObjectAttributeString(UserObject, L"AdminComment", &InfoBuffer->All.AdminComment); @@ -6480,8 +6525,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the UserComment string */ + /* Get the UserComment attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_USERCOMMENT) + { Status = SampGetObjectAttributeString(UserObject, L"UserComment", &InfoBuffer->All.UserComment); @@ -6490,19 +6538,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } - - InfoBuffer->All.WhichFields |= USER_ALL_READ_GENERAL_MASK; -// USER_ALL_USERNAME | -// USER_ALL_FULLNAME | -// USER_ALL_USERID | -// USER_ALL_PRIMARYGROUPID | -// USER_ALL_ADMINCOMMENT | -// USER_ALL_USERCOMMENT; } - if (UserObject->Access & USER_READ_LOGON) + /* Get the HomeDirectory attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_HOMEDIRECTORY) { - /* Get the HomeDirectory string */ Status = SampGetObjectAttributeString(UserObject, L"HomeDirectory", &InfoBuffer->All.HomeDirectory); @@ -6511,8 +6551,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the HomeDirectoryDrive string */ + /* Get the HomeDirectoryDrive attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_HOMEDIRECTORYDRIVE) + { Status = SampGetObjectAttributeString(UserObject, L"HomeDirectoryDrive", &InfoBuffer->Home.HomeDirectoryDrive); @@ -6521,8 +6564,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the ScriptPath string */ + /* Get the ScriptPath attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_SCRIPTPATH) + { Status = SampGetObjectAttributeString(UserObject, L"ScriptPath", &InfoBuffer->All.ScriptPath); @@ -6531,8 +6577,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the ProfilePath string */ + /* Get the ProfilePath attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_PROFILEPATH) + { Status = SampGetObjectAttributeString(UserObject, L"ProfilePath", &InfoBuffer->All.ProfilePath); @@ -6541,8 +6590,11 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - /* Get the WorkStations string */ + /* Get the WorkStations attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_WORKSTATIONS) + { Status = SampGetObjectAttributeString(UserObject, L"WorkStations", &InfoBuffer->All.WorkStations); @@ -6551,8 +6603,25 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } + + /* Get the LastLogon attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_LASTLOGON) + { + InfoBuffer->All.LastLogon.LowPart = FixedData.LastLogon.LowPart; + InfoBuffer->All.LastLogon.HighPart = FixedData.LastLogon.HighPart; + } - /* Get the LogonHours attribute */ + /* Get the LastLogoff attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_LASTLOGOFF) + { + InfoBuffer->All.LastLogoff.LowPart = FixedData.LastLogoff.LowPart; + InfoBuffer->All.LastLogoff.HighPart = FixedData.LastLogoff.HighPart; + } + + /* Get the LogonHours attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_LOGONHOURS) + { Status = SampGetLogonHoursAttrbute(UserObject, &InfoBuffer->All.LogonHours); if (!NT_SUCCESS(Status)) @@ -6560,55 +6629,61 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } + } - InfoBuffer->All.LastLogon.LowPart = FixedData.LastLogon.LowPart; - InfoBuffer->All.LastLogon.HighPart = FixedData.LastLogon.HighPart; - - InfoBuffer->All.LastLogoff.LowPart = FixedData.LastLogoff.LowPart; - InfoBuffer->All.LastLogoff.HighPart = FixedData.LastLogoff.HighPart; - + /* Get the BadPasswordCount attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_BADPASSWORDCOUNT) + { InfoBuffer->All.BadPasswordCount = FixedData.BadPasswordCount; + } + /* Get the LogonCount attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_LOGONCOUNT) + { InfoBuffer->All.LogonCount = FixedData.LogonCount; + } + /* Get the PasswordCanChange attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_PASSWORDCANCHANGE) + { PasswordCanChange = SampAddRelativeTimeToTime(FixedData.PasswordLastSet, DomainFixedData.MinPasswordAge); InfoBuffer->All.PasswordCanChange.LowPart = PasswordCanChange.LowPart; InfoBuffer->All.PasswordCanChange.HighPart = PasswordCanChange.HighPart; + } + /* Get the PasswordMustChange attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_PASSWORDMUSTCHANGE) + { PasswordMustChange = SampAddRelativeTimeToTime(FixedData.PasswordLastSet, DomainFixedData.MaxPasswordAge); InfoBuffer->All.PasswordMustChange.LowPart = PasswordMustChange.LowPart; InfoBuffer->All.PasswordMustChange.HighPart = PasswordMustChange.HighPart; + } - InfoBuffer->All. WhichFields |= USER_ALL_READ_LOGON_MASK; -/* - USER_ALL_HOMEDIRECTORY | - USER_ALL_HOMEDIRECTORYDRIVE | - USER_ALL_SCRIPTPATH | - USER_ALL_PROFILEPATH | - USER_ALL_WORKSTATIONS | - USER_ALL_LASTLOGON | - USER_ALL_LASTLOGOFF | - USER_ALL_LOGONHOURS | - USER_ALL_BADPASSWORDCOUNT | - USER_ALL_LOGONCOUNT; - USER_ALL_PASSWORDCANCHANGE | - USER_ALL_PASSWORDMUSTCHANGE; -*/ - } - - if (UserObject->Access & USER_READ_ACCOUNT) + /* Get the PasswordLastSet attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_PASSWORDLASTSET) { InfoBuffer->All.PasswordLastSet.LowPart = FixedData.PasswordLastSet.LowPart; InfoBuffer->All.PasswordLastSet.HighPart = FixedData.PasswordLastSet.HighPart; + } + /* Get the AccountExpires attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_ACCOUNTEXPIRES) + { InfoBuffer->All.AccountExpires.LowPart = FixedData.AccountExpires.LowPart; InfoBuffer->All.AccountExpires.HighPart = FixedData.AccountExpires.HighPart; + } + /* Get the UserAccountControl attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_USERACCOUNTCONTROL) + { InfoBuffer->All.UserAccountControl = FixedData.UserAccountControl; + } - /* Get the Parameters string */ + /* Get the Parameters attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_PARAMETERS) + { Status = SampGetObjectAttributeString(UserObject, L"Parameters", &InfoBuffer->All.Parameters); @@ -6617,23 +6692,43 @@ SampQueryUserAll(PSAM_DB_OBJECT UserObject, TRACE("Status 0x%08lx\n", Status); goto done; } - - InfoBuffer->All. WhichFields |= USER_ALL_READ_ACCOUNT_MASK; -// USER_ALL_PASSWORDLASTSET | -// USER_ALL_ACCOUNTEXPIRES | -// USER_ALL_USERACCOUNTCONTROL | -// USER_ALL_PARAMETERS; } - if (UserObject->Access & USER_READ_PREFERENCES) + /* Get the CountryCode attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_COUNTRYCODE) { InfoBuffer->All.CountryCode = FixedData.CountryCode; + } + /* Get the CodePage attribute */ + if (InfoBuffer->All.WhichFields & USER_ALL_CODEPAGE) + { InfoBuffer->All.CodePage = FixedData.CodePage; + } + + if (InfoBuffer->All.WhichFields & USER_ALL_NTPASSWORDPRESENT) + { + /* FIXME */ + } - InfoBuffer->All. WhichFields |= USER_ALL_READ_PREFERENCES_MASK; -// USER_ALL_COUNTRYCODE | -// USER_ALL_CODEPAGE; + if (InfoBuffer->All.WhichFields & USER_ALL_LMPASSWORDPRESENT) + { + /* FIXME */ + } + + if (InfoBuffer->All.WhichFields & USER_ALL_PRIVATEDATA) + { + /* FIXME */ + } + + if (InfoBuffer->All.WhichFields & USER_ALL_PASSWORDEXPIRED) + { + /* FIXME */ + } + + if (InfoBuffer->All.WhichFields & USER_ALL_SECURITYDESCRIPTOR) + { + /* FIXME */ } *Buffer = InfoBuffer;