reactos/base/applications/network/net/cmdComputer.c

150 lines
3.7 KiB
C
Raw Normal View History

/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS net command
* FILE: base/applications/network/net/cmdComputer.c
* PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org>
*/
#include "net.h"
INT
cmdComputer(
INT argc,
WCHAR **argv)
{
WCHAR ComputerAccountName[MAX_PATH + 2];
WCHAR ComputerPassword[LM20_PWLEN + 1];
USER_INFO_1 UserInfo;
INT i, result = 0;
BOOL bAdd = FALSE;
BOOL bDelete = FALSE;
PWSTR pComputerName = NULL;
NET_API_STATUS Status = NERR_Success;
/*
OSVERSIONINFOEX VersionInfo;
VersionInfo.dwOSVersionInfoSize = sizeof(VersionInfo);
if (!GetVersionEx((LPOSVERSIONINFO)&VersionInfo))
{
PrintErrorMessage(GetLastError());
return 1;
}
if (VersionInfo.wProductType != VER_NT_DOMAIN_CONTROLLER)
{
PrintErrorMessage(3515);
return 1;
}
*/
i = 2;
if (argc > 2 && argv[i][0] == L'\\' && argv[i][1] == L'\\')
{
pComputerName = argv[i];
i++;
}
for (; i < argc; i++)
{
if (_wcsicmp(argv[i], L"help") == 0)
{
/* Print short syntax help */
PrintMessageString(4381);
ConPuts(StdOut, L"\n");
PrintNetMessage(MSG_COMPUTER_SYNTAX);
return 0;
}
if (_wcsicmp(argv[i], L"/help") == 0)
{
/* Print full help text*/
PrintMessageString(4381);
ConPuts(StdOut, L"\n");
PrintNetMessage(MSG_COMPUTER_SYNTAX);
PrintNetMessage(MSG_COMPUTER_HELP);
return 0;
}
if (_wcsicmp(argv[i], L"/add") == 0)
{
bAdd = TRUE;
continue;
}
else if (_wcsicmp(argv[i], L"/del") == 0)
{
bDelete = TRUE;
continue;
}
else
{
PrintErrorMessage(3506/*, argv[i]*/);
return 1;
}
}
if (pComputerName == NULL ||
(bAdd == FALSE && bDelete == FALSE) ||
(bAdd == TRUE && bDelete == TRUE))
{
PrintMessageString(4381);
ConPuts(StdOut, L"\n");
PrintNetMessage(MSG_COMPUTER_SYNTAX);
return 1;
}
/*
* Create the computer account name:
* Skip the leading '\\' and appand a '$'.
*/
wcscpy(ComputerAccountName, &pComputerName[2]);
wcscat(ComputerAccountName, L"$");
if (bAdd)
{
/*
* Create the computer password:
* Skip the leading '\\', shorten to a maximum of 14 characters
* and convert to lower case
*/
wcsncpy(ComputerPassword, &pComputerName[2], LM20_PWLEN);
ComputerPassword[LM20_PWLEN] = UNICODE_NULL;
_wcslwr(ComputerPassword);
/* Set the account data */
UserInfo.usri1_name = ComputerAccountName;
UserInfo.usri1_password = ComputerPassword;
UserInfo.usri1_password_age = 0;
UserInfo.usri1_priv = USER_PRIV_USER;
UserInfo.usri1_home_dir = NULL;
UserInfo.usri1_comment = NULL;
UserInfo.usri1_flags = UF_SCRIPT | UF_WORKSTATION_TRUST_ACCOUNT;
UserInfo.usri1_script_path = NULL;
/* Add the computer account */
Status = NetUserAdd(NULL,
1,
(LPBYTE)&UserInfo,
NULL);
}
else if (bDelete)
{
/* Delete the coputer account */
Status = NetUserDel(NULL,
ComputerAccountName);
}
if (Status == NERR_Success)
{
PrintErrorMessage(ERROR_SUCCESS);
}
else
{
PrintErrorMessage(Status);
result = 1;
}
return result;
}
/* EOF */