Author: ekohl
Date: Sun Oct 19 20:12:19 2014
New Revision: 64834
URL:
http://svn.reactos.org/svn/reactos?rev=64834&view=rev
Log:
[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.
Added:
trunk/reactos/base/applications/network/net/cmdLocalGroup.c (with props)
Modified:
trunk/reactos/base/applications/network/net/CMakeLists.txt
trunk/reactos/base/applications/network/net/cmdAccounts.c
trunk/reactos/base/applications/network/net/lang/en-US.rc
trunk/reactos/base/applications/network/net/lang/ro-RO.rc
trunk/reactos/base/applications/network/net/lang/ru-RU.rc
trunk/reactos/base/applications/network/net/main.c
trunk/reactos/base/applications/network/net/net.h
Modified: trunk/reactos/base/applications/network/net/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/CMakeLists.txt [iso-8859-1] Sun Oct 19
20:12:19 2014
@@ -4,11 +4,12 @@
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)
Modified: trunk/reactos/base/applications/network/net/cmdAccounts.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/cmdAccounts.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/cmdAccounts.c [iso-8859-1] Sun Oct 19
20:12:19 2014
@@ -24,7 +24,9 @@
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 @@
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);
Added: trunk/reactos/base/applications/network/net/cmdLocalGroup.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/cmdLocalGroup.c (added)
+++ trunk/reactos/base/applications/network/net/cmdLocalGroup.c [iso-8859-1] Sun Oct 19
20:12:19 2014
@@ -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 */
Propchange: trunk/reactos/base/applications/network/net/cmdLocalGroup.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/base/applications/network/net/lang/en-US.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/lang/en-US.rc [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/lang/en-US.rc [iso-8859-1] Sun Oct 19
20:12:19 2014
@@ -18,7 +18,9 @@
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..."
Modified: trunk/reactos/base/applications/network/net/lang/ro-RO.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/lang/ro-RO.rc [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/lang/ro-RO.rc [iso-8859-1] Sun Oct 19
20:12:19 2014
@@ -24,7 +24,9 @@
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..."
Modified: trunk/reactos/base/applications/network/net/lang/ru-RU.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/lang/ru-RU.rc [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/lang/ru-RU.rc [iso-8859-1] Sun Oct 19
20:12:19 2014
@@ -19,7 +19,9 @@
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..."
Modified: trunk/reactos/base/applications/network/net/main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/main.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/main.c [iso-8859-1] Sun Oct 19 20:12:19
2014
@@ -28,7 +28,7 @@
{L"group", unimplemented},
{L"help", cmdHelp},
{L"helpmsg", cmdHelpMsg},
- {L"localgroup", unimplemented},
+ {L"localgroup", cmdLocalGroup},
{L"name", unimplemented},
{L"pause", cmdPause},
{L"print", unimplemented},
Modified: trunk/reactos/base/applications/network/net/net.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/network/…
==============================================================================
--- trunk/reactos/base/applications/network/net/net.h [iso-8859-1] (original)
+++ trunk/reactos/base/applications/network/net/net.h [iso-8859-1] Sun Oct 19 20:12:19
2014
@@ -35,6 +35,7 @@
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);