1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS net command 4 * FILE: base/applications/network/net/cmdComputer.c 5 * PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org> 6 */ 7 8 #include "net.h" 9 10 INT 11 cmdComputer( 12 INT argc, 13 WCHAR **argv) 14 { 15 WCHAR ComputerAccountName[MAX_PATH + 2]; 16 WCHAR ComputerPassword[LM20_PWLEN + 1]; 17 USER_INFO_1 UserInfo; 18 INT i, result = 0; 19 BOOL bAdd = FALSE; 20 BOOL bDelete = FALSE; 21 PWSTR pComputerName = NULL; 22 NET_API_STATUS Status = NERR_Success; 23 /* 24 OSVERSIONINFOEX VersionInfo; 25 26 VersionInfo.dwOSVersionInfoSize = sizeof(VersionInfo); 27 if (!GetVersionEx((LPOSVERSIONINFO)&VersionInfo)) 28 { 29 PrintErrorMessage(GetLastError()); 30 return 1; 31 } 32 33 if (VersionInfo.wProductType != VER_NT_DOMAIN_CONTROLLER) 34 { 35 PrintErrorMessage(3515); 36 return 1; 37 } 38 */ 39 40 i = 2; 41 if (argc > 2 && argv[i][0] == L'\\' && argv[i][1] == L'\\') 42 { 43 pComputerName = argv[i]; 44 i++; 45 } 46 47 for (; i < argc; i++) 48 { 49 if (_wcsicmp(argv[i], L"help") == 0) 50 { 51 /* Print short syntax help */ 52 PrintMessageString(4381); 53 ConPuts(StdOut, L"\n"); 54 PrintNetMessage(MSG_COMPUTER_SYNTAX); 55 return 0; 56 } 57 58 if (_wcsicmp(argv[i], L"/help") == 0) 59 { 60 /* Print full help text*/ 61 PrintMessageString(4381); 62 ConPuts(StdOut, L"\n"); 63 PrintNetMessage(MSG_COMPUTER_SYNTAX); 64 PrintNetMessage(MSG_COMPUTER_HELP); 65 return 0; 66 } 67 68 if (_wcsicmp(argv[i], L"/add") == 0) 69 { 70 bAdd = TRUE; 71 continue; 72 } 73 else if (_wcsicmp(argv[i], L"/del") == 0) 74 { 75 bDelete = TRUE; 76 continue; 77 } 78 else 79 { 80 PrintErrorMessage(3506/*, argv[i]*/); 81 return 1; 82 } 83 } 84 85 if (pComputerName == NULL || 86 (bAdd == FALSE && bDelete == FALSE) || 87 (bAdd == TRUE && bDelete == TRUE)) 88 { 89 PrintMessageString(4381); 90 ConPuts(StdOut, L"\n"); 91 PrintNetMessage(MSG_COMPUTER_SYNTAX); 92 return 1; 93 } 94 95 /* 96 * Create the computer account name: 97 * Skip the leading '\\' and appand a '$'. 98 */ 99 wcscpy(ComputerAccountName, &pComputerName[2]); 100 wcscat(ComputerAccountName, L"$"); 101 102 if (bAdd) 103 { 104 /* 105 * Create the computer password: 106 * Skip the leading '\\', shorten to a maximum of 14 characters 107 * and convert to lower case 108 */ 109 wcsncpy(ComputerPassword, &pComputerName[2], LM20_PWLEN); 110 ComputerPassword[LM20_PWLEN] = UNICODE_NULL; 111 _wcslwr(ComputerPassword); 112 113 /* Set the account data */ 114 UserInfo.usri1_name = ComputerAccountName; 115 UserInfo.usri1_password = ComputerPassword; 116 UserInfo.usri1_password_age = 0; 117 UserInfo.usri1_priv = USER_PRIV_USER; 118 UserInfo.usri1_home_dir = NULL; 119 UserInfo.usri1_comment = NULL; 120 UserInfo.usri1_flags = UF_SCRIPT | UF_WORKSTATION_TRUST_ACCOUNT; 121 UserInfo.usri1_script_path = NULL; 122 123 /* Add the computer account */ 124 Status = NetUserAdd(NULL, 125 1, 126 (LPBYTE)&UserInfo, 127 NULL); 128 } 129 else if (bDelete) 130 { 131 /* Delete the coputer account */ 132 Status = NetUserDel(NULL, 133 ComputerAccountName); 134 } 135 136 if (Status == NERR_Success) 137 { 138 PrintErrorMessage(ERROR_SUCCESS); 139 } 140 else 141 { 142 PrintErrorMessage(Status); 143 result = 1; 144 } 145 146 return result; 147 } 148 149 /* EOF */ 150