1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS net command 4 * FILE: base/applications/network/net/cmdConfig.c 5 * PROGRAMMERS: Eric Kohl <eric.kohl@reactos.org> 6 */ 7 8 #include "net.h" 9 10 static 11 INT 12 DisplayServerConfig( 13 PSERVER_INFO_102 ServerInfo) 14 { 15 PSERVER_TRANSPORT_INFO_0 TransportInfo = NULL; 16 DWORD dwRead, dwTotal, i; 17 INT nPaddedLength = 38; 18 NET_API_STATUS Status; 19 20 Status = NetServerTransportEnum(NULL, 0, (PBYTE*)&TransportInfo, 21 MAX_PREFERRED_LENGTH, 22 &dwRead, 23 &dwTotal, 24 NULL); 25 if (Status != NERR_Success) 26 goto done; 27 28 PrintPaddedResourceString(IDS_CONFIG_SERVER_NAME, nPaddedLength); 29 ConPrintf(StdOut, L"\\\\%s\n", ServerInfo->sv102_name); 30 31 PrintPaddedResourceString(IDS_CONFIG_SERVER_COMMENT, nPaddedLength); 32 ConPrintf(StdOut, L"%s\n\n", ServerInfo->sv102_comment); 33 34 PrintPaddedResourceString(IDS_CONFIG_SERVER_VERSION, nPaddedLength); 35 ConPrintf(StdOut, L"%lu.%lu\n", 36 ServerInfo->sv102_version_major, 37 ServerInfo->sv102_version_minor); 38 39 ConResPuts(StdOut, IDS_CONFIG_SERVER_ACTIVE); 40 ConPuts(StdOut, L"\n"); 41 for (i = 0; i < dwRead; i++) 42 { 43 ConPrintf(StdOut, L" %s (%s)\n", 44 &TransportInfo[i].svti0_transportname[8], 45 TransportInfo[i].svti0_networkaddress); 46 } 47 ConPuts(StdOut, L"\n"); 48 49 PrintPaddedResourceString(IDS_CONFIG_SERVER_HIDDEN, nPaddedLength); 50 ConResPuts(StdOut, (ServerInfo->sv102_hidden == SV_HIDDEN) ? IDS_GENERIC_YES : IDS_GENERIC_NO); 51 ConPuts(StdOut, L"\n"); 52 53 PrintPaddedResourceString(IDS_CONFIG_SERVER_USERS, nPaddedLength); 54 ConPrintf(StdOut, L"%lu\n", ServerInfo->sv102_users); 55 56 PrintPaddedResourceString(IDS_CONFIG_SERVER_FILES, nPaddedLength); 57 ConPuts(StdOut, L"...\n\n"); 58 59 PrintPaddedResourceString(IDS_CONFIG_SERVER_IDLE, nPaddedLength); 60 if (ServerInfo->sv102_disc == SV_NODISC) 61 ConResPuts(StdOut, IDS_GENERIC_UNLIMITED); 62 else 63 ConPrintf(StdOut, L"%lu\n", ServerInfo->sv102_disc); 64 65 done: 66 if (TransportInfo != NULL) 67 NetApiBufferFree(TransportInfo); 68 69 return 0; 70 } 71 72 73 static 74 INT 75 DisplayWorkstationConfig(VOID) 76 { 77 PWKSTA_INFO_100 WorkstationInfo = NULL; 78 PWKSTA_USER_INFO_1 UserInfo = NULL; 79 PWKSTA_TRANSPORT_INFO_0 TransportInfo = NULL; 80 DWORD dwRead = 0, dwTotal = 0, i; 81 INT nPaddedLength = 38; 82 NET_API_STATUS Status; 83 84 Status = NetWkstaGetInfo(NULL, 100, (PBYTE*)&WorkstationInfo); 85 if (Status != NERR_Success) 86 goto done; 87 88 Status = NetWkstaUserGetInfo(NULL, 1, (PBYTE*)&UserInfo); 89 if (Status != NERR_Success) 90 goto done; 91 92 Status = NetWkstaTransportEnum(NULL, 93 0, 94 (PBYTE*)&TransportInfo, 95 MAX_PREFERRED_LENGTH, 96 &dwRead, 97 &dwTotal, 98 NULL); 99 if (Status != NERR_Success) 100 goto done; 101 102 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_NAME, nPaddedLength); 103 ConPrintf(StdOut, L"\\\\%s\n", WorkstationInfo->wki100_computername); 104 105 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_FULLNAME, nPaddedLength); 106 ConPuts(StdOut, L"...\n"); 107 108 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_USERNAME, nPaddedLength); 109 ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_username); 110 111 ConPuts(StdOut, L"\n"); 112 113 ConResPuts(StdOut, IDS_CONFIG_WORKSTATION_ACTIVE); 114 ConPuts(StdOut, L"\n"); 115 for (i = 0; i < dwRead; i++) 116 { 117 ConPrintf(StdOut, L" %s (%s)\n", 118 &TransportInfo[i].wkti0_transport_name[8], 119 TransportInfo[i].wkti0_transport_address); 120 } 121 ConPuts(StdOut, L"\n"); 122 123 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_VERSION, nPaddedLength); 124 ConPrintf(StdOut, L"%lu.%lu\n", 125 WorkstationInfo->wki100_ver_major, 126 WorkstationInfo->wki100_ver_minor); 127 128 ConPuts(StdOut, L"\n"); 129 130 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_DOMAIN, nPaddedLength); 131 ConPrintf(StdOut, L"%s\n", WorkstationInfo->wki100_langroup); 132 133 PrintPaddedResourceString(IDS_CONFIG_WORKSTATION_LOGON, nPaddedLength); 134 ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_logon_domain); 135 136 done: 137 if (TransportInfo != NULL) 138 NetApiBufferFree(TransportInfo); 139 140 if (UserInfo != NULL) 141 NetApiBufferFree(UserInfo); 142 143 if (WorkstationInfo != NULL) 144 NetApiBufferFree(WorkstationInfo); 145 146 return 0; 147 } 148 149 150 INT 151 cmdConfig( 152 INT argc, 153 WCHAR **argv) 154 { 155 INT i, result = 0; 156 BOOL bServer = FALSE; 157 BOOL bWorkstation = FALSE; 158 PWSTR p, endptr; 159 BOOL bModify = FALSE; 160 LONG lValue; 161 PSERVER_INFO_102 ServerInfo = NULL; 162 NET_API_STATUS Status; 163 164 for (i = 2; i < argc; i++) 165 { 166 if (_wcsicmp(argv[i], L"server") == 0) 167 { 168 if (bWorkstation == FALSE) 169 bServer = TRUE; 170 continue; 171 } 172 173 if (_wcsicmp(argv[i], L"workstation") == 0) 174 { 175 if (bServer == FALSE) 176 bWorkstation = TRUE; 177 continue; 178 } 179 180 if (_wcsicmp(argv[i], L"help") == 0) 181 { 182 /* Print short syntax help */ 183 if (bServer == TRUE) 184 { 185 ConResPuts(StdOut, IDS_GENERIC_SYNTAX); 186 PrintNetMessage(MSG_CONFIG_SERVER_SYNTAX); 187 } 188 else 189 { 190 ConResPuts(StdOut, IDS_GENERIC_SYNTAX); 191 PrintNetMessage(MSG_CONFIG_SYNTAX); 192 } 193 return 0; 194 } 195 196 if (_wcsicmp(argv[i], L"/help") == 0) 197 { 198 /* Print full help text*/ 199 if (bServer == TRUE) 200 { 201 ConResPuts(StdOut, IDS_GENERIC_SYNTAX); 202 PrintNetMessage(MSG_CONFIG_SERVER_SYNTAX); 203 PrintNetMessage(MSG_CONFIG_SERVER_HELP); 204 } 205 else 206 { 207 ConResPuts(StdOut, IDS_GENERIC_SYNTAX); 208 PrintNetMessage(MSG_CONFIG_SYNTAX); 209 PrintNetMessage(MSG_CONFIG_HELP); 210 } 211 return 0; 212 } 213 } 214 215 if (bServer) 216 { 217 Status = NetServerGetInfo(NULL, 102, (PBYTE*)&ServerInfo); 218 if (Status != NERR_Success) 219 goto done; 220 221 for (i = 2; i < argc; i++) 222 { 223 if (argv[i][0] != L'/') 224 continue; 225 226 if (_wcsnicmp(argv[i], L"/autodisconnect:", 16) == 0) 227 { 228 p = &argv[i][16]; 229 lValue = wcstol(p, &endptr, 10); 230 if (*endptr != 0) 231 { 232 ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/AUTODISCONNECT"); 233 result = 1; 234 goto done; 235 } 236 237 if (lValue < -1 || lValue > 65535) 238 { 239 ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/AUTODISCONNECT"); 240 result = 1; 241 goto done; 242 } 243 244 ServerInfo->sv102_disc = lValue; 245 bModify = TRUE; 246 } 247 else if (_wcsnicmp(argv[i], L"/srvcomment:", 12) == 0) 248 { 249 ServerInfo->sv102_comment = &argv[i][12]; 250 bModify = TRUE; 251 } 252 else if (_wcsnicmp(argv[i], L"/hidden:", 8) == 0) 253 { 254 p = &argv[i][8]; 255 if (_wcsicmp(p, L"yes") != 0 && _wcsicmp(p, L"no") != 0) 256 { 257 ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/HIDDEN"); 258 result = 1; 259 goto done; 260 } 261 262 ServerInfo->sv102_hidden = (_wcsicmp(p, L"yes") == 0) ? TRUE : FALSE; 263 bModify = TRUE; 264 } 265 else 266 { 267 ConResPuts(StdOut, IDS_GENERIC_SYNTAX); 268 PrintNetMessage(MSG_CONFIG_SERVER_SYNTAX); 269 result = 1; 270 goto done; 271 } 272 } 273 274 if (bModify) 275 { 276 Status = NetServerSetInfo(NULL, 102, (PBYTE)&ServerInfo, NULL); 277 if (Status != NERR_Success) 278 result = 1; 279 } 280 else 281 { 282 result = DisplayServerConfig(ServerInfo); 283 } 284 } 285 else if (bWorkstation) 286 { 287 result = DisplayWorkstationConfig(); 288 } 289 else 290 { 291 ConResPuts(StdOut, IDS_CONFIG_TEXT); 292 } 293 294 done: 295 if (ServerInfo != NULL) 296 NetApiBufferFree(ServerInfo); 297 298 if (result == 0) 299 PrintErrorMessage(ERROR_SUCCESS); 300 301 return result; 302 }