Author: ekohl
Date: Sat Jun 30 21:10:39 2012
New Revision: 56815
URL:
http://svn.reactos.org/svn/reactos?rev=56815&view=rev
Log:
[SAMSRV]
SamrSetInformationUser: Implement most information classes.
Modified:
trunk/reactos/dll/win32/samsrv/samrpc.c
Modified: trunk/reactos/dll/win32/samsrv/samrpc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/samsrv/samrpc.c?…
==============================================================================
--- trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] Sat Jun 30 21:10:39 2012
@@ -2177,27 +2177,6 @@
return STATUS_NOT_IMPLEMENTED;
}
-
-static
-NTSTATUS
-SampSetPasswordInformation(PSAM_DB_OBJECT UserObject,
- PSAMPR_USER_SET_PASSWORD_INFORMATION PasswordInfo)
-{
- NTSTATUS Status;
-
- TRACE("Password: %S\n", PasswordInfo->Password.Buffer);
- TRACE("PasswordExpired: %d\n", PasswordInfo->PasswordExpired);
-
- Status = SampSetObjectAttribute(UserObject,
- L"Password",
- REG_SZ,
- PasswordInfo->Password.Buffer,
- PasswordInfo->Password.MaximumLength);
-
- return Status;
-}
-
-
/* Function 37 */
NTSTATUS
NTAPI
@@ -2206,15 +2185,40 @@
IN PSAMPR_USER_INFO_BUFFER Buffer)
{
PSAM_DB_OBJECT UserObject;
+ ACCESS_MASK DesiredAccess;
NTSTATUS Status;
TRACE("SamrSetInformationUser(%p %lu %p)\n",
UserHandle, UserInformationClass, Buffer);
+
+ switch (UserInformationClass)
+ {
+ case UserNameInformation:
+ case UserAccountNameInformation:
+ case UserFullNameInformation:
+ case UserPrimaryGroupInformation:
+ case UserHomeInformation:
+ case UserScriptInformation:
+ case UserProfileInformation:
+ case UserAdminCommentInformation:
+ case UserWorkStationsInformation:
+ case UserControlInformation:
+ case UserExpiresInformation:
+ DesiredAccess = USER_WRITE_ACCOUNT;
+ break;
+
+ case UserSetPasswordInformation:
+ DesiredAccess = USER_FORCE_PASSWORD_CHANGE;
+ break;
+
+ default:
+ return STATUS_INVALID_INFO_CLASS;
+ }
/* Validate the domain handle */
Status = SampValidateDbObject(UserHandle,
SamDbUserObject,
- USER_FORCE_PASSWORD_CHANGE,
+ DesiredAccess,
&UserObject);
if (!NT_SUCCESS(Status))
{
@@ -2224,14 +2228,135 @@
switch (UserInformationClass)
{
+// case UserGeneralInformation:
+// case UserPreferencesInformation:
+// case UserLogonHoursInformation:
+
+ case UserNameInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"Name",
+ REG_SZ,
+ Buffer->Name.UserName.Buffer,
+ Buffer->Name.UserName.MaximumLength);
+ if (!NT_SUCCESS(Status))
+ break;
+
+ Status = SampSetObjectAttribute(UserObject,
+ L"FullName",
+ REG_SZ,
+ Buffer->Name.FullName.Buffer,
+ Buffer->Name.FullName.MaximumLength);
+ break;
+
+ case UserAccountNameInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"Name",
+ REG_SZ,
+ Buffer->AccountName.UserName.Buffer,
+
Buffer->AccountName.UserName.MaximumLength);
+ break;
+
+ case UserFullNameInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"FullName",
+ REG_SZ,
+ Buffer->FullName.FullName.Buffer,
+ Buffer->FullName.FullName.MaximumLength);
+ break;
+
+ case UserPrimaryGroupInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"PrimaryGroupId",
+ REG_DWORD,
+ &Buffer->PrimaryGroup.PrimaryGroupId,
+ sizeof(ULONG));
+ break;
+
+ case UserHomeInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"HomeDirectory",
+ REG_SZ,
+ Buffer->Home.HomeDirectory.Buffer,
+
Buffer->Home.HomeDirectory.MaximumLength);
+ if (!NT_SUCCESS(Status))
+ break;
+
+ Status = SampSetObjectAttribute(UserObject,
+ L"HomeDirectoryDrive",
+ REG_SZ,
+ Buffer->Home.HomeDirectoryDrive.Buffer,
+
Buffer->Home.HomeDirectoryDrive.MaximumLength);
+ break;
+
+ case UserScriptInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"ScriptPath",
+ REG_SZ,
+ Buffer->Script.ScriptPath.Buffer,
+ Buffer->Script.ScriptPath.MaximumLength);
+ break;
+
+ case UserProfileInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"ProfilePath",
+ REG_SZ,
+ Buffer->Profile.ProfilePath.Buffer,
+
Buffer->Profile.ProfilePath.MaximumLength);
+ break;
+
+ case UserAdminCommentInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"AdminComment",
+ REG_SZ,
+ Buffer->AdminComment.AdminComment.Buffer,
+
Buffer->AdminComment.AdminComment.MaximumLength);
+ break;
+
+ case UserWorkStationsInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"WorkStations",
+ REG_SZ,
+ Buffer->WorkStations.WorkStations.Buffer,
+
Buffer->WorkStations.WorkStations.MaximumLength);
+ break;
+
case UserSetPasswordInformation:
- Status = SampSetPasswordInformation(UserObject,
-
(PSAMPR_USER_SET_PASSWORD_INFORMATION)Buffer);
- break;
+ TRACE("Password: %S\n", Buffer->SetPassword.Password.Buffer);
+ TRACE("PasswordExpired: %d\n",
Buffer->SetPassword.PasswordExpired);
+
+ Status = SampSetObjectAttribute(UserObject,
+ L"Password",
+ REG_SZ,
+ Buffer->SetPassword.Password.Buffer,
+
Buffer->SetPassword.Password.MaximumLength);
+ break;
+
+ case UserControlInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"UserAccountControl",
+ REG_DWORD,
+ &Buffer->Control.UserAccountControl,
+ sizeof(ULONG));
+ break;
+
+ case UserExpiresInformation:
+ Status = SampSetObjectAttribute(UserObject,
+ L"AccountExpires",
+ REG_BINARY,
+ &Buffer->Expires.AccountExpires,
+ sizeof(OLD_LARGE_INTEGER));
+ break;
+
+// case UserInternal1Information:
+// case UserParametersInformation:
+// case UserAllInformation:
+// case UserInternal4Information:
+// case UserInternal5Information:
+// case UserInternal4InformationNew:
+// case UserInternal5InformationNew:
default:
Status = STATUS_INVALID_INFO_CLASS;
- break;
}
return Status;