From c1e082a84a8400322d23d81d2115058cc869cbb5 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 25 Oct 2014 14:28:38 +0000 Subject: [PATCH] [NET] Display local group properties and members. svn path=/trunk/; revision=64983 --- .../applications/network/net/cmdLocalGroup.c | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/reactos/base/applications/network/net/cmdLocalGroup.c b/reactos/base/applications/network/net/cmdLocalGroup.c index 43400d1c3b0..1995c2650a1 100644 --- a/reactos/base/applications/network/net/cmdLocalGroup.c +++ b/reactos/base/applications/network/net/cmdLocalGroup.c @@ -72,6 +72,93 @@ EnumerateLocalGroups(VOID) } +static +NET_API_STATUS +DisplayLocalGroup(LPWSTR lpGroupName) +{ + PLOCALGROUP_INFO_1 pGroupInfo = NULL; + PLOCALGROUP_MEMBERS_INFO_3 pMembers = NULL; + PSERVER_INFO_100 pServer = NULL; + LPWSTR *pNames = NULL; + DWORD dwRead = 0; + DWORD dwTotal = 0; + DWORD_PTR ResumeHandle = 0; + DWORD i; + DWORD len; + NET_API_STATUS Status; + + Status = NetLocalGroupGetInfo(NULL, + lpGroupName, + 1, + (LPBYTE*)&pGroupInfo); + if (Status != NERR_Success) + return Status; + + Status = NetLocalGroupGetMembers(NULL, + lpGroupName, + 3, + (LPBYTE*)&pMembers, + MAX_PREFERRED_LENGTH, + &dwRead, + &dwTotal, + &ResumeHandle); + if (Status != NERR_Success) + goto done; + + Status = NetServerGetInfo(NULL, + 100, + (LPBYTE*)&pServer); + if (Status != NERR_Success) + goto done; + + pNames = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + dwRead * sizeof(LPWSTR)); + if (pNames == NULL) + { + Status = ERROR_OUTOFMEMORY; + goto done; + } + + len = wcslen(pServer->sv100_name); + for (i = 0; i < dwRead; i++) + { + if (!wcsncmp(pMembers[i].lgrmi3_domainandname, pServer->sv100_name, len)) + pNames[i] = &pMembers[i].lgrmi3_domainandname[len + 1]; + else + pNames[i] = pMembers[i].lgrmi3_domainandname; + } + + printf("Alias name %S\n", pGroupInfo->lgrpi1_name); + printf("Comment %S\n", pGroupInfo->lgrpi1_comment); + printf("\n"); + printf("Members\n"); + printf("\n"); + printf("------------------------------------------\n"); + + for (i = 0; i < dwRead; i++) + { + if (pNames[i]) + printf("%S\n", pNames[i]); + } + +done: + if (pNames != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, pNames); + + if (pServer != NULL) + NetApiBufferFree(pServer); + + if (pMembers != NULL) + NetApiBufferFree(pMembers); + + if (pGroupInfo != NULL) + NetApiBufferFree(pGroupInfo); + + return Status; +} + + INT cmdLocalGroup( INT argc, @@ -99,6 +186,12 @@ cmdLocalGroup( printf("Status: %lu\n", Status); return 0; } + else if (argc == 3) + { + Status = DisplayLocalGroup(argv[2]); + printf("Status: %lu\n", Status); + return 0; + } i = 2; if (argv[i][0] != L'/') -- 2.17.1