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/n... ============================================================================== --- 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/n... ============================================================================== --- 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/n... ============================================================================== --- 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/n... ============================================================================== --- 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/n... ============================================================================== --- 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/n... ============================================================================== --- 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/n... ============================================================================== --- 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/n... ============================================================================== --- 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);