mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 06:43:01 +00:00
[NET]
- Add the localgroup command. It does not work properly on ReactOS yet. - Print a warning when the domain option of the accounts command is used. svn path=/trunk/; revision=64834
This commit is contained in:
parent
a0149739ce
commit
7cd22fe762
8 changed files with 303 additions and 10 deletions
|
@ -4,11 +4,12 @@ add_definitions(-D__USE_W32_SOCKETS)
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
main.c
|
main.c
|
||||||
cmdAccounts.c
|
cmdAccounts.c
|
||||||
|
cmdContinue.c
|
||||||
|
cmdHelpMsg.c
|
||||||
|
cmdLocalGroup.c
|
||||||
|
cmdPause.c
|
||||||
cmdStart.c
|
cmdStart.c
|
||||||
cmdStop.c
|
cmdStop.c
|
||||||
cmdHelpMsg.c
|
|
||||||
cmdPause.c
|
|
||||||
cmdContinue.c
|
|
||||||
help.c
|
help.c
|
||||||
net.h)
|
net.h)
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,9 @@ cmdAccounts(
|
||||||
ULONG value;
|
ULONG value;
|
||||||
INT i;
|
INT i;
|
||||||
BOOL Modified = FALSE;
|
BOOL Modified = FALSE;
|
||||||
// BOOL Domain = FALSE;
|
#if 0
|
||||||
|
BOOL Domain = FALSE;
|
||||||
|
#endif
|
||||||
NET_API_STATUS Status;
|
NET_API_STATUS Status;
|
||||||
INT result = 0;
|
INT result = 0;
|
||||||
|
|
||||||
|
@ -44,12 +46,13 @@ cmdAccounts(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
if (_wcsicmp(argv[i], L"/domain") == 0)
|
if (_wcsicmp(argv[i], L"/domain") == 0)
|
||||||
{
|
{
|
||||||
|
printf("The /DOMAIN option is not supported yet!\n");
|
||||||
|
#if 0
|
||||||
Domain = TRUE;
|
Domain = TRUE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = NetUserModalsGet(NULL, 0, (LPBYTE*)&Info0);
|
Status = NetUserModalsGet(NULL, 0, (LPBYTE*)&Info0);
|
||||||
|
|
282
reactos/base/applications/network/net/cmdLocalGroup.c
Normal file
282
reactos/base/applications/network/net/cmdLocalGroup.c
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS net command
|
||||||
|
* FILE:
|
||||||
|
* PURPOSE:
|
||||||
|
*
|
||||||
|
* PROGRAMMERS: Eric Kohl
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "net.h"
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
int
|
||||||
|
CompareInfo(const void *a,
|
||||||
|
const void *b)
|
||||||
|
{
|
||||||
|
return _wcsicmp(((PLOCALGROUP_INFO_0)a)->lgrpi0_name,
|
||||||
|
((PLOCALGROUP_INFO_0)b)->lgrpi0_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
NET_API_STATUS
|
||||||
|
EnumerateLocalGroups(VOID)
|
||||||
|
{
|
||||||
|
PLOCALGROUP_INFO_0 pBuffer = NULL;
|
||||||
|
PSERVER_INFO_100 pServer = NULL;
|
||||||
|
DWORD dwRead = 0, dwTotal = 0;
|
||||||
|
DWORD i;
|
||||||
|
DWORD_PTR ResumeHandle = 0;
|
||||||
|
NET_API_STATUS Status;
|
||||||
|
|
||||||
|
|
||||||
|
Status = NetServerGetInfo(NULL,
|
||||||
|
100,
|
||||||
|
(LPBYTE*)&pServer);
|
||||||
|
if (Status != NERR_Success)
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
printf("\nAliases for \\\\%S\n\n", pServer->sv100_name);
|
||||||
|
printf("------------------------------------------\n");
|
||||||
|
|
||||||
|
NetApiBufferFree(pServer);
|
||||||
|
|
||||||
|
Status = NetLocalGroupEnum(NULL,
|
||||||
|
0,
|
||||||
|
(LPBYTE*)&pBuffer,
|
||||||
|
MAX_PREFERRED_LENGTH,
|
||||||
|
&dwRead,
|
||||||
|
&dwTotal,
|
||||||
|
&ResumeHandle);
|
||||||
|
if (Status != NERR_Success)
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
qsort(pBuffer,
|
||||||
|
dwRead,
|
||||||
|
sizeof(PLOCALGROUP_INFO_0),
|
||||||
|
CompareInfo);
|
||||||
|
|
||||||
|
// printf("dwRead: %lu dwTotal: %lu\n", dwRead, dwTotal);
|
||||||
|
for (i = 0; i < dwRead; i++)
|
||||||
|
{
|
||||||
|
// printf("%p\n", pBuffer[i].lgrpi0_name);
|
||||||
|
if (pBuffer[i].lgrpi0_name)
|
||||||
|
printf("*%S\n", pBuffer[i].lgrpi0_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
NetApiBufferFree(pBuffer);
|
||||||
|
|
||||||
|
return NERR_Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT
|
||||||
|
cmdLocalGroup(
|
||||||
|
INT argc,
|
||||||
|
WCHAR **argv)
|
||||||
|
{
|
||||||
|
INT i, j;
|
||||||
|
INT result = 0;
|
||||||
|
ULONG dwMemberCount = 0;
|
||||||
|
BOOL bAdd = FALSE;
|
||||||
|
BOOL bDelete = FALSE;
|
||||||
|
#if 0
|
||||||
|
BOOL bDomain = FALSE;
|
||||||
|
#endif
|
||||||
|
LPWSTR lpGroupName = NULL;
|
||||||
|
LPWSTR lpComment = NULL;
|
||||||
|
LPLOCALGROUP_MEMBERS_INFO_3 lpMembers = NULL;
|
||||||
|
LOCALGROUP_INFO_0 Info0;
|
||||||
|
LOCALGROUP_INFO_1 Info1;
|
||||||
|
LOCALGROUP_INFO_1002 Info1002;
|
||||||
|
NET_API_STATUS Status;
|
||||||
|
|
||||||
|
if (argc == 2)
|
||||||
|
{
|
||||||
|
Status = EnumerateLocalGroups();
|
||||||
|
printf("Status: %lu\n", Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 2;
|
||||||
|
if (argv[i][0] != L'/')
|
||||||
|
{
|
||||||
|
lpGroupName = argv[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = i; j < argc; j++)
|
||||||
|
{
|
||||||
|
if (argv[j][0] == L'/')
|
||||||
|
break;
|
||||||
|
|
||||||
|
dwMemberCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Member count: %lu\n", dwMemberCount);
|
||||||
|
|
||||||
|
if (dwMemberCount > 0)
|
||||||
|
{
|
||||||
|
lpMembers = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
dwMemberCount * sizeof(LPLOCALGROUP_MEMBERS_INFO_3));
|
||||||
|
if (lpMembers == NULL)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
for (; i < argc; i++)
|
||||||
|
{
|
||||||
|
if (argv[i][0] == L'/')
|
||||||
|
break;
|
||||||
|
|
||||||
|
lpMembers[j].lgrmi3_domainandname = argv[i];
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < argc; i++)
|
||||||
|
{
|
||||||
|
if (_wcsicmp(argv[i], L"/help") == 0)
|
||||||
|
{
|
||||||
|
PrintResourceString(IDS_LOCALGROUP_HELP);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(argv[i], L"/add") == 0)
|
||||||
|
{
|
||||||
|
bAdd = TRUE;
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(argv[i], L"/delete") == 0)
|
||||||
|
{
|
||||||
|
bDelete = TRUE;
|
||||||
|
}
|
||||||
|
else if (_wcsnicmp(argv[i], L"/comment:", 9) == 0)
|
||||||
|
{
|
||||||
|
lpComment = &argv[i][9];
|
||||||
|
}
|
||||||
|
else if (_wcsicmp(argv[i], L"/domain") == 0)
|
||||||
|
{
|
||||||
|
printf("The /DOMAIN option is not supported yet!\n");
|
||||||
|
#if 0
|
||||||
|
bDomain = TRUE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lpGroupName == NULL)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bAdd && bDelete)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
printf("Group:\n %S\n", lpGroupName);
|
||||||
|
|
||||||
|
if (lpMembers != NULL)
|
||||||
|
{
|
||||||
|
printf("\nMembers:\n");
|
||||||
|
for (i = 0; i < dwMemberCount; i++)
|
||||||
|
printf(" %S\n", lpMembers[i].lgrmi3_domainandname);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lpComment != NULL)
|
||||||
|
{
|
||||||
|
printf("\nComment:\n %S\n", lpComment);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (lpMembers == NULL)
|
||||||
|
{
|
||||||
|
if (!bAdd && !bDelete && lpComment != NULL)
|
||||||
|
{
|
||||||
|
/* Set group comment */
|
||||||
|
Info1002.lgrpi1002_comment = lpComment;
|
||||||
|
Status = NetLocalGroupSetInfo(NULL,
|
||||||
|
lpGroupName,
|
||||||
|
1002,
|
||||||
|
(LPBYTE)&Info1002,
|
||||||
|
NULL);
|
||||||
|
printf("Status: %lu\n", Status);
|
||||||
|
}
|
||||||
|
else if (bAdd && !bDelete)
|
||||||
|
{
|
||||||
|
/* Add the group */
|
||||||
|
if (lpComment == NULL)
|
||||||
|
{
|
||||||
|
Info0.lgrpi0_name = lpGroupName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Info1.lgrpi1_name = lpGroupName;
|
||||||
|
Info1.lgrpi1_comment = lpComment;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = NetLocalGroupAdd(NULL,
|
||||||
|
(lpComment == NULL) ? 0 : 1,
|
||||||
|
(lpComment == NULL) ? (LPBYTE)&Info0 : (LPBYTE)&Info1,
|
||||||
|
NULL);
|
||||||
|
printf("Status: %lu\n", Status);
|
||||||
|
}
|
||||||
|
else if (!bAdd && bDelete && lpComment == NULL)
|
||||||
|
{
|
||||||
|
/* Delete the group */
|
||||||
|
Status = NetLocalGroupDel(NULL,
|
||||||
|
lpGroupName);
|
||||||
|
printf("Status: %lu\n", Status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (bAdd && !bDelete && lpComment == NULL)
|
||||||
|
{
|
||||||
|
/* Add group members */
|
||||||
|
Status = NetLocalGroupAddMembers(NULL,
|
||||||
|
lpGroupName,
|
||||||
|
3,
|
||||||
|
(LPBYTE)lpMembers,
|
||||||
|
dwMemberCount);
|
||||||
|
printf("Status: %lu\n", Status);
|
||||||
|
}
|
||||||
|
else if (!bAdd && bDelete && lpComment == NULL)
|
||||||
|
{
|
||||||
|
/* Delete group members */
|
||||||
|
Status = NetLocalGroupDelMembers(NULL,
|
||||||
|
lpGroupName,
|
||||||
|
3,
|
||||||
|
(LPBYTE)lpMembers,
|
||||||
|
dwMemberCount);
|
||||||
|
printf("Status: %lu\n", Status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (lpMembers != NULL)
|
||||||
|
RtlFreeHeap(RtlGetProcessHeap(), 0, lpMembers);
|
||||||
|
|
||||||
|
if (result != 0)
|
||||||
|
PrintResourceString(IDS_LOCALGROUP_SYNTAX);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
|
@ -18,7 +18,9 @@ BEGIN
|
||||||
IDS_GROUP_HELP "GROUP\n..."
|
IDS_GROUP_HELP "GROUP\n..."
|
||||||
IDS_HELPMSG_SYNTAX "Usage:\nNET HELPMSG <Error Code>"
|
IDS_HELPMSG_SYNTAX "Usage:\nNET HELPMSG <Error Code>"
|
||||||
IDS_HELPMSG_HELP "HELPMSG\n..."
|
IDS_HELPMSG_HELP "HELPMSG\n..."
|
||||||
IDS_LOCALGROUP_SYNTAX "Usage:\nNET LOCALGROUP ..."
|
IDS_LOCALGROUP_SYNTAX "Usage:\nNET LOCALGROUP [groupname [/COMMENT:""text""]] [/DOMAIN]\n\
|
||||||
|
groupname {/ADD [/COMMENT:""text""] | /DELETE} [/DOMAIN]\n\
|
||||||
|
groupname name [...] {/ADD | /DELETE} [/DOMAIN]"
|
||||||
IDS_LOCALGROUP_HELP "LOCALGROUP\n..."
|
IDS_LOCALGROUP_HELP "LOCALGROUP\n..."
|
||||||
IDS_NAME_SYNTAX "Usage:\nNET NAME ..."
|
IDS_NAME_SYNTAX "Usage:\nNET NAME ..."
|
||||||
IDS_NAME_HELP "NAME\n..."
|
IDS_NAME_HELP "NAME\n..."
|
||||||
|
|
|
@ -24,7 +24,9 @@ BEGIN
|
||||||
IDS_GROUP_HELP "GROUP\n..."
|
IDS_GROUP_HELP "GROUP\n..."
|
||||||
IDS_HELPMSG_SYNTAX "Utilizare:\nNET HELPMSG <Error Code>"
|
IDS_HELPMSG_SYNTAX "Utilizare:\nNET HELPMSG <Error Code>"
|
||||||
IDS_HELPMSG_HELP "HELPMSG\n..."
|
IDS_HELPMSG_HELP "HELPMSG\n..."
|
||||||
IDS_LOCALGROUP_SYNTAX "Utilizare:\nNET LOCALGROUP ..."
|
IDS_LOCALGROUP_SYNTAX "Utilizare:\nNET LOCALGROUP [groupname [/COMMENT:""text""]] [/DOMAIN]\n\
|
||||||
|
groupname {/ADD [/COMMENT:""text""] | /DELETE} [/DOMAIN]\n\
|
||||||
|
groupname name [...] {/ADD | /DELETE} [/DOMAIN]"
|
||||||
IDS_LOCALGROUP_HELP "LOCALGROUP\n..."
|
IDS_LOCALGROUP_HELP "LOCALGROUP\n..."
|
||||||
IDS_NAME_SYNTAX "Utilizare:\nNET NAME ..."
|
IDS_NAME_SYNTAX "Utilizare:\nNET NAME ..."
|
||||||
IDS_NAME_HELP "NAME\n..."
|
IDS_NAME_HELP "NAME\n..."
|
||||||
|
|
|
@ -19,7 +19,9 @@ BEGIN
|
||||||
IDS_GROUP_HELP "GROUP\n..."
|
IDS_GROUP_HELP "GROUP\n..."
|
||||||
IDS_HELPMSG_SYNTAX "Использование:\nNET HELPMSG <Код ошибки>"
|
IDS_HELPMSG_SYNTAX "Использование:\nNET HELPMSG <Код ошибки>"
|
||||||
IDS_HELPMSG_HELP "HELPMSG\n..."
|
IDS_HELPMSG_HELP "HELPMSG\n..."
|
||||||
IDS_LOCALGROUP_SYNTAX "Использование:\nNET LOCALGROUP ..."
|
IDS_LOCALGROUP_SYNTAX "Использование:\nNET LOCALGROUP [groupname [/COMMENT:""text""]] [/DOMAIN]\n\
|
||||||
|
groupname {/ADD [/COMMENT:""text""] | /DELETE} [/DOMAIN]\n\
|
||||||
|
groupname name [...] {/ADD | /DELETE} [/DOMAIN]"
|
||||||
IDS_LOCALGROUP_HELP "LOCALGROUP\n..."
|
IDS_LOCALGROUP_HELP "LOCALGROUP\n..."
|
||||||
IDS_NAME_SYNTAX "Использование:\nNET NAME ..."
|
IDS_NAME_SYNTAX "Использование:\nNET NAME ..."
|
||||||
IDS_NAME_HELP "NAME\n..."
|
IDS_NAME_HELP "NAME\n..."
|
||||||
|
|
|
@ -28,7 +28,7 @@ COMMAND cmds[] =
|
||||||
{L"group", unimplemented},
|
{L"group", unimplemented},
|
||||||
{L"help", cmdHelp},
|
{L"help", cmdHelp},
|
||||||
{L"helpmsg", cmdHelpMsg},
|
{L"helpmsg", cmdHelpMsg},
|
||||||
{L"localgroup", unimplemented},
|
{L"localgroup", cmdLocalGroup},
|
||||||
{L"name", unimplemented},
|
{L"name", unimplemented},
|
||||||
{L"pause", cmdPause},
|
{L"pause", cmdPause},
|
||||||
{L"print", unimplemented},
|
{L"print", unimplemented},
|
||||||
|
|
|
@ -35,6 +35,7 @@ INT cmdAccounts(INT argc, WCHAR **argv);
|
||||||
INT cmdContinue(INT argc, WCHAR **argv);
|
INT cmdContinue(INT argc, WCHAR **argv);
|
||||||
INT cmdHelp(INT argc, WCHAR **argv);
|
INT cmdHelp(INT argc, WCHAR **argv);
|
||||||
INT cmdHelpMsg(INT argc, WCHAR **argv);
|
INT cmdHelpMsg(INT argc, WCHAR **argv);
|
||||||
|
INT cmdLocalGroup(INT argc, WCHAR **argv);
|
||||||
INT cmdPause(INT argc, WCHAR **argv);
|
INT cmdPause(INT argc, WCHAR **argv);
|
||||||
INT cmdStart(INT argc, WCHAR **argv);
|
INT cmdStart(INT argc, WCHAR **argv);
|
||||||
INT cmdStop(INT argc, WCHAR **argv);
|
INT cmdStop(INT argc, WCHAR **argv);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue