mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
[NETAPI32]
- Implement NetUserSetInfo (levels 0, 1 and 3 only). - Add level 0 support to SetUserInfo. svn path=/trunk/; revision=59215
This commit is contained in:
parent
11b09b882b
commit
939098c7f7
1 changed files with 125 additions and 6 deletions
|
@ -23,7 +23,6 @@
|
|||
* Implement NetUserChangePassword
|
||||
* Implement NetUserGetGroups
|
||||
* Implement NetUserSetGroups
|
||||
* Implement NetUserSetInfo
|
||||
* NetUserGetLocalGroups does not support LG_INCLUDE_INDIRECT yet.
|
||||
* Add missing information levels.
|
||||
* ...
|
||||
|
@ -764,6 +763,7 @@ SetUserInfo(SAM_HANDLE UserHandle,
|
|||
DWORD Level)
|
||||
{
|
||||
USER_ALL_INFORMATION UserAllInfo;
|
||||
PUSER_INFO_0 UserInfo0;
|
||||
PUSER_INFO_1 UserInfo1;
|
||||
PUSER_INFO_3 UserInfo3;
|
||||
NET_API_STATUS ApiStatus = NERR_Success;
|
||||
|
@ -773,8 +773,18 @@ SetUserInfo(SAM_HANDLE UserHandle,
|
|||
|
||||
switch (Level)
|
||||
{
|
||||
case 0:
|
||||
UserInfo0 = (PUSER_INFO_0)UserInfo;
|
||||
|
||||
RtlInitUnicodeString(&UserAllInfo.UserName,
|
||||
UserInfo0->usri0_name);
|
||||
|
||||
UserAllInfo.WhichFields = USER_ALL_USERNAME;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
UserInfo1 = (PUSER_INFO_1)UserInfo;
|
||||
|
||||
// RtlInitUnicodeString(&UserAllInfo.UserName,
|
||||
// UserInfo1->usri1_name);
|
||||
|
||||
|
@ -960,8 +970,17 @@ NetUserAdd(LPCWSTR servername,
|
|||
TRACE("(%s, %d, %p, %p)\n", debugstr_w(servername), level, bufptr, parm_err);
|
||||
|
||||
/* Check the info level */
|
||||
if (level < 1 || level > 4)
|
||||
return ERROR_INVALID_LEVEL;
|
||||
switch (level)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
break;
|
||||
|
||||
default:
|
||||
return ERROR_INVALID_LEVEL;
|
||||
}
|
||||
|
||||
if (servername != NULL)
|
||||
RtlInitUnicodeString(&ServerName, servername);
|
||||
|
@ -1199,7 +1218,7 @@ NetUserEnum(LPCWSTR servername,
|
|||
NET_API_STATUS ApiStatus = NERR_Success;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
FIXME("(%s %d 0x%d %p %d %p %p %p) stub!\n", debugstr_w(servername), level,
|
||||
TRACE("(%s %d 0x%d %p %d %p %p %p)\n", debugstr_w(servername), level,
|
||||
filter, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
|
||||
|
||||
*entriesread = 0;
|
||||
|
@ -1900,9 +1919,109 @@ NetUserSetInfo(LPCWSTR servername,
|
|||
LPBYTE buf,
|
||||
LPDWORD parm_err)
|
||||
{
|
||||
FIXME("(%s %s %lu %p %p)\n",
|
||||
UNICODE_STRING ServerName;
|
||||
UNICODE_STRING UserName;
|
||||
SAM_HANDLE ServerHandle = NULL;
|
||||
SAM_HANDLE AccountDomainHandle = NULL;
|
||||
SAM_HANDLE UserHandle = NULL;
|
||||
NET_API_STATUS ApiStatus = NERR_Success;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
TRACE("(%s %s %lu %p %p)\n",
|
||||
debugstr_w(servername), debugstr_w(username), level, buf, parm_err);
|
||||
return ERROR_ACCESS_DENIED;
|
||||
|
||||
/* Check the info level */
|
||||
switch (level)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
// case 2:
|
||||
case 3:
|
||||
// case 4:
|
||||
// case 21:
|
||||
// case 22:
|
||||
// case 1003:
|
||||
// case 1005:
|
||||
// case 1006:
|
||||
// case 1007:
|
||||
// case 1008:
|
||||
// case 1009:
|
||||
// case 1010:
|
||||
// case 1011:
|
||||
// case 1012:
|
||||
// case 1014:
|
||||
// case 1017:
|
||||
// case 1020:
|
||||
// case 1024:
|
||||
// case 1051:
|
||||
// case 1052:
|
||||
// case 1053:
|
||||
break;
|
||||
|
||||
default:
|
||||
return ERROR_INVALID_LEVEL;
|
||||
}
|
||||
|
||||
if (servername != NULL)
|
||||
RtlInitUnicodeString(&ServerName, servername);
|
||||
|
||||
RtlInitUnicodeString(&UserName, username);
|
||||
|
||||
/* Connect to the SAM Server */
|
||||
Status = SamConnect((servername != NULL) ? &ServerName : NULL,
|
||||
&ServerHandle,
|
||||
SAM_SERVER_CONNECT | SAM_SERVER_LOOKUP_DOMAIN,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("SamConnect failed (Status %08lx)\n", Status);
|
||||
ApiStatus = NetpNtStatusToApiStatus(Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Open the Account Domain */
|
||||
Status = OpenAccountDomain(ServerHandle,
|
||||
(servername != NULL) ? &ServerName : NULL,
|
||||
DOMAIN_LIST_ACCOUNTS | DOMAIN_LOOKUP,
|
||||
&AccountDomainHandle);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ERR("OpenAccountDomain failed (Status %08lx)\n", Status);
|
||||
ApiStatus = NetpNtStatusToApiStatus(Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Open the User Account */
|
||||
ApiStatus = OpenUserByName(AccountDomainHandle,
|
||||
&UserName,
|
||||
USER_ALL_ACCESS,
|
||||
&UserHandle);
|
||||
if (ApiStatus != NERR_Success)
|
||||
{
|
||||
ERR("OpenUserByName failed (ApiStatus %lu)\n", ApiStatus);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Set user information */
|
||||
ApiStatus = SetUserInfo(UserHandle,
|
||||
buf,
|
||||
level);
|
||||
if (ApiStatus != NERR_Success)
|
||||
{
|
||||
ERR("SetUserInfo failed (Status %lu)\n", ApiStatus);
|
||||
}
|
||||
|
||||
done:
|
||||
if (UserHandle != NULL)
|
||||
SamCloseHandle(UserHandle);
|
||||
|
||||
if (AccountDomainHandle != NULL)
|
||||
SamCloseHandle(AccountDomainHandle);
|
||||
|
||||
if (ServerHandle != NULL)
|
||||
SamCloseHandle(ServerHandle);
|
||||
|
||||
return ApiStatus;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
Loading…
Reference in a new issue