2 Unix SMB/CIFS implementation.
5 Copyright (C) Günther Deschner 2007
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "rpcclient.h"
23 #include "../librpc/gen_ndr/cli_wkssvc.h"
25 static WERROR
cmd_wkssvc_wkstagetinfo(struct rpc_pipe_client
*cli
,
33 union wkssvc_NetWkstaInfo info
;
34 const char *server_name
;
37 printf("usage: %s <level>\n", argv
[0]);
42 level
= atoi(argv
[1]);
45 server_name
= cli
->desthost
;
47 status
= rpccli_wkssvc_NetWkstaGetInfo(cli
, mem_ctx
,
52 if (!NT_STATUS_IS_OK(status
)) {
53 return ntstatus_to_werror(status
);
59 static WERROR
cmd_wkssvc_getjoininformation(struct rpc_pipe_client
*cli
,
64 const char *server_name
;
65 const char *name_buffer
;
66 enum wkssvc_NetJoinStatus name_type
;
70 server_name
= cli
->desthost
;
73 status
= rpccli_wkssvc_NetrGetJoinInformation(cli
, mem_ctx
,
78 if (!NT_STATUS_IS_OK(status
)) {
79 return ntstatus_to_werror(status
);
82 if (W_ERROR_IS_OK(werr
)) {
83 printf("%s (%d)\n", name_buffer
, name_type
);
89 static WERROR
cmd_wkssvc_messagebuffersend(struct rpc_pipe_client
*cli
,
94 const char *server_name
= cli
->desthost
;
95 const char *message_name
= cli
->desthost
;
96 const char *message_sender_name
= cli
->desthost
;
97 smb_ucs2_t
*message_buffer
= NULL
;
98 size_t message_size
= 0;
99 const char *message
= "my message";
107 if (!push_ucs2_talloc(mem_ctx
, &message_buffer
, message
,
113 status
= rpccli_wkssvc_NetrMessageBufferSend(cli
, mem_ctx
,
117 (uint8_t *)message_buffer
,
120 if (!NT_STATUS_IS_OK(status
)) {
121 return ntstatus_to_werror(status
);
127 static WERROR
cmd_wkssvc_enumeratecomputernames(struct rpc_pipe_client
*cli
,
132 const char *server_name
;
133 enum wkssvc_ComputerNameType name_type
= NetAllComputerNames
;
135 struct wkssvc_ComputerNamesCtr
*ctr
= NULL
;
138 server_name
= cli
->desthost
;
141 name_type
= atoi(argv
[1]);
144 status
= rpccli_wkssvc_NetrEnumerateComputerNames(cli
, mem_ctx
,
149 if (!NT_STATUS_IS_OK(status
)) {
150 return ntstatus_to_werror(status
);
153 if (W_ERROR_IS_OK(werr
)) {
155 for (i
= 0; i
< ctr
->count
; i
++) {
156 printf("name: %d %s\n", i
, ctr
->computer_name
->string
);
163 static WERROR
cmd_wkssvc_enumerateusers(struct rpc_pipe_client
*cli
,
168 const char *server_name
;
170 struct wkssvc_NetWkstaEnumUsersInfo info
;
172 uint32_t i
, num_entries
, resume_handle
;
174 server_name
= cli
->desthost
;
179 info
.level
= atoi(argv
[1]);
182 status
= rpccli_wkssvc_NetWkstaEnumUsers(cli
, mem_ctx
, server_name
,
183 &info
, 1000, &num_entries
,
184 &resume_handle
, &werr
);
185 if (!NT_STATUS_IS_OK(status
)) {
186 return ntstatus_to_werror(status
);
188 if (!W_ERROR_IS_OK(werr
)) {
192 for (i
=0; i
<num_entries
; i
++) {
194 switch (info
.level
) {
196 user
= info
.ctr
.user0
->user0
[i
].user_name
;
199 user
= talloc_asprintf(
200 talloc_tos(), "%s\\%s",
201 info
.ctr
.user1
->user1
[i
].logon_domain
,
202 info
.ctr
.user1
->user1
[i
].user_name
);
205 printf("%s\n", user
);
211 struct cmd_set wkssvc_commands
[] = {
214 { "wkssvc_wkstagetinfo", RPC_RTYPE_WERROR
, NULL
, cmd_wkssvc_wkstagetinfo
, &ndr_table_wkssvc
.syntax_id
, NULL
, "Query WKSSVC Workstation Information", "" },
215 { "wkssvc_getjoininformation", RPC_RTYPE_WERROR
, NULL
, cmd_wkssvc_getjoininformation
, &ndr_table_wkssvc
.syntax_id
, NULL
, "Query WKSSVC Join Information", "" },
216 { "wkssvc_messagebuffersend", RPC_RTYPE_WERROR
, NULL
, cmd_wkssvc_messagebuffersend
, &ndr_table_wkssvc
.syntax_id
, NULL
, "Send WKSSVC message", "" },
217 { "wkssvc_enumeratecomputernames", RPC_RTYPE_WERROR
, NULL
, cmd_wkssvc_enumeratecomputernames
, &ndr_table_wkssvc
.syntax_id
, NULL
, "Enumerate WKSSVC computer names", "" },
218 { "wkssvc_enumerateusers", RPC_RTYPE_WERROR
, NULL
,
219 cmd_wkssvc_enumerateusers
, &ndr_table_wkssvc
.syntax_id
, NULL
,
220 "Enumerate WKSSVC users", "" },