Author: ekohl Date: Wed May 28 08:06:10 2014 New Revision: 63490
URL: http://svn.reactos.org/svn/reactos?rev=63490&view=rev Log: [NET] Implement NET ACCOUNTS command.
Added: trunk/reactos/base/applications/network/net/cmdAccounts.c (with props) Modified: trunk/reactos/base/applications/network/net/CMakeLists.txt 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] Wed May 28 08:06:10 2014 @@ -3,6 +3,7 @@
list(APPEND SOURCE main.c + cmdAccounts.c cmdStart.c cmdStop.c cmdHelpMsg.c @@ -13,6 +14,6 @@
add_executable(net ${SOURCE}) set_module_type(net win32cui UNICODE) -add_importlibs(net advapi32 msvcrt kernel32) +add_importlibs(net advapi32 netapi32 msvcrt kernel32 ntdll) add_pch(net net.h SOURCE) add_cd_file(TARGET net DESTINATION reactos/system32 FOR all)
Added: 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 (added) +++ trunk/reactos/base/applications/network/net/cmdAccounts.c [iso-8859-1] Wed May 28 08:06:10 2014 @@ -0,0 +1,192 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS net command + * FILE: + * PURPOSE: + * + * PROGRAMMERS: Eric Kohl + */ + +#include "net.h" + +INT +cmdAccounts( + INT argc, + WCHAR **argv) +{ + PUSER_MODALS_INFO_0 Info0 = NULL; + PUSER_MODALS_INFO_1 Info1 = NULL; + PUSER_MODALS_INFO_3 Info3 = NULL; + NT_PRODUCT_TYPE ProductType; + LPWSTR p, perr; + DWORD ParamErr; + ULONG value; + INT i; + BOOL Modified = FALSE; +// BOOL Domain = FALSE; + NET_API_STATUS Status; + + for (i = 3; i < argc; i++) + { + if (wcsicmp(argv[i], L"help") == 0) + { + /* Print short syntax help */ + puts("NET ACCOUNTS [/FORCELOGOFF:{Minutes|NO}] [/MINPWLEN:Length]"); + puts(" [/MAXPWAGE:{Days|UNLIMITED}] [/MINPWAGE:Days]"); + puts(" [/UNIQUEPW:Count] [/DOMAIN]"); + return 0; + } + + if (wcsicmp(argv[i], L"/help") == 0) + { + /* FIXME: Print long help text*/ + return 0; + } + +/* + if (wcsicmp(argv[i], L"/domain") == 0) + { + Domain = TRUE; + } +*/ + } + + Status = NetUserModalsGet(NULL, 0, (LPBYTE*)&Info0); + if (Status != NERR_Success) + goto done; + + for (i = 3; i < argc; i++) + { + if (_wcsnicmp(argv[i], L"/forcelogoff:", 13) == 0) + { + p = &argv[i][13]; + if (wcsicmp(p, L"no")) + { + Info0->usrmod0_force_logoff = TIMEQ_FOREVER; + Modified = TRUE; + } + else + { + value = wcstoul(p, &perr, 10); + + Info0->usrmod0_force_logoff = value * 60; + Modified = TRUE; + } + } + else if (_wcsnicmp(argv[i], L"/minpwlen:", 10) == 0) + { + p = &argv[i][10]; + value = wcstoul(p, &perr, 10); + Info0->usrmod0_min_passwd_len = value; + Modified = TRUE; + } + else if (_wcsnicmp(argv[i], L"/maxpwage:", 10) == 0) + { + p = &argv[i][10]; + + if (wcsicmp(p, L"unlimited")) + { + Info0->usrmod0_max_passwd_age = ULONG_MAX; + Modified = TRUE; + } + else + { + value = wcstoul(p, &perr, 10); + + Info0->usrmod0_max_passwd_age = value * 86400; + Modified = TRUE; + } + } + else if (_wcsnicmp(argv[i], L"/minpwage:", 10) == 0) + { + p = &argv[i][10]; + value = wcstoul(p, &perr, 10); + + Info0->usrmod0_min_passwd_age = value * 86400; + Modified = TRUE; + } + else if (_wcsnicmp(argv[i], L"/uniquepw:", 10) == 0) + { + p = &argv[i][10]; + value = wcstoul(p, &perr, 10); + + Info0->usrmod0_password_hist_len = value; + Modified = TRUE; + } + } + + if (Modified == TRUE) + { + Status = NetUserModalsSet(NULL, 0, (LPBYTE)Info0, &ParamErr); + if (Status != NERR_Success) + goto done; + } + else + { + Status = NetUserModalsGet(NULL, 1, (LPBYTE*)&Info1); + if (Status != NERR_Success) + goto done; + + Status = NetUserModalsGet(NULL, 3, (LPBYTE*)&Info3); + if (Status != NERR_Success) + goto done; + + RtlGetNtProductType(&ProductType); + + printf("Force logoff after: "); + if (Info0->usrmod0_force_logoff == TIMEQ_FOREVER) + printf("Never\n"); + else + printf("%lu seconds\n", Info0->usrmod0_force_logoff); + + printf("Minimum password age (in days): %lu\n", Info0->usrmod0_min_passwd_age / 86400); + printf("Maximum password age (in days): %lu\n", Info0->usrmod0_max_passwd_age / 86400); + printf("Minimum password length: %lu\n", Info0->usrmod0_min_passwd_len); + + printf("Password history length: "); + if (Info0->usrmod0_password_hist_len == 0) + printf("None\n"); + else + printf("%lu\n", Info0->usrmod0_password_hist_len); + + printf("Lockout threshold: %lu\n", Info3->usrmod3_lockout_threshold); + printf("Lockout duration (in minutes): %lu\n", Info3->usrmod3_lockout_duration / 60); + printf("Lockout observation window (in minutes): %lu\n", Info3->usrmod3_lockout_observation_window / 60); + + printf("Computer role: "); + + if (Info1->usrmod1_role == UAS_ROLE_PRIMARY) + { + if (ProductType == NtProductLanManNt) + { + printf("Primary server\n"); + } + else if (ProductType == NtProductServer) + { + printf("Standalone server\n"); + } + else + { + printf("Workstation\n"); + } + } + else + { + printf("Backup server\n"); + } + } + +done: + if (Info3 != NULL) + NetApiBufferFree(Info3); + + if (Info1 != NULL) + NetApiBufferFree(Info1); + + if (Info0 != NULL) + NetApiBufferFree(Info0); + + return 0; +} + +/* EOF */
Propchange: trunk/reactos/base/applications/network/net/cmdAccounts.c ------------------------------------------------------------------------------ svn:eol-style = native
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] Wed May 28 08:06:10 2014 @@ -18,7 +18,7 @@
COMMAND cmds[] = { - {L"accounts", unimplemented}, + {L"accounts", cmdAccounts}, {L"computer", unimplemented}, {L"config", unimplemented}, {L"continue", cmdContinue},
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] Wed May 28 08:06:10 2014 @@ -7,16 +7,23 @@ #ifndef _NET_PCH_ #define _NET_PCH_
+#define WIN32_NO_STATUS + #include <stdarg.h>
#include <windef.h> #include <winbase.h> #include <winsvc.h> #include <stdio.h> +#include <stdlib.h> +#include <limits.h> +#include <lm.h> +#include <ndk/rtlfuncs.h>
VOID help(VOID); INT unimplemented(INT argc, WCHAR **argv);
+INT cmdAccounts(INT argc, WCHAR **argv); INT cmdContinue(INT argc, WCHAR **argv); INT cmdHelp(INT argc, WCHAR **argv); INT cmdHelpMsg(INT argc, WCHAR **argv);