added wksinfo command to rpcclient, which don't work too good.
[kai/samba-autobuild/.git] / source3 / rpcclient / cmd_srvsvc.c
1 /* 
2    Unix SMB/Netbios implementation.
3    Version 1.9.
4    NT Domain Authentication SMB / MSRPC client
5    Copyright (C) Andrew Tridgell 1994-1997
6    Copyright (C) Luke Kenneth Casson Leighton 1996-1997
7    
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12    
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17    
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23
24
25 #ifdef SYSLOG
26 #undef SYSLOG
27 #endif
28
29 #include "includes.h"
30 #include "nterr.h"
31
32 extern int DEBUGLEVEL;
33
34 #define DEBUG_TESTING
35
36 extern struct cli_state *smb_cli;
37 extern int smb_tidx;
38
39 extern FILE* out_hnd;
40
41
42 /****************************************************************************
43 server get info query
44 ****************************************************************************/
45 void cmd_srv_query_info(struct client_info *info)
46 {
47         fstring dest_srv;
48         fstring tmp;
49         SRV_INFO_CTR ctr;
50         uint32 info_level = 101;
51
52         BOOL res = True;
53
54         bzero(&ctr, sizeof(ctr));
55
56         strcpy(dest_srv, "\\\\");
57         strcat(dest_srv, info->dest_host);
58         strupper(dest_srv);
59
60         if (next_token(NULL, tmp, NULL))
61         {
62                 info_level = strtoul(tmp, (char**)NULL, 10);
63         }
64
65         DEBUG(4,("cmd_srv_query_info: server:%s info level: %D\n",
66                                 dest_srv, info_level));
67
68         DEBUG(5, ("cmd_srv_query_info: smb_cli->fd:%d\n", smb_cli->fd));
69
70         /* open LSARPC session. */
71         res = res ? do_session_open(smb_cli, smb_tidx, PIPE_SRVSVC, &(info->dom.srvsvc_fnum)) : False;
72
73         /* send info level: receive requested info.  hopefully. */
74         res = res ? do_srv_net_srv_get_info(smb_cli, smb_tidx, info->dom.srvsvc_fnum,
75                                 dest_srv, info_level, &ctr) : False;
76
77         /* close the session */
78         do_session_close(smb_cli, smb_tidx, info->dom.srvsvc_fnum);
79
80         if (res)
81         {
82                 DEBUG(5,("cmd_srv_query_info: query succeeded\n"));
83
84                 display_srv_info_ctr(out_hnd, ACTION_HEADER   , &ctr);
85                 display_srv_info_ctr(out_hnd, ACTION_ENUMERATE, &ctr);
86                 display_srv_info_ctr(out_hnd, ACTION_FOOTER   , &ctr);
87         }
88         else
89         {
90                 DEBUG(5,("cmd_srv_query_info: query failed\n"));
91         }
92 }
93
94 /****************************************************************************
95 server enum connections
96 ****************************************************************************/
97 void cmd_srv_enum_conn(struct client_info *info)
98 {
99         fstring dest_srv;
100         fstring qual_srv;
101         fstring tmp;
102         SRV_CONN_INFO_CTR ctr;
103         ENUM_HND hnd;
104         uint32 info_level = 0;
105
106         BOOL res = True;
107
108         bzero(&ctr, sizeof(ctr));
109
110         strcpy(qual_srv, "\\\\");
111         strcat(qual_srv, info->myhostname);
112         strupper(qual_srv);
113
114         strcpy(dest_srv, "\\\\");
115         strcat(dest_srv, info->dest_host);
116         strupper(dest_srv);
117
118         if (next_token(NULL, tmp, NULL))
119         {
120                 info_level = strtoul(tmp, (char**)NULL, 10);
121         }
122
123         DEBUG(4,("cmd_srv_enum_conn: server:%s info level: %D\n",
124                                 dest_srv, info_level));
125
126         DEBUG(5, ("cmd_srv_enum_conn: smb_cli->fd:%d\n", smb_cli->fd));
127
128         /* open srvsvc session. */
129         res = res ? do_session_open(smb_cli, smb_tidx, PIPE_SRVSVC, &(info->dom.srvsvc_fnum)) : False;
130
131         hnd.ptr_hnd = 1;
132         hnd.handle = 0;
133
134         /* enumerate connections on server */
135         res = res ? do_srv_net_srv_conn_enum(smb_cli, smb_tidx, info->dom.srvsvc_fnum,
136                                 dest_srv, qual_srv,
137                     info_level, &ctr, 0xffffffff, &hnd) : False;
138
139         if (res)
140         {
141                 display_srv_conn_info_ctr(out_hnd, ACTION_HEADER   , &ctr);
142                 display_srv_conn_info_ctr(out_hnd, ACTION_ENUMERATE, &ctr);
143                 display_srv_conn_info_ctr(out_hnd, ACTION_FOOTER   , &ctr);
144         }
145
146         /* close the session */
147         do_session_close(smb_cli, smb_tidx, info->dom.srvsvc_fnum);
148
149         if (res)
150         {
151                 DEBUG(5,("cmd_srv_enum_conn: query succeeded\n"));
152         }
153         else
154         {
155                 DEBUG(5,("cmd_srv_enum_conn: query failed\n"));
156         }
157 }
158
159 /****************************************************************************
160 server enum shares
161 ****************************************************************************/
162 void cmd_srv_enum_shares(struct client_info *info)
163 {
164         fstring dest_srv;
165         fstring tmp;
166         SRV_SHARE_INFO_CTR ctr;
167         ENUM_HND hnd;
168         uint32 info_level = 1;
169
170         BOOL res = True;
171
172         bzero(&ctr, sizeof(ctr));
173
174         strcpy(dest_srv, "\\\\");
175         strcat(dest_srv, info->dest_host);
176         strupper(dest_srv);
177
178         if (next_token(NULL, tmp, NULL))
179         {
180                 info_level = strtoul(tmp, (char**)NULL, 10);
181         }
182
183         DEBUG(4,("cmd_srv_enum_shares: server:%s info level: %D\n",
184                                 dest_srv, info_level));
185
186         DEBUG(5, ("cmd_srv_enum_shares: smb_cli->fd:%d\n", smb_cli->fd));
187
188         /* open srvsvc session. */
189         res = res ? do_session_open(smb_cli, smb_tidx, PIPE_SRVSVC, &(info->dom.srvsvc_fnum)) : False;
190
191         hnd.ptr_hnd = 0;
192         hnd.handle = 0;
193
194         /* enumerate shares_files on server */
195         res = res ? do_srv_net_srv_share_enum(smb_cli, smb_tidx, info->dom.srvsvc_fnum,
196                                 dest_srv, 
197                     info_level, &ctr, 0xffffffff, &hnd) : False;
198
199         if (res)
200         {
201                 display_srv_share_info_ctr(out_hnd, ACTION_HEADER   , &ctr);
202                 display_srv_share_info_ctr(out_hnd, ACTION_ENUMERATE, &ctr);
203                 display_srv_share_info_ctr(out_hnd, ACTION_FOOTER   , &ctr);
204         }
205
206         /* close the session */
207         do_session_close(smb_cli, smb_tidx, info->dom.srvsvc_fnum);
208
209         if (res)
210         {
211                 DEBUG(5,("cmd_srv_enum_shares: query succeeded\n"));
212         }
213         else
214         {
215                 DEBUG(5,("cmd_srv_enum_shares: query failed\n"));
216         }
217 }
218
219 /****************************************************************************
220 server enum sessions
221 ****************************************************************************/
222 void cmd_srv_enum_sess(struct client_info *info)
223 {
224         fstring dest_srv;
225         fstring tmp;
226         SRV_SESS_INFO_CTR ctr;
227         ENUM_HND hnd;
228         uint32 info_level = 0;
229
230         BOOL res = True;
231
232         bzero(&ctr, sizeof(ctr));
233
234         strcpy(dest_srv, "\\\\");
235         strcat(dest_srv, info->dest_host);
236         strupper(dest_srv);
237
238         if (next_token(NULL, tmp, NULL))
239         {
240                 info_level = strtoul(tmp, (char**)NULL, 10);
241         }
242
243         DEBUG(4,("cmd_srv_enum_sess: server:%s info level: %D\n",
244                                 dest_srv, info_level));
245
246         DEBUG(5, ("cmd_srv_enum_sess: smb_cli->fd:%d\n", smb_cli->fd));
247
248         /* open srvsvc session. */
249         res = res ? do_session_open(smb_cli, smb_tidx, PIPE_SRVSVC, &(info->dom.srvsvc_fnum)) : False;
250
251         hnd.ptr_hnd = 1;
252         hnd.handle = 0;
253
254         /* enumerate sessions on server */
255         res = res ? do_srv_net_srv_sess_enum(smb_cli, smb_tidx, info->dom.srvsvc_fnum,
256                                 dest_srv, NULL, info_level, &ctr, 0x1000, &hnd) : False;
257
258         /* close the session */
259         do_session_close(smb_cli, smb_tidx, info->dom.srvsvc_fnum);
260
261         if (res)
262         {
263                 DEBUG(5,("cmd_srv_enum_sess: query succeeded\n"));
264         }
265         else
266         {
267                 DEBUG(5,("cmd_srv_enum_sess: query failed\n"));
268         }
269 }
270
271 /****************************************************************************
272 server enum files
273 ****************************************************************************/
274 void cmd_srv_enum_files(struct client_info *info)
275 {
276         fstring dest_srv;
277         fstring tmp;
278         SRV_FILE_INFO_CTR ctr;
279         ENUM_HND hnd;
280         uint32 info_level = 3;
281
282         BOOL res = True;
283
284         bzero(&ctr, sizeof(ctr));
285
286         strcpy(dest_srv, "\\\\");
287         strcat(dest_srv, info->dest_host);
288         strupper(dest_srv);
289
290         if (next_token(NULL, tmp, NULL))
291         {
292                 info_level = strtoul(tmp, (char**)NULL, 10);
293         }
294
295         DEBUG(4,("cmd_srv_enum_files: server:%s info level: %D\n",
296                                 dest_srv, info_level));
297
298         DEBUG(5, ("cmd_srv_enum_files: smb_cli->fd:%d\n", smb_cli->fd));
299
300         /* open srvsvc session. */
301         res = res ? do_session_open(smb_cli, smb_tidx, PIPE_SRVSVC, &(info->dom.srvsvc_fnum)) : False;
302
303         hnd.ptr_hnd = 1;
304         hnd.handle = 0;
305
306         /* enumerate files on server */
307         res = res ? do_srv_net_srv_file_enum(smb_cli, smb_tidx, info->dom.srvsvc_fnum,
308                                 dest_srv, NULL, info_level, &ctr, 0x1000, &hnd) : False;
309
310         if (res)
311         {
312                 display_srv_file_info_ctr(out_hnd, ACTION_HEADER   , &ctr);
313                 display_srv_file_info_ctr(out_hnd, ACTION_ENUMERATE, &ctr);
314                 display_srv_file_info_ctr(out_hnd, ACTION_FOOTER   , &ctr);
315         }
316
317         /* close the session */
318         do_session_close(smb_cli, smb_tidx, info->dom.srvsvc_fnum);
319
320         if (res)
321         {
322                 DEBUG(5,("cmd_srv_enum_files: query succeeded\n"));
323         }
324         else
325         {
326                 DEBUG(5,("cmd_srv_enum_files: query failed\n"));
327         }
328 }
329