I know we're supposed to be feature frozen, but I couldn't resist this... :-).
[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_SHARE_SET_INFO 0x11
35 #define SRV_NET_SRV_GET_INFO   0x15
36 #define SRV_NET_SRV_SET_INFO   0x16
37 #define SRV_NET_REMOTE_TOD     0x1c
38
39 /* SESS_INFO_0 (pointers to level 0 session info strings) */
40 typedef struct ptr_sess_info0
41 {
42         uint32 ptr_name; /* pointer to name. */
43
44 } SESS_INFO_0;
45
46 /* SESS_INFO_0_STR (level 0 session info strings) */
47 typedef struct str_sess_info0
48 {
49         UNISTR2 uni_name; /* unicode string of name */
50
51 } SESS_INFO_0_STR;
52
53 /* oops - this is going to take up a *massive* amount of stack. */
54 /* the UNISTR2s already have 1024 uint16 chars in them... */
55 #define MAX_SESS_ENTRIES 32
56
57 /* SRV_SESS_INFO_0 */
58 typedef struct srv_sess_info_0_info
59 {
60         uint32 num_entries_read;                     /* EntriesRead */
61         uint32 ptr_sess_info;                       /* Buffer */
62         uint32 num_entries_read2;                    /* EntriesRead */
63
64         SESS_INFO_0     info_0    [MAX_SESS_ENTRIES]; /* session entry pointers */
65         SESS_INFO_0_STR info_0_str[MAX_SESS_ENTRIES]; /* session entry strings */
66
67 } SRV_SESS_INFO_0;
68
69 /* SESS_INFO_1 (pointers to level 1 session info strings) */
70 typedef struct ptr_sess_info1
71 {
72         uint32 ptr_name; /* pointer to name. */
73         uint32 ptr_user; /* pointer to user name. */
74
75         uint32 num_opens;
76         uint32 open_time;
77         uint32 idle_time;
78         uint32 user_flags;
79
80 } SESS_INFO_1;
81
82 /* SESS_INFO_1_STR (level 1 session info strings) */
83 typedef struct str_sess_info1
84 {
85         UNISTR2 uni_name; /* unicode string of name */
86         UNISTR2 uni_user; /* unicode string of user */
87
88 } SESS_INFO_1_STR;
89
90 /* SRV_SESS_INFO_1 */
91 typedef struct srv_sess_info_1_info
92 {
93         uint32 num_entries_read;                     /* EntriesRead */
94         uint32 ptr_sess_info;                       /* Buffer */
95         uint32 num_entries_read2;                    /* EntriesRead */
96
97         SESS_INFO_1     info_1    [MAX_SESS_ENTRIES]; /* session entry pointers */
98         SESS_INFO_1_STR info_1_str[MAX_SESS_ENTRIES]; /* session entry strings */
99
100 } SRV_SESS_INFO_1;
101
102 /* SRV_SESS_INFO_CTR */
103 typedef struct srv_sess_info_ctr_info
104 {
105         uint32 switch_value;         /* switch value */
106         uint32 ptr_sess_ctr;       /* pointer to sess info union */
107         union
108     {
109                 SRV_SESS_INFO_0 info0; /* session info level 0 */
110                 SRV_SESS_INFO_1 info1; /* session info level 1 */
111
112     } sess;
113
114 } SRV_SESS_INFO_CTR;
115
116
117 /* SRV_Q_NET_SESS_ENUM */
118 typedef struct q_net_sess_enum_info
119 {
120         uint32 ptr_srv_name;         /* pointer (to server name?) */
121         UNISTR2 uni_srv_name;        /* server name */
122
123         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
124         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
125
126         uint32 sess_level;          /* session level */
127
128         SRV_SESS_INFO_CTR *ctr;
129
130         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
131         ENUM_HND enum_hnd;
132
133 } SRV_Q_NET_SESS_ENUM;
134
135 /* SRV_R_NET_SESS_ENUM */
136 typedef struct r_net_sess_enum_info
137 {
138         uint32 sess_level;          /* share level */
139
140         SRV_SESS_INFO_CTR *ctr;
141
142         uint32 total_entries;                    /* total number of entries */
143         ENUM_HND enum_hnd;
144
145         uint32 status;               /* return status */
146
147 } SRV_R_NET_SESS_ENUM;
148
149 /* CONN_INFO_0 (pointers to level 0 connection info strings) */
150 typedef struct ptr_conn_info0
151 {
152         uint32 id; /* connection id. */
153
154 } CONN_INFO_0;
155
156 /* oops - this is going to take up a *massive* amount of stack. */
157 /* the UNISTR2s already have 1024 uint16 chars in them... */
158 #define MAX_CONN_ENTRIES 32
159
160 /* SRV_CONN_INFO_0 */
161 typedef struct srv_conn_info_0_info
162 {
163         uint32 num_entries_read;                     /* EntriesRead */
164         uint32 ptr_conn_info;                       /* Buffer */
165         uint32 num_entries_read2;                    /* EntriesRead */
166
167         CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
168
169 } SRV_CONN_INFO_0;
170
171 /* CONN_INFO_1 (pointers to level 1 connection info strings) */
172 typedef struct ptr_conn_info1
173 {
174         uint32 id;   /* connection id */
175         uint32 type; /* 0x3 */
176         uint32 num_opens;
177         uint32 num_users;
178         uint32 open_time;
179
180         uint32 ptr_usr_name; /* pointer to user name. */
181         uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
182
183 } CONN_INFO_1;
184
185 /* CONN_INFO_1_STR (level 1 connection info strings) */
186 typedef struct str_conn_info1
187 {
188         UNISTR2 uni_usr_name; /* unicode string of user */
189         UNISTR2 uni_net_name; /* unicode string of name */
190
191 } CONN_INFO_1_STR;
192
193 /* SRV_CONN_INFO_1 */
194 typedef struct srv_conn_info_1_info
195 {
196         uint32 num_entries_read;                     /* EntriesRead */
197         uint32 ptr_conn_info;                       /* Buffer */
198         uint32 num_entries_read2;                    /* EntriesRead */
199
200         CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
201         CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
202
203 } SRV_CONN_INFO_1;
204
205 /* SRV_CONN_INFO_CTR */
206 typedef struct srv_conn_info_ctr_info
207 {
208         uint32 switch_value;         /* switch value */
209         uint32 ptr_conn_ctr;       /* pointer to conn info union */
210         union
211     {
212                 SRV_CONN_INFO_0 info0; /* connection info level 0 */
213                 SRV_CONN_INFO_1 info1; /* connection info level 1 */
214
215     } conn;
216
217 } SRV_CONN_INFO_CTR;
218
219
220 /* SRV_Q_NET_CONN_ENUM */
221 typedef struct q_net_conn_enum_info
222 {
223         uint32 ptr_srv_name;         /* pointer (to server name) */
224         UNISTR2 uni_srv_name;        /* server name "\\server" */
225
226         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
227         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
228
229         uint32 conn_level;          /* connection level */
230
231         SRV_CONN_INFO_CTR *ctr;
232
233         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
234         ENUM_HND enum_hnd;
235
236 } SRV_Q_NET_CONN_ENUM;
237
238 /* SRV_R_NET_CONN_ENUM */
239 typedef struct r_net_conn_enum_info
240 {
241         uint32 conn_level;          /* share level */
242
243         SRV_CONN_INFO_CTR *ctr;
244
245         uint32 total_entries;                    /* total number of entries */
246         ENUM_HND enum_hnd;
247
248         uint32 status;               /* return status */
249
250 } SRV_R_NET_CONN_ENUM;
251
252 /* SH_INFO_1 (pointers to level 1 share info strings) */
253 typedef struct ptr_share_info1
254 {
255         uint32 ptr_netname; /* pointer to net name. */
256         uint32 type; /* ipc, print, disk ... */
257         uint32 ptr_remark; /* pointer to comment. */
258
259 } SH_INFO_1;
260
261 /* SH_INFO_1_STR (level 1 share info strings) */
262 typedef struct str_share_info1
263 {
264         UNISTR2 uni_netname; /* unicode string of net name */
265         UNISTR2 uni_remark; /* unicode string of comment */
266
267 } SH_INFO_1_STR;
268
269 /* SRV_SHARE_INFO_1 */
270 typedef struct share_info_1_info
271 {
272         SH_INFO_1 info_1;
273         SH_INFO_1_STR info_1_str;
274
275 } SRV_SHARE_INFO_1;
276
277 /* SH_INFO_2 (pointers to level 2 share info strings) */
278 typedef struct ptr_share_info2
279 {
280         uint32 ptr_netname; /* pointer to net name. */
281         uint32 type; /* ipc, print, disk ... */
282         uint32 ptr_remark; /* pointer to comment. */
283         uint32 perms;      /* permissions */
284         uint32 max_uses;   /* maximum uses */
285         uint32 num_uses;   /* current uses */
286         uint32 ptr_path;   /* pointer to path name */
287         uint32 ptr_passwd; /* pointer to password */
288
289 } SH_INFO_2;
290
291 /* SH_INFO_2_STR (level 2 share info strings) */
292 typedef struct str_share_info2
293 {
294         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
295         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
296         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
297         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
298
299 } SH_INFO_2_STR;
300
301 /* SRV_SHARE_INFO_2 */
302 typedef struct share_info_2_info
303 {
304         SH_INFO_2 info_2;
305         SH_INFO_2_STR info_2_str;
306
307 } SRV_SHARE_INFO_2;
308
309 /* SH_INFO_502 (pointers to level 502 share info strings) */
310 typedef struct ptr_share_info502
311 {
312         uint32 ptr_netname; /* pointer to net name. */
313         uint32 type; /* ipc, print, disk ... */
314         uint32 ptr_remark; /* pointer to comment. */
315         uint32 perms;      /* permissions */
316         uint32 max_uses;   /* maximum uses */
317         uint32 num_uses;   /* current uses */
318         uint32 ptr_path;   /* pointer to path name */
319         uint32 ptr_passwd; /* pointer to password */
320         uint32 sd_size;    /* size of security descriptor */
321         uint32 ptr_sd;     /* pointer to security descriptor */
322
323 } SH_INFO_502;
324
325 /* SH_INFO_502_STR (level 502 share info strings) */
326 typedef struct str_share_info502
327 {
328         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
329         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
330         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
331         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
332
333         uint32 sd_size;
334         SEC_DESC *sd;
335
336 } SH_INFO_502_STR;
337
338 /* SRV_SHARE_INFO_502 */
339 /* SRV_SHARE_INFO_2 */
340 typedef struct share_info_502_info
341 {
342         SH_INFO_502 info_502;
343         SH_INFO_502_STR info_502_str;
344
345 } SRV_SHARE_INFO_502;
346
347 /* SRV_SHARE_INFO_1005 */
348 typedef struct share_info_1005_info
349 {
350   uint32 dfs_root_flag; 
351 } SRV_SHARE_INFO_1005;
352
353 /* SRV_SHARE_INFO_CTR */
354 typedef struct srv_share_info_ctr_info
355 {
356         uint32 info_level;
357         uint32 switch_value;
358         uint32 ptr_share_info;
359
360         uint32 num_entries;
361         uint32 ptr_entries;
362         uint32 num_entries2;
363
364         union {
365                 SRV_SHARE_INFO_1 *info1; /* share info level 1 */
366                 SRV_SHARE_INFO_2 *info2; /* share info level 2 */
367                 SRV_SHARE_INFO_502 *info502; /* share info level 502 */
368                 void *info;
369
370         } share;
371
372 } SRV_SHARE_INFO_CTR;
373
374 /* SRV_Q_NET_SHARE_ENUM */
375 typedef struct q_net_share_enum_info
376 {
377         uint32 ptr_srv_name;         /* pointer (to server name?) */
378         UNISTR2 uni_srv_name;        /* server name */
379
380         SRV_SHARE_INFO_CTR ctr;     /* share info container */
381
382         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
383
384         ENUM_HND enum_hnd;
385
386 } SRV_Q_NET_SHARE_ENUM;
387
388
389 /* SRV_R_NET_SHARE_ENUM */
390 typedef struct r_net_share_enum_info
391 {
392         SRV_SHARE_INFO_CTR ctr;     /* share info container */
393
394         uint32 total_entries;                    /* total number of entries */
395         ENUM_HND enum_hnd;
396
397         uint32 status;               /* return status */
398
399 } SRV_R_NET_SHARE_ENUM;
400
401
402 /* SRV_Q_NET_SHARE_GET_INFO */
403 typedef struct q_net_share_get_info_info
404 {
405         uint32 ptr_srv_name;
406         UNISTR2 uni_srv_name;
407
408         UNISTR2 uni_share_name;
409         uint32 info_level;
410
411 } SRV_Q_NET_SHARE_GET_INFO;
412
413 /* SRV_SHARE_INFO */
414 typedef struct srv_share_info {
415         uint32 switch_value;
416         uint32 ptr_share_ctr;
417
418         union {
419                 SRV_SHARE_INFO_1 info1;
420                 SRV_SHARE_INFO_2 info2;
421                 SRV_SHARE_INFO_502 info502;
422         SRV_SHARE_INFO_1005 info1005;
423         } share;
424 } SRV_SHARE_INFO;
425
426 /* SRV_R_NET_SHARE_GET_INFO */
427 typedef struct r_net_share_get_info_info
428 {
429         SRV_SHARE_INFO info;
430         uint32 status;
431
432 } SRV_R_NET_SHARE_GET_INFO;
433
434 /* JRA. NB. We also need level 1004, 1006 and 1501 here. */
435
436 /* SRV_Q_NET_SHARE_SET_INFO */
437 typedef struct q_net_share_set_info_info
438 {
439         uint32 ptr_srv_name;
440         UNISTR2 uni_srv_name;
441
442         UNISTR2 uni_share_name;
443         uint32 info_level;
444
445         SRV_SHARE_INFO info;
446
447 } SRV_Q_NET_SHARE_SET_INFO;
448
449 /* SRV_R_NET_SHARE_SET_INFO */
450 typedef struct r_net_share_set_info
451 {
452         uint32 switch_value;         /* switch value */
453
454         uint32 status;               /* return status */
455
456 } SRV_R_NET_SHARE_SET_INFO;
457
458 /* FILE_INFO_3 (level 3 file info strings) */
459 typedef struct file_info3_info
460 {
461         uint32 id;            /* file index */
462         uint32 perms;         /* file permissions. don't know what format */
463         uint32 num_locks;     /* file locks */
464         uint32 ptr_path_name; /* file name */
465         uint32 ptr_user_name; /* file owner */
466
467 } FILE_INFO_3;
468
469 /* FILE_INFO_3_STR (level 3 file info strings) */
470 typedef struct str_file_info3_info
471 {
472         UNISTR2 uni_path_name; /* unicode string of file name */
473         UNISTR2 uni_user_name; /* unicode string of file owner. */
474
475 } FILE_INFO_3_STR;
476
477 /* oops - this is going to take up a *massive* amount of stack. */
478 /* the UNISTR2s already have 1024 uint16 chars in them... */
479 #define MAX_FILE_ENTRIES 32
480
481 /* SRV_FILE_INFO_3 */
482 typedef struct srv_file_info_3
483 {
484         uint32 num_entries_read;                     /* EntriesRead */
485         uint32 ptr_file_info;                        /* Buffer */
486
487         uint32 num_entries_read2;                    /* EntriesRead */
488
489         FILE_INFO_3     info_3    [MAX_FILE_ENTRIES]; /* file entry details */
490         FILE_INFO_3_STR info_3_str[MAX_FILE_ENTRIES]; /* file entry strings */
491
492 } SRV_FILE_INFO_3;
493
494 /* SRV_FILE_INFO_CTR */
495 typedef struct srv_file_info_3_info
496 {
497         uint32 switch_value;         /* switch value */
498         uint32 ptr_file_ctr;       /* pointer to file info union */
499         union
500     {
501                 SRV_FILE_INFO_3 info3; /* file info with 0 entries */
502
503     } file;
504
505 } SRV_FILE_INFO_CTR;
506
507
508 /* SRV_Q_NET_FILE_ENUM */
509 typedef struct q_net_file_enum_info
510 {
511         uint32 ptr_srv_name;         /* pointer (to server name?) */
512         UNISTR2 uni_srv_name;        /* server name */
513
514         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
515         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
516
517         uint32 file_level;          /* file level */
518
519         SRV_FILE_INFO_CTR *ctr;
520
521         uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
522         ENUM_HND enum_hnd;
523
524 } SRV_Q_NET_FILE_ENUM;
525
526
527 /* SRV_R_NET_FILE_ENUM */
528 typedef struct r_net_file_enum_info
529 {
530         uint32 file_level;          /* file level */
531
532         SRV_FILE_INFO_CTR *ctr;
533
534         uint32 total_entries;                    /* total number of files */
535         ENUM_HND enum_hnd;
536
537         uint32 status;        /* return status */
538
539 } SRV_R_NET_FILE_ENUM;
540
541 /* SRV_INFO_100 */
542 typedef struct srv_info_100_info
543 {
544         uint32 platform_id;     /* 0x500 */
545         uint32 ptr_name;        /* pointer to server name */
546
547         UNISTR2 uni_name;       /* server name "server" */
548
549 } SRV_INFO_100;
550
551 /* SRV_INFO_101 */
552 typedef struct srv_info_101_info
553 {
554         uint32 platform_id;     /* 0x500 */
555         uint32 ptr_name;        /* pointer to server name */
556         uint32 ver_major;       /* 0x4 */
557         uint32 ver_minor;       /* 0x2 */
558         uint32 srv_type;        /* browse etc type */
559         uint32 ptr_comment;     /* pointer to server comment */
560
561         UNISTR2 uni_name;       /* server name "server" */
562         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
563
564 } SRV_INFO_101;
565
566 /* SRV_INFO_102  */
567 typedef struct srv_info_102_info
568 {
569         uint32 platform_id;     /* 0x500 */
570         uint32 ptr_name;        /* pointer to server name */
571         uint32 ver_major;       /* 0x4 */
572         uint32 ver_minor;       /* 0x2 */
573         uint32 srv_type;        /* browse etc type */
574         uint32 ptr_comment;     /* pointer to server comment */
575         uint32 users;           /* 0xffff ffff*/
576         uint32 disc;            /* 0xf */
577         uint32 hidden;          /* 0x0 */
578         uint32 announce;        /* 240 */
579         uint32 ann_delta;       /* 3000 */
580         uint32 licenses;        /* 0 */
581         uint32 ptr_usr_path;    /* pointer to user path */
582
583         UNISTR2 uni_name;       /* server name "server" */
584         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
585         UNISTR2 uni_usr_path;   /* "c:\" (eh?) */
586
587 } SRV_INFO_102;
588
589
590 /* SRV_INFO_CTR */
591 typedef struct srv_info_ctr_info
592 {
593         uint32 switch_value;         /* switch value */
594         uint32 ptr_srv_ctr;         /* pointer to server info */
595         union
596     {
597                 SRV_INFO_102 sv102; /* server info level 102 */
598                 SRV_INFO_101 sv101; /* server info level 101 */
599                 SRV_INFO_100 sv100; /* server info level 100 */
600
601     } srv;
602
603 } SRV_INFO_CTR;
604
605 /* SRV_Q_NET_SRV_GET_INFO */
606 typedef struct q_net_srv_get_info
607 {
608         uint32  ptr_srv_name;
609         UNISTR2 uni_srv_name; /* "\\server" */
610         uint32  switch_value;
611
612 } SRV_Q_NET_SRV_GET_INFO;
613
614 /* SRV_R_NET_SRV_GET_INFO */
615 typedef struct r_net_srv_get_info
616 {
617         SRV_INFO_CTR *ctr;
618
619         uint32 status;               /* return status */
620
621 } SRV_R_NET_SRV_GET_INFO;
622
623 /* SRV_Q_NET_SRV_SET_INFO */
624 typedef struct q_net_srv_set_info
625 {
626         uint32  ptr_srv_name;
627         UNISTR2 uni_srv_name; /* "\\server" */
628         uint32  switch_value;
629
630         SRV_INFO_CTR *ctr;
631
632 } SRV_Q_NET_SRV_SET_INFO;
633
634
635 /* SRV_R_NET_SRV_SET_INFO */
636 typedef struct r_net_srv_set_info
637 {
638         uint32 switch_value;         /* switch value */
639
640         uint32 status;               /* return status */
641
642 } SRV_R_NET_SRV_SET_INFO;
643
644 /* SRV_Q_NET_REMOTE_TOD */
645 typedef struct q_net_remote_tod
646 {
647         uint32  ptr_srv_name;
648         UNISTR2 uni_srv_name; /* "\\server" */
649
650 } SRV_Q_NET_REMOTE_TOD;
651
652 /* TIME_OF_DAY_INFO */
653 typedef struct time_of_day_info
654 {
655         uint32  elapsedt;
656         uint32  msecs;
657         uint32  hours;
658         uint32  mins;
659         uint32  secs;
660         uint32  hunds;
661         uint32  zone;
662         uint32  tintervals;
663         uint32  day;
664         uint32  month;
665         uint32  year;
666         uint32  weekday;
667         
668 } TIME_OF_DAY_INFO;
669
670 /* SRV_R_NET_REMOTE_TOD */
671 typedef struct r_net_remote_tod
672 {
673         uint32 ptr_srv_tod;         /* pointer to TOD */
674         TIME_OF_DAY_INFO *tod;
675         
676         uint32 status;               /* return status */
677
678 } SRV_R_NET_REMOTE_TOD;
679
680
681 #endif /* _RPC_SRVSVC_H */