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