first pass at updating head branch to be to be the same as the SAMBA_2_0 branch
[kai/samba.git] / source3 / include / rpc_srvsvc.h
1 /* 
2    Unix SMB/Netbios implementation.
3    Version 1.9.
4    SMB parameters and setup
5    Copyright (C) Andrew Tridgell 1992-1997
6    Copyright (C) Luke Kenneth Casson Leighton 1996-1997
7    Copyright (C) Paul Ashton 1997
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #ifndef _RPC_SRVSVC_H /* _RPC_SRVSVC_H */
25 #define _RPC_SRVSVC_H 
26
27
28 /* srvsvc pipe */
29 #define SRV_NETCONNENUM        0x08
30 #define SRV_NETFILEENUM        0x09
31 #define SRV_NETSESSENUM        0x0c
32 #define SRV_NETSHAREENUM       0x0f
33 #define SRV_NET_SHARE_GET_INFO 0x10
34 #define SRV_NET_SRV_GET_INFO   0x15
35 #define SRV_NET_SRV_SET_INFO   0x16
36 #define SRV_NET_REMOTE_TOD     0x1c
37
38 /* SESS_INFO_0 (pointers to level 0 session info strings) */
39 typedef struct ptr_sess_info0
40 {
41         uint32 ptr_name; /* pointer to name. */
42
43 } SESS_INFO_0;
44
45 /* SESS_INFO_0_STR (level 0 session info strings) */
46 typedef struct str_sess_info0
47 {
48         UNISTR2 uni_name; /* unicode string of name */
49
50 } SESS_INFO_0_STR;
51
52 /* oops - this is going to take up a *massive* amount of stack. */
53 /* the UNISTR2s already have 1024 uint16 chars in them... */
54 #define MAX_SESS_ENTRIES 32
55
56 /* SRV_SESS_INFO_0 */
57 typedef struct srv_sess_info_0_info
58 {
59         uint32 num_entries_read;                     /* EntriesRead */
60         uint32 ptr_sess_info;                       /* Buffer */
61         uint32 num_entries_read2;                    /* EntriesRead */
62
63         SESS_INFO_0     info_0    [MAX_SESS_ENTRIES]; /* session entry pointers */
64         SESS_INFO_0_STR info_0_str[MAX_SESS_ENTRIES]; /* session entry strings */
65
66 } SRV_SESS_INFO_0;
67
68 /* SESS_INFO_1 (pointers to level 1 session info strings) */
69 typedef struct ptr_sess_info1
70 {
71         uint32 ptr_name; /* pointer to name. */
72         uint32 ptr_user; /* pointer to user name. */
73
74         uint32 num_opens;
75         uint32 open_time;
76         uint32 idle_time;
77         uint32 user_flags;
78
79 } SESS_INFO_1;
80
81 /* SESS_INFO_1_STR (level 1 session info strings) */
82 typedef struct str_sess_info1
83 {
84         UNISTR2 uni_name; /* unicode string of name */
85         UNISTR2 uni_user; /* unicode string of user */
86
87 } SESS_INFO_1_STR;
88
89 /* SRV_SESS_INFO_1 */
90 typedef struct srv_sess_info_1_info
91 {
92         uint32 num_entries_read;                     /* EntriesRead */
93         uint32 ptr_sess_info;                       /* Buffer */
94         uint32 num_entries_read2;                    /* EntriesRead */
95
96         SESS_INFO_1     info_1    [MAX_SESS_ENTRIES]; /* session entry pointers */
97         SESS_INFO_1_STR info_1_str[MAX_SESS_ENTRIES]; /* session entry strings */
98
99 } SRV_SESS_INFO_1;
100
101 /* SRV_SESS_INFO_CTR */
102 typedef struct srv_sess_info_ctr_info
103 {
104         uint32 switch_value;         /* switch value */
105         uint32 ptr_sess_ctr;       /* pointer to sess info union */
106         union
107     {
108                 SRV_SESS_INFO_0 info0; /* session info level 0 */
109                 SRV_SESS_INFO_1 info1; /* session info level 1 */
110
111     } sess;
112
113 } SRV_SESS_INFO_CTR;
114
115
116 /* SRV_Q_NET_SESS_ENUM */
117 typedef struct q_net_sess_enum_info
118 {
119         uint32 ptr_srv_name;         /* pointer (to server name?) */
120         UNISTR2 uni_srv_name;        /* server name */
121
122         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
123         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
124
125         uint32 sess_level;          /* session level */
126
127         SRV_SESS_INFO_CTR *ctr;
128
129         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
130         ENUM_HND enum_hnd;
131
132 } SRV_Q_NET_SESS_ENUM;
133
134 /* SRV_R_NET_SESS_ENUM */
135 typedef struct r_net_sess_enum_info
136 {
137         uint32 sess_level;          /* share level */
138
139         SRV_SESS_INFO_CTR *ctr;
140
141         uint32 total_entries;                    /* total number of entries */
142         ENUM_HND enum_hnd;
143
144         uint32 status;               /* return status */
145
146 } SRV_R_NET_SESS_ENUM;
147
148 /* CONN_INFO_0 (pointers to level 0 connection info strings) */
149 typedef struct ptr_conn_info0
150 {
151         uint32 id; /* connection id. */
152
153 } CONN_INFO_0;
154
155 /* oops - this is going to take up a *massive* amount of stack. */
156 /* the UNISTR2s already have 1024 uint16 chars in them... */
157 #define MAX_CONN_ENTRIES 32
158
159 /* SRV_CONN_INFO_0 */
160 typedef struct srv_conn_info_0_info
161 {
162         uint32 num_entries_read;                     /* EntriesRead */
163         uint32 ptr_conn_info;                       /* Buffer */
164         uint32 num_entries_read2;                    /* EntriesRead */
165
166         CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
167
168 } SRV_CONN_INFO_0;
169
170 /* CONN_INFO_1 (pointers to level 1 connection info strings) */
171 typedef struct ptr_conn_info1
172 {
173         uint32 id;   /* connection id */
174         uint32 type; /* 0x3 */
175         uint32 num_opens;
176         uint32 num_users;
177         uint32 open_time;
178
179         uint32 ptr_usr_name; /* pointer to user name. */
180         uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
181
182 } CONN_INFO_1;
183
184 /* CONN_INFO_1_STR (level 1 connection info strings) */
185 typedef struct str_conn_info1
186 {
187         UNISTR2 uni_usr_name; /* unicode string of user */
188         UNISTR2 uni_net_name; /* unicode string of name */
189
190 } CONN_INFO_1_STR;
191
192 /* SRV_CONN_INFO_1 */
193 typedef struct srv_conn_info_1_info
194 {
195         uint32 num_entries_read;                     /* EntriesRead */
196         uint32 ptr_conn_info;                       /* Buffer */
197         uint32 num_entries_read2;                    /* EntriesRead */
198
199         CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
200         CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
201
202 } SRV_CONN_INFO_1;
203
204 /* SRV_CONN_INFO_CTR */
205 typedef struct srv_conn_info_ctr_info
206 {
207         uint32 switch_value;         /* switch value */
208         uint32 ptr_conn_ctr;       /* pointer to conn info union */
209         union
210     {
211                 SRV_CONN_INFO_0 info0; /* connection info level 0 */
212                 SRV_CONN_INFO_1 info1; /* connection info level 1 */
213
214     } conn;
215
216 } SRV_CONN_INFO_CTR;
217
218
219 /* SRV_Q_NET_CONN_ENUM */
220 typedef struct q_net_conn_enum_info
221 {
222         uint32 ptr_srv_name;         /* pointer (to server name) */
223         UNISTR2 uni_srv_name;        /* server name "\\server" */
224
225         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
226         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
227
228         uint32 conn_level;          /* connection level */
229
230         SRV_CONN_INFO_CTR *ctr;
231
232         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
233         ENUM_HND enum_hnd;
234
235 } SRV_Q_NET_CONN_ENUM;
236
237 /* SRV_R_NET_CONN_ENUM */
238 typedef struct r_net_conn_enum_info
239 {
240         uint32 conn_level;          /* share level */
241
242         SRV_CONN_INFO_CTR *ctr;
243
244         uint32 total_entries;                    /* total number of entries */
245         ENUM_HND enum_hnd;
246
247         uint32 status;               /* return status */
248
249 } SRV_R_NET_CONN_ENUM;
250
251 /* SH_INFO_1 (pointers to level 1 share info strings) */
252 typedef struct ptr_share_info1
253 {
254         uint32 ptr_netname; /* pointer to net name. */
255         uint32 type; /* ipc, print, disk ... */
256         uint32 ptr_remark; /* pointer to comment. */
257
258 } SH_INFO_1;
259
260 /* SH_INFO_1_STR (level 1 share info strings) */
261 typedef struct str_share_info1
262 {
263         UNISTR2 uni_netname; /* unicode string of net name */
264         UNISTR2 uni_remark; /* unicode string of comment */
265
266 } SH_INFO_1_STR;
267
268 /* SRV_SHARE_INFO_1 */
269 typedef struct share_info_1_info
270 {
271         SH_INFO_1 info_1;
272         SH_INFO_1_STR info_1_str;
273
274 } SRV_SHARE_INFO_1;
275
276 /* SH_INFO_2 (pointers to level 2 share info strings) */
277 typedef struct ptr_share_info2
278 {
279         uint32 ptr_netname; /* pointer to net name. */
280         uint32 type; /* ipc, print, disk ... */
281         uint32 ptr_remark; /* pointer to comment. */
282         uint32 perms;      /* permissions */
283         uint32 max_uses;   /* maximum uses */
284         uint32 num_uses;   /* current uses */
285         uint32 ptr_path;   /* pointer to path name */
286         uint32 ptr_passwd; /* pointer to password */
287
288 } SH_INFO_2;
289
290 /* SH_INFO_2_STR (level 2 share info strings) */
291 typedef struct str_share_info2
292 {
293         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
294         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
295         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
296         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
297
298 } SH_INFO_2_STR;
299
300 /* SRV_SHARE_INFO_2 */
301 typedef struct share_info_2_info
302 {
303         SH_INFO_2 info_2;
304         SH_INFO_2_STR info_2_str;
305
306 } SRV_SHARE_INFO_2;
307
308 /* SRV_SHARE_INFO_CTR */
309 typedef struct srv_share_info_ctr_info
310 {
311         uint32 info_level;
312         uint32 switch_value;
313         uint32 ptr_share_info;
314
315         uint32 num_entries;
316         uint32 ptr_entries;
317         uint32 num_entries2;
318
319         union {
320                 SRV_SHARE_INFO_1 *info1; /* share info level 1 */
321                 SRV_SHARE_INFO_2 *info2; /* share info level 2 */
322                 void *info;
323
324         } share;
325
326 } SRV_SHARE_INFO_CTR;
327
328 /* SRV_Q_NET_SHARE_ENUM */
329 typedef struct q_net_share_enum_info
330 {
331         uint32 ptr_srv_name;         /* pointer (to server name?) */
332         UNISTR2 uni_srv_name;        /* server name */
333
334         SRV_SHARE_INFO_CTR ctr;     /* share info container */
335
336         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
337
338         ENUM_HND enum_hnd;
339
340 } SRV_Q_NET_SHARE_ENUM;
341
342
343 /* SRV_R_NET_SHARE_ENUM */
344 typedef struct r_net_share_enum_info
345 {
346         SRV_SHARE_INFO_CTR ctr;     /* share info container */
347
348         uint32 total_entries;                    /* total number of entries */
349         ENUM_HND enum_hnd;
350
351         uint32 status;               /* return status */
352
353 } SRV_R_NET_SHARE_ENUM;
354
355
356 /* SRV_Q_NET_SHARE_GET_INFO */
357 typedef struct q_net_share_get_info_info
358 {
359         uint32 ptr_srv_name;
360         UNISTR2 uni_srv_name;
361
362         UNISTR2 uni_share_name;
363         uint32 info_level;
364
365 } SRV_Q_NET_SHARE_GET_INFO;
366
367 /* SRV_R_NET_SHARE_GET_INFO */
368 typedef struct r_net_share_get_info_info
369 {
370         uint32 switch_value;
371         uint32 ptr_share_ctr;
372
373         union {
374                 SRV_SHARE_INFO_1 info1;
375                 SRV_SHARE_INFO_2 info2;
376
377         } share;
378
379         uint32 status;
380
381 } SRV_R_NET_SHARE_GET_INFO;
382
383
384 /* FILE_INFO_3 (level 3 file info strings) */
385 typedef struct file_info3_info
386 {
387         uint32 id;            /* file index */
388         uint32 perms;         /* file permissions. don't know what format */
389         uint32 num_locks;     /* file locks */
390         uint32 ptr_path_name; /* file name */
391         uint32 ptr_user_name; /* file owner */
392
393 } FILE_INFO_3;
394
395 /* FILE_INFO_3_STR (level 3 file info strings) */
396 typedef struct str_file_info3_info
397 {
398         UNISTR2 uni_path_name; /* unicode string of file name */
399         UNISTR2 uni_user_name; /* unicode string of file owner. */
400
401 } FILE_INFO_3_STR;
402
403 /* oops - this is going to take up a *massive* amount of stack. */
404 /* the UNISTR2s already have 1024 uint16 chars in them... */
405 #define MAX_FILE_ENTRIES 32
406
407 /* SRV_FILE_INFO_3 */
408 typedef struct srv_file_info_3
409 {
410         uint32 num_entries_read;                     /* EntriesRead */
411         uint32 ptr_file_info;                        /* Buffer */
412
413         uint32 num_entries_read2;                    /* EntriesRead */
414
415         FILE_INFO_3     info_3    [MAX_FILE_ENTRIES]; /* file entry details */
416         FILE_INFO_3_STR info_3_str[MAX_FILE_ENTRIES]; /* file entry strings */
417
418 } SRV_FILE_INFO_3;
419
420 /* SRV_FILE_INFO_CTR */
421 typedef struct srv_file_info_3_info
422 {
423         uint32 switch_value;         /* switch value */
424         uint32 ptr_file_ctr;       /* pointer to file info union */
425         union
426     {
427                 SRV_FILE_INFO_3 info3; /* file info with 0 entries */
428
429     } file;
430
431 } SRV_FILE_INFO_CTR;
432
433
434 /* SRV_Q_NET_FILE_ENUM */
435 typedef struct q_net_file_enum_info
436 {
437         uint32 ptr_srv_name;         /* pointer (to server name?) */
438         UNISTR2 uni_srv_name;        /* server name */
439
440         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
441         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
442
443         uint32 file_level;          /* file level */
444
445         SRV_FILE_INFO_CTR *ctr;
446
447         uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
448         ENUM_HND enum_hnd;
449
450 } SRV_Q_NET_FILE_ENUM;
451
452
453 /* SRV_R_NET_FILE_ENUM */
454 typedef struct r_net_file_enum_info
455 {
456         uint32 file_level;          /* file level */
457
458         SRV_FILE_INFO_CTR *ctr;
459
460         uint32 total_entries;                    /* total number of files */
461         ENUM_HND enum_hnd;
462
463         uint32 status;        /* return status */
464
465 } SRV_R_NET_FILE_ENUM;
466
467 /* SRV_INFO_101 */
468 typedef struct srv_info_101_info
469 {
470         uint32 platform_id;     /* 0x500 */
471         uint32 ptr_name;        /* pointer to server name */
472         uint32 ver_major;       /* 0x4 */
473         uint32 ver_minor;       /* 0x2 */
474         uint32 srv_type;        /* browse etc type */
475         uint32 ptr_comment;     /* pointer to server comment */
476
477         UNISTR2 uni_name;       /* server name "server" */
478         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
479
480 } SRV_INFO_101;
481
482 /* SRV_INFO_102  */
483 typedef struct srv_info_102_info
484 {
485         uint32 platform_id;     /* 0x500 */
486         uint32 ptr_name;        /* pointer to server name */
487         uint32 ver_major;       /* 0x4 */
488         uint32 ver_minor;       /* 0x2 */
489         uint32 srv_type;        /* browse etc type */
490         uint32 ptr_comment;     /* pointer to server comment */
491         uint32 users;           /* 0xffff ffff*/
492         uint32 disc;            /* 0xf */
493         uint32 hidden;          /* 0x0 */
494         uint32 announce;        /* 240 */
495         uint32 ann_delta;       /* 3000 */
496         uint32 licenses;        /* 0 */
497         uint32 ptr_usr_path;    /* pointer to user path */
498
499         UNISTR2 uni_name;       /* server name "server" */
500         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
501         UNISTR2 uni_usr_path;   /* "c:\" (eh?) */
502
503 } SRV_INFO_102;
504
505
506 /* SRV_INFO_CTR */
507 typedef struct srv_info_ctr_info
508 {
509         uint32 switch_value;         /* switch value */
510         uint32 ptr_srv_ctr;         /* pointer to server info */
511         union
512     {
513                 SRV_INFO_102 sv102; /* server info level 102 */
514                 SRV_INFO_101 sv101; /* server info level 101 */
515
516     } srv;
517
518 } SRV_INFO_CTR;
519
520 /* SRV_Q_NET_SRV_GET_INFO */
521 typedef struct q_net_srv_get_info
522 {
523         uint32  ptr_srv_name;
524         UNISTR2 uni_srv_name; /* "\\server" */
525         uint32  switch_value;
526
527 } SRV_Q_NET_SRV_GET_INFO;
528
529 /* SRV_R_NET_SRV_GET_INFO */
530 typedef struct r_net_srv_get_info
531 {
532         SRV_INFO_CTR *ctr;
533
534         uint32 status;               /* return status */
535
536 } SRV_R_NET_SRV_GET_INFO;
537
538 /* SRV_Q_NET_SRV_SET_INFO */
539 typedef struct q_net_srv_set_info
540 {
541         uint32  ptr_srv_name;
542         UNISTR2 uni_srv_name; /* "\\server" */
543         uint32  switch_value;
544
545         SRV_INFO_CTR *ctr;
546
547 } SRV_Q_NET_SRV_SET_INFO;
548
549
550 /* SRV_R_NET_SRV_SET_INFO */
551 typedef struct r_net_srv_set_info
552 {
553         uint32 switch_value;         /* switch value */
554
555         uint32 status;               /* return status */
556
557 } SRV_R_NET_SRV_SET_INFO;
558
559 /* SRV_Q_NET_REMOTE_TOD */
560 typedef struct q_net_remote_tod
561 {
562         uint32  ptr_srv_name;
563         UNISTR2 uni_srv_name; /* "\\server" */
564
565 } SRV_Q_NET_REMOTE_TOD;
566
567 /* TIME_OF_DAY_INFO */
568 typedef struct time_of_day_info
569 {
570         uint32  elapsedt;
571         uint32  msecs;
572         uint32  hours;
573         uint32  mins;
574         uint32  secs;
575         uint32  hunds;
576         uint32  zone;
577         uint32  tintervals;
578         uint32  day;
579         uint32  month;
580         uint32  year;
581         uint32  weekday;
582         
583 } TIME_OF_DAY_INFO;
584
585 /* SRV_R_NET_REMOTE_TOD */
586 typedef struct r_net_remote_tod
587 {
588         uint32 ptr_srv_tod;         /* pointer to TOD */
589         TIME_OF_DAY_INFO *tod;
590         
591         uint32 status;               /* return status */
592
593 } SRV_R_NET_REMOTE_TOD;
594
595
596 #endif /* _RPC_SRVSVC_H */