mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +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
|
||||
main.c
|
||||
cmdAccounts.c
|
||||
cmdContinue.c
|
||||
cmdHelpMsg.c
|
||||
cmdLocalGroup.c
|
||||
cmdPause.c
|
||||
cmdStart.c
|
||||
cmdStop.c
|
||||
cmdHelpMsg.c
|
||||
cmdPause.c
|
||||
cmdContinue.c
|
||||
help.c
|
||||
net.h)
|
||||
|
||||
|
|
|
@ -24,7 +24,9 @@ cmdAccounts(
|
|||
ULONG value;
|
||||
INT i;
|
||||
BOOL Modified = FALSE;
|
||||
// BOOL Domain = FALSE;
|
||||
#if 0
|
||||
BOOL Domain = FALSE;
|
||||
#endif
|
||||
NET_API_STATUS Status;
|
||||
INT result = 0;
|
||||
|
||||
|
@ -44,12 +46,13 @@ cmdAccounts(
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
if (_wcsicmp(argv[i], L"/domain") == 0)
|
||||
{
|
||||
printf("The /DOMAIN option is not supported yet!\n");
|
||||
#if 0
|
||||
Domain = TRUE;
|
||||
#endif
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
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_HELPMSG_SYNTAX "Usage:\nNET HELPMSG <Error Code>"
|
||||
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_NAME_SYNTAX "Usage:\nNET NAME ..."
|
||||
IDS_NAME_HELP "NAME\n..."
|
||||
|
|
|
@ -24,7 +24,9 @@ BEGIN
|
|||
IDS_GROUP_HELP "GROUP\n..."
|
||||
IDS_HELPMSG_SYNTAX "Utilizare:\nNET HELPMSG <Error Code>"
|
||||
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_NAME_SYNTAX "Utilizare:\nNET NAME ..."
|
||||
IDS_NAME_HELP "NAME\n..."
|
||||
|
|
|
@ -19,7 +19,9 @@ BEGIN
|
|||
IDS_GROUP_HELP "GROUP\n..."
|
||||
IDS_HELPMSG_SYNTAX "Использование:\nNET HELPMSG <Код ошибки>"
|
||||
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_NAME_SYNTAX "Использование:\nNET NAME ..."
|
||||
IDS_NAME_HELP "NAME\n..."
|
||||
|
|
|
@ -28,7 +28,7 @@ COMMAND cmds[] =
|
|||
{L"group", unimplemented},
|
||||
{L"help", cmdHelp},
|
||||
{L"helpmsg", cmdHelpMsg},
|
||||
{L"localgroup", unimplemented},
|
||||
{L"localgroup", cmdLocalGroup},
|
||||
{L"name", unimplemented},
|
||||
{L"pause", cmdPause},
|
||||
{L"print", unimplemented},
|
||||
|
|
|
@ -35,6 +35,7 @@ INT cmdAccounts(INT argc, WCHAR **argv);
|
|||
INT cmdContinue(INT argc, WCHAR **argv);
|
||||
INT cmdHelp(INT argc, WCHAR **argv);
|
||||
INT cmdHelpMsg(INT argc, WCHAR **argv);
|
||||
INT cmdLocalGroup(INT argc, WCHAR **argv);
|
||||
INT cmdPause(INT argc, WCHAR **argv);
|
||||
INT cmdStart(INT argc, WCHAR **argv);
|
||||
INT cmdStop(INT argc, WCHAR **argv);
|
||||
|
|
Loading…
Reference in a new issue