WindowsXP-SP1/ds/netapi/netdom/compname.cxx
2020-09-30 16:53:49 +02:00

371 lines
12 KiB
C++

//+----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 2001
//
// File: CompName.h
//
// Contents: Definitions for the computer name management code.
//
// History: 20-April-2001 EricB Created
//
//-----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "netdom.h"
#include "CompName.h"
//+----------------------------------------------------------------------------
//
// Function: NetDomComputerNames
//
// Synopsis: Entry point for the computer name command.
//
// Arguments: [rgNetDomArgs] - The command line argument array.
//
//-----------------------------------------------------------------------------
DWORD
NetDomComputerNames(ARG_RECORD * rgNetDomArgs)
{
DWORD Win32Err = ERROR_SUCCESS;
Win32Err = NetDompValidateSecondaryArguments(rgNetDomArgs,
eObject,
eCommUserNameO,
eCommPasswordO,
eCommUserNameD,
eCommPasswordD,
eCommAdd,
eCommRemove,
eCompNameMakePri,
eCompNameEnum,
eCommVerbose,
eArgEnd);
if (ERROR_SUCCESS != Win32Err)
{
DisplayHelp(ePriCompName);
return Win32Err;
}
PWSTR pwzMachine = rgNetDomArgs[eObject].strValue;
if (!pwzMachine)
{
DisplayHelp(ePriCompName);
return ERROR_INVALID_PARAMETER;
}
//
// Get the users and passwords if they were entered.
//
ND5_AUTH_INFO MachineUser = {0}, DomainUser = {0};
if (CmdFlagOn(rgNetDomArgs, eCommUserNameO))
{
Win32Err = NetDompGetUserAndPasswordForOperation(rgNetDomArgs,
eCommUserNameO,
pwzMachine,
&MachineUser);
if (ERROR_SUCCESS != Win32Err)
{
DisplayHelp(ePriCompName);
return Win32Err;
}
}
if (CmdFlagOn(rgNetDomArgs, eCommUserNameD))
{
Win32Err = NetDompGetUserAndPasswordForOperation(rgNetDomArgs,
eCommUserNameD,
pwzMachine,
&DomainUser);
if (ERROR_SUCCESS != Win32Err)
{
DisplayHelp(ePriCompName);
goto CompNameExit;
}
}
//
// See which name operation is specified.
//
bool fHaveOp = false;
PWSTR pwzOp = NULL;
NETDOM_ARG_ENUM eOp = eArgNull, eBadOp = eArgNull;
if (CmdFlagOn(rgNetDomArgs, eCommAdd))
{
Win32Err = NetDompGetArgumentString(rgNetDomArgs,
eCommAdd,
&pwzOp);
if (NO_ERROR == Win32Err)
{
eOp = eCommAdd;
}
}
if (CmdFlagOn(rgNetDomArgs, eCommRemove))
{
Win32Err = NetDompGetArgumentString(rgNetDomArgs,
eCommRemove,
&pwzOp);
if (NO_ERROR == Win32Err)
{
if (eArgNull == eOp)
{
eOp = eCommRemove;
}
else
{
eBadOp = eCommRemove;
}
}
}
if (CmdFlagOn(rgNetDomArgs, eCompNameMakePri))
{
Win32Err = NetDompGetArgumentString(rgNetDomArgs,
eCompNameMakePri,
&pwzOp);
if (NO_ERROR == Win32Err)
{
if (eArgNull == eOp)
{
eOp = eCompNameMakePri;
}
else
{
eBadOp = eCompNameMakePri;
}
}
}
if (CmdFlagOn(rgNetDomArgs, eCompNameEnum))
{
Win32Err = NetDompGetArgumentString(rgNetDomArgs,
eCompNameEnum,
&pwzOp);
if (NO_ERROR == Win32Err)
{
if (eArgNull == eOp)
{
eOp = eCompNameEnum;
}
else
{
eBadOp = eCompNameEnum;
}
}
}
if (eArgNull != eBadOp)
{
ASSERT(rgNetDomArgs[eBadOp].strArg1);
NetDompDisplayUnexpectedParameter(rgNetDomArgs[eBadOp].strArg1);
DisplayHelp(ePriCompName);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
if (eArgNull == eOp)
{
DisplayHelp(ePriCompName);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
if (CmdFlagOn(rgNetDomArgs, eCommUserNameO))
{
LOG_VERBOSE((MSG_VERBOSE_ESTABLISH_SESSION, pwzMachine));
Win32Err = NetpManageIPCConnect(pwzMachine,
MachineUser.User,
MachineUser.Password,
NETSETUPP_CONNECT_IPC);
}
if (NO_ERROR != Win32Err)
{
goto CompNameExit;
}
//
// Do the operation.
//
switch (eOp)
{
case eCommAdd:
if (!rgNetDomArgs[eCommAdd].strValue ||
!wcslen(rgNetDomArgs[eCommAdd].strValue))
{
DisplayHelp(ePriCompName);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
Win32Err = NetAddAlternateComputerName(pwzMachine,
rgNetDomArgs[eCommAdd].strValue,
DomainUser.User,
DomainUser.Password,
0);
if (NO_ERROR == Win32Err)
{
NetDompDisplayMessage(MSG_COMPNAME_ADD, rgNetDomArgs[eCommAdd].strValue);
}
else
{
NetDompDisplayMessage(MSG_COMPNAME_ADD_FAIL, rgNetDomArgs[eCommAdd].strValue);
NetDompDisplayErrorMessage(Win32Err);
}
break;
case eCommRemove:
if (!rgNetDomArgs[eCommRemove].strValue ||
!wcslen(rgNetDomArgs[eCommRemove].strValue))
{
DisplayHelp(ePriCompName);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
Win32Err = NetRemoveAlternateComputerName(pwzMachine,
rgNetDomArgs[eCommRemove].strValue,
DomainUser.User,
DomainUser.Password,
0);
if (NO_ERROR == Win32Err)
{
NetDompDisplayMessage(MSG_COMPNAME_REM, rgNetDomArgs[eCommRemove].strValue);
}
else
{
NetDompDisplayMessage(MSG_COMPNAME_REM_FAIL, rgNetDomArgs[eCommRemove].strValue);
NetDompDisplayErrorMessage(Win32Err);
}
break;
case eCompNameMakePri:
if (!rgNetDomArgs[eCompNameMakePri].strValue ||
!wcslen(rgNetDomArgs[eCompNameMakePri].strValue))
{
DisplayHelp(ePriCompName);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
Win32Err = NetSetPrimaryComputerName(pwzMachine,
rgNetDomArgs[eCompNameMakePri].strValue,
DomainUser.User,
DomainUser.Password,
0);
if (NO_ERROR == Win32Err)
{
NetDompDisplayMessage(MSG_COMPNAME_MAKEPRI, rgNetDomArgs[eCompNameMakePri].strValue);
}
else
{
NetDompDisplayMessage(MSG_COMPNAME_MAKEPRI_FAIL, rgNetDomArgs[eCompNameMakePri].strValue);
NetDompDisplayErrorMessage(Win32Err);
}
break;
case eCompNameEnum:
{
NET_COMPUTER_NAME_TYPE NameType = NetAllComputerNames;
WCHAR wzBuf[MAX_PATH+1];
DWORD dwMsgID = MSG_COMPNAME_ENUMALL;
if (rgNetDomArgs[eCompNameEnum].strValue &&
wcslen(rgNetDomArgs[eCompNameEnum].strValue))
{
if (!LoadString(g_hInstance, IDS_ENUM_ALT, wzBuf, MAX_PATH))
{
Win32Err = GetLastError();
goto CompNameExit;
}
if (_wcsicmp(wzBuf, rgNetDomArgs[eCompNameEnum].strValue) == 0)
{
NameType = NetAlternateComputerNames;
dwMsgID = MSG_COMPNAME_ENUMALT;
}
else
{
if (!LoadString(g_hInstance, IDS_ENUM_PRI, wzBuf, MAX_PATH))
{
Win32Err = GetLastError();
goto CompNameExit;
}
if (_wcsicmp(wzBuf, rgNetDomArgs[eCompNameEnum].strValue) == 0)
{
NameType = NetPrimaryComputerName;
dwMsgID = MSG_COMPNAME_ENUMPRI;
}
else
{
if (!LoadString(g_hInstance, IDS_ENUM_ALL, wzBuf, MAX_PATH))
{
Win32Err = GetLastError();
goto CompNameExit;
}
if (_wcsicmp(wzBuf, rgNetDomArgs[eCompNameEnum].strValue) == 0)
{
NameType = NetAllComputerNames;
dwMsgID = MSG_COMPNAME_ENUMALL;
}
else
{
NetDompDisplayUnexpectedParameter(rgNetDomArgs[eCompNameEnum].strValue);
DisplayHelp(ePriCompName);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
}
}
}
DWORD dwCount = 0;
PWSTR * rgpwzNames = NULL;
DBG_VERBOSE(("NetEnumerateComputerNames(%ws, %d, 0, etc)\n", pwzMachine, NameType));
Win32Err = NetEnumerateComputerNames(pwzMachine,
NameType,
0,
&dwCount,
&rgpwzNames);
if (NO_ERROR != Win32Err)
{
NetDompDisplayErrorMessage(Win32Err);
goto CompNameExit;
}
NetDompDisplayMessage(dwMsgID);
for (DWORD i = 0; i < dwCount; i++)
{
ASSERT(rgpwzNames[i]);
printf("%ws\n", rgpwzNames[i]);
}
if (rgpwzNames)
{
NetApiBufferFree(rgpwzNames);
}
}
break;
default:
ASSERT(FALSE);
Win32Err = ERROR_INVALID_PARAMETER;
goto CompNameExit;
}
CompNameExit:
if (CmdFlagOn(rgNetDomArgs, eCommUserNameO))
{
LOG_VERBOSE((MSG_VERBOSE_DELETE_SESSION, pwzMachine));
NetpManageIPCConnect(pwzMachine,
MachineUser.User,
MachineUser.Password,
NETSETUPP_DISCONNECT_IPC);
}
NetDompFreeAuthIdent(&MachineUser);
NetDompFreeAuthIdent(&DomainUser);
return Win32Err;
}