[GLUE] Rsync SAMBA_3_0 SVN r25598 in order to create the v3-0-test branch.
[Samba.git] / source / rpc_parse / parse_srv.c
blobb562b6d6f79213c69f3aa70fa0243083e743265d
1 /*
2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
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) Jeremy Allison 1999,
8 * Copyright (C) Nigel Williams 2001,
9 * Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2002.
10 * Copyright (C) Gerald (Jerry) Carter 2006.
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 #include "includes.h"
29 #undef DBGC_CLASS
30 #define DBGC_CLASS DBGC_RPC_PARSE
32 /*******************************************************************
33 Inits a SH_INFO_0_STR structure
34 ********************************************************************/
36 void init_srv_share_info0_str(SH_INFO_0_STR *sh0, const char *net_name)
38 DEBUG(5,("init_srv_share_info0_str\n"));
40 init_unistr2(&sh0->uni_netname, net_name, UNI_STR_TERMINATE);
43 /*******************************************************************
44 Reads or writes a structure.
45 ********************************************************************/
47 static BOOL srv_io_share_info0_str(const char *desc, SH_INFO_0_STR *sh0, prs_struct *ps, int depth)
49 if (sh0 == NULL)
50 return False;
52 prs_debug(ps, depth, desc, "srv_io_share_info0_str");
53 depth++;
55 if(!prs_align(ps))
56 return False;
57 if(sh0->ptrs->ptr_netname)
58 if(!smb_io_unistr2("", &sh0->uni_netname, True, ps, depth))
59 return False;
61 return True;
64 /*******************************************************************
65 makes a SH_INFO_0 structure
66 ********************************************************************/
68 void init_srv_share_info0(SH_INFO_0 *sh0, const char *net_name)
70 DEBUG(5,("init_srv_share_info0: %s\n", net_name));
72 sh0->ptr_netname = (net_name != NULL) ? 1 : 0;
75 /*******************************************************************
76 Reads or writes a structure.
77 ********************************************************************/
79 static BOOL srv_io_share_info0(const char *desc, SH_INFO_0 *sh0, prs_struct *ps, int depth)
81 if (sh0 == NULL)
82 return False;
84 prs_debug(ps, depth, desc, "srv_io_share_info0");
85 depth++;
87 if(!prs_align(ps))
88 return False;
90 if(!prs_uint32("ptr_netname", ps, depth, &sh0->ptr_netname))
91 return False;
93 return True;
96 /*******************************************************************
97 Inits a SH_INFO_1_STR structure
98 ********************************************************************/
100 void init_srv_share_info1_str(SH_INFO_1_STR *sh1, const char *net_name, const char *remark)
102 DEBUG(5,("init_srv_share_info1_str\n"));
104 init_unistr2(&sh1->uni_netname, net_name, UNI_STR_TERMINATE);
105 init_unistr2(&sh1->uni_remark, remark, UNI_STR_TERMINATE);
108 /*******************************************************************
109 Reads or writes a structure.
110 ********************************************************************/
112 static BOOL srv_io_share_info1_str(const char *desc, SH_INFO_1_STR *sh1, prs_struct *ps, int depth)
114 if (sh1 == NULL)
115 return False;
117 prs_debug(ps, depth, desc, "srv_io_share_info1_str");
118 depth++;
120 if(!prs_align(ps))
121 return False;
123 if(sh1->ptrs->ptr_netname)
124 if(!smb_io_unistr2("", &sh1->uni_netname, True, ps, depth))
125 return False;
127 if(!prs_align(ps))
128 return False;
130 if(sh1->ptrs->ptr_remark)
131 if(!smb_io_unistr2("", &sh1->uni_remark, True, ps, depth))
132 return False;
134 return True;
137 /*******************************************************************
138 makes a SH_INFO_1 structure
139 ********************************************************************/
141 void init_srv_share_info1(SH_INFO_1 *sh1, const char *net_name, uint32 type, const char *remark)
143 DEBUG(5,("init_srv_share_info1: %s %8x %s\n", net_name, type, remark));
145 sh1->ptr_netname = (net_name != NULL) ? 1 : 0;
146 sh1->type = type;
147 sh1->ptr_remark = (remark != NULL) ? 1 : 0;
150 /*******************************************************************
151 Reads or writes a structure.
152 ********************************************************************/
154 static BOOL srv_io_share_info1(const char *desc, SH_INFO_1 *sh1, prs_struct *ps, int depth)
156 if (sh1 == NULL)
157 return False;
159 prs_debug(ps, depth, desc, "srv_io_share_info1");
160 depth++;
162 if(!prs_align(ps))
163 return False;
165 if(!prs_uint32("ptr_netname", ps, depth, &sh1->ptr_netname))
166 return False;
167 if(!prs_uint32("type ", ps, depth, &sh1->type))
168 return False;
169 if(!prs_uint32("ptr_remark ", ps, depth, &sh1->ptr_remark))
170 return False;
172 return True;
175 /*******************************************************************
176 Inits a SH_INFO_2_STR structure
177 ********************************************************************/
179 void init_srv_share_info2_str(SH_INFO_2_STR *sh2,
180 const char *net_name, const char *remark,
181 const char *path, const char *passwd)
183 DEBUG(5,("init_srv_share_info2_str\n"));
185 init_unistr2(&sh2->uni_netname, net_name, UNI_STR_TERMINATE);
186 init_unistr2(&sh2->uni_remark, remark, UNI_STR_TERMINATE);
187 init_unistr2(&sh2->uni_path, path, UNI_STR_TERMINATE);
188 init_unistr2(&sh2->uni_passwd, passwd, UNI_STR_TERMINATE);
191 /*******************************************************************
192 Reads or writes a structure.
193 ********************************************************************/
195 static BOOL srv_io_share_info2_str(const char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
197 if (sh2 == NULL)
198 return False;
200 if (UNMARSHALLING(ps))
201 ZERO_STRUCTP(sh2);
203 prs_debug(ps, depth, desc, "srv_io_share_info2_str");
204 depth++;
206 if(!prs_align(ps))
207 return False;
209 if (sh->ptr_netname)
210 if(!smb_io_unistr2("", &sh2->uni_netname, True, ps, depth))
211 return False;
213 if (sh->ptr_remark)
214 if(!smb_io_unistr2("", &sh2->uni_remark, True, ps, depth))
215 return False;
217 if (sh->ptr_netname)
218 if(!smb_io_unistr2("", &sh2->uni_path, True, ps, depth))
219 return False;
221 if (sh->ptr_passwd)
222 if(!smb_io_unistr2("", &sh2->uni_passwd, True, ps, depth))
223 return False;
225 return True;
228 /*******************************************************************
229 Inits a SH_INFO_2 structure
230 ********************************************************************/
232 void init_srv_share_info2(SH_INFO_2 *sh2,
233 const char *net_name, uint32 type, const char *remark,
234 uint32 perms, uint32 max_uses, uint32 num_uses,
235 const char *path, const char *passwd)
237 DEBUG(5,("init_srv_share_info2: %s %8x %s\n", net_name, type, remark));
239 sh2->ptr_netname = (net_name != NULL) ? 1 : 0;
240 sh2->type = type;
241 sh2->ptr_remark = (remark != NULL) ? 1 : 0;
242 sh2->perms = perms;
243 sh2->max_uses = max_uses;
244 sh2->num_uses = num_uses;
245 sh2->ptr_path = (path != NULL) ? 1 : 0;
246 sh2->ptr_passwd = (passwd != NULL) ? 1 : 0;
249 /*******************************************************************
250 Reads or writes a structure.
251 ********************************************************************/
253 static BOOL srv_io_share_info2(const char *desc, SH_INFO_2 *sh2, prs_struct *ps, int depth)
255 if (sh2 == NULL)
256 return False;
258 prs_debug(ps, depth, desc, "srv_io_share_info2");
259 depth++;
261 if(!prs_align(ps))
262 return False;
264 if(!prs_uint32("ptr_netname", ps, depth, &sh2->ptr_netname))
265 return False;
266 if(!prs_uint32("type ", ps, depth, &sh2->type))
267 return False;
268 if(!prs_uint32("ptr_remark ", ps, depth, &sh2->ptr_remark))
269 return False;
270 if(!prs_uint32("perms ", ps, depth, &sh2->perms))
271 return False;
272 if(!prs_uint32("max_uses ", ps, depth, &sh2->max_uses))
273 return False;
274 if(!prs_uint32("num_uses ", ps, depth, &sh2->num_uses))
275 return False;
276 if(!prs_uint32("ptr_path ", ps, depth, &sh2->ptr_path))
277 return False;
278 if(!prs_uint32("ptr_passwd ", ps, depth, &sh2->ptr_passwd))
279 return False;
281 return True;
284 /*******************************************************************
285 Inits a SH_INFO_501_STR structure
286 ********************************************************************/
288 void init_srv_share_info501_str(SH_INFO_501_STR *sh501,
289 const char *net_name, const char *remark)
291 DEBUG(5,("init_srv_share_info501_str\n"));
293 init_unistr2(&sh501->uni_netname, net_name, UNI_STR_TERMINATE);
294 init_unistr2(&sh501->uni_remark, remark, UNI_STR_TERMINATE);
297 /*******************************************************************
298 Inits a SH_INFO_2 structure
299 *******************************************************************/
301 void init_srv_share_info501(SH_INFO_501 *sh501, const char *net_name, uint32 type, const char *remark, uint32 csc_policy)
303 DEBUG(5,("init_srv_share_info501: %s %8x %s %08x\n", net_name, type,
304 remark, csc_policy));
306 ZERO_STRUCTP(sh501);
308 sh501->ptr_netname = (net_name != NULL) ? 1 : 0;
309 sh501->type = type;
310 sh501->ptr_remark = (remark != NULL) ? 1 : 0;
311 sh501->csc_policy = csc_policy;
314 /*******************************************************************
315 Reads of writes a structure.
316 *******************************************************************/
318 static BOOL srv_io_share_info501(const char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth)
320 if (sh501 == NULL)
321 return False;
323 prs_debug(ps, depth, desc, "srv_io_share_info501");
324 depth++;
326 if (!prs_align(ps))
327 return False;
329 if (!prs_uint32("ptr_netname", ps, depth, &sh501->ptr_netname))
330 return False;
331 if (!prs_uint32("type ", ps, depth, &sh501->type))
332 return False;
333 if (!prs_uint32("ptr_remark ", ps, depth, &sh501->ptr_remark))
334 return False;
335 if (!prs_uint32("csc_policy ", ps, depth, &sh501->csc_policy))
336 return False;
338 return True;
341 /*******************************************************************
342 Reads or writes a structure.
343 ********************************************************************/
345 static BOOL srv_io_share_info501_str(const char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth)
347 if (sh501 == NULL)
348 return False;
350 prs_debug(ps, depth, desc, "srv_io_share_info501_str");
351 depth++;
353 if(!prs_align(ps))
354 return False;
355 if(!smb_io_unistr2("", &sh501->uni_netname, True, ps, depth))
356 return False;
358 if(!prs_align(ps))
359 return False;
360 if(!smb_io_unistr2("", &sh501->uni_remark, True, ps, depth))
361 return False;
363 return True;
366 /*******************************************************************
367 Inits a SH_INFO_502 structure
368 ********************************************************************/
370 void init_srv_share_info502(SH_INFO_502 *sh502,
371 const char *net_name, uint32 type, const char *remark,
372 uint32 perms, uint32 max_uses, uint32 num_uses,
373 const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
375 DEBUG(5,("init_srv_share_info502: %s %8x %s\n", net_name, type, remark));
377 ZERO_STRUCTP(sh502);
379 sh502->ptr_netname = (net_name != NULL) ? 1 : 0;
380 sh502->type = type;
381 sh502->ptr_remark = (remark != NULL) ? 1 : 0;
382 sh502->perms = perms;
383 sh502->max_uses = max_uses;
384 sh502->num_uses = num_uses;
385 sh502->ptr_path = (path != NULL) ? 1 : 0;
386 sh502->ptr_passwd = (passwd != NULL) ? 1 : 0;
387 sh502->reserved = 0; /* actual size within rpc */
388 sh502->sd_size = (uint32)sd_size;
389 sh502->ptr_sd = (psd != NULL) ? 1 : 0;
392 /*******************************************************************
393 Reads or writes a structure.
394 ********************************************************************/
396 static BOOL srv_io_share_info502(const char *desc, SH_INFO_502 *sh502, prs_struct *ps, int depth)
398 if (sh502 == NULL)
399 return False;
401 prs_debug(ps, depth, desc, "srv_io_share_info502");
402 depth++;
404 if(!prs_align(ps))
405 return False;
407 if(!prs_uint32("ptr_netname", ps, depth, &sh502->ptr_netname))
408 return False;
409 if(!prs_uint32("type ", ps, depth, &sh502->type))
410 return False;
411 if(!prs_uint32("ptr_remark ", ps, depth, &sh502->ptr_remark))
412 return False;
413 if(!prs_uint32("perms ", ps, depth, &sh502->perms))
414 return False;
415 if(!prs_uint32("max_uses ", ps, depth, &sh502->max_uses))
416 return False;
417 if(!prs_uint32("num_uses ", ps, depth, &sh502->num_uses))
418 return False;
419 if(!prs_uint32("ptr_path ", ps, depth, &sh502->ptr_path))
420 return False;
421 if(!prs_uint32("ptr_passwd ", ps, depth, &sh502->ptr_passwd))
422 return False;
423 if(!prs_uint32_pre("reserved ", ps, depth, &sh502->reserved, &sh502->reserved_offset))
424 return False;
425 if(!prs_uint32("ptr_sd ", ps, depth, &sh502->ptr_sd))
426 return False;
428 return True;
431 /*******************************************************************
432 Inits a SH_INFO_502_STR structure
433 ********************************************************************/
435 void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,
436 const char *net_name, const char *remark,
437 const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
439 DEBUG(5,("init_srv_share_info502_str\n"));
441 init_unistr2(&sh502str->uni_netname, net_name, UNI_STR_TERMINATE);
442 init_unistr2(&sh502str->uni_remark, remark, UNI_STR_TERMINATE);
443 init_unistr2(&sh502str->uni_path, path, UNI_STR_TERMINATE);
444 init_unistr2(&sh502str->uni_passwd, passwd, UNI_STR_TERMINATE);
445 sh502str->sd = psd;
446 sh502str->reserved = 0;
447 sh502str->sd_size = sd_size;
450 /*******************************************************************
451 Reads or writes a structure.
452 ********************************************************************/
454 static BOOL srv_io_share_info502_str(const char *desc, SH_INFO_502_STR *sh502, prs_struct *ps, int depth)
456 if (sh502 == NULL)
457 return False;
459 prs_debug(ps, depth, desc, "srv_io_share_info502_str");
460 depth++;
462 if(!prs_align(ps))
463 return False;
465 if(sh502->ptrs->ptr_netname) {
466 if(!smb_io_unistr2("", &sh502->uni_netname, True, ps, depth))
467 return False;
470 if(!prs_align(ps))
471 return False;
473 if(sh502->ptrs->ptr_remark) {
474 if(!smb_io_unistr2("", &sh502->uni_remark, True, ps, depth))
475 return False;
478 if(!prs_align(ps))
479 return False;
481 if(sh502->ptrs->ptr_path) {
482 if(!smb_io_unistr2("", &sh502->uni_path, True, ps, depth))
483 return False;
486 if(!prs_align(ps))
487 return False;
489 if(sh502->ptrs->ptr_passwd) {
490 if(!smb_io_unistr2("", &sh502->uni_passwd, True, ps, depth))
491 return False;
494 if(!prs_align(ps))
495 return False;
497 if(sh502->ptrs->ptr_sd) {
498 uint32 old_offset;
499 uint32 reserved_offset;
501 if(!prs_uint32_pre("reserved ", ps, depth, &sh502->reserved, &reserved_offset))
502 return False;
504 old_offset = prs_offset(ps);
506 if (!sec_io_desc(desc, &sh502->sd, ps, depth))
507 return False;
509 if(UNMARSHALLING(ps)) {
511 sh502->ptrs->sd_size = sh502->sd_size = sec_desc_size(sh502->sd);
513 prs_set_offset(ps, old_offset + sh502->reserved);
516 prs_align(ps);
518 if(MARSHALLING(ps)) {
520 sh502->ptrs->reserved = sh502->reserved = prs_offset(ps) - old_offset;
523 if(!prs_uint32_post("reserved ", ps, depth,
524 &sh502->reserved, reserved_offset, sh502->reserved))
525 return False;
526 if(!prs_uint32_post("reserved ", ps, depth,
527 &sh502->ptrs->reserved, sh502->ptrs->reserved_offset, sh502->ptrs->reserved))
528 return False;
531 return True;
534 /*******************************************************************
535 Inits a SH_INFO_1004_STR structure
536 ********************************************************************/
538 void init_srv_share_info1004_str(SH_INFO_1004_STR *sh1004, const char *remark)
540 DEBUG(5,("init_srv_share_info1004_str\n"));
542 init_unistr2(&sh1004->uni_remark, remark, UNI_STR_TERMINATE);
545 /*******************************************************************
546 Reads or writes a structure.
547 ********************************************************************/
549 static BOOL srv_io_share_info1004_str(const char *desc, SH_INFO_1004_STR *sh1004, prs_struct *ps, int depth)
551 if (sh1004 == NULL)
552 return False;
554 prs_debug(ps, depth, desc, "srv_io_share_info1004_str");
555 depth++;
557 if(!prs_align(ps))
558 return False;
559 if(sh1004->ptrs->ptr_remark)
560 if(!smb_io_unistr2("", &sh1004->uni_remark, True, ps, depth))
561 return False;
563 return True;
566 /*******************************************************************
567 makes a SH_INFO_1004 structure
568 ********************************************************************/
570 void init_srv_share_info1004(SH_INFO_1004 *sh1004, const char *remark)
572 DEBUG(5,("init_srv_share_info1004: %s\n", remark));
574 sh1004->ptr_remark = (remark != NULL) ? 1 : 0;
577 /*******************************************************************
578 Reads or writes a structure.
579 ********************************************************************/
581 static BOOL srv_io_share_info1004(const char *desc, SH_INFO_1004 *sh1004, prs_struct *ps, int depth)
583 if (sh1004 == NULL)
584 return False;
586 prs_debug(ps, depth, desc, "srv_io_share_info1004");
587 depth++;
589 if(!prs_align(ps))
590 return False;
592 if(!prs_uint32("ptr_remark", ps, depth, &sh1004->ptr_remark))
593 return False;
595 return True;
598 /*******************************************************************
599 Reads or writes a structure.
600 ********************************************************************/
602 static BOOL srv_io_share_info1005(const char* desc, SRV_SHARE_INFO_1005* sh1005, prs_struct* ps, int depth)
604 if(sh1005 == NULL)
605 return False;
607 prs_debug(ps, depth, desc, "srv_io_share_info1005");
608 depth++;
610 if(!prs_align(ps))
611 return False;
613 if(!prs_uint32("share_info_flags", ps, depth,
614 &sh1005->share_info_flags))
615 return False;
617 return True;
620 /*******************************************************************
621 Reads or writes a structure.
622 ********************************************************************/
624 static BOOL srv_io_share_info1006(const char* desc, SRV_SHARE_INFO_1006* sh1006, prs_struct* ps, int depth)
626 if(sh1006 == NULL)
627 return False;
629 prs_debug(ps, depth, desc, "srv_io_share_info1006");
630 depth++;
632 if(!prs_align(ps))
633 return False;
635 if(!prs_uint32("max uses ", ps, depth, &sh1006->max_uses))
636 return False;
638 return True;
641 /*******************************************************************
642 Inits a SH_INFO_1007_STR structure
643 ********************************************************************/
645 void init_srv_share_info1007_str(SH_INFO_1007_STR *sh1007, const char *alternate_directory_name)
647 DEBUG(5,("init_srv_share_info1007_str\n"));
649 init_unistr2(&sh1007->uni_AlternateDirectoryName, alternate_directory_name, UNI_STR_TERMINATE);
652 /*******************************************************************
653 Reads or writes a structure.
654 ********************************************************************/
656 static BOOL srv_io_share_info1007_str(const char *desc, SH_INFO_1007_STR *sh1007, prs_struct *ps, int depth)
658 if (sh1007 == NULL)
659 return False;
661 prs_debug(ps, depth, desc, "srv_io_share_info1007_str");
662 depth++;
664 if(!prs_align(ps))
665 return False;
666 if(sh1007->ptrs->ptr_AlternateDirectoryName)
667 if(!smb_io_unistr2("", &sh1007->uni_AlternateDirectoryName, True, ps, depth))
668 return False;
670 return True;
673 /*******************************************************************
674 makes a SH_INFO_1007 structure
675 ********************************************************************/
677 void init_srv_share_info1007(SH_INFO_1007 *sh1007, uint32 flags, const char *alternate_directory_name)
679 DEBUG(5,("init_srv_share_info1007: %s\n", alternate_directory_name));
681 sh1007->flags = flags;
682 sh1007->ptr_AlternateDirectoryName = (alternate_directory_name != NULL) ? 1 : 0;
685 /*******************************************************************
686 Reads or writes a structure.
687 ********************************************************************/
689 static BOOL srv_io_share_info1007(const char *desc, SH_INFO_1007 *sh1007, prs_struct *ps, int depth)
691 if (sh1007 == NULL)
692 return False;
694 prs_debug(ps, depth, desc, "srv_io_share_info1007");
695 depth++;
697 if(!prs_align(ps))
698 return False;
700 if(!prs_uint32("flags ", ps, depth, &sh1007->flags))
701 return False;
702 if(!prs_uint32("ptr_Alter..", ps, depth, &sh1007->ptr_AlternateDirectoryName))
703 return False;
705 return True;
708 /*******************************************************************
709 Reads or writes a structure.
710 ********************************************************************/
712 static BOOL srv_io_share_info1501(const char* desc, SRV_SHARE_INFO_1501* sh1501,
713 prs_struct* ps, int depth)
715 if(sh1501 == NULL)
716 return False;
718 prs_debug(ps, depth, desc, "srv_io_share_info1501");
719 depth++;
721 if(!prs_align(ps))
722 return False;
724 if (!sec_io_desc_buf(desc, &sh1501->sdb, ps, depth))
725 return False;
727 return True;
730 /*******************************************************************
731 Reads or writes a structure.
732 ********************************************************************/
734 static BOOL srv_io_srv_share_ctr(const char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct *ps, int depth)
736 if (ctr == NULL)
737 return False;
739 prs_debug(ps, depth, desc, "srv_io_srv_share_ctr");
740 depth++;
742 if (UNMARSHALLING(ps)) {
743 memset(ctr, '\0', sizeof(SRV_SHARE_INFO_CTR));
746 if(!prs_align(ps))
747 return False;
749 if(!prs_uint32("info_level", ps, depth, &ctr->info_level))
750 return False;
752 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
753 return False;
754 if(!prs_uint32("ptr_share_info", ps, depth, &ctr->ptr_share_info))
755 return False;
757 if (ctr->ptr_share_info == 0)
758 return True;
760 if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
761 return False;
762 if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
763 return False;
765 if (ctr->ptr_entries == 0) {
766 if (ctr->num_entries == 0)
767 return True;
768 else
769 return False;
772 if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2))
773 return False;
775 if (ctr->num_entries2 != ctr->num_entries)
776 return False;
778 switch (ctr->switch_value) {
780 case 0:
782 SRV_SHARE_INFO_0 *info0 = ctr->share.info0;
783 int num_entries = ctr->num_entries;
784 int i;
786 if (UNMARSHALLING(ps) && num_entries) {
787 if (!(info0 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_0, num_entries)))
788 return False;
789 ctr->share.info0 = info0;
792 for (i = 0; i < num_entries; i++) {
793 if(!srv_io_share_info0("", &info0[i].info_0, ps, depth))
794 return False;
797 for (i = 0; i < num_entries; i++) {
798 info0[i].info_0_str.ptrs = &info0[i].info_0;
799 if(!srv_io_share_info0_str("", &info0[i].info_0_str, ps, depth))
800 return False;
803 break;
806 case 1:
808 SRV_SHARE_INFO_1 *info1 = ctr->share.info1;
809 int num_entries = ctr->num_entries;
810 int i;
812 if (UNMARSHALLING(ps) && num_entries) {
813 if (!(info1 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_1, num_entries)))
814 return False;
815 ctr->share.info1 = info1;
818 for (i = 0; i < num_entries; i++) {
819 if(!srv_io_share_info1("", &info1[i].info_1, ps, depth))
820 return False;
823 for (i = 0; i < num_entries; i++) {
824 info1[i].info_1_str.ptrs = &info1[i].info_1;
825 if(!srv_io_share_info1_str("", &info1[i].info_1_str, ps, depth))
826 return False;
829 break;
832 case 2:
834 SRV_SHARE_INFO_2 *info2 = ctr->share.info2;
835 int num_entries = ctr->num_entries;
836 int i;
838 if (UNMARSHALLING(ps) && num_entries) {
839 if (!(info2 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_2,num_entries)))
840 return False;
841 ctr->share.info2 = info2;
844 for (i = 0; i < num_entries; i++) {
845 if(!srv_io_share_info2("", &info2[i].info_2, ps, depth))
846 return False;
849 for (i = 0; i < num_entries; i++) {
850 if(!srv_io_share_info2_str("", &info2[i].info_2, &info2[i].info_2_str, ps, depth))
851 return False;
854 break;
857 case 501:
859 SRV_SHARE_INFO_501 *info501 = ctr->share.info501;
860 int num_entries = ctr->num_entries;
861 int i;
863 if (UNMARSHALLING(ps) && num_entries) {
864 if (!(info501 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_501, num_entries)))
865 return False;
866 ctr->share.info501 = info501;
869 for (i = 0; i < num_entries; i++) {
870 if (!srv_io_share_info501("", &info501[i].info_501, ps, depth))
871 return False;
874 for (i = 0; i < num_entries; i++) {
875 if (!srv_io_share_info501_str("", &info501[i].info_501_str, ps, depth))
876 return False;
879 break;
882 case 502:
884 SRV_SHARE_INFO_502 *info502 = ctr->share.info502;
885 int num_entries = ctr->num_entries;
886 int i;
888 if (UNMARSHALLING(ps) && num_entries) {
889 if (!(info502 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_502,num_entries)))
890 return False;
891 ctr->share.info502 = info502;
894 for (i = 0; i < num_entries; i++) {
895 if(!srv_io_share_info502("", &info502[i].info_502, ps, depth))
896 return False;
899 for (i = 0; i < num_entries; i++) {
900 info502[i].info_502_str.ptrs = &info502[i].info_502;
901 if(!srv_io_share_info502_str("", &info502[i].info_502_str, ps, depth))
902 return False;
905 break;
908 case 1004:
910 SRV_SHARE_INFO_1004 *info1004 = ctr->share.info1004;
911 int num_entries = ctr->num_entries;
912 int i;
914 if (UNMARSHALLING(ps) && num_entries) {
915 if (!(info1004 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1004,num_entries)))
916 return False;
917 ctr->share.info1004 = info1004;
920 for (i = 0; i < num_entries; i++) {
921 if(!srv_io_share_info1004("", &info1004[i].info_1004, ps, depth))
922 return False;
925 for (i = 0; i < num_entries; i++) {
926 info1004[i].info_1004_str.ptrs = &info1004[i].info_1004;
927 if(!srv_io_share_info1004_str("", &info1004[i].info_1004_str, ps, depth))
928 return False;
931 break;
934 case 1005:
936 SRV_SHARE_INFO_1005 *info1005 = ctr->share.info1005;
937 int num_entries = ctr->num_entries;
938 int i;
940 if (UNMARSHALLING(ps) && num_entries) {
941 if (!(info1005 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1005,num_entries)))
942 return False;
943 ctr->share.info1005 = info1005;
946 for (i = 0; i < num_entries; i++) {
947 if(!srv_io_share_info1005("", &info1005[i], ps, depth))
948 return False;
951 break;
954 case 1006:
956 SRV_SHARE_INFO_1006 *info1006 = ctr->share.info1006;
957 int num_entries = ctr->num_entries;
958 int i;
960 if (UNMARSHALLING(ps) && num_entries) {
961 if (!(info1006 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1006,num_entries)))
962 return False;
963 ctr->share.info1006 = info1006;
966 for (i = 0; i < num_entries; i++) {
967 if(!srv_io_share_info1006("", &info1006[i], ps, depth))
968 return False;
971 break;
974 case 1007:
976 SRV_SHARE_INFO_1007 *info1007 = ctr->share.info1007;
977 int num_entries = ctr->num_entries;
978 int i;
980 if (UNMARSHALLING(ps) && num_entries) {
981 if (!(info1007 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1007,num_entries)))
982 return False;
983 ctr->share.info1007 = info1007;
986 for (i = 0; i < num_entries; i++) {
987 if(!srv_io_share_info1007("", &info1007[i].info_1007, ps, depth))
988 return False;
991 for (i = 0; i < num_entries; i++) {
992 info1007[i].info_1007_str.ptrs = &info1007[i].info_1007;
993 if(!srv_io_share_info1007_str("", &info1007[i].info_1007_str, ps, depth))
994 return False;
997 break;
1000 case 1501:
1002 SRV_SHARE_INFO_1501 *info1501 = ctr->share.info1501;
1003 int num_entries = ctr->num_entries;
1004 int i;
1006 if (UNMARSHALLING(ps) && num_entries) {
1007 if (!(info1501 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1501,num_entries)))
1008 return False;
1009 ctr->share.info1501 = info1501;
1012 for (i = 0; i < num_entries; i++) {
1013 if(!srv_io_share_info1501("", &info1501[i], ps, depth))
1014 return False;
1017 break;
1020 default:
1021 DEBUG(5,("%s no share info at switch_value %d\n",
1022 tab_depth(depth), ctr->switch_value));
1023 break;
1026 return True;
1029 /*******************************************************************
1030 Inits a SRV_Q_NET_SHARE_ENUM structure.
1031 ********************************************************************/
1033 void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n,
1034 const char *srv_name, uint32 info_level,
1035 uint32 preferred_len, ENUM_HND *hnd)
1038 DEBUG(5,("init_q_net_share_enum\n"));
1040 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1042 q_n->ctr.info_level = q_n->ctr.switch_value = info_level;
1043 q_n->ctr.ptr_share_info = 1;
1044 q_n->ctr.num_entries = 0;
1045 q_n->ctr.ptr_entries = 0;
1046 q_n->ctr.num_entries2 = 0;
1047 q_n->preferred_len = preferred_len;
1049 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
1052 /*******************************************************************
1053 Reads or writes a structure.
1054 ********************************************************************/
1056 BOOL srv_io_q_net_share_enum(const char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth)
1058 if (q_n == NULL)
1059 return False;
1061 prs_debug(ps, depth, desc, "srv_io_q_net_share_enum");
1062 depth++;
1064 if(!prs_align(ps))
1065 return False;
1067 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1068 return False;
1069 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1070 return False;
1072 if(!srv_io_srv_share_ctr("share_ctr", &q_n->ctr, ps, depth))
1073 return False;
1075 if(!prs_align(ps))
1076 return False;
1078 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
1079 return False;
1081 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
1082 return False;
1084 return True;
1087 /*******************************************************************
1088 Reads or writes a structure.
1089 ********************************************************************/
1091 BOOL srv_io_r_net_share_enum(const char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth)
1093 if (r_n == NULL)
1094 return False;
1096 prs_debug(ps, depth, desc, "srv_io_r_net_share_enum");
1097 depth++;
1099 if(!srv_io_srv_share_ctr("share_ctr", &r_n->ctr, ps, depth))
1100 return False;
1102 if(!prs_align(ps))
1103 return False;
1105 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
1106 return False;
1108 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
1109 return False;
1111 if(!prs_werror("status", ps, depth, &r_n->status))
1112 return False;
1114 return True;
1117 /*******************************************************************
1118 initialises a structure.
1119 ********************************************************************/
1121 BOOL init_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n, const char *srv_name, const char *share_name, uint32 info_level)
1124 uint32 ptr_share_name;
1126 DEBUG(5,("init_srv_q_net_share_get_info\n"));
1128 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1129 init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name, share_name);
1131 q_n->info_level = info_level;
1133 return True;
1136 /*******************************************************************
1137 Reads or writes a structure.
1138 ********************************************************************/
1140 BOOL srv_io_q_net_share_get_info(const char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_struct *ps, int depth)
1142 if (q_n == NULL)
1143 return False;
1145 prs_debug(ps, depth, desc, "srv_io_q_net_share_get_info");
1146 depth++;
1148 if(!prs_align(ps))
1149 return False;
1151 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1152 return False;
1153 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1154 return False;
1156 if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
1157 return False;
1159 if(!prs_align(ps))
1160 return False;
1162 if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
1163 return False;
1165 return True;
1168 /*******************************************************************
1169 Reads or writes a structure.
1170 ********************************************************************/
1172 static BOOL srv_io_srv_share_info(const char *desc, prs_struct *ps, int depth, SRV_SHARE_INFO *r_n)
1174 if (r_n == NULL)
1175 return False;
1177 prs_debug(ps, depth, desc, "srv_io_srv_share_info");
1178 depth++;
1180 if(!prs_align(ps))
1181 return False;
1183 if(!prs_uint32("switch_value ", ps, depth, &r_n->switch_value ))
1184 return False;
1186 if(!prs_uint32("ptr_share_ctr", ps, depth, &r_n->ptr_share_ctr))
1187 return False;
1189 if (r_n->ptr_share_ctr != 0) {
1190 switch (r_n->switch_value) {
1191 case 0:
1192 if(!srv_io_share_info0("", &r_n->share.info0.info_0, ps, depth))
1193 return False;
1195 /* allow access to pointers in the str part. */
1196 r_n->share.info0.info_0_str.ptrs = &r_n->share.info0.info_0;
1198 if(!srv_io_share_info0_str("", &r_n->share.info0.info_0_str, ps, depth))
1199 return False;
1201 break;
1202 case 1:
1203 if(!srv_io_share_info1("", &r_n->share.info1.info_1, ps, depth))
1204 return False;
1206 /* allow access to pointers in the str part. */
1207 r_n->share.info1.info_1_str.ptrs = &r_n->share.info1.info_1;
1209 if(!srv_io_share_info1_str("", &r_n->share.info1.info_1_str, ps, depth))
1210 return False;
1212 break;
1213 case 2:
1214 if(!srv_io_share_info2("", &r_n->share.info2.info_2, ps, depth))
1215 return False;
1217 if(!srv_io_share_info2_str("", &r_n->share.info2.info_2, &r_n->share.info2.info_2_str, ps, depth))
1218 return False;
1220 break;
1221 case 501:
1222 if (!srv_io_share_info501("", &r_n->share.info501.info_501, ps, depth))
1223 return False;
1224 if (!srv_io_share_info501_str("", &r_n->share.info501.info_501_str, ps, depth))
1225 return False;
1226 break;
1228 case 502:
1229 if(!srv_io_share_info502("", &r_n->share.info502.info_502, ps, depth))
1230 return False;
1232 /* allow access to pointers in the str part. */
1233 r_n->share.info502.info_502_str.ptrs = &r_n->share.info502.info_502;
1235 if(!srv_io_share_info502_str("", &r_n->share.info502.info_502_str, ps, depth))
1236 return False;
1237 break;
1238 case 1004:
1239 if(!srv_io_share_info1004("", &r_n->share.info1004.info_1004, ps, depth))
1240 return False;
1242 /* allow access to pointers in the str part. */
1243 r_n->share.info1004.info_1004_str.ptrs = &r_n->share.info1004.info_1004;
1245 if(!srv_io_share_info1004_str("", &r_n->share.info1004.info_1004_str, ps, depth))
1246 return False;
1247 break;
1248 case 1005:
1249 if(!srv_io_share_info1005("", &r_n->share.info1005, ps, depth))
1250 return False;
1251 break;
1252 case 1006:
1253 if(!srv_io_share_info1006("", &r_n->share.info1006, ps, depth))
1254 return False;
1255 break;
1256 case 1007:
1257 if(!srv_io_share_info1007("", &r_n->share.info1007.info_1007, ps, depth))
1258 return False;
1260 /* allow access to pointers in the str part. */
1261 r_n->share.info1007.info_1007_str.ptrs = &r_n->share.info1007.info_1007;
1263 if(!srv_io_share_info1007_str("", &r_n->share.info1007.info_1007_str, ps, depth))
1264 return False;
1265 break;
1266 case 1501:
1267 if (!srv_io_share_info1501("", &r_n->share.info1501, ps, depth))
1268 return False;
1269 default:
1270 DEBUG(5,("%s no share info at switch_value %d\n",
1271 tab_depth(depth), r_n->switch_value));
1272 break;
1276 return True;
1279 /*******************************************************************
1280 Reads or writes a structure.
1281 ********************************************************************/
1283 BOOL srv_io_r_net_share_get_info(const char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_struct *ps, int depth)
1285 if (r_n == NULL)
1286 return False;
1288 prs_debug(ps, depth, desc, "srv_io_r_net_share_get_info");
1289 depth++;
1291 if(!prs_align(ps))
1292 return False;
1294 if(!srv_io_srv_share_info("info ", ps, depth, &r_n->info))
1295 return False;
1297 if(!prs_align(ps))
1298 return False;
1300 if(!prs_werror("status", ps, depth, &r_n->status))
1301 return False;
1303 return True;
1306 /*******************************************************************
1307 intialises a structure.
1308 ********************************************************************/
1310 BOOL init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n,
1311 const char *srv_name,
1312 const char *share_name,
1313 uint32 info_level,
1314 const SRV_SHARE_INFO *info)
1317 uint32 ptr_share_name;
1319 DEBUG(5,("init_srv_q_net_share_set_info\n"));
1321 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1322 init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name, share_name);
1324 q_n->info_level = info_level;
1326 q_n->info = *info;
1328 q_n->ptr_parm_error = 1;
1329 q_n->parm_error = 0;
1331 return True;
1334 /*******************************************************************
1335 Reads or writes a structure.
1336 ********************************************************************/
1338 BOOL srv_io_q_net_share_set_info(const char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_struct *ps, int depth)
1340 if (q_n == NULL)
1341 return False;
1343 prs_debug(ps, depth, desc, "srv_io_q_net_share_set_info");
1344 depth++;
1346 if(!prs_align(ps))
1347 return False;
1349 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1350 return False;
1351 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1352 return False;
1354 if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
1355 return False;
1357 if(!prs_align(ps))
1358 return False;
1360 if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
1361 return False;
1363 if(!prs_align(ps))
1364 return False;
1366 if(!srv_io_srv_share_info("info ", ps, depth, &q_n->info))
1367 return False;
1369 if(!prs_align(ps))
1370 return False;
1371 if(!prs_uint32("ptr_parm_error", ps, depth, &q_n->ptr_parm_error))
1372 return False;
1373 if(q_n->ptr_parm_error!=0) {
1374 if(!prs_uint32("parm_error", ps, depth, &q_n->parm_error))
1375 return False;
1378 return True;
1381 /*******************************************************************
1382 Reads or writes a structure.
1383 ********************************************************************/
1385 BOOL srv_io_r_net_share_set_info(const char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_struct *ps, int depth)
1387 if (r_n == NULL)
1388 return False;
1390 prs_debug(ps, depth, desc, "srv_io_r_net_share_set_info");
1391 depth++;
1393 if(!prs_align(ps))
1394 return False;
1396 if(!prs_uint32("ptr_parm_error ", ps, depth, &r_n->ptr_parm_error))
1397 return False;
1399 if(r_n->ptr_parm_error) {
1401 if(!prs_uint32("parm_error ", ps, depth, &r_n->parm_error))
1402 return False;
1405 if(!prs_werror("status", ps, depth, &r_n->status))
1406 return False;
1408 return True;
1412 /*******************************************************************
1413 Reads or writes a structure.
1414 ********************************************************************/
1416 BOOL srv_io_q_net_share_add(const char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps, int depth)
1418 if (q_n == NULL)
1419 return False;
1421 prs_debug(ps, depth, desc, "srv_io_q_net_share_add");
1422 depth++;
1424 if(!prs_align(ps))
1425 return False;
1427 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1428 return False;
1429 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1430 return False;
1432 if(!prs_align(ps))
1433 return False;
1435 if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
1436 return False;
1438 if(!prs_align(ps))
1439 return False;
1441 if(!srv_io_srv_share_info("info ", ps, depth, &q_n->info))
1442 return False;
1444 if(!prs_align(ps))
1445 return False;
1447 if(!prs_uint32("ptr_err_index", ps, depth, &q_n->ptr_err_index))
1448 return False;
1449 if (q_n->ptr_err_index)
1450 if (!prs_uint32("err_index", ps, depth, &q_n->err_index))
1451 return False;
1453 return True;
1456 void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, const char *srvname,
1457 const char *netname, uint32 type, const char *remark,
1458 uint32 perms, uint32 max_uses, uint32 num_uses,
1459 const char *path, const char *passwd,
1460 int level, SEC_DESC *sd)
1462 switch(level) {
1463 case 502: {
1464 size_t sd_size = sec_desc_size(sd);
1465 q->ptr_srv_name = 1;
1466 init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
1467 q->info.switch_value = q->info_level = level;
1468 q->info.ptr_share_ctr = 1;
1469 init_srv_share_info502(&q->info.share.info502.info_502, netname, type,
1470 remark, perms, max_uses, num_uses, path, passwd, sd, sd_size);
1471 init_srv_share_info502_str(&q->info.share.info502.info_502_str, netname,
1472 remark, path, passwd, sd, sd_size);
1473 q->ptr_err_index = 1;
1474 q->err_index = 0;
1476 break;
1477 case 2:
1478 default:
1479 q->ptr_srv_name = 1;
1480 init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
1481 q->info.switch_value = q->info_level = level;
1482 q->info.ptr_share_ctr = 1;
1483 init_srv_share_info2(&q->info.share.info2.info_2, netname, type,
1484 remark, perms, max_uses, num_uses, path, passwd);
1485 init_srv_share_info2_str(&q->info.share.info2.info_2_str, netname,
1486 remark, path, passwd);
1487 q->ptr_err_index = 1;
1488 q->err_index = 0;
1489 break;
1494 /*******************************************************************
1495 Reads or writes a structure.
1496 ********************************************************************/
1498 BOOL srv_io_r_net_share_add(const char *desc, SRV_R_NET_SHARE_ADD *r_n, prs_struct *ps, int depth)
1500 if (r_n == NULL)
1501 return False;
1503 prs_debug(ps, depth, desc, "srv_io_r_net_share_add");
1504 depth++;
1506 if(!prs_align(ps))
1507 return False;
1509 if(!prs_uint32("ptr_parm_error", ps, depth, &r_n->ptr_parm_error))
1510 return False;
1512 if(r_n->ptr_parm_error) {
1514 if(!prs_uint32("parm_error", ps, depth, &r_n->parm_error))
1515 return False;
1518 if(!prs_werror("status", ps, depth, &r_n->status))
1519 return False;
1521 return True;
1524 /*******************************************************************
1525 initialises a structure.
1526 ********************************************************************/
1528 void init_srv_q_net_share_del(SRV_Q_NET_SHARE_DEL *del, const char *srvname,
1529 const char *sharename)
1531 del->ptr_srv_name = 1;
1532 init_unistr2(&del->uni_srv_name, srvname, UNI_STR_TERMINATE);
1533 init_unistr2(&del->uni_share_name, sharename, UNI_STR_TERMINATE);
1536 /*******************************************************************
1537 Reads or writes a structure.
1538 ********************************************************************/
1540 BOOL srv_io_q_net_share_del(const char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
1542 if (q_n == NULL)
1543 return False;
1545 prs_debug(ps, depth, desc, "srv_io_q_net_share_del");
1546 depth++;
1548 if(!prs_align(ps))
1549 return False;
1551 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1552 return False;
1553 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1554 return False;
1556 if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
1557 return False;
1559 if(!prs_align(ps))
1560 return False;
1561 if(!prs_uint32("reserved", ps, depth, &q_n->reserved))
1562 return False;
1564 return True;
1567 /*******************************************************************
1568 Reads or writes a structure.
1569 ********************************************************************/
1571 BOOL srv_io_r_net_share_del(const char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
1573 if (q_n == NULL)
1574 return False;
1576 prs_debug(ps, depth, desc, "srv_io_r_net_share_del");
1577 depth++;
1579 if(!prs_align(ps))
1580 return False;
1582 if(!prs_werror("status", ps, depth, &q_n->status))
1583 return False;
1585 return True;
1588 /*******************************************************************
1589 Inits a SESS_INFO_0_STR structure
1590 ********************************************************************/
1592 void init_srv_sess_info0( SESS_INFO_0 *ss0, const char *name )
1594 ZERO_STRUCTP( ss0 );
1596 if ( name ) {
1597 if ( (ss0->sharename = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
1598 DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
1599 return;
1601 init_unistr2( ss0->sharename, name, UNI_STR_TERMINATE );
1605 /*******************************************************************
1606 Reads or writes a structure.
1607 ********************************************************************/
1609 static BOOL srv_io_srv_sess_info_0(const char *desc, SRV_SESS_INFO_0 *ss0, prs_struct *ps, int depth)
1611 if (ss0 == NULL)
1612 return False;
1614 prs_debug(ps, depth, desc, "srv_io_srv_sess_info_0");
1615 depth++;
1617 if(!prs_align(ps))
1618 return False;
1620 if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read))
1621 return False;
1622 if(!prs_uint32("ptr_sess_info", ps, depth, &ss0->ptr_sess_info))
1623 return False;
1625 if (ss0->ptr_sess_info != 0) {
1626 uint32 i;
1627 uint32 num_entries = ss0->num_entries_read;
1629 if (num_entries > MAX_SESS_ENTRIES) {
1630 num_entries = MAX_SESS_ENTRIES; /* report this! */
1633 if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2))
1634 return False;
1636 SMB_ASSERT_ARRAY(ss0->info_0, num_entries);
1638 /* first the pointers */
1639 for (i = 0; i < num_entries; i++) {
1640 if ( !prs_io_unistr2_p("", ps, depth, &ss0->info_0[i].sharename ) )
1641 return False;
1644 /* now the strings */
1645 for (i = 0; i < num_entries; i++) {
1646 if ( !prs_io_unistr2("sharename", ps, depth, ss0->info_0[i].sharename ))
1647 return False;
1650 if(!prs_align(ps))
1651 return False;
1654 return True;
1657 /*******************************************************************
1658 Inits a SESS_INFO_1 structure
1659 ********************************************************************/
1661 void init_srv_sess_info1( SESS_INFO_1 *ss1, const char *name, const char *user,
1662 uint32 num_opens, uint32 open_time, uint32 idle_time,
1663 uint32 user_flags)
1665 DEBUG(5,("init_srv_sess_info1: %s\n", name));
1667 ZERO_STRUCTP( ss1 );
1669 if ( name ) {
1670 if ( (ss1->sharename = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
1671 DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
1672 return;
1674 init_unistr2( ss1->sharename, name, UNI_STR_TERMINATE );
1677 if ( user ) {
1678 if ( (ss1->username = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
1679 DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
1680 return;
1682 init_unistr2( ss1->username, user, UNI_STR_TERMINATE );
1685 ss1->num_opens = num_opens;
1686 ss1->open_time = open_time;
1687 ss1->idle_time = idle_time;
1688 ss1->user_flags = user_flags;
1692 /*******************************************************************
1693 Reads or writes a structure.
1694 ********************************************************************/
1696 static BOOL srv_io_srv_sess_info_1(const char *desc, SRV_SESS_INFO_1 *ss1, prs_struct *ps, int depth)
1698 if (ss1 == NULL)
1699 return False;
1701 prs_debug(ps, depth, desc, "srv_io_srv_sess_info_1");
1702 depth++;
1704 if(!prs_align(ps))
1705 return False;
1707 if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read))
1708 return False;
1709 if(!prs_uint32("ptr_sess_info", ps, depth, &ss1->ptr_sess_info))
1710 return False;
1712 if (ss1->ptr_sess_info != 0) {
1713 uint32 i;
1714 uint32 num_entries = ss1->num_entries_read;
1716 if (num_entries > MAX_SESS_ENTRIES) {
1717 num_entries = MAX_SESS_ENTRIES; /* report this! */
1720 if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2))
1721 return False;
1723 SMB_ASSERT_ARRAY(ss1->info_1, num_entries);
1725 /* first the pointers and flags */
1727 for (i = 0; i < num_entries; i++) {
1729 if ( !prs_io_unistr2_p("", ps, depth, &ss1->info_1[i].sharename ))
1730 return False;
1731 if ( !prs_io_unistr2_p("", ps, depth, &ss1->info_1[i].username ))
1732 return False;
1734 if(!prs_uint32("num_opens ", ps, depth, &ss1->info_1[i].num_opens))
1735 return False;
1736 if(!prs_uint32("open_time ", ps, depth, &ss1->info_1[i].open_time))
1737 return False;
1738 if(!prs_uint32("idle_time ", ps, depth, &ss1->info_1[i].idle_time))
1739 return False;
1740 if(!prs_uint32("user_flags", ps, depth, &ss1->info_1[i].user_flags))
1741 return False;
1744 /* now the strings */
1746 for (i = 0; i < num_entries; i++) {
1747 if ( !prs_io_unistr2("", ps, depth, ss1->info_1[i].sharename ))
1748 return False;
1749 if ( !prs_io_unistr2("", ps, depth, ss1->info_1[i].username ))
1750 return False;
1753 if(!prs_align(ps))
1754 return False;
1757 return True;
1760 /*******************************************************************
1761 Reads or writes a structure.
1762 ********************************************************************/
1764 static BOOL srv_io_srv_sess_ctr(const char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
1766 SRV_SESS_INFO_CTR *ctr = *pp_ctr;
1768 prs_debug(ps, depth, desc, "srv_io_srv_sess_ctr");
1769 depth++;
1771 if(UNMARSHALLING(ps)) {
1772 ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_SESS_INFO_CTR, 1);
1773 if (ctr == NULL)
1774 return False;
1777 if (ctr == NULL)
1778 return False;
1780 if(!prs_align(ps))
1781 return False;
1783 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
1784 return False;
1785 if(!prs_uint32("ptr_sess_ctr", ps, depth, &ctr->ptr_sess_ctr))
1786 return False;
1788 if (ctr->ptr_sess_ctr != 0) {
1789 switch (ctr->switch_value) {
1790 case 0:
1791 if(!srv_io_srv_sess_info_0("", &ctr->sess.info0, ps, depth))
1792 return False;
1793 break;
1794 case 1:
1795 if(!srv_io_srv_sess_info_1("", &ctr->sess.info1, ps, depth))
1796 return False;
1797 break;
1798 default:
1799 DEBUG(5,("%s no session info at switch_value %d\n",
1800 tab_depth(depth), ctr->switch_value));
1801 break;
1805 return True;
1808 /*******************************************************************
1809 Reads or writes a structure.
1810 ********************************************************************/
1812 BOOL srv_io_q_net_sess_enum(const char *desc, SRV_Q_NET_SESS_ENUM *q_u, prs_struct *ps, int depth)
1814 if (q_u == NULL)
1815 return False;
1817 prs_debug(ps, depth, desc, "srv_io_q_net_sess_enum");
1818 depth++;
1820 if(!prs_align(ps))
1821 return False;
1823 if(!prs_pointer("servername", ps, depth, (void**)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
1824 return False;
1826 if(!prs_align(ps))
1827 return False;
1829 if(!prs_pointer("qualifier", ps, depth, (void**)&q_u->qualifier, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
1830 return False;
1832 if(!prs_align(ps))
1833 return False;
1835 if(!prs_pointer("username", ps, depth, (void**)&q_u->username, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
1836 return False;
1838 if(!prs_align(ps))
1839 return False;
1841 if(!prs_uint32("sess_level", ps, depth, &q_u->sess_level))
1842 return False;
1844 if (q_u->sess_level != (uint32)-1) {
1845 if(!srv_io_srv_sess_ctr("sess_ctr", &q_u->ctr, ps, depth))
1846 return False;
1849 if(!prs_uint32("preferred_len", ps, depth, &q_u->preferred_len))
1850 return False;
1852 if(!smb_io_enum_hnd("enum_hnd", &q_u->enum_hnd, ps, depth))
1853 return False;
1855 return True;
1858 /*******************************************************************
1859 Reads or writes a structure.
1860 ********************************************************************/
1862 BOOL srv_io_r_net_sess_enum(const char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps, int depth)
1864 if (r_n == NULL)
1865 return False;
1867 prs_debug(ps, depth, desc, "srv_io_r_net_sess_enum");
1868 depth++;
1870 if(!prs_align(ps))
1871 return False;
1873 if(!prs_uint32("sess_level", ps, depth, &r_n->sess_level))
1874 return False;
1876 if (r_n->sess_level != (uint32)-1) {
1877 if(!srv_io_srv_sess_ctr("sess_ctr", &r_n->ctr, ps, depth))
1878 return False;
1881 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
1882 return False;
1883 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
1884 return False;
1885 if(!prs_werror("status", ps, depth, &r_n->status))
1886 return False;
1888 return True;
1891 /*******************************************************************
1892 Inits a SRV_Q_NET_SESS_DEL structure.
1893 ********************************************************************/
1895 void init_srv_q_net_sess_del(SRV_Q_NET_SESS_DEL *q_n, const char *srv_name,
1896 const char *cli_name, const char *user_name)
1898 DEBUG(5,("init_q_net_sess_enum\n"));
1900 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1901 init_buf_unistr2(&q_n->uni_cli_name, &q_n->ptr_cli_name, cli_name);
1902 init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
1905 /*******************************************************************
1906 Reads or writes a structure.
1907 ********************************************************************/
1909 BOOL srv_io_q_net_sess_del(const char *desc, SRV_Q_NET_SESS_DEL *q_n, prs_struct *ps, int depth)
1911 if (q_n == NULL)
1912 return False;
1914 prs_debug(ps, depth, desc, "srv_io_q_net_sess_del");
1915 depth++;
1917 if(!prs_align(ps))
1918 return False;
1920 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1921 return False;
1922 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1923 return False;
1925 if(!prs_align(ps))
1926 return False;
1928 if(!prs_uint32("ptr_cli_name", ps, depth, &q_n->ptr_cli_name))
1929 return False;
1930 if(!smb_io_unistr2("", &q_n->uni_cli_name, q_n->ptr_cli_name, ps, depth))
1931 return False;
1933 if(!prs_align(ps))
1934 return False;
1935 if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
1936 return False;
1937 if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
1938 return False;
1940 return True;
1943 /*******************************************************************
1944 Reads or writes a structure.
1945 ********************************************************************/
1947 BOOL srv_io_r_net_sess_del(const char *desc, SRV_R_NET_SESS_DEL *r_n, prs_struct *ps, int depth)
1949 if (r_n == NULL)
1950 return False;
1952 prs_debug(ps, depth, desc, "srv_io_r_net_sess_del");
1953 depth++;
1955 if(!prs_align(ps))
1956 return False;
1958 if(!prs_werror("status", ps, depth, &r_n->status))
1959 return False;
1961 return True;
1964 /*******************************************************************
1965 Inits a CONN_INFO_0 structure
1966 ********************************************************************/
1968 void init_srv_conn_info0(CONN_INFO_0 *ss0, uint32 id)
1970 DEBUG(5,("init_srv_conn_info0\n"));
1972 ss0->id = id;
1975 /*******************************************************************
1976 Reads or writes a structure.
1977 ********************************************************************/
1979 static BOOL srv_io_conn_info0(const char *desc, CONN_INFO_0 *ss0, prs_struct *ps, int depth)
1981 if (ss0 == NULL)
1982 return False;
1984 prs_debug(ps, depth, desc, "srv_io_conn_info0");
1985 depth++;
1987 if(!prs_align(ps))
1988 return False;
1990 if(!prs_uint32("id", ps, depth, &ss0->id))
1991 return False;
1993 return True;
1996 /*******************************************************************
1997 Reads or writes a structure.
1998 ********************************************************************/
2000 static BOOL srv_io_srv_conn_info_0(const char *desc, SRV_CONN_INFO_0 *ss0, prs_struct *ps, int depth)
2002 if (ss0 == NULL)
2003 return False;
2005 prs_debug(ps, depth, desc, "srv_io_srv_conn_info_0");
2006 depth++;
2008 if(!prs_align(ps))
2009 return False;
2011 if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read))
2012 return False;
2013 if(!prs_uint32("ptr_conn_info", ps, depth, &ss0->ptr_conn_info))
2014 return False;
2016 if (ss0->ptr_conn_info != 0) {
2017 int i;
2018 int num_entries = ss0->num_entries_read;
2020 if (num_entries > MAX_CONN_ENTRIES) {
2021 num_entries = MAX_CONN_ENTRIES; /* report this! */
2024 if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2))
2025 return False;
2027 for (i = 0; i < num_entries; i++) {
2028 if(!srv_io_conn_info0("", &ss0->info_0[i], ps, depth))
2029 return False;
2032 if(!prs_align(ps))
2033 return False;
2036 return True;
2039 /*******************************************************************
2040 Inits a CONN_INFO_1_STR structure
2041 ********************************************************************/
2043 void init_srv_conn_info1_str(CONN_INFO_1_STR *ss1, const char *usr_name, const char *net_name)
2045 DEBUG(5,("init_srv_conn_info1_str\n"));
2047 init_unistr2(&ss1->uni_usr_name, usr_name, UNI_STR_TERMINATE);
2048 init_unistr2(&ss1->uni_net_name, net_name, UNI_STR_TERMINATE);
2051 /*******************************************************************
2052 Reads or writes a structure.
2053 ********************************************************************/
2055 static BOOL srv_io_conn_info1_str(const char *desc, CONN_INFO_1_STR *ss1, prs_struct *ps, int depth)
2057 if (ss1 == NULL)
2058 return False;
2060 prs_debug(ps, depth, desc, "srv_io_conn_info1_str");
2061 depth++;
2063 if(!prs_align(ps))
2064 return False;
2066 if(!smb_io_unistr2("", &ss1->uni_usr_name, True, ps, depth))
2067 return False;
2068 if(!smb_io_unistr2("", &ss1->uni_net_name, True, ps, depth))
2069 return False;
2071 return True;
2074 /*******************************************************************
2075 Inits a CONN_INFO_1 structure
2076 ********************************************************************/
2078 void init_srv_conn_info1(CONN_INFO_1 *ss1,
2079 uint32 id, uint32 type,
2080 uint32 num_opens, uint32 num_users, uint32 open_time,
2081 const char *usr_name, const char *net_name)
2083 DEBUG(5,("init_srv_conn_info1: %s %s\n", usr_name, net_name));
2085 ss1->id = id ;
2086 ss1->type = type ;
2087 ss1->num_opens = num_opens ;
2088 ss1->num_users = num_users;
2089 ss1->open_time = open_time;
2091 ss1->ptr_usr_name = (usr_name != NULL) ? 1 : 0;
2092 ss1->ptr_net_name = (net_name != NULL) ? 1 : 0;
2095 /*******************************************************************
2096 Reads or writes a structure.
2097 ********************************************************************/
2099 static BOOL srv_io_conn_info1(const char *desc, CONN_INFO_1 *ss1, prs_struct *ps, int depth)
2101 if (ss1 == NULL)
2102 return False;
2104 prs_debug(ps, depth, desc, "srv_io_conn_info1");
2105 depth++;
2107 if(!prs_align(ps))
2108 return False;
2110 if(!prs_uint32("id ", ps, depth, &ss1->id))
2111 return False;
2112 if(!prs_uint32("type ", ps, depth, &ss1->type))
2113 return False;
2114 if(!prs_uint32("num_opens ", ps, depth, &ss1->num_opens))
2115 return False;
2116 if(!prs_uint32("num_users ", ps, depth, &ss1->num_users))
2117 return False;
2118 if(!prs_uint32("open_time ", ps, depth, &ss1->open_time))
2119 return False;
2121 if(!prs_uint32("ptr_usr_name", ps, depth, &ss1->ptr_usr_name))
2122 return False;
2123 if(!prs_uint32("ptr_net_name", ps, depth, &ss1->ptr_net_name))
2124 return False;
2126 return True;
2129 /*******************************************************************
2130 Reads or writes a structure.
2131 ********************************************************************/
2133 static BOOL srv_io_srv_conn_info_1(const char *desc, SRV_CONN_INFO_1 *ss1, prs_struct *ps, int depth)
2135 if (ss1 == NULL)
2136 return False;
2138 prs_debug(ps, depth, desc, "srv_io_srv_conn_info_1");
2139 depth++;
2141 if(!prs_align(ps))
2142 return False;
2144 if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read))
2145 return False;
2146 if(!prs_uint32("ptr_conn_info", ps, depth, &ss1->ptr_conn_info))
2147 return False;
2149 if (ss1->ptr_conn_info != 0) {
2150 int i;
2151 int num_entries = ss1->num_entries_read;
2153 if (num_entries > MAX_CONN_ENTRIES) {
2154 num_entries = MAX_CONN_ENTRIES; /* report this! */
2157 if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2))
2158 return False;
2160 for (i = 0; i < num_entries; i++) {
2161 if(!srv_io_conn_info1("", &ss1->info_1[i], ps, depth))
2162 return False;
2165 for (i = 0; i < num_entries; i++) {
2166 if(!srv_io_conn_info1_str("", &ss1->info_1_str[i], ps, depth))
2167 return False;
2170 if(!prs_align(ps))
2171 return False;
2174 return True;
2177 /*******************************************************************
2178 Reads or writes a structure.
2179 ********************************************************************/
2181 static BOOL srv_io_srv_conn_ctr(const char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
2183 SRV_CONN_INFO_CTR *ctr = *pp_ctr;
2185 prs_debug(ps, depth, desc, "srv_io_srv_conn_ctr");
2186 depth++;
2188 if (UNMARSHALLING(ps)) {
2189 ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_CONN_INFO_CTR, 1);
2190 if (ctr == NULL)
2191 return False;
2194 if (ctr == NULL)
2195 return False;
2197 if(!prs_align(ps))
2198 return False;
2200 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
2201 return False;
2202 if(!prs_uint32("ptr_conn_ctr", ps, depth, &ctr->ptr_conn_ctr))
2203 return False;
2205 if (ctr->ptr_conn_ctr != 0) {
2206 switch (ctr->switch_value) {
2207 case 0:
2208 if(!srv_io_srv_conn_info_0("", &ctr->conn.info0, ps, depth))
2209 return False;
2210 break;
2211 case 1:
2212 if(!srv_io_srv_conn_info_1("", &ctr->conn.info1, ps, depth))
2213 return False;
2214 break;
2215 default:
2216 DEBUG(5,("%s no connection info at switch_value %d\n",
2217 tab_depth(depth), ctr->switch_value));
2218 break;
2222 return True;
2225 /*******************************************************************
2226 Reads or writes a structure.
2227 ********************************************************************/
2229 void init_srv_q_net_conn_enum(SRV_Q_NET_CONN_ENUM *q_n,
2230 const char *srv_name, const char *qual_name,
2231 uint32 conn_level, SRV_CONN_INFO_CTR *ctr,
2232 uint32 preferred_len,
2233 ENUM_HND *hnd)
2235 DEBUG(5,("init_q_net_conn_enum\n"));
2237 q_n->ctr = ctr;
2239 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name );
2240 init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name);
2242 q_n->conn_level = conn_level;
2243 q_n->preferred_len = preferred_len;
2245 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
2248 /*******************************************************************
2249 Reads or writes a structure.
2250 ********************************************************************/
2252 BOOL srv_io_q_net_conn_enum(const char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps, int depth)
2254 if (q_n == NULL)
2255 return False;
2257 prs_debug(ps, depth, desc, "srv_io_q_net_conn_enum");
2258 depth++;
2260 if(!prs_align(ps))
2261 return False;
2263 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
2264 return False;
2265 if(!smb_io_unistr2("", &q_n->uni_srv_name, q_n->ptr_srv_name, ps, depth))
2266 return False;
2268 if(!prs_align(ps))
2269 return False;
2271 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
2272 return False;
2273 if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
2274 return False;
2276 if(!prs_align(ps))
2277 return False;
2279 if(!prs_uint32("conn_level", ps, depth, &q_n->conn_level))
2280 return False;
2282 if (q_n->conn_level != (uint32)-1) {
2283 if(!srv_io_srv_conn_ctr("conn_ctr", &q_n->ctr, ps, depth))
2284 return False;
2287 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
2288 return False;
2290 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
2291 return False;
2293 return True;
2296 /*******************************************************************
2297 Reads or writes a structure.
2298 ********************************************************************/
2300 BOOL srv_io_r_net_conn_enum(const char *desc, SRV_R_NET_CONN_ENUM *r_n, prs_struct *ps, int depth)
2302 if (r_n == NULL)
2303 return False;
2305 prs_debug(ps, depth, desc, "srv_io_r_net_conn_enum");
2306 depth++;
2308 if(!prs_align(ps))
2309 return False;
2311 if(!prs_uint32("conn_level", ps, depth, &r_n->conn_level))
2312 return False;
2314 if (r_n->conn_level != (uint32)-1) {
2315 if(!srv_io_srv_conn_ctr("conn_ctr", &r_n->ctr, ps, depth))
2316 return False;
2319 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
2320 return False;
2321 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
2322 return False;
2323 if(!prs_werror("status", ps, depth, &r_n->status))
2324 return False;
2326 return True;
2329 /*******************************************************************
2330 Reads or writes a structure.
2331 ********************************************************************/
2333 static BOOL srv_io_file_info3_str(const char *desc, FILE_INFO_3 *sh1, prs_struct *ps, int depth)
2335 if (sh1 == NULL)
2336 return False;
2338 prs_debug(ps, depth, desc, "srv_io_file_info3_str");
2339 depth++;
2341 if(!prs_align(ps))
2342 return False;
2344 if ( sh1->path ) {
2345 if(!smb_io_unistr2("", sh1->path, True, ps, depth))
2346 return False;
2349 if ( sh1->user ) {
2350 if(!smb_io_unistr2("", sh1->user, True, ps, depth))
2351 return False;
2354 return True;
2357 /*******************************************************************
2358 Inits a FILE_INFO_3 structure
2359 ********************************************************************/
2361 void init_srv_file_info3( FILE_INFO_3 *fl3, uint32 id, uint32 perms, uint32 num_locks,
2362 const char *user_name, const char *path_name )
2364 fl3->id = id;
2365 fl3->perms = perms;
2366 fl3->num_locks = num_locks;
2368 if ( path_name ) {
2369 if ( (fl3->path = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
2370 return;
2371 init_unistr2(fl3->path, path_name, UNI_STR_TERMINATE);
2374 if ( user_name ) {
2375 if ( (fl3->user = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
2376 return;
2377 init_unistr2(fl3->user, user_name, UNI_STR_TERMINATE);
2380 return;
2383 /*******************************************************************
2384 Reads or writes a structure.
2385 ********************************************************************/
2387 static BOOL srv_io_file_info3(const char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int depth)
2389 uint32 uni_p;
2391 if (fl3 == NULL)
2392 return False;
2394 prs_debug(ps, depth, desc, "srv_io_file_info3");
2395 depth++;
2397 if(!prs_align(ps))
2398 return False;
2400 if(!prs_uint32("id ", ps, depth, &fl3->id))
2401 return False;
2402 if(!prs_uint32("perms ", ps, depth, &fl3->perms))
2403 return False;
2404 if(!prs_uint32("num_locks ", ps, depth, &fl3->num_locks))
2405 return False;
2407 uni_p = fl3->path ? 1 : 0;
2408 if(!prs_uint32("ptr", ps, depth, &uni_p))
2409 return False;
2410 if (UNMARSHALLING(ps)) {
2411 if ( (fl3->path = PRS_ALLOC_MEM( ps, UNISTR2, 1)) == NULL ) {
2412 return False;
2416 uni_p = fl3->user ? 1 : 0;
2417 if(!prs_uint32("ptr", ps, depth, &uni_p))
2418 return False;
2419 if (UNMARSHALLING(ps)) {
2420 if ( (fl3->user = PRS_ALLOC_MEM( ps, UNISTR2, 1)) == NULL ) {
2421 return False;
2425 return True;
2428 /*******************************************************************
2429 Reads or writes a structure.
2430 ********************************************************************/
2432 static BOOL srv_io_srv_file_ctr(const char *desc, SRV_FILE_INFO_CTR *ctr, prs_struct *ps, int depth)
2434 if (ctr == NULL)
2435 return False;
2437 prs_debug(ps, depth, desc, "srv_io_srv_file_ctr");
2438 depth++;
2440 if (UNMARSHALLING(ps)) {
2441 ZERO_STRUCTP(ctr);
2444 if(!prs_align(ps))
2445 return False;
2447 if(!prs_uint32("level", ps, depth, &ctr->level))
2448 return False;
2450 if(!prs_uint32("ptr_file_info", ps, depth, &ctr->ptr_file_info))
2451 return False;
2452 if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
2453 return False;
2454 if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
2455 return False;
2457 if (ctr->ptr_entries == 0)
2458 return True;
2460 if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2))
2461 return False;
2463 switch (ctr->level) {
2464 case 3: {
2465 FILE_INFO_3 *info3 = ctr->file.info3;
2466 int num_entries = ctr->num_entries;
2467 int i;
2469 if (UNMARSHALLING(ps) && num_entries) {
2470 if (!(info3 = PRS_ALLOC_MEM(ps, FILE_INFO_3, num_entries)))
2471 return False;
2472 ctr->file.info3 = info3;
2475 for (i = 0; i < num_entries; i++) {
2476 if(!srv_io_file_info3("", &ctr->file.info3[i], ps, depth))
2477 return False;
2480 for (i = 0; i < num_entries; i++) {
2481 if(!srv_io_file_info3_str("", &ctr->file.info3[i], ps, depth))
2482 return False;
2484 break;
2486 default:
2487 DEBUG(5,("%s no file info at switch_value %d\n", tab_depth(depth), ctr->level));
2488 break;
2491 return True;
2494 /*******************************************************************
2495 Inits a SRV_Q_NET_FILE_ENUM structure.
2496 ********************************************************************/
2498 void init_srv_q_net_file_enum(SRV_Q_NET_FILE_ENUM *q_n,
2499 const char *srv_name, const char *qual_name,
2500 const char *user_name,
2501 uint32 file_level, SRV_FILE_INFO_CTR *ctr,
2502 uint32 preferred_len,
2503 ENUM_HND *hnd)
2505 uint32 ptr;
2507 if ( srv_name ) {
2508 if ( (q_n->servername = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
2509 return;
2510 init_buf_unistr2(q_n->servername, &ptr, srv_name);
2513 if ( qual_name ) {
2514 if ( (q_n->qualifier = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
2515 return;
2516 init_buf_unistr2(q_n->qualifier, &ptr, qual_name);
2519 if ( user_name ) {
2520 if ( (q_n->username = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
2521 return;
2522 init_buf_unistr2(q_n->username, &ptr, user_name);
2525 q_n->level = q_n->ctr.level = file_level;
2527 q_n->preferred_len = preferred_len;
2528 q_n->ctr.ptr_file_info = 1;
2529 q_n->ctr.num_entries = 0;
2530 q_n->ctr.num_entries2 = 0;
2532 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
2535 /*******************************************************************
2536 Reads or writes a structure.
2537 ********************************************************************/
2539 BOOL srv_io_q_net_file_enum(const char *desc, SRV_Q_NET_FILE_ENUM *q_u, prs_struct *ps, int depth)
2541 if (q_u == NULL)
2542 return False;
2544 prs_debug(ps, depth, desc, "srv_io_q_net_file_enum");
2545 depth++;
2547 if(!prs_align(ps))
2548 return False;
2550 if(!prs_pointer("servername", ps, depth, (void**)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
2551 return False;
2552 if(!prs_align(ps))
2553 return False;
2555 if(!prs_pointer("qualifier", ps, depth, (void**)&q_u->qualifier, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
2556 return False;
2557 if(!prs_align(ps))
2558 return False;
2560 if(!prs_pointer("username", ps, depth, (void**)&q_u->username, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
2561 return False;
2562 if(!prs_align(ps))
2563 return False;
2565 if(!prs_uint32("level", ps, depth, &q_u->level))
2566 return False;
2568 if (q_u->level != (uint32)-1) {
2569 if(!srv_io_srv_file_ctr("file_ctr", &q_u->ctr, ps, depth))
2570 return False;
2573 if(!prs_uint32("preferred_len", ps, depth, &q_u->preferred_len))
2574 return False;
2576 if(!smb_io_enum_hnd("enum_hnd", &q_u->enum_hnd, ps, depth))
2577 return False;
2579 return True;
2582 /*******************************************************************
2583 Reads or writes a structure.
2584 ********************************************************************/
2586 BOOL srv_io_r_net_file_enum(const char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps, int depth)
2588 if (r_n == NULL)
2589 return False;
2591 prs_debug(ps, depth, desc, "srv_io_r_net_file_enum");
2592 depth++;
2594 if(!prs_align(ps))
2595 return False;
2597 if(!prs_uint32("level", ps, depth, &r_n->level))
2598 return False;
2600 if (r_n->level != 0) {
2601 if(!srv_io_srv_file_ctr("file_ctr", &r_n->ctr, ps, depth))
2602 return False;
2605 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
2606 return False;
2607 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
2608 return False;
2609 if(!prs_werror("status", ps, depth, &r_n->status))
2610 return False;
2612 return True;
2615 /*******************************************************************
2616 Initialize a net file close request
2617 ********************************************************************/
2618 void init_srv_q_net_file_close(SRV_Q_NET_FILE_CLOSE *q_n, const char *server,
2619 uint32 file_id)
2621 if ( server ) {
2622 if ( (q_n->servername = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
2623 return;
2625 init_unistr2(q_n->servername, server, UNI_STR_TERMINATE);
2628 q_n->file_id = file_id;
2631 /*******************************************************************
2632 Inits a SRV_INFO_100 structure.
2633 ********************************************************************/
2635 void init_srv_info_100(SRV_INFO_100 *sv100, uint32 platform_id, const char *name)
2637 DEBUG(5,("init_srv_info_100\n"));
2639 sv100->platform_id = platform_id;
2640 init_buf_unistr2(&sv100->uni_name, &sv100->ptr_name, name);
2643 /*******************************************************************
2644 Reads or writes a SRV_INFO_101 structure.
2645 ********************************************************************/
2647 static BOOL srv_io_info_100(const char *desc, SRV_INFO_100 *sv100, prs_struct *ps, int depth)
2649 if (sv100 == NULL)
2650 return False;
2652 prs_debug(ps, depth, desc, "srv_io_info_100");
2653 depth++;
2655 if(!prs_align(ps))
2656 return False;
2658 if(!prs_uint32("platform_id ", ps, depth, &sv100->platform_id))
2659 return False;
2660 if(!prs_uint32("ptr_name ", ps, depth, &sv100->ptr_name))
2661 return False;
2663 if(!smb_io_unistr2("uni_name ", &sv100->uni_name, True, ps, depth))
2664 return False;
2666 return True;
2670 /*******************************************************************
2671 Inits a SRV_INFO_101 structure.
2672 ********************************************************************/
2674 void init_srv_info_101(SRV_INFO_101 *sv101, uint32 platform_id, const char *name,
2675 uint32 ver_major, uint32 ver_minor,
2676 uint32 srv_type, const char *comment)
2678 DEBUG(5,("init_srv_info_101\n"));
2680 sv101->platform_id = platform_id;
2681 init_buf_unistr2(&sv101->uni_name, &sv101->ptr_name, name);
2682 sv101->ver_major = ver_major;
2683 sv101->ver_minor = ver_minor;
2684 sv101->srv_type = srv_type;
2685 init_buf_unistr2(&sv101->uni_comment, &sv101->ptr_comment, comment);
2688 /*******************************************************************
2689 Reads or writes a SRV_INFO_101 structure.
2690 ********************************************************************/
2692 static BOOL srv_io_info_101(const char *desc, SRV_INFO_101 *sv101, prs_struct *ps, int depth)
2694 if (sv101 == NULL)
2695 return False;
2697 prs_debug(ps, depth, desc, "srv_io_info_101");
2698 depth++;
2700 if(!prs_align(ps))
2701 return False;
2703 if(!prs_uint32("platform_id ", ps, depth, &sv101->platform_id))
2704 return False;
2705 if(!prs_uint32("ptr_name ", ps, depth, &sv101->ptr_name))
2706 return False;
2707 if(!prs_uint32("ver_major ", ps, depth, &sv101->ver_major))
2708 return False;
2709 if(!prs_uint32("ver_minor ", ps, depth, &sv101->ver_minor))
2710 return False;
2711 if(!prs_uint32("srv_type ", ps, depth, &sv101->srv_type))
2712 return False;
2713 if(!prs_uint32("ptr_comment ", ps, depth, &sv101->ptr_comment))
2714 return False;
2716 if(!prs_align(ps))
2717 return False;
2719 if(!smb_io_unistr2("uni_name ", &sv101->uni_name, True, ps, depth))
2720 return False;
2721 if(!smb_io_unistr2("uni_comment ", &sv101->uni_comment, True, ps, depth))
2722 return False;
2724 return True;
2727 /*******************************************************************
2728 Inits a SRV_INFO_102 structure.
2729 ********************************************************************/
2731 void init_srv_info_102(SRV_INFO_102 *sv102, uint32 platform_id, const char *name,
2732 const char *comment, uint32 ver_major, uint32 ver_minor,
2733 uint32 srv_type, uint32 users, uint32 disc, uint32 hidden,
2734 uint32 announce, uint32 ann_delta, uint32 licenses,
2735 const char *usr_path)
2737 DEBUG(5,("init_srv_info_102\n"));
2739 sv102->platform_id = platform_id;
2740 init_buf_unistr2(&sv102->uni_name, &sv102->ptr_name, name);
2741 sv102->ver_major = ver_major;
2742 sv102->ver_minor = ver_minor;
2743 sv102->srv_type = srv_type;
2744 init_buf_unistr2(&sv102->uni_comment, &sv102->ptr_comment, comment);
2746 /* same as 101 up to here */
2748 sv102->users = users;
2749 sv102->disc = disc;
2750 sv102->hidden = hidden;
2751 sv102->announce = announce;
2752 sv102->ann_delta = ann_delta;
2753 sv102->licenses = licenses;
2754 init_buf_unistr2(&sv102->uni_usr_path, &sv102->ptr_usr_path, usr_path);
2758 /*******************************************************************
2759 Reads or writes a SRV_INFO_102 structure.
2760 ********************************************************************/
2762 static BOOL srv_io_info_102(const char *desc, SRV_INFO_102 *sv102, prs_struct *ps, int depth)
2764 if (sv102 == NULL)
2765 return False;
2767 prs_debug(ps, depth, desc, "srv_io_info102");
2768 depth++;
2770 if(!prs_align(ps))
2771 return False;
2773 if(!prs_uint32("platform_id ", ps, depth, &sv102->platform_id))
2774 return False;
2775 if(!prs_uint32("ptr_name ", ps, depth, &sv102->ptr_name))
2776 return False;
2777 if(!prs_uint32("ver_major ", ps, depth, &sv102->ver_major))
2778 return False;
2779 if(!prs_uint32("ver_minor ", ps, depth, &sv102->ver_minor))
2780 return False;
2781 if(!prs_uint32("srv_type ", ps, depth, &sv102->srv_type))
2782 return False;
2783 if(!prs_uint32("ptr_comment ", ps, depth, &sv102->ptr_comment))
2784 return False;
2786 /* same as 101 up to here */
2788 if(!prs_uint32("users ", ps, depth, &sv102->users))
2789 return False;
2790 if(!prs_uint32("disc ", ps, depth, &sv102->disc))
2791 return False;
2792 if(!prs_uint32("hidden ", ps, depth, &sv102->hidden))
2793 return False;
2794 if(!prs_uint32("announce ", ps, depth, &sv102->announce))
2795 return False;
2796 if(!prs_uint32("ann_delta ", ps, depth, &sv102->ann_delta))
2797 return False;
2798 if(!prs_uint32("licenses ", ps, depth, &sv102->licenses))
2799 return False;
2800 if(!prs_uint32("ptr_usr_path", ps, depth, &sv102->ptr_usr_path))
2801 return False;
2803 if(!smb_io_unistr2("uni_name ", &sv102->uni_name, True, ps, depth))
2804 return False;
2805 if(!prs_align(ps))
2806 return False;
2807 if(!smb_io_unistr2("uni_comment ", &sv102->uni_comment, True, ps, depth))
2808 return False;
2809 if(!prs_align(ps))
2810 return False;
2811 if(!smb_io_unistr2("uni_usr_path", &sv102->uni_usr_path, True, ps, depth))
2812 return False;
2814 return True;
2817 /*******************************************************************
2818 Reads or writes a SRV_INFO_102 structure.
2819 ********************************************************************/
2821 static BOOL srv_io_info_ctr(const char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int depth)
2823 if (ctr == NULL)
2824 return False;
2826 prs_debug(ps, depth, desc, "srv_io_info_ctr");
2827 depth++;
2829 if(!prs_align(ps))
2830 return False;
2832 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
2833 return False;
2834 if(!prs_uint32("ptr_srv_ctr ", ps, depth, &ctr->ptr_srv_ctr))
2835 return False;
2837 if (ctr->ptr_srv_ctr != 0 && ctr->switch_value != 0 && ctr != NULL) {
2838 switch (ctr->switch_value) {
2839 case 100:
2840 if(!srv_io_info_100("sv100", &ctr->srv.sv100, ps, depth))
2841 return False;
2842 break;
2843 case 101:
2844 if(!srv_io_info_101("sv101", &ctr->srv.sv101, ps, depth))
2845 return False;
2846 break;
2847 case 102:
2848 if(!srv_io_info_102("sv102", &ctr->srv.sv102, ps, depth))
2849 return False;
2850 break;
2851 default:
2852 DEBUG(5,("%s no server info at switch_value %d\n",
2853 tab_depth(depth), ctr->switch_value));
2854 break;
2856 if(!prs_align(ps))
2857 return False;
2860 return True;
2863 /*******************************************************************
2864 Inits a SRV_Q_NET_SRV_GET_INFO structure.
2865 ********************************************************************/
2867 void init_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
2868 const char *server_name, uint32 switch_value)
2870 DEBUG(5,("init_srv_q_net_srv_get_info\n"));
2872 init_buf_unistr2(&srv->uni_srv_name, &srv->ptr_srv_name, server_name);
2874 srv->switch_value = switch_value;
2877 /*******************************************************************
2878 Reads or writes a structure.
2879 ********************************************************************/
2881 BOOL srv_io_q_net_srv_get_info(const char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth)
2883 if (q_n == NULL)
2884 return False;
2886 prs_debug(ps, depth, desc, "srv_io_q_net_srv_get_info");
2887 depth++;
2889 if(!prs_align(ps))
2890 return False;
2892 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
2893 return False;
2894 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
2895 return False;
2897 if(!prs_align(ps))
2898 return False;
2900 if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
2901 return False;
2903 return True;
2906 /*******************************************************************
2907 Inits a SRV_R_NET_SRV_GET_INFO structure.
2908 ********************************************************************/
2910 void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
2911 uint32 switch_value, SRV_INFO_CTR *ctr, WERROR status)
2913 DEBUG(5,("init_srv_r_net_srv_get_info\n"));
2915 srv->ctr = ctr;
2917 if (W_ERROR_IS_OK(status)) {
2918 srv->ctr->switch_value = switch_value;
2919 srv->ctr->ptr_srv_ctr = 1;
2920 } else {
2921 srv->ctr->switch_value = 0;
2922 srv->ctr->ptr_srv_ctr = 0;
2925 srv->status = status;
2928 /*******************************************************************
2929 Inits a SRV_R_NET_SRV_SET_INFO structure.
2930 ********************************************************************/
2932 void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
2933 uint32 switch_value, WERROR status)
2935 DEBUG(5,("init_srv_r_net_srv_set_info\n"));
2937 srv->switch_value = switch_value;
2938 srv->status = status;
2941 /*******************************************************************
2942 Reads or writes a structure.
2943 ********************************************************************/
2945 BOOL srv_io_q_net_srv_set_info(const char *desc, SRV_Q_NET_SRV_SET_INFO *q_n,
2946 prs_struct *ps, int depth)
2948 prs_debug(ps, depth, desc, "srv_io_q_net_srv_set_info");
2949 depth++;
2951 if(!prs_align(ps))
2952 return False;
2954 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
2955 return False;
2956 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
2957 return False;
2959 if(!prs_align(ps))
2960 return False;
2962 if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
2963 return False;
2965 if (UNMARSHALLING(ps)) {
2966 q_n->ctr = PRS_ALLOC_MEM(ps, SRV_INFO_CTR, 1);
2968 if (!q_n->ctr)
2969 return False;
2972 if(!srv_io_info_ctr("ctr", q_n->ctr, ps, depth))
2973 return False;
2975 return True;
2978 /*******************************************************************
2979 Reads or writes a structure.
2980 ********************************************************************/
2982 BOOL srv_io_r_net_srv_get_info(const char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth)
2984 if (r_n == NULL)
2985 return False;
2987 prs_debug(ps, depth, desc, "srv_io_r_net_srv_get_info");
2988 depth++;
2990 if(!prs_align(ps))
2991 return False;
2993 if(!srv_io_info_ctr("ctr", r_n->ctr, ps, depth))
2994 return False;
2996 if(!prs_werror("status", ps, depth, &r_n->status))
2997 return False;
2999 return True;
3002 /*******************************************************************
3003 Reads or writes a structure.
3004 ********************************************************************/
3006 BOOL srv_io_r_net_srv_set_info(const char *desc, SRV_R_NET_SRV_SET_INFO *r_n,
3007 prs_struct *ps, int depth)
3009 prs_debug(ps, depth, desc, "srv_io_r_net_srv_set_info");
3010 depth++;
3012 if(!prs_align(ps))
3013 return False;
3015 if(!prs_uint32("switch value ", ps, depth, &r_n->switch_value))
3016 return False;
3018 if(!prs_werror("status", ps, depth, &r_n->status))
3019 return False;
3021 return True;
3024 /*******************************************************************
3025 Reads or writes a structure.
3026 ********************************************************************/
3028 BOOL srv_io_q_net_remote_tod(const char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth)
3030 if (q_n == NULL)
3031 return False;
3033 prs_debug(ps, depth, desc, "srv_io_q_net_remote_tod");
3034 depth++;
3036 if(!prs_align(ps))
3037 return False;
3039 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
3040 return False;
3041 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3042 return False;
3044 return True;
3047 /*******************************************************************
3048 Reads or writes a TIME_OF_DAY_INFO structure.
3049 ********************************************************************/
3051 static BOOL srv_io_time_of_day_info(const char *desc, TIME_OF_DAY_INFO *tod, prs_struct *ps, int depth)
3053 if (tod == NULL)
3054 return False;
3056 prs_debug(ps, depth, desc, "srv_io_time_of_day_info");
3057 depth++;
3059 if(!prs_align(ps))
3060 return False;
3062 if(!prs_uint32("elapsedt ", ps, depth, &tod->elapsedt))
3063 return False;
3064 if(!prs_uint32("msecs ", ps, depth, &tod->msecs))
3065 return False;
3066 if(!prs_uint32("hours ", ps, depth, &tod->hours))
3067 return False;
3068 if(!prs_uint32("mins ", ps, depth, &tod->mins))
3069 return False;
3070 if(!prs_uint32("secs ", ps, depth, &tod->secs))
3071 return False;
3072 if(!prs_uint32("hunds ", ps, depth, &tod->hunds))
3073 return False;
3074 if(!prs_uint32("timezone ", ps, depth, &tod->zone))
3075 return False;
3076 if(!prs_uint32("tintervals ", ps, depth, &tod->tintervals))
3077 return False;
3078 if(!prs_uint32("day ", ps, depth, &tod->day))
3079 return False;
3080 if(!prs_uint32("month ", ps, depth, &tod->month))
3081 return False;
3082 if(!prs_uint32("year ", ps, depth, &tod->year))
3083 return False;
3084 if(!prs_uint32("weekday ", ps, depth, &tod->weekday))
3085 return False;
3087 return True;
3090 /*******************************************************************
3091 Inits a TIME_OF_DAY_INFO structure.
3092 ********************************************************************/
3094 void init_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
3095 uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
3096 uint32 zone, uint32 tintervals, uint32 day,
3097 uint32 month, uint32 year, uint32 weekday)
3099 DEBUG(5,("init_time_of_day_info\n"));
3101 tod->elapsedt = elapsedt;
3102 tod->msecs = msecs;
3103 tod->hours = hours;
3104 tod->mins = mins;
3105 tod->secs = secs;
3106 tod->hunds = hunds;
3107 tod->zone = zone;
3108 tod->tintervals = tintervals;
3109 tod->day = day;
3110 tod->month = month;
3111 tod->year = year;
3112 tod->weekday = weekday;
3116 /*******************************************************************
3117 Reads or writes a structure.
3118 ********************************************************************/
3120 BOOL srv_io_r_net_remote_tod(const char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth)
3122 if (r_n == NULL)
3123 return False;
3125 prs_debug(ps, depth, desc, "srv_io_r_net_remote_tod");
3126 depth++;
3128 if(!prs_align(ps))
3129 return False;
3131 if(!prs_uint32("ptr_srv_tod ", ps, depth, &r_n->ptr_srv_tod))
3132 return False;
3134 if(!srv_io_time_of_day_info("tod", r_n->tod, ps, depth))
3135 return False;
3137 if(!prs_werror("status", ps, depth, &r_n->status))
3138 return False;
3140 return True;
3143 /*******************************************************************
3144 initialises a structure.
3145 ********************************************************************/
3147 BOOL init_srv_q_net_disk_enum(SRV_Q_NET_DISK_ENUM *q_n,
3148 const char *srv_name,
3149 uint32 preferred_len,
3150 ENUM_HND *enum_hnd
3155 DEBUG(5,("init_srv_q_net_srv_disk_enum\n"));
3157 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
3159 q_n->disk_enum_ctr.level = 0;
3160 q_n->disk_enum_ctr.disk_info_ptr = 0;
3162 q_n->preferred_len = preferred_len;
3163 memcpy(&q_n->enum_hnd, enum_hnd, sizeof(*enum_hnd));
3165 return True;
3168 /*******************************************************************
3169 Reads or writes a structure.
3170 ********************************************************************/
3172 BOOL srv_io_q_net_disk_enum(const char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth)
3174 if (q_n == NULL)
3175 return False;
3177 prs_debug(ps, depth, desc, "srv_io_q_net_disk_enum");
3178 depth++;
3180 if(!prs_align(ps))
3181 return False;
3183 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3184 return False;
3186 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3187 return False;
3189 if(!prs_align(ps))
3190 return False;
3192 if(!prs_uint32("level", ps, depth, &q_n->disk_enum_ctr.level))
3193 return False;
3195 if(!prs_uint32("entries_read", ps, depth, &q_n->disk_enum_ctr.entries_read))
3196 return False;
3198 if(!prs_uint32("buffer", ps, depth, &q_n->disk_enum_ctr.disk_info_ptr))
3199 return False;
3201 if(!prs_align(ps))
3202 return False;
3204 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
3205 return False;
3206 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
3207 return False;
3209 return True;
3212 /*******************************************************************
3213 Reads or writes a structure.
3214 ********************************************************************/
3216 BOOL srv_io_r_net_disk_enum(const char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth)
3219 unsigned int i;
3220 uint32 entries_read, entries_read2, entries_read3;
3222 if (r_n == NULL)
3223 return False;
3225 prs_debug(ps, depth, desc, "srv_io_r_net_disk_enum");
3226 depth++;
3228 entries_read = entries_read2 = entries_read3 = r_n->disk_enum_ctr.entries_read;
3230 if(!prs_align(ps))
3231 return False;
3233 if(!prs_uint32("entries_read", ps, depth, &entries_read))
3234 return False;
3235 if(!prs_uint32("ptr_disk_info", ps, depth, &r_n->disk_enum_ctr.disk_info_ptr))
3236 return False;
3238 /*this may be max, unknown, actual?*/
3240 if(!prs_uint32("max_elements", ps, depth, &entries_read2))
3241 return False;
3242 if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.unknown))
3243 return False;
3244 if(!prs_uint32("actual_elements", ps, depth, &entries_read3))
3245 return False;
3247 r_n->disk_enum_ctr.entries_read = entries_read3;
3249 if(UNMARSHALLING(ps) && entries_read3) {
3251 DISK_INFO *dinfo;
3253 if(!(dinfo = PRS_ALLOC_MEM(ps, DISK_INFO, entries_read3)))
3254 return False;
3255 r_n->disk_enum_ctr.disk_info = dinfo;
3258 for(i=0; i < entries_read3; i++) {
3260 if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.disk_info[i].unknown))
3261 return False;
3263 if(!smb_io_unistr3("disk_name", &r_n->disk_enum_ctr.disk_info[i].disk_name, ps, depth))
3264 return False;
3266 if(!prs_align(ps))
3267 return False;
3270 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
3271 return False;
3273 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
3274 return False;
3276 if(!prs_werror("status", ps, depth, &r_n->status))
3277 return False;
3279 return True;
3282 /*******************************************************************
3283 Reads or writes a structure.
3284 ********************************************************************/
3286 BOOL srv_io_q_net_name_validate(const char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth)
3288 if (q_n == NULL)
3289 return False;
3291 prs_debug(ps, depth, desc, "srv_io_q_net_name_validate");
3292 depth++;
3294 if(!prs_align(ps))
3295 return False;
3297 if(!prs_pointer("servername", ps, depth, (void**)&q_n->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
3298 return False;
3300 if(!prs_align(ps))
3301 return False;
3303 if(!smb_io_unistr2("", &q_n->sharename, True, ps, depth))
3304 return False;
3306 if(!prs_align(ps))
3307 return False;
3309 if(!prs_uint32("type", ps, depth, &q_n->type))
3310 return False;
3312 if(!prs_uint32("flags", ps, depth, &q_n->flags))
3313 return False;
3315 return True;
3318 /*******************************************************************
3319 Reads or writes a structure.
3320 ********************************************************************/
3322 BOOL srv_io_r_net_name_validate(const char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth)
3324 if (r_n == NULL)
3325 return False;
3327 prs_debug(ps, depth, desc, "srv_io_r_net_name_validate");
3328 depth++;
3330 if(!prs_align(ps))
3331 return False;
3333 if(!prs_werror("status", ps, depth, &r_n->status))
3334 return False;
3336 return True;
3339 /*******************************************************************
3340 Reads or writes a structure.
3341 ********************************************************************/
3343 BOOL srv_io_q_net_file_query_secdesc(const char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth)
3345 if (q_n == NULL)
3346 return False;
3348 prs_debug(ps, depth, desc, "srv_io_q_net_file_query_secdesc");
3349 depth++;
3351 if(!prs_align(ps))
3352 return False;
3354 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3355 return False;
3357 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3358 return False;
3360 if(!prs_align(ps))
3361 return False;
3363 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
3364 return False;
3366 if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
3367 return False;
3369 if(!prs_align(ps))
3370 return False;
3372 if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
3373 return False;
3375 if(!prs_uint32("unknown1", ps, depth, &q_n->unknown1))
3376 return False;
3378 if(!prs_uint32("unknown2", ps, depth, &q_n->unknown2))
3379 return False;
3381 if(!prs_uint32("unknown3", ps, depth, &q_n->unknown3))
3382 return False;
3384 return True;
3387 /*******************************************************************
3388 Reads or writes a structure.
3389 ********************************************************************/
3391 BOOL srv_io_r_net_file_query_secdesc(const char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth)
3393 if (r_n == NULL)
3394 return False;
3396 prs_debug(ps, depth, desc, "srv_io_r_net_file_query_secdesc");
3397 depth++;
3399 if(!prs_align(ps))
3400 return False;
3402 if(!prs_uint32("ptr_response", ps, depth, &r_n->ptr_response))
3403 return False;
3405 if(!prs_uint32("size_response", ps, depth, &r_n->size_response))
3406 return False;
3408 if(!prs_uint32("ptr_secdesc", ps, depth, &r_n->ptr_secdesc))
3409 return False;
3411 if(!prs_uint32("size_secdesc", ps, depth, &r_n->size_secdesc))
3412 return False;
3414 if(!sec_io_desc("sec_desc", &r_n->sec_desc, ps, depth))
3415 return False;
3417 if(!prs_align(ps))
3418 return False;
3420 if(!prs_werror("status", ps, depth, &r_n->status))
3421 return False;
3423 return True;
3426 /*******************************************************************
3427 Reads or writes a structure.
3428 ********************************************************************/
3430 BOOL srv_io_q_net_file_set_secdesc(const char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth)
3432 if (q_n == NULL)
3433 return False;
3435 prs_debug(ps, depth, desc, "srv_io_q_net_file_set_secdesc");
3436 depth++;
3438 if(!prs_align(ps))
3439 return False;
3441 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3442 return False;
3444 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3445 return False;
3447 if(!prs_align(ps))
3448 return False;
3450 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
3451 return False;
3453 if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
3454 return False;
3456 if(!prs_align(ps))
3457 return False;
3459 if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
3460 return False;
3462 if(!prs_align(ps))
3463 return False;
3465 if(!prs_uint32("sec_info", ps, depth, &q_n->sec_info))
3466 return False;
3468 if(!prs_uint32("size_set", ps, depth, &q_n->size_set))
3469 return False;
3471 if(!prs_uint32("ptr_secdesc", ps, depth, &q_n->ptr_secdesc))
3472 return False;
3474 if(!prs_uint32("size_secdesc", ps, depth, &q_n->size_secdesc))
3475 return False;
3477 if(!sec_io_desc("sec_desc", &q_n->sec_desc, ps, depth))
3478 return False;
3480 return True;
3483 /*******************************************************************
3484 Reads or writes a structure.
3485 ********************************************************************/
3487 BOOL srv_io_r_net_file_set_secdesc(const char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth)
3489 if (r_n == NULL)
3490 return False;
3492 prs_debug(ps, depth, desc, "srv_io_r_net_file_set_secdesc");
3493 depth++;
3495 if(!prs_align(ps))
3496 return False;
3498 if(!prs_werror("status", ps, depth, &r_n->status))
3499 return False;
3501 return True;
3504 /*******************************************************************
3505 Inits a structure
3506 ********************************************************************/
3508 void init_srv_q_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_u, const char *server)
3510 q_u->ptr_srv_name = 1;
3511 init_unistr2(&q_u->uni_srv_name, server, UNI_STR_TERMINATE);
3515 /*******************************************************************
3516 Reads or writes a structure.
3517 ********************************************************************/
3519 BOOL srv_io_q_net_file_close(const char *desc, SRV_Q_NET_FILE_CLOSE *q_u, prs_struct *ps, int depth)
3521 if (q_u == NULL)
3522 return False;
3524 prs_debug(ps, depth, desc, "srv_io_q_net_file_close");
3525 depth++;
3527 if(!prs_align(ps))
3528 return False;
3530 if(!prs_pointer("servername", ps, depth, (void**)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
3531 return False;
3532 if(!prs_align(ps))
3533 return False;
3535 if(!prs_uint32("file_id", ps, depth, &q_u->file_id))
3536 return False;
3538 return True;
3541 /*******************************************************************
3542 ********************************************************************/
3544 BOOL srv_io_r_net_file_close(const char *desc, SRV_R_NET_FILE_CLOSE *r_n,
3545 prs_struct *ps, int depth)
3547 prs_debug(ps, depth, desc, "srv_io_r_net_file_close");
3548 depth++;
3550 if(!prs_align(ps))
3551 return False;
3553 if(!prs_werror("status", ps, depth, &r_n->status))
3554 return False;
3556 return True;