Remove unused marshalling for SRV_NET_FILE_SET_SECDESC and SRV_R_NET_FILE_GET_SECDESC.
[samba.git] / source / include / rpc_srvsvc.h
1 /*
2    Unix SMB/CIFS implementation.
3    SMB parameters and setup
4    Copyright (C) Andrew Tridgell 1992-1997
5    Copyright (C) Luke Kenneth Casson Leighton 1996-1997
6    Copyright (C) Paul Ashton 1997
7    Copyright (C) Nigel Williams 2001
8    Copyright (C) Gerald (Jerry) Carter 2006.
9
10    
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 3 of the License, or
14    (at your option) any later version.
15    
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20    
21    You should have received a copy of the GNU General Public License
22    along with this program.  If not, see <http://www.gnu.org/licenses/>.
23 */
24
25 #ifndef _RPC_SRVSVC_H /* _RPC_SRVSVC_H */
26 #define _RPC_SRVSVC_H 
27
28 /* srvsvc pipe */
29 #define SRV_NET_CONN_ENUM          0x08
30 #define SRV_NET_FILE_ENUM          0x09
31 #define SRV_NET_FILE_CLOSE         0x0b
32 #define SRV_NET_SESS_ENUM          0x0c
33 #define SRV_NET_SESS_DEL           0x0d
34 #define SRV_NET_SHARE_ADD          0x0e
35 #define SRV_NET_SHARE_ENUM_ALL     0x0f
36 #define SRV_NET_SHARE_GET_INFO     0x10
37 #define SRV_NET_SHARE_SET_INFO     0x11
38 #define SRV_NET_SHARE_DEL          0x12
39 #define SRV_NET_SHARE_DEL_STICKY   0x13
40 #define SRV_NET_SRV_GET_INFO       0x15
41 #define SRV_NET_SRV_SET_INFO       0x16
42 #define SRV_NET_DISK_ENUM          0x17
43 #define SRV_NET_REMOTE_TOD         0x1c
44 #define SRV_NET_NAME_VALIDATE      0x21
45 #define SRV_NET_SHARE_ENUM         0x24
46 #define SRV_NET_FILE_QUERY_SECDESC 0x27
47 #define SRV_NET_FILE_SET_SECDESC   0x28
48
49 #define MAX_SERVER_DISK_ENTRIES 15
50
51 typedef struct disk_info {
52         uint32  unknown;
53         UNISTR3 disk_name;
54 } DISK_INFO;
55
56 typedef struct disk_enum_container {
57         uint32 level;
58         uint32 entries_read;
59         uint32 unknown;
60         uint32 disk_info_ptr;
61         DISK_INFO *disk_info;
62 } DISK_ENUM_CONTAINER;
63
64 typedef struct net_srv_disk_enum {
65         uint32 ptr_srv_name;         /* pointer (to server name?) */
66         UNISTR2 uni_srv_name;        /* server name */
67
68         DISK_ENUM_CONTAINER disk_enum_ctr;
69
70         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
71         uint32 total_entries;        /* total number of entries */
72         ENUM_HND enum_hnd;
73         WERROR status;               /* return status */
74 } SRV_Q_NET_DISK_ENUM, SRV_R_NET_DISK_ENUM;
75
76 /***************************/
77
78 /* oops - this is going to take up a *massive* amount of stack. */
79 /* the UNISTR2s already have 1024 uint16 chars in them... */
80
81 #define MAX_SESS_ENTRIES 32
82
83 typedef struct {
84         UNISTR2 *sharename;
85 } SESS_INFO_0;
86
87 typedef struct {
88         uint32 num_entries_read;
89         uint32 ptr_sess_info;
90         uint32 num_entries_read2;
91         SESS_INFO_0 info_0[MAX_SESS_ENTRIES];
92 } SRV_SESS_INFO_0;
93
94 typedef struct {
95         UNISTR2 *sharename;
96         UNISTR2 *username;
97         uint32 num_opens;
98         uint32 open_time;
99         uint32 idle_time;
100         uint32 user_flags;
101 } SESS_INFO_1;
102
103 typedef struct {
104         uint32 num_entries_read;
105         uint32 ptr_sess_info;
106         uint32 num_entries_read2;
107         SESS_INFO_1 info_1[MAX_SESS_ENTRIES];
108 } SRV_SESS_INFO_1;
109
110 typedef struct {
111         uint32 switch_value;
112         uint32 ptr_sess_ctr;
113         union {
114                 SRV_SESS_INFO_0 info0; 
115                 SRV_SESS_INFO_1 info1; 
116         } sess;
117
118 } SRV_SESS_INFO_CTR;
119
120 typedef struct {
121         UNISTR2 *servername;
122         UNISTR2 *qualifier;
123         UNISTR2 *username;
124         uint32 sess_level;
125         SRV_SESS_INFO_CTR *ctr;
126         uint32 preferred_len;
127         ENUM_HND enum_hnd;
128 } SRV_Q_NET_SESS_ENUM;
129
130 typedef struct {
131         uint32 sess_level; 
132         SRV_SESS_INFO_CTR *ctr;
133         uint32 total_entries;
134         ENUM_HND enum_hnd;
135         WERROR status;
136 } SRV_R_NET_SESS_ENUM;
137
138 /***************************/
139
140 /* SRV_Q_NET_SESS_DEL */
141 typedef struct q_net_sess_del
142 {
143         uint32 ptr_srv_name;         /* pointer (to server name?) */
144         UNISTR2 uni_srv_name;        /* server name */
145
146         uint32 ptr_cli_name;         /* pointer (to qualifier name) */
147         UNISTR2 uni_cli_name;        /* qualifier name "\\qualifier" */
148
149         uint32 ptr_user_name;         /* pointer (to user name */
150         UNISTR2 uni_user_name;        /* user name */
151
152 } SRV_Q_NET_SESS_DEL;
153
154 /* SRV_R_NET_SESS_DEL */
155 typedef struct r_net_sess_del
156 {
157         WERROR status;               /* return status */
158
159 } SRV_R_NET_SESS_DEL;
160
161 /* CONN_INFO_0 (pointers to level 0 connection info strings) */
162 typedef struct ptr_conn_info0
163 {
164         uint32 id; /* connection id. */
165
166 } CONN_INFO_0;
167
168 /* oops - this is going to take up a *massive* amount of stack. */
169 /* the UNISTR2s already have 1024 uint16 chars in them... */
170 #define MAX_CONN_ENTRIES 32
171
172 /* SRV_CONN_INFO_0 */
173 typedef struct srv_conn_info_0_info
174 {
175         uint32 num_entries_read;                     /* EntriesRead */
176         uint32 ptr_conn_info;                       /* Buffer */
177         uint32 num_entries_read2;                    /* EntriesRead */
178
179         CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
180
181 } SRV_CONN_INFO_0;
182
183 /* CONN_INFO_1 (pointers to level 1 connection info strings) */
184 typedef struct ptr_conn_info1
185 {
186         uint32 id;   /* connection id */
187         uint32 type; /* 0x3 */
188         uint32 num_opens;
189         uint32 num_users;
190         uint32 open_time;
191
192         uint32 ptr_usr_name; /* pointer to user name. */
193         uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
194
195 } CONN_INFO_1;
196
197 /* CONN_INFO_1_STR (level 1 connection info strings) */
198 typedef struct str_conn_info1
199 {
200         UNISTR2 uni_usr_name; /* unicode string of user */
201         UNISTR2 uni_net_name; /* unicode string of name */
202
203 } CONN_INFO_1_STR;
204
205 /* SRV_CONN_INFO_1 */
206 typedef struct srv_conn_info_1_info
207 {
208         uint32 num_entries_read;                     /* EntriesRead */
209         uint32 ptr_conn_info;                       /* Buffer */
210         uint32 num_entries_read2;                    /* EntriesRead */
211
212         CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
213         CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
214
215 } SRV_CONN_INFO_1;
216
217 /* SRV_CONN_INFO_CTR */
218 typedef struct srv_conn_info_ctr_info
219 {
220         uint32 switch_value;         /* switch value */
221         uint32 ptr_conn_ctr;       /* pointer to conn info union */
222         union
223     {
224                 SRV_CONN_INFO_0 info0; /* connection info level 0 */
225                 SRV_CONN_INFO_1 info1; /* connection info level 1 */
226
227     } conn;
228
229 } SRV_CONN_INFO_CTR;
230
231
232 /* SRV_Q_NET_CONN_ENUM */
233 typedef struct q_net_conn_enum_info
234 {
235         uint32 ptr_srv_name;         /* pointer (to server name) */
236         UNISTR2 uni_srv_name;        /* server name "\\server" */
237
238         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
239         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
240
241         uint32 conn_level;          /* connection level */
242
243         SRV_CONN_INFO_CTR *ctr;
244
245         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
246         ENUM_HND enum_hnd;
247
248 } SRV_Q_NET_CONN_ENUM;
249
250 /* SRV_R_NET_CONN_ENUM */
251 typedef struct r_net_conn_enum_info
252 {
253         uint32 conn_level;          /* share level */
254
255         SRV_CONN_INFO_CTR *ctr;
256
257         uint32 total_entries;                    /* total number of entries */
258         ENUM_HND enum_hnd;
259
260         WERROR status;               /* return status */
261
262 } SRV_R_NET_CONN_ENUM;
263
264 /* SH_INFO_0 */
265 typedef struct ptr_share_info0
266 {
267         uint32 ptr_netname; /* pointer to net name. */
268 } SH_INFO_0;
269
270 /* SH_INFO_0_STR (level 0 share info strings) */
271 typedef struct str_share_info0
272 {
273         SH_INFO_0 *ptrs;
274
275         UNISTR2 uni_netname; /* unicode string of net name */
276
277 } SH_INFO_0_STR;
278
279 /* SRV_SHARE_INFO_0 */
280 typedef struct share_info_0_info
281 {
282         SH_INFO_0 info_0;
283         SH_INFO_0_STR info_0_str;
284
285 } SRV_SHARE_INFO_0;
286
287 /* SH_INFO_1 (pointers to level 1 share info strings) */
288 typedef struct ptr_share_info1
289 {
290         uint32 ptr_netname; /* pointer to net name. */
291         uint32 type; /* ipc, print, disk ... */
292         uint32 ptr_remark; /* pointer to comment. */
293
294 } SH_INFO_1;
295
296 /* SH_INFO_1_STR (level 1 share info strings) */
297 typedef struct str_share_info1
298 {
299         SH_INFO_1 *ptrs;
300
301         UNISTR2 uni_netname; /* unicode string of net name */
302         UNISTR2 uni_remark; /* unicode string of comment */
303
304 } SH_INFO_1_STR;
305
306 /* SRV_SHARE_INFO_1 */
307 typedef struct share_info_1_info
308 {
309         SH_INFO_1 info_1;
310         SH_INFO_1_STR info_1_str;
311
312 } SRV_SHARE_INFO_1;
313
314 /* SH_INFO_2 (pointers to level 2 share info strings) */
315 typedef struct ptr_share_info2
316 {
317         uint32 ptr_netname; /* pointer to net name. */
318         uint32 type; /* ipc, print, disk ... */
319         uint32 ptr_remark; /* pointer to comment. */
320         uint32 perms;      /* permissions */
321         uint32 max_uses;   /* maximum uses */
322         uint32 num_uses;   /* current uses */
323         uint32 ptr_path;   /* pointer to path name */
324         uint32 ptr_passwd; /* pointer to password */
325
326 } SH_INFO_2;
327
328 /* SH_INFO_2_STR (level 2 share info strings) */
329 typedef struct str_share_info2
330 {
331         SH_INFO_2 *ptrs;
332
333         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
334         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
335         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
336         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
337
338 } SH_INFO_2_STR;
339
340 /* SRV_SHARE_INFO_2 */
341 typedef struct share_info_2_info
342 {
343         SH_INFO_2 info_2;
344         SH_INFO_2_STR info_2_str;
345
346 } SRV_SHARE_INFO_2;
347
348 typedef struct ptr_share_info501
349 {
350         uint32 ptr_netname; /* pointer to net name */
351         uint32 type;     /* ipc, print, disk */
352         uint32 ptr_remark;  /* pointer to comment */
353         uint32 csc_policy;  /* client-side offline caching policy << 4 */
354 } SH_INFO_501;
355
356 typedef struct str_share_info501
357 {
358         UNISTR2 uni_netname; /* unicode string of net name */
359         UNISTR2 uni_remark;  /* unicode string of comment */
360 } SH_INFO_501_STR;
361
362 /* SRV_SHARE_INFO_501 */
363 typedef struct share_info_501_info
364 {
365         SH_INFO_501 info_501;
366         SH_INFO_501_STR info_501_str;
367 } SRV_SHARE_INFO_501;
368
369 /* SH_INFO_502 (pointers to level 502 share info strings) */
370 typedef struct ptr_share_info502
371 {
372         uint32 ptr_netname; /* pointer to net name. */
373         uint32 type; /* ipc, print, disk ... */
374         uint32 ptr_remark; /* pointer to comment. */
375         uint32 perms;      /* permissions */
376         uint32 max_uses;   /* maximum uses */
377         uint32 num_uses;   /* current uses */
378         uint32 ptr_path;   /* pointer to path name */
379         uint32 ptr_passwd; /* pointer to password */
380         uint32 reserved;    /* this holds the space taken by the sd in the rpc packet */
381         uint32 reserved_offset;   /* required for _post operation when marshalling */
382         uint32 sd_size;    /* size of security descriptor */
383         uint32 ptr_sd;     /* pointer to security descriptor */
384
385 } SH_INFO_502;
386
387 /* SH_INFO_502_STR (level 502 share info strings) */
388 typedef struct str_share_info502
389 {
390         SH_INFO_502 *ptrs;
391
392         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
393         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
394         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
395         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
396
397         uint32 reserved;
398         uint32 sd_size;
399         SEC_DESC *sd;
400
401 } SH_INFO_502_STR;
402
403 /* SRV_SHARE_INFO_502 */
404 typedef struct share_info_502_info
405 {
406         SH_INFO_502 info_502;
407         SH_INFO_502_STR info_502_str;
408
409 } SRV_SHARE_INFO_502;
410
411 typedef struct ptr_share_info1004
412 {
413         uint32 ptr_remark;
414
415 } SH_INFO_1004;
416
417 typedef struct str_share_info1004
418 {
419         SH_INFO_1004 *ptrs;
420
421         UNISTR2 uni_remark;
422
423 } SH_INFO_1004_STR;
424
425 typedef struct ptr_info_1004_info
426 {
427         SH_INFO_1004     info_1004; 
428         SH_INFO_1004_STR info_1004_str; 
429 } SRV_SHARE_INFO_1004;
430
431 typedef struct share_info_1005_info
432 {
433   uint32 share_info_flags; 
434 } SRV_SHARE_INFO_1005;
435
436 typedef struct share_info_1006_info
437 {
438         uint32 max_uses; 
439 } SRV_SHARE_INFO_1006;
440
441 typedef struct ptr_share_info1007
442 {
443         uint32 flags;
444         uint32 ptr_AlternateDirectoryName;
445
446 } SH_INFO_1007;
447
448 typedef struct str_share_info1007
449 {
450         SH_INFO_1007 *ptrs;
451
452         UNISTR2 uni_AlternateDirectoryName;
453
454 } SH_INFO_1007_STR;
455
456 typedef struct ptr_info_1007_info
457 {
458         SH_INFO_1007     info_1007; 
459         SH_INFO_1007_STR info_1007_str; 
460 } SRV_SHARE_INFO_1007;
461
462 /* SRV_SHARE_INFO_1501 */
463 typedef struct share_info_1501_info
464 {
465         SEC_DESC_BUF *sdb;
466 } SRV_SHARE_INFO_1501;
467
468 /* SRV_SHARE_INFO_CTR */
469 typedef struct srv_share_info_ctr_info
470 {
471         uint32 info_level;
472         uint32 switch_value;
473         uint32 ptr_share_info;
474
475         uint32 num_entries;
476         uint32 ptr_entries;
477         uint32 num_entries2;
478
479         union {
480                 SRV_SHARE_INFO_0    *info0;
481                 SRV_SHARE_INFO_1    *info1;    /* share info level 1 */
482                 SRV_SHARE_INFO_2    *info2;    /* share info level 2 */
483                 SRV_SHARE_INFO_501  *info501;  /* share info level 501 */
484                 SRV_SHARE_INFO_502  *info502;  /* share info level 502 */
485                 SRV_SHARE_INFO_1004 *info1004;
486                 SRV_SHARE_INFO_1005 *info1005;
487                 SRV_SHARE_INFO_1006 *info1006;
488                 SRV_SHARE_INFO_1007 *info1007;
489                 SRV_SHARE_INFO_1501 *info1501;
490                 void *info;
491
492         } share;
493
494 } SRV_SHARE_INFO_CTR;
495
496 /* SRV_Q_NET_SHARE_ENUM */
497 typedef struct q_net_share_enum_info
498 {
499         uint32 ptr_srv_name;         /* pointer (to server name?) */
500         UNISTR2 uni_srv_name;        /* server name */
501
502         SRV_SHARE_INFO_CTR ctr;     /* share info container */
503
504         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
505
506         ENUM_HND enum_hnd;
507
508 } SRV_Q_NET_SHARE_ENUM;
509
510
511 /* SRV_R_NET_SHARE_ENUM */
512 typedef struct r_net_share_enum_info
513 {
514         SRV_SHARE_INFO_CTR ctr;     /* share info container */
515
516         uint32 total_entries;                    /* total number of entries */
517         ENUM_HND enum_hnd;
518
519         WERROR status;               /* return status */
520
521 } SRV_R_NET_SHARE_ENUM;
522
523
524 /* SRV_Q_NET_SHARE_GET_INFO */
525 typedef struct q_net_share_get_info_info
526 {
527         uint32 ptr_srv_name;
528         UNISTR2 uni_srv_name;
529
530         UNISTR2 uni_share_name;
531         uint32 info_level;
532
533 } SRV_Q_NET_SHARE_GET_INFO;
534
535 /* SRV_SHARE_INFO */
536 typedef struct srv_share_info {
537         uint32 switch_value;
538         uint32 ptr_share_ctr;
539
540         union {
541                 SRV_SHARE_INFO_0    info0;
542                 SRV_SHARE_INFO_1 info1;
543                 SRV_SHARE_INFO_2 info2;
544                 SRV_SHARE_INFO_501 info501;
545                 SRV_SHARE_INFO_502 info502;
546                 SRV_SHARE_INFO_1004 info1004;
547                 SRV_SHARE_INFO_1005 info1005;
548                 SRV_SHARE_INFO_1006 info1006;
549                 SRV_SHARE_INFO_1007 info1007;
550                 SRV_SHARE_INFO_1501 info1501;
551         } share;
552 } SRV_SHARE_INFO;
553
554 /* SRV_R_NET_SHARE_GET_INFO */
555 typedef struct r_net_share_get_info_info
556 {
557         SRV_SHARE_INFO info;
558         WERROR status;
559
560 } SRV_R_NET_SHARE_GET_INFO;
561
562 /* SRV_Q_NET_SHARE_SET_INFO */
563 typedef struct q_net_share_set_info_info
564 {
565         uint32 ptr_srv_name;
566         UNISTR2 uni_srv_name;
567
568         UNISTR2 uni_share_name;
569         uint32 info_level;
570
571         SRV_SHARE_INFO info;
572
573         uint32 ptr_parm_error;
574         uint32 parm_error;
575
576 } SRV_Q_NET_SHARE_SET_INFO;
577
578 /* SRV_R_NET_SHARE_SET_INFO */
579 typedef struct r_net_share_set_info
580 {
581         uint32 ptr_parm_error;
582         uint32 parm_error;
583
584         WERROR status;               /* return status */
585
586 } SRV_R_NET_SHARE_SET_INFO;
587
588 /* SRV_Q_NET_SHARE_ADD */
589 typedef struct q_net_share_add
590 {
591         uint32 ptr_srv_name;
592         UNISTR2 uni_srv_name;
593
594         uint32 info_level;
595
596         SRV_SHARE_INFO info;
597
598         uint32 ptr_err_index; /* pointer to error index */
599         uint32 err_index;     /* index in info to field in error */
600
601 } SRV_Q_NET_SHARE_ADD;
602
603 /* SRV_R_NET_SHARE_ADD */
604 typedef struct r_net_share_add
605 {
606
607         uint32 ptr_parm_error;
608         uint32 parm_error;
609
610         WERROR status;               /* return status */
611
612 } SRV_R_NET_SHARE_ADD;
613
614 /***************************/
615
616 typedef struct {
617         uint32 id;            /* file index */
618         uint32 perms;         /* file permissions. don't know what format */
619         uint32 num_locks;     /* file locks */
620         UNISTR2 *path;        /* file name */
621         UNISTR2 *user;        /* file owner */
622 } FILE_INFO_3;
623
624 typedef struct {
625         uint32 level;                /* switch value */
626         uint32 ptr_file_info;        /* pointer to file info union */
627
628         uint32 num_entries;
629         uint32 ptr_entries;
630         uint32 num_entries2;
631         union {
632                 FILE_INFO_3 *info3;
633         } file;
634
635 } SRV_FILE_INFO_CTR;
636
637 typedef struct {
638         UNISTR2 *servername;
639         UNISTR2 *qualifier;
640         UNISTR2 *username;
641         uint32 level;
642         SRV_FILE_INFO_CTR ctr;
643         uint32 preferred_len;     /* preferred maximum length (0xffff ffff) */
644         ENUM_HND enum_hnd;
645 } SRV_Q_NET_FILE_ENUM;
646
647 typedef struct {
648         uint32 level;   
649         SRV_FILE_INFO_CTR ctr;
650         uint32 total_entries;
651         ENUM_HND enum_hnd;
652         WERROR status;      
653 } SRV_R_NET_FILE_ENUM;
654
655 #endif /* _RPC_SRVSVC_H */