Samba 3: added Samba 3.0.24 sources
[tomato.git] / release / src / router / samba3 / source / rpc_parse / parse_srv.c
blob7d15eda630f908074d8e03717c5aa832215c21b3
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.
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #include "includes.h"
28 #undef DBGC_CLASS
29 #define DBGC_CLASS DBGC_RPC_PARSE
31 /*******************************************************************
32 Inits a SH_INFO_0_STR structure
33 ********************************************************************/
35 void init_srv_share_info0_str(SH_INFO_0_STR *sh0, const char *net_name)
37 DEBUG(5,("init_srv_share_info0_str\n"));
39 init_unistr2(&sh0->uni_netname, net_name, UNI_STR_TERMINATE);
42 /*******************************************************************
43 Reads or writes a structure.
44 ********************************************************************/
46 static BOOL srv_io_share_info0_str(const char *desc, SH_INFO_0_STR *sh0, prs_struct *ps, int depth)
48 if (sh0 == NULL)
49 return False;
51 prs_debug(ps, depth, desc, "srv_io_share_info0_str");
52 depth++;
54 if(!prs_align(ps))
55 return False;
56 if(sh0->ptrs->ptr_netname)
57 if(!smb_io_unistr2("", &sh0->uni_netname, True, ps, depth))
58 return False;
60 return True;
63 /*******************************************************************
64 makes a SH_INFO_0 structure
65 ********************************************************************/
67 void init_srv_share_info0(SH_INFO_0 *sh0, const char *net_name)
69 DEBUG(5,("init_srv_share_info0: %s\n", net_name));
71 sh0->ptr_netname = (net_name != NULL) ? 1 : 0;
74 /*******************************************************************
75 Reads or writes a structure.
76 ********************************************************************/
78 static BOOL srv_io_share_info0(const char *desc, SH_INFO_0 *sh0, prs_struct *ps, int depth)
80 if (sh0 == NULL)
81 return False;
83 prs_debug(ps, depth, desc, "srv_io_share_info0");
84 depth++;
86 if(!prs_align(ps))
87 return False;
89 if(!prs_uint32("ptr_netname", ps, depth, &sh0->ptr_netname))
90 return False;
92 return True;
95 /*******************************************************************
96 Inits a SH_INFO_1_STR structure
97 ********************************************************************/
99 void init_srv_share_info1_str(SH_INFO_1_STR *sh1, const char *net_name, const char *remark)
101 DEBUG(5,("init_srv_share_info1_str\n"));
103 init_unistr2(&sh1->uni_netname, net_name, UNI_STR_TERMINATE);
104 init_unistr2(&sh1->uni_remark, remark, UNI_STR_TERMINATE);
107 /*******************************************************************
108 Reads or writes a structure.
109 ********************************************************************/
111 static BOOL srv_io_share_info1_str(const char *desc, SH_INFO_1_STR *sh1, prs_struct *ps, int depth)
113 if (sh1 == NULL)
114 return False;
116 prs_debug(ps, depth, desc, "srv_io_share_info1_str");
117 depth++;
119 if(!prs_align(ps))
120 return False;
122 if(sh1->ptrs->ptr_netname)
123 if(!smb_io_unistr2("", &sh1->uni_netname, True, ps, depth))
124 return False;
126 if(!prs_align(ps))
127 return False;
129 if(sh1->ptrs->ptr_remark)
130 if(!smb_io_unistr2("", &sh1->uni_remark, True, ps, depth))
131 return False;
133 return True;
136 /*******************************************************************
137 makes a SH_INFO_1 structure
138 ********************************************************************/
140 void init_srv_share_info1(SH_INFO_1 *sh1, const char *net_name, uint32 type, const char *remark)
142 DEBUG(5,("init_srv_share_info1: %s %8x %s\n", net_name, type, remark));
144 sh1->ptr_netname = (net_name != NULL) ? 1 : 0;
145 sh1->type = type;
146 sh1->ptr_remark = (remark != NULL) ? 1 : 0;
149 /*******************************************************************
150 Reads or writes a structure.
151 ********************************************************************/
153 static BOOL srv_io_share_info1(const char *desc, SH_INFO_1 *sh1, prs_struct *ps, int depth)
155 if (sh1 == NULL)
156 return False;
158 prs_debug(ps, depth, desc, "srv_io_share_info1");
159 depth++;
161 if(!prs_align(ps))
162 return False;
164 if(!prs_uint32("ptr_netname", ps, depth, &sh1->ptr_netname))
165 return False;
166 if(!prs_uint32("type ", ps, depth, &sh1->type))
167 return False;
168 if(!prs_uint32("ptr_remark ", ps, depth, &sh1->ptr_remark))
169 return False;
171 return True;
174 /*******************************************************************
175 Inits a SH_INFO_2_STR structure
176 ********************************************************************/
178 void init_srv_share_info2_str(SH_INFO_2_STR *sh2,
179 const char *net_name, const char *remark,
180 const char *path, const char *passwd)
182 DEBUG(5,("init_srv_share_info2_str\n"));
184 init_unistr2(&sh2->uni_netname, net_name, UNI_STR_TERMINATE);
185 init_unistr2(&sh2->uni_remark, remark, UNI_STR_TERMINATE);
186 init_unistr2(&sh2->uni_path, path, UNI_STR_TERMINATE);
187 init_unistr2(&sh2->uni_passwd, passwd, UNI_STR_TERMINATE);
190 /*******************************************************************
191 Reads or writes a structure.
192 ********************************************************************/
194 static BOOL srv_io_share_info2_str(const char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
196 if (sh2 == NULL)
197 return False;
199 if (UNMARSHALLING(ps))
200 ZERO_STRUCTP(sh2);
202 prs_debug(ps, depth, desc, "srv_io_share_info2_str");
203 depth++;
205 if(!prs_align(ps))
206 return False;
208 if (sh->ptr_netname)
209 if(!smb_io_unistr2("", &sh2->uni_netname, True, ps, depth))
210 return False;
212 if (sh->ptr_remark)
213 if(!smb_io_unistr2("", &sh2->uni_remark, True, ps, depth))
214 return False;
216 if (sh->ptr_netname)
217 if(!smb_io_unistr2("", &sh2->uni_path, True, ps, depth))
218 return False;
220 if (sh->ptr_passwd)
221 if(!smb_io_unistr2("", &sh2->uni_passwd, True, ps, depth))
222 return False;
224 return True;
227 /*******************************************************************
228 Inits a SH_INFO_2 structure
229 ********************************************************************/
231 void init_srv_share_info2(SH_INFO_2 *sh2,
232 const char *net_name, uint32 type, const char *remark,
233 uint32 perms, uint32 max_uses, uint32 num_uses,
234 const char *path, const char *passwd)
236 DEBUG(5,("init_srv_share_info2: %s %8x %s\n", net_name, type, remark));
238 sh2->ptr_netname = (net_name != NULL) ? 1 : 0;
239 sh2->type = type;
240 sh2->ptr_remark = (remark != NULL) ? 1 : 0;
241 sh2->perms = perms;
242 sh2->max_uses = max_uses;
243 sh2->num_uses = num_uses;
244 sh2->ptr_path = (path != NULL) ? 1 : 0;
245 sh2->ptr_passwd = (passwd != NULL) ? 1 : 0;
248 /*******************************************************************
249 Reads or writes a structure.
250 ********************************************************************/
252 static BOOL srv_io_share_info2(const char *desc, SH_INFO_2 *sh2, prs_struct *ps, int depth)
254 if (sh2 == NULL)
255 return False;
257 prs_debug(ps, depth, desc, "srv_io_share_info2");
258 depth++;
260 if(!prs_align(ps))
261 return False;
263 if(!prs_uint32("ptr_netname", ps, depth, &sh2->ptr_netname))
264 return False;
265 if(!prs_uint32("type ", ps, depth, &sh2->type))
266 return False;
267 if(!prs_uint32("ptr_remark ", ps, depth, &sh2->ptr_remark))
268 return False;
269 if(!prs_uint32("perms ", ps, depth, &sh2->perms))
270 return False;
271 if(!prs_uint32("max_uses ", ps, depth, &sh2->max_uses))
272 return False;
273 if(!prs_uint32("num_uses ", ps, depth, &sh2->num_uses))
274 return False;
275 if(!prs_uint32("ptr_path ", ps, depth, &sh2->ptr_path))
276 return False;
277 if(!prs_uint32("ptr_passwd ", ps, depth, &sh2->ptr_passwd))
278 return False;
280 return True;
283 /*******************************************************************
284 Inits a SH_INFO_501_STR structure
285 ********************************************************************/
287 void init_srv_share_info501_str(SH_INFO_501_STR *sh501,
288 const char *net_name, const char *remark)
290 DEBUG(5,("init_srv_share_info501_str\n"));
292 init_unistr2(&sh501->uni_netname, net_name, UNI_STR_TERMINATE);
293 init_unistr2(&sh501->uni_remark, remark, UNI_STR_TERMINATE);
296 /*******************************************************************
297 Inits a SH_INFO_2 structure
298 *******************************************************************/
300 void init_srv_share_info501(SH_INFO_501 *sh501, const char *net_name, uint32 type, const char *remark, uint32 csc_policy)
302 DEBUG(5,("init_srv_share_info501: %s %8x %s %08x\n", net_name, type,
303 remark, csc_policy));
305 ZERO_STRUCTP(sh501);
307 sh501->ptr_netname = (net_name != NULL) ? 1 : 0;
308 sh501->type = type;
309 sh501->ptr_remark = (remark != NULL) ? 1 : 0;
310 sh501->csc_policy = csc_policy;
313 /*******************************************************************
314 Reads of writes a structure.
315 *******************************************************************/
317 static BOOL srv_io_share_info501(const char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth)
319 if (sh501 == NULL)
320 return False;
322 prs_debug(ps, depth, desc, "srv_io_share_info501");
323 depth++;
325 if (!prs_align(ps))
326 return False;
328 if (!prs_uint32("ptr_netname", ps, depth, &sh501->ptr_netname))
329 return False;
330 if (!prs_uint32("type ", ps, depth, &sh501->type))
331 return False;
332 if (!prs_uint32("ptr_remark ", ps, depth, &sh501->ptr_remark))
333 return False;
334 if (!prs_uint32("csc_policy ", ps, depth, &sh501->csc_policy))
335 return False;
337 return True;
340 /*******************************************************************
341 Reads or writes a structure.
342 ********************************************************************/
344 static BOOL srv_io_share_info501_str(const char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth)
346 if (sh501 == NULL)
347 return False;
349 prs_debug(ps, depth, desc, "srv_io_share_info501_str");
350 depth++;
352 if(!prs_align(ps))
353 return False;
354 if(!smb_io_unistr2("", &sh501->uni_netname, True, ps, depth))
355 return False;
357 if(!prs_align(ps))
358 return False;
359 if(!smb_io_unistr2("", &sh501->uni_remark, True, ps, depth))
360 return False;
362 return True;
365 /*******************************************************************
366 Inits a SH_INFO_502 structure
367 ********************************************************************/
369 void init_srv_share_info502(SH_INFO_502 *sh502,
370 const char *net_name, uint32 type, const char *remark,
371 uint32 perms, uint32 max_uses, uint32 num_uses,
372 const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
374 DEBUG(5,("init_srv_share_info502: %s %8x %s\n", net_name, type, remark));
376 ZERO_STRUCTP(sh502);
378 sh502->ptr_netname = (net_name != NULL) ? 1 : 0;
379 sh502->type = type;
380 sh502->ptr_remark = (remark != NULL) ? 1 : 0;
381 sh502->perms = perms;
382 sh502->max_uses = max_uses;
383 sh502->num_uses = num_uses;
384 sh502->ptr_path = (path != NULL) ? 1 : 0;
385 sh502->ptr_passwd = (passwd != NULL) ? 1 : 0;
386 sh502->reserved = 0; /* actual size within rpc */
387 sh502->sd_size = (uint32)sd_size;
388 sh502->ptr_sd = (psd != NULL) ? 1 : 0;
391 /*******************************************************************
392 Reads or writes a structure.
393 ********************************************************************/
395 static BOOL srv_io_share_info502(const char *desc, SH_INFO_502 *sh502, prs_struct *ps, int depth)
397 if (sh502 == NULL)
398 return False;
400 prs_debug(ps, depth, desc, "srv_io_share_info502");
401 depth++;
403 if(!prs_align(ps))
404 return False;
406 if(!prs_uint32("ptr_netname", ps, depth, &sh502->ptr_netname))
407 return False;
408 if(!prs_uint32("type ", ps, depth, &sh502->type))
409 return False;
410 if(!prs_uint32("ptr_remark ", ps, depth, &sh502->ptr_remark))
411 return False;
412 if(!prs_uint32("perms ", ps, depth, &sh502->perms))
413 return False;
414 if(!prs_uint32("max_uses ", ps, depth, &sh502->max_uses))
415 return False;
416 if(!prs_uint32("num_uses ", ps, depth, &sh502->num_uses))
417 return False;
418 if(!prs_uint32("ptr_path ", ps, depth, &sh502->ptr_path))
419 return False;
420 if(!prs_uint32("ptr_passwd ", ps, depth, &sh502->ptr_passwd))
421 return False;
422 if(!prs_uint32_pre("reserved ", ps, depth, &sh502->reserved, &sh502->reserved_offset))
423 return False;
424 if(!prs_uint32("ptr_sd ", ps, depth, &sh502->ptr_sd))
425 return False;
427 return True;
430 /*******************************************************************
431 Inits a SH_INFO_502_STR structure
432 ********************************************************************/
434 void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,
435 const char *net_name, const char *remark,
436 const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
438 DEBUG(5,("init_srv_share_info502_str\n"));
440 init_unistr2(&sh502str->uni_netname, net_name, UNI_STR_TERMINATE);
441 init_unistr2(&sh502str->uni_remark, remark, UNI_STR_TERMINATE);
442 init_unistr2(&sh502str->uni_path, path, UNI_STR_TERMINATE);
443 init_unistr2(&sh502str->uni_passwd, passwd, UNI_STR_TERMINATE);
444 sh502str->sd = psd;
445 sh502str->reserved = 0;
446 sh502str->sd_size = sd_size;
449 /*******************************************************************
450 Reads or writes a structure.
451 ********************************************************************/
453 static BOOL srv_io_share_info502_str(const char *desc, SH_INFO_502_STR *sh502, prs_struct *ps, int depth)
455 if (sh502 == NULL)
456 return False;
458 prs_debug(ps, depth, desc, "srv_io_share_info502_str");
459 depth++;
461 if(!prs_align(ps))
462 return False;
464 if(sh502->ptrs->ptr_netname) {
465 if(!smb_io_unistr2("", &sh502->uni_netname, True, ps, depth))
466 return False;
469 if(!prs_align(ps))
470 return False;
472 if(sh502->ptrs->ptr_remark) {
473 if(!smb_io_unistr2("", &sh502->uni_remark, True, ps, depth))
474 return False;
477 if(!prs_align(ps))
478 return False;
480 if(sh502->ptrs->ptr_path) {
481 if(!smb_io_unistr2("", &sh502->uni_path, True, ps, depth))
482 return False;
485 if(!prs_align(ps))
486 return False;
488 if(sh502->ptrs->ptr_passwd) {
489 if(!smb_io_unistr2("", &sh502->uni_passwd, True, ps, depth))
490 return False;
493 if(!prs_align(ps))
494 return False;
496 if(sh502->ptrs->ptr_sd) {
497 uint32 old_offset;
498 uint32 reserved_offset;
500 if(!prs_uint32_pre("reserved ", ps, depth, &sh502->reserved, &reserved_offset))
501 return False;
503 old_offset = prs_offset(ps);
505 if (!sec_io_desc(desc, &sh502->sd, ps, depth))
506 return False;
508 if(UNMARSHALLING(ps)) {
510 sh502->ptrs->sd_size = sh502->sd_size = sec_desc_size(sh502->sd);
512 prs_set_offset(ps, old_offset + sh502->reserved);
515 prs_align(ps);
517 if(MARSHALLING(ps)) {
519 sh502->ptrs->reserved = sh502->reserved = prs_offset(ps) - old_offset;
522 if(!prs_uint32_post("reserved ", ps, depth,
523 &sh502->reserved, reserved_offset, sh502->reserved))
524 return False;
525 if(!prs_uint32_post("reserved ", ps, depth,
526 &sh502->ptrs->reserved, sh502->ptrs->reserved_offset, sh502->ptrs->reserved))
527 return False;
530 return True;
533 /*******************************************************************
534 Inits a SH_INFO_1004_STR structure
535 ********************************************************************/
537 void init_srv_share_info1004_str(SH_INFO_1004_STR *sh1004, const char *remark)
539 DEBUG(5,("init_srv_share_info1004_str\n"));
541 init_unistr2(&sh1004->uni_remark, remark, UNI_STR_TERMINATE);
544 /*******************************************************************
545 Reads or writes a structure.
546 ********************************************************************/
548 static BOOL srv_io_share_info1004_str(const char *desc, SH_INFO_1004_STR *sh1004, prs_struct *ps, int depth)
550 if (sh1004 == NULL)
551 return False;
553 prs_debug(ps, depth, desc, "srv_io_share_info1004_str");
554 depth++;
556 if(!prs_align(ps))
557 return False;
558 if(sh1004->ptrs->ptr_remark)
559 if(!smb_io_unistr2("", &sh1004->uni_remark, True, ps, depth))
560 return False;
562 return True;
565 /*******************************************************************
566 makes a SH_INFO_1004 structure
567 ********************************************************************/
569 void init_srv_share_info1004(SH_INFO_1004 *sh1004, const char *remark)
571 DEBUG(5,("init_srv_share_info1004: %s\n", remark));
573 sh1004->ptr_remark = (remark != NULL) ? 1 : 0;
576 /*******************************************************************
577 Reads or writes a structure.
578 ********************************************************************/
580 static BOOL srv_io_share_info1004(const char *desc, SH_INFO_1004 *sh1004, prs_struct *ps, int depth)
582 if (sh1004 == NULL)
583 return False;
585 prs_debug(ps, depth, desc, "srv_io_share_info1004");
586 depth++;
588 if(!prs_align(ps))
589 return False;
591 if(!prs_uint32("ptr_remark", ps, depth, &sh1004->ptr_remark))
592 return False;
594 return True;
597 /*******************************************************************
598 Reads or writes a structure.
599 ********************************************************************/
601 static BOOL srv_io_share_info1005(const char* desc, SRV_SHARE_INFO_1005* sh1005, prs_struct* ps, int depth)
603 if(sh1005 == NULL)
604 return False;
606 prs_debug(ps, depth, desc, "srv_io_share_info1005");
607 depth++;
609 if(!prs_align(ps))
610 return False;
612 if(!prs_uint32("share_info_flags", ps, depth,
613 &sh1005->share_info_flags))
614 return False;
616 return True;
619 /*******************************************************************
620 Reads or writes a structure.
621 ********************************************************************/
623 static BOOL srv_io_share_info1006(const char* desc, SRV_SHARE_INFO_1006* sh1006, prs_struct* ps, int depth)
625 if(sh1006 == NULL)
626 return False;
628 prs_debug(ps, depth, desc, "srv_io_share_info1006");
629 depth++;
631 if(!prs_align(ps))
632 return False;
634 if(!prs_uint32("max uses ", ps, depth, &sh1006->max_uses))
635 return False;
637 return True;
640 /*******************************************************************
641 Inits a SH_INFO_1007_STR structure
642 ********************************************************************/
644 void init_srv_share_info1007_str(SH_INFO_1007_STR *sh1007, const char *alternate_directory_name)
646 DEBUG(5,("init_srv_share_info1007_str\n"));
648 init_unistr2(&sh1007->uni_AlternateDirectoryName, alternate_directory_name, UNI_STR_TERMINATE);
651 /*******************************************************************
652 Reads or writes a structure.
653 ********************************************************************/
655 static BOOL srv_io_share_info1007_str(const char *desc, SH_INFO_1007_STR *sh1007, prs_struct *ps, int depth)
657 if (sh1007 == NULL)
658 return False;
660 prs_debug(ps, depth, desc, "srv_io_share_info1007_str");
661 depth++;
663 if(!prs_align(ps))
664 return False;
665 if(sh1007->ptrs->ptr_AlternateDirectoryName)
666 if(!smb_io_unistr2("", &sh1007->uni_AlternateDirectoryName, True, ps, depth))
667 return False;
669 return True;
672 /*******************************************************************
673 makes a SH_INFO_1007 structure
674 ********************************************************************/
676 void init_srv_share_info1007(SH_INFO_1007 *sh1007, uint32 flags, const char *alternate_directory_name)
678 DEBUG(5,("init_srv_share_info1007: %s\n", alternate_directory_name));
680 sh1007->flags = flags;
681 sh1007->ptr_AlternateDirectoryName = (alternate_directory_name != NULL) ? 1 : 0;
684 /*******************************************************************
685 Reads or writes a structure.
686 ********************************************************************/
688 static BOOL srv_io_share_info1007(const char *desc, SH_INFO_1007 *sh1007, prs_struct *ps, int depth)
690 if (sh1007 == NULL)
691 return False;
693 prs_debug(ps, depth, desc, "srv_io_share_info1007");
694 depth++;
696 if(!prs_align(ps))
697 return False;
699 if(!prs_uint32("flags ", ps, depth, &sh1007->flags))
700 return False;
701 if(!prs_uint32("ptr_Alter..", ps, depth, &sh1007->ptr_AlternateDirectoryName))
702 return False;
704 return True;
707 /*******************************************************************
708 Reads or writes a structure.
709 ********************************************************************/
711 static BOOL srv_io_share_info1501(const char* desc, SRV_SHARE_INFO_1501* sh1501,
712 prs_struct* ps, int depth)
714 if(sh1501 == NULL)
715 return False;
717 prs_debug(ps, depth, desc, "srv_io_share_info1501");
718 depth++;
720 if(!prs_align(ps))
721 return False;
723 if (!sec_io_desc_buf(desc, &sh1501->sdb, ps, depth))
724 return False;
726 return True;
729 /*******************************************************************
730 Reads or writes a structure.
731 ********************************************************************/
733 static BOOL srv_io_srv_share_ctr(const char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct *ps, int depth)
735 if (ctr == NULL)
736 return False;
738 prs_debug(ps, depth, desc, "srv_io_srv_share_ctr");
739 depth++;
741 if (UNMARSHALLING(ps)) {
742 memset(ctr, '\0', sizeof(SRV_SHARE_INFO_CTR));
745 if(!prs_align(ps))
746 return False;
748 if(!prs_uint32("info_level", ps, depth, &ctr->info_level))
749 return False;
751 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
752 return False;
753 if(!prs_uint32("ptr_share_info", ps, depth, &ctr->ptr_share_info))
754 return False;
756 if (ctr->ptr_share_info == 0)
757 return True;
759 if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
760 return False;
761 if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
762 return False;
764 if (ctr->ptr_entries == 0) {
765 if (ctr->num_entries == 0)
766 return True;
767 else
768 return False;
771 if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2))
772 return False;
774 if (ctr->num_entries2 != ctr->num_entries)
775 return False;
777 switch (ctr->switch_value) {
779 case 0:
781 SRV_SHARE_INFO_0 *info0 = ctr->share.info0;
782 int num_entries = ctr->num_entries;
783 int i;
785 if (UNMARSHALLING(ps)) {
786 if (!(info0 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_0, num_entries)))
787 return False;
788 ctr->share.info0 = info0;
791 for (i = 0; i < num_entries; i++) {
792 if(!srv_io_share_info0("", &info0[i].info_0, ps, depth))
793 return False;
796 for (i = 0; i < num_entries; i++) {
797 info0[i].info_0_str.ptrs = &info0[i].info_0;
798 if(!srv_io_share_info0_str("", &info0[i].info_0_str, ps, depth))
799 return False;
802 break;
805 case 1:
807 SRV_SHARE_INFO_1 *info1 = ctr->share.info1;
808 int num_entries = ctr->num_entries;
809 int i;
811 if (UNMARSHALLING(ps)) {
812 if (!(info1 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_1, num_entries)))
813 return False;
814 ctr->share.info1 = info1;
817 for (i = 0; i < num_entries; i++) {
818 if(!srv_io_share_info1("", &info1[i].info_1, ps, depth))
819 return False;
822 for (i = 0; i < num_entries; i++) {
823 info1[i].info_1_str.ptrs = &info1[i].info_1;
824 if(!srv_io_share_info1_str("", &info1[i].info_1_str, ps, depth))
825 return False;
828 break;
831 case 2:
833 SRV_SHARE_INFO_2 *info2 = ctr->share.info2;
834 int num_entries = ctr->num_entries;
835 int i;
837 if (UNMARSHALLING(ps)) {
838 if (!(info2 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_2,num_entries)))
839 return False;
840 ctr->share.info2 = info2;
843 for (i = 0; i < num_entries; i++) {
844 if(!srv_io_share_info2("", &info2[i].info_2, ps, depth))
845 return False;
848 for (i = 0; i < num_entries; i++) {
849 if(!srv_io_share_info2_str("", &info2[i].info_2, &info2[i].info_2_str, ps, depth))
850 return False;
853 break;
856 case 501:
858 SRV_SHARE_INFO_501 *info501 = ctr->share.info501;
859 int num_entries = ctr->num_entries;
860 int i;
862 if (UNMARSHALLING(ps)) {
863 if (!(info501 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_501, num_entries)))
864 return False;
865 ctr->share.info501 = info501;
868 for (i = 0; i < num_entries; i++) {
869 if (!srv_io_share_info501("", &info501[i].info_501, ps, depth))
870 return False;
873 for (i = 0; i < num_entries; i++) {
874 if (!srv_io_share_info501_str("", &info501[i].info_501_str, ps, depth))
875 return False;
878 break;
881 case 502:
883 SRV_SHARE_INFO_502 *info502 = ctr->share.info502;
884 int num_entries = ctr->num_entries;
885 int i;
887 if (UNMARSHALLING(ps)) {
888 if (!(info502 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_502,num_entries)))
889 return False;
890 ctr->share.info502 = info502;
893 for (i = 0; i < num_entries; i++) {
894 if(!srv_io_share_info502("", &info502[i].info_502, ps, depth))
895 return False;
898 for (i = 0; i < num_entries; i++) {
899 info502[i].info_502_str.ptrs = &info502[i].info_502;
900 if(!srv_io_share_info502_str("", &info502[i].info_502_str, ps, depth))
901 return False;
904 break;
907 case 1004:
909 SRV_SHARE_INFO_1004 *info1004 = ctr->share.info1004;
910 int num_entries = ctr->num_entries;
911 int i;
913 if (UNMARSHALLING(ps)) {
914 if (!(info1004 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1004,num_entries)))
915 return False;
916 ctr->share.info1004 = info1004;
919 for (i = 0; i < num_entries; i++) {
920 if(!srv_io_share_info1004("", &info1004[i].info_1004, ps, depth))
921 return False;
924 for (i = 0; i < num_entries; i++) {
925 info1004[i].info_1004_str.ptrs = &info1004[i].info_1004;
926 if(!srv_io_share_info1004_str("", &info1004[i].info_1004_str, ps, depth))
927 return False;
930 break;
933 case 1005:
935 SRV_SHARE_INFO_1005 *info1005 = ctr->share.info1005;
936 int num_entries = ctr->num_entries;
937 int i;
939 if (UNMARSHALLING(ps)) {
940 if (!(info1005 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1005,num_entries)))
941 return False;
942 ctr->share.info1005 = info1005;
945 for (i = 0; i < num_entries; i++) {
946 if(!srv_io_share_info1005("", &info1005[i], ps, depth))
947 return False;
950 break;
953 case 1006:
955 SRV_SHARE_INFO_1006 *info1006 = ctr->share.info1006;
956 int num_entries = ctr->num_entries;
957 int i;
959 if (UNMARSHALLING(ps)) {
960 if (!(info1006 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1006,num_entries)))
961 return False;
962 ctr->share.info1006 = info1006;
965 for (i = 0; i < num_entries; i++) {
966 if(!srv_io_share_info1006("", &info1006[i], ps, depth))
967 return False;
970 break;
973 case 1007:
975 SRV_SHARE_INFO_1007 *info1007 = ctr->share.info1007;
976 int num_entries = ctr->num_entries;
977 int i;
979 if (UNMARSHALLING(ps)) {
980 if (!(info1007 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1007,num_entries)))
981 return False;
982 ctr->share.info1007 = info1007;
985 for (i = 0; i < num_entries; i++) {
986 if(!srv_io_share_info1007("", &info1007[i].info_1007, ps, depth))
987 return False;
990 for (i = 0; i < num_entries; i++) {
991 info1007[i].info_1007_str.ptrs = &info1007[i].info_1007;
992 if(!srv_io_share_info1007_str("", &info1007[i].info_1007_str, ps, depth))
993 return False;
996 break;
999 case 1501:
1001 SRV_SHARE_INFO_1501 *info1501 = ctr->share.info1501;
1002 int num_entries = ctr->num_entries;
1003 int i;
1005 if (UNMARSHALLING(ps)) {
1006 if (!(info1501 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1501,num_entries)))
1007 return False;
1008 ctr->share.info1501 = info1501;
1011 for (i = 0; i < num_entries; i++) {
1012 if(!srv_io_share_info1501("", &info1501[i], ps, depth))
1013 return False;
1016 break;
1019 default:
1020 DEBUG(5,("%s no share info at switch_value %d\n",
1021 tab_depth(depth), ctr->switch_value));
1022 break;
1025 return True;
1028 /*******************************************************************
1029 Inits a SRV_Q_NET_SHARE_ENUM structure.
1030 ********************************************************************/
1032 void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n,
1033 const char *srv_name, uint32 info_level,
1034 uint32 preferred_len, ENUM_HND *hnd)
1037 DEBUG(5,("init_q_net_share_enum\n"));
1039 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1041 q_n->ctr.info_level = q_n->ctr.switch_value = info_level;
1042 q_n->ctr.ptr_share_info = 1;
1043 q_n->ctr.num_entries = 0;
1044 q_n->ctr.ptr_entries = 0;
1045 q_n->ctr.num_entries2 = 0;
1046 q_n->preferred_len = preferred_len;
1048 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
1051 /*******************************************************************
1052 Reads or writes a structure.
1053 ********************************************************************/
1055 BOOL srv_io_q_net_share_enum(const char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth)
1057 if (q_n == NULL)
1058 return False;
1060 prs_debug(ps, depth, desc, "srv_io_q_net_share_enum");
1061 depth++;
1063 if(!prs_align(ps))
1064 return False;
1066 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1067 return False;
1068 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1069 return False;
1071 if(!srv_io_srv_share_ctr("share_ctr", &q_n->ctr, ps, depth))
1072 return False;
1074 if(!prs_align(ps))
1075 return False;
1077 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
1078 return False;
1080 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
1081 return False;
1083 return True;
1086 /*******************************************************************
1087 Reads or writes a structure.
1088 ********************************************************************/
1090 BOOL srv_io_r_net_share_enum(const char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth)
1092 if (r_n == NULL)
1093 return False;
1095 prs_debug(ps, depth, desc, "srv_io_r_net_share_enum");
1096 depth++;
1098 if(!srv_io_srv_share_ctr("share_ctr", &r_n->ctr, ps, depth))
1099 return False;
1101 if(!prs_align(ps))
1102 return False;
1104 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
1105 return False;
1107 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
1108 return False;
1110 if(!prs_werror("status", ps, depth, &r_n->status))
1111 return False;
1113 return True;
1116 /*******************************************************************
1117 initialises a structure.
1118 ********************************************************************/
1120 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)
1123 uint32 ptr_share_name;
1125 DEBUG(5,("init_srv_q_net_share_get_info\n"));
1127 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1128 init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name, share_name);
1130 q_n->info_level = info_level;
1132 return True;
1135 /*******************************************************************
1136 Reads or writes a structure.
1137 ********************************************************************/
1139 BOOL srv_io_q_net_share_get_info(const char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_struct *ps, int depth)
1141 if (q_n == NULL)
1142 return False;
1144 prs_debug(ps, depth, desc, "srv_io_q_net_share_get_info");
1145 depth++;
1147 if(!prs_align(ps))
1148 return False;
1150 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1151 return False;
1152 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1153 return False;
1155 if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
1156 return False;
1158 if(!prs_align(ps))
1159 return False;
1161 if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
1162 return False;
1164 return True;
1167 /*******************************************************************
1168 Reads or writes a structure.
1169 ********************************************************************/
1171 static BOOL srv_io_srv_share_info(const char *desc, prs_struct *ps, int depth, SRV_SHARE_INFO *r_n)
1173 if (r_n == NULL)
1174 return False;
1176 prs_debug(ps, depth, desc, "srv_io_srv_share_info");
1177 depth++;
1179 if(!prs_align(ps))
1180 return False;
1182 if(!prs_uint32("switch_value ", ps, depth, &r_n->switch_value ))
1183 return False;
1185 if(!prs_uint32("ptr_share_ctr", ps, depth, &r_n->ptr_share_ctr))
1186 return False;
1188 if (r_n->ptr_share_ctr != 0) {
1189 switch (r_n->switch_value) {
1190 case 0:
1191 if(!srv_io_share_info0("", &r_n->share.info0.info_0, ps, depth))
1192 return False;
1194 /* allow access to pointers in the str part. */
1195 r_n->share.info0.info_0_str.ptrs = &r_n->share.info0.info_0;
1197 if(!srv_io_share_info0_str("", &r_n->share.info0.info_0_str, ps, depth))
1198 return False;
1200 break;
1201 case 1:
1202 if(!srv_io_share_info1("", &r_n->share.info1.info_1, ps, depth))
1203 return False;
1205 /* allow access to pointers in the str part. */
1206 r_n->share.info1.info_1_str.ptrs = &r_n->share.info1.info_1;
1208 if(!srv_io_share_info1_str("", &r_n->share.info1.info_1_str, ps, depth))
1209 return False;
1211 break;
1212 case 2:
1213 if(!srv_io_share_info2("", &r_n->share.info2.info_2, ps, depth))
1214 return False;
1216 if(!srv_io_share_info2_str("", &r_n->share.info2.info_2, &r_n->share.info2.info_2_str, ps, depth))
1217 return False;
1219 break;
1220 case 501:
1221 if (!srv_io_share_info501("", &r_n->share.info501.info_501, ps, depth))
1222 return False;
1223 if (!srv_io_share_info501_str("", &r_n->share.info501.info_501_str, ps, depth))
1224 return False;
1225 break;
1227 case 502:
1228 if(!srv_io_share_info502("", &r_n->share.info502.info_502, ps, depth))
1229 return False;
1231 /* allow access to pointers in the str part. */
1232 r_n->share.info502.info_502_str.ptrs = &r_n->share.info502.info_502;
1234 if(!srv_io_share_info502_str("", &r_n->share.info502.info_502_str, ps, depth))
1235 return False;
1236 break;
1237 case 1004:
1238 if(!srv_io_share_info1004("", &r_n->share.info1004.info_1004, ps, depth))
1239 return False;
1241 /* allow access to pointers in the str part. */
1242 r_n->share.info1004.info_1004_str.ptrs = &r_n->share.info1004.info_1004;
1244 if(!srv_io_share_info1004_str("", &r_n->share.info1004.info_1004_str, ps, depth))
1245 return False;
1246 break;
1247 case 1005:
1248 if(!srv_io_share_info1005("", &r_n->share.info1005, ps, depth))
1249 return False;
1250 break;
1251 case 1006:
1252 if(!srv_io_share_info1006("", &r_n->share.info1006, ps, depth))
1253 return False;
1254 break;
1255 case 1007:
1256 if(!srv_io_share_info1007("", &r_n->share.info1007.info_1007, ps, depth))
1257 return False;
1259 /* allow access to pointers in the str part. */
1260 r_n->share.info1007.info_1007_str.ptrs = &r_n->share.info1007.info_1007;
1262 if(!srv_io_share_info1007_str("", &r_n->share.info1007.info_1007_str, ps, depth))
1263 return False;
1264 break;
1265 case 1501:
1266 if (!srv_io_share_info1501("", &r_n->share.info1501, ps, depth))
1267 return False;
1268 default:
1269 DEBUG(5,("%s no share info at switch_value %d\n",
1270 tab_depth(depth), r_n->switch_value));
1271 break;
1275 return True;
1278 /*******************************************************************
1279 Reads or writes a structure.
1280 ********************************************************************/
1282 BOOL srv_io_r_net_share_get_info(const char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_struct *ps, int depth)
1284 if (r_n == NULL)
1285 return False;
1287 prs_debug(ps, depth, desc, "srv_io_r_net_share_get_info");
1288 depth++;
1290 if(!prs_align(ps))
1291 return False;
1293 if(!srv_io_srv_share_info("info ", ps, depth, &r_n->info))
1294 return False;
1296 if(!prs_align(ps))
1297 return False;
1299 if(!prs_werror("status", ps, depth, &r_n->status))
1300 return False;
1302 return True;
1305 /*******************************************************************
1306 intialises a structure.
1307 ********************************************************************/
1309 BOOL init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n,
1310 const char *srv_name,
1311 const char *share_name,
1312 uint32 info_level,
1313 const SRV_SHARE_INFO *info)
1316 uint32 ptr_share_name;
1318 DEBUG(5,("init_srv_q_net_share_set_info\n"));
1320 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
1321 init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name, share_name);
1323 q_n->info_level = info_level;
1325 q_n->info = *info;
1327 q_n->ptr_parm_error = 1;
1328 q_n->parm_error = 0;
1330 return True;
1333 /*******************************************************************
1334 Reads or writes a structure.
1335 ********************************************************************/
1337 BOOL srv_io_q_net_share_set_info(const char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_struct *ps, int depth)
1339 if (q_n == NULL)
1340 return False;
1342 prs_debug(ps, depth, desc, "srv_io_q_net_share_set_info");
1343 depth++;
1345 if(!prs_align(ps))
1346 return False;
1348 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1349 return False;
1350 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1351 return False;
1353 if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
1354 return False;
1356 if(!prs_align(ps))
1357 return False;
1359 if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
1360 return False;
1362 if(!prs_align(ps))
1363 return False;
1365 if(!srv_io_srv_share_info("info ", ps, depth, &q_n->info))
1366 return False;
1368 if(!prs_align(ps))
1369 return False;
1370 if(!prs_uint32("ptr_parm_error", ps, depth, &q_n->ptr_parm_error))
1371 return False;
1372 if(q_n->ptr_parm_error!=0) {
1373 if(!prs_uint32("parm_error", ps, depth, &q_n->parm_error))
1374 return False;
1377 return True;
1380 /*******************************************************************
1381 Reads or writes a structure.
1382 ********************************************************************/
1384 BOOL srv_io_r_net_share_set_info(const char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_struct *ps, int depth)
1386 if (r_n == NULL)
1387 return False;
1389 prs_debug(ps, depth, desc, "srv_io_r_net_share_set_info");
1390 depth++;
1392 if(!prs_align(ps))
1393 return False;
1395 if(!prs_uint32("ptr_parm_error ", ps, depth, &r_n->ptr_parm_error))
1396 return False;
1398 if(r_n->ptr_parm_error) {
1400 if(!prs_uint32("parm_error ", ps, depth, &r_n->parm_error))
1401 return False;
1404 if(!prs_werror("status", ps, depth, &r_n->status))
1405 return False;
1407 return True;
1411 /*******************************************************************
1412 Reads or writes a structure.
1413 ********************************************************************/
1415 BOOL srv_io_q_net_share_add(const char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps, int depth)
1417 if (q_n == NULL)
1418 return False;
1420 prs_debug(ps, depth, desc, "srv_io_q_net_share_add");
1421 depth++;
1423 if(!prs_align(ps))
1424 return False;
1426 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1427 return False;
1428 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1429 return False;
1431 if(!prs_align(ps))
1432 return False;
1434 if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
1435 return False;
1437 if(!prs_align(ps))
1438 return False;
1440 if(!srv_io_srv_share_info("info ", ps, depth, &q_n->info))
1441 return False;
1443 if(!prs_align(ps))
1444 return False;
1446 if(!prs_uint32("ptr_err_index", ps, depth, &q_n->ptr_err_index))
1447 return False;
1448 if (q_n->ptr_err_index)
1449 if (!prs_uint32("err_index", ps, depth, &q_n->err_index))
1450 return False;
1452 return True;
1455 void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, const char *srvname,
1456 const char *netname, uint32 type, const char *remark,
1457 uint32 perms, uint32 max_uses, uint32 num_uses,
1458 const char *path, const char *passwd,
1459 int level, SEC_DESC *sd)
1461 switch(level) {
1462 case 502: {
1463 size_t sd_size = sec_desc_size(sd);
1464 q->ptr_srv_name = 1;
1465 init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
1466 q->info.switch_value = q->info_level = level;
1467 q->info.ptr_share_ctr = 1;
1468 init_srv_share_info502(&q->info.share.info502.info_502, netname, type,
1469 remark, perms, max_uses, num_uses, path, passwd, sd, sd_size);
1470 init_srv_share_info502_str(&q->info.share.info502.info_502_str, netname,
1471 remark, path, passwd, sd, sd_size);
1472 q->ptr_err_index = 1;
1473 q->err_index = 0;
1475 break;
1476 case 2:
1477 default:
1478 q->ptr_srv_name = 1;
1479 init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
1480 q->info.switch_value = q->info_level = level;
1481 q->info.ptr_share_ctr = 1;
1482 init_srv_share_info2(&q->info.share.info2.info_2, netname, type,
1483 remark, perms, max_uses, num_uses, path, passwd);
1484 init_srv_share_info2_str(&q->info.share.info2.info_2_str, netname,
1485 remark, path, passwd);
1486 q->ptr_err_index = 1;
1487 q->err_index = 0;
1488 break;
1493 /*******************************************************************
1494 Reads or writes a structure.
1495 ********************************************************************/
1497 BOOL srv_io_r_net_share_add(const char *desc, SRV_R_NET_SHARE_ADD *r_n, prs_struct *ps, int depth)
1499 if (r_n == NULL)
1500 return False;
1502 prs_debug(ps, depth, desc, "srv_io_r_net_share_add");
1503 depth++;
1505 if(!prs_align(ps))
1506 return False;
1508 if(!prs_uint32("ptr_parm_error", ps, depth, &r_n->ptr_parm_error))
1509 return False;
1511 if(r_n->ptr_parm_error) {
1513 if(!prs_uint32("parm_error", ps, depth, &r_n->parm_error))
1514 return False;
1517 if(!prs_werror("status", ps, depth, &r_n->status))
1518 return False;
1520 return True;
1523 /*******************************************************************
1524 initialises a structure.
1525 ********************************************************************/
1527 void init_srv_q_net_share_del(SRV_Q_NET_SHARE_DEL *del, const char *srvname,
1528 const char *sharename)
1530 del->ptr_srv_name = 1;
1531 init_unistr2(&del->uni_srv_name, srvname, UNI_STR_TERMINATE);
1532 init_unistr2(&del->uni_share_name, sharename, UNI_STR_TERMINATE);
1535 /*******************************************************************
1536 Reads or writes a structure.
1537 ********************************************************************/
1539 BOOL srv_io_q_net_share_del(const char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
1541 if (q_n == NULL)
1542 return False;
1544 prs_debug(ps, depth, desc, "srv_io_q_net_share_del");
1545 depth++;
1547 if(!prs_align(ps))
1548 return False;
1550 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1551 return False;
1552 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1553 return False;
1555 if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
1556 return False;
1558 if(!prs_align(ps))
1559 return False;
1560 if(!prs_uint32("reserved", ps, depth, &q_n->reserved))
1561 return False;
1563 return True;
1566 /*******************************************************************
1567 Reads or writes a structure.
1568 ********************************************************************/
1570 BOOL srv_io_r_net_share_del(const char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
1572 if (q_n == NULL)
1573 return False;
1575 prs_debug(ps, depth, desc, "srv_io_r_net_share_del");
1576 depth++;
1578 if(!prs_align(ps))
1579 return False;
1581 if(!prs_werror("status", ps, depth, &q_n->status))
1582 return False;
1584 return True;
1587 /*******************************************************************
1588 Inits a SESS_INFO_0_STR structure
1589 ********************************************************************/
1591 void init_srv_sess_info0_str(SESS_INFO_0_STR *ss0, const char *name)
1593 DEBUG(5,("init_srv_sess_info0_str\n"));
1595 init_unistr2(&ss0->uni_name, name, UNI_STR_TERMINATE);
1598 /*******************************************************************
1599 Reads or writes a structure.
1600 ********************************************************************/
1602 static BOOL srv_io_sess_info0_str(const char *desc, SESS_INFO_0_STR *ss0, prs_struct *ps, int depth)
1604 if (ss0 == NULL)
1605 return False;
1607 prs_debug(ps, depth, desc, "srv_io_sess_info0_str");
1608 depth++;
1610 if(!prs_align(ps))
1611 return False;
1613 if(!smb_io_unistr2("", &ss0->uni_name, True, ps, depth))
1614 return False;
1616 return True;
1619 /*******************************************************************
1620 Inits a SESS_INFO_0 structure
1621 ********************************************************************/
1623 void init_srv_sess_info0(SESS_INFO_0 *ss0, const char *name)
1625 DEBUG(5,("init_srv_sess_info0: %s\n", name));
1627 ss0->ptr_name = (name != NULL) ? 1 : 0;
1630 /*******************************************************************
1631 Reads or writes a structure.
1632 ********************************************************************/
1634 static BOOL srv_io_sess_info0(const char *desc, SESS_INFO_0 *ss0, prs_struct *ps, int depth)
1636 if (ss0 == NULL)
1637 return False;
1639 prs_debug(ps, depth, desc, "srv_io_sess_info0");
1640 depth++;
1642 if(!prs_align(ps))
1643 return False;
1645 if(!prs_uint32("ptr_name", ps, depth, &ss0->ptr_name))
1646 return False;
1648 return True;
1651 /*******************************************************************
1652 Reads or writes a structure.
1653 ********************************************************************/
1655 static BOOL srv_io_srv_sess_info_0(const char *desc, SRV_SESS_INFO_0 *ss0, prs_struct *ps, int depth)
1657 if (ss0 == NULL)
1658 return False;
1660 prs_debug(ps, depth, desc, "srv_io_srv_sess_info_0");
1661 depth++;
1663 if(!prs_align(ps))
1664 return False;
1666 if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read))
1667 return False;
1668 if(!prs_uint32("ptr_sess_info", ps, depth, &ss0->ptr_sess_info))
1669 return False;
1671 if (ss0->ptr_sess_info != 0) {
1672 uint32 i;
1673 uint32 num_entries = ss0->num_entries_read;
1675 if (num_entries > MAX_SESS_ENTRIES) {
1676 num_entries = MAX_SESS_ENTRIES; /* report this! */
1679 if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2))
1680 return False;
1682 SMB_ASSERT_ARRAY(ss0->info_0, num_entries);
1684 for (i = 0; i < num_entries; i++) {
1685 if(!srv_io_sess_info0("", &ss0->info_0[i], ps, depth))
1686 return False;
1689 for (i = 0; i < num_entries; i++) {
1690 if(!srv_io_sess_info0_str("", &ss0->info_0_str[i], ps, depth))
1691 return False;
1694 if(!prs_align(ps))
1695 return False;
1698 return True;
1701 /*******************************************************************
1702 Inits a SESS_INFO_1_STR structure
1703 ********************************************************************/
1705 void init_srv_sess_info1_str(SESS_INFO_1_STR *ss1, const char *name, const char *user)
1707 DEBUG(5,("init_srv_sess_info1_str\n"));
1709 init_unistr2(&ss1->uni_name, name, UNI_STR_TERMINATE);
1710 init_unistr2(&ss1->uni_user, user, UNI_STR_TERMINATE);
1713 /*******************************************************************
1714 Reads or writes a structure.
1715 ********************************************************************/
1717 static BOOL srv_io_sess_info1_str(const char *desc, SESS_INFO_1_STR *ss1, prs_struct *ps, int depth)
1719 if (ss1 == NULL)
1720 return False;
1722 prs_debug(ps, depth, desc, "srv_io_sess_info1_str");
1723 depth++;
1725 if(!prs_align(ps))
1726 return False;
1728 if(!smb_io_unistr2("", &ss1->uni_name, True, ps, depth))
1729 return False;
1730 if(!smb_io_unistr2("", &(ss1->uni_user), True, ps, depth))
1731 return False;
1733 return True;
1736 /*******************************************************************
1737 Inits a SESS_INFO_1 structure
1738 ********************************************************************/
1740 void init_srv_sess_info1(SESS_INFO_1 *ss1,
1741 const char *name, const char *user,
1742 uint32 num_opens, uint32 open_time, uint32 idle_time,
1743 uint32 user_flags)
1745 DEBUG(5,("init_srv_sess_info1: %s\n", name));
1747 ss1->ptr_name = (name != NULL) ? 1 : 0;
1748 ss1->ptr_user = (user != NULL) ? 1 : 0;
1750 ss1->num_opens = num_opens;
1751 ss1->open_time = open_time;
1752 ss1->idle_time = idle_time;
1753 ss1->user_flags = user_flags;
1756 /*******************************************************************
1757 reads or writes a structure.
1758 ********************************************************************/
1760 static BOOL srv_io_sess_info1(const char *desc, SESS_INFO_1 *ss1, prs_struct *ps, int depth)
1762 if (ss1 == NULL)
1763 return False;
1765 prs_debug(ps, depth, desc, "srv_io_sess_info1");
1766 depth++;
1768 if(!prs_align(ps))
1769 return False;
1771 if(!prs_uint32("ptr_name ", ps, depth, &ss1->ptr_name))
1772 return False;
1773 if(!prs_uint32("ptr_user ", ps, depth, &ss1->ptr_user))
1774 return False;
1776 if(!prs_uint32("num_opens ", ps, depth, &ss1->num_opens))
1777 return False;
1778 if(!prs_uint32("open_time ", ps, depth, &ss1->open_time))
1779 return False;
1780 if(!prs_uint32("idle_time ", ps, depth, &ss1->idle_time))
1781 return False;
1782 if(!prs_uint32("user_flags", ps, depth, &ss1->user_flags))
1783 return False;
1785 return True;
1788 /*******************************************************************
1789 Reads or writes a structure.
1790 ********************************************************************/
1792 static BOOL srv_io_srv_sess_info_1(const char *desc, SRV_SESS_INFO_1 *ss1, prs_struct *ps, int depth)
1794 if (ss1 == NULL)
1795 return False;
1797 prs_debug(ps, depth, desc, "srv_io_srv_sess_info_1");
1798 depth++;
1800 if(!prs_align(ps))
1801 return False;
1803 if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read))
1804 return False;
1805 if(!prs_uint32("ptr_sess_info", ps, depth, &ss1->ptr_sess_info))
1806 return False;
1808 if (ss1->ptr_sess_info != 0) {
1809 uint32 i;
1810 uint32 num_entries = ss1->num_entries_read;
1812 if (num_entries > MAX_SESS_ENTRIES) {
1813 num_entries = MAX_SESS_ENTRIES; /* report this! */
1816 if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2))
1817 return False;
1819 SMB_ASSERT_ARRAY(ss1->info_1, num_entries);
1821 for (i = 0; i < num_entries; i++) {
1822 if(!srv_io_sess_info1("", &ss1->info_1[i], ps, depth))
1823 return False;
1826 for (i = 0; i < num_entries; i++) {
1827 if(!srv_io_sess_info1_str("", &ss1->info_1_str[i], ps, depth))
1828 return False;
1831 if(!prs_align(ps))
1832 return False;
1835 return True;
1838 /*******************************************************************
1839 Reads or writes a structure.
1840 ********************************************************************/
1842 static BOOL srv_io_srv_sess_ctr(const char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
1844 SRV_SESS_INFO_CTR *ctr = *pp_ctr;
1846 prs_debug(ps, depth, desc, "srv_io_srv_sess_ctr");
1847 depth++;
1849 if(UNMARSHALLING(ps)) {
1850 ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_SESS_INFO_CTR, 1);
1851 if (ctr == NULL)
1852 return False;
1855 if (ctr == NULL)
1856 return False;
1858 if(!prs_align(ps))
1859 return False;
1861 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
1862 return False;
1863 if(!prs_uint32("ptr_sess_ctr", ps, depth, &ctr->ptr_sess_ctr))
1864 return False;
1866 if (ctr->ptr_sess_ctr != 0) {
1867 switch (ctr->switch_value) {
1868 case 0:
1869 if(!srv_io_srv_sess_info_0("", &ctr->sess.info0, ps, depth))
1870 return False;
1871 break;
1872 case 1:
1873 if(!srv_io_srv_sess_info_1("", &ctr->sess.info1, ps, depth))
1874 return False;
1875 break;
1876 default:
1877 DEBUG(5,("%s no session info at switch_value %d\n",
1878 tab_depth(depth), ctr->switch_value));
1879 break;
1883 return True;
1886 /*******************************************************************
1887 Inits a SRV_Q_NET_SESS_ENUM structure.
1888 ********************************************************************/
1890 void init_srv_q_net_sess_enum(SRV_Q_NET_SESS_ENUM *q_n,
1891 const char *srv_name, const char *qual_name,
1892 const char *user_name, uint32 sess_level,
1893 SRV_SESS_INFO_CTR *ctr, uint32 preferred_len,
1894 ENUM_HND *hnd)
1896 q_n->ctr = ctr;
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_qual_name, &q_n->ptr_qual_name, qual_name);
1902 init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
1904 q_n->sess_level = sess_level;
1905 q_n->preferred_len = preferred_len;
1907 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
1910 /*******************************************************************
1911 Reads or writes a structure.
1912 ********************************************************************/
1914 BOOL srv_io_q_net_sess_enum(const char *desc, SRV_Q_NET_SESS_ENUM *q_n, prs_struct *ps, int depth)
1916 if (q_n == NULL)
1917 return False;
1919 prs_debug(ps, depth, desc, "srv_io_q_net_sess_enum");
1920 depth++;
1922 if(!prs_align(ps))
1923 return False;
1925 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
1926 return False;
1927 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
1928 return False;
1930 if(!prs_align(ps))
1931 return False;
1933 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
1934 return False;
1935 if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
1936 return False;
1938 if(!prs_align(ps))
1939 return False;
1940 if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
1941 return False;
1942 if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
1943 return False;
1945 if(!prs_align(ps))
1946 return False;
1948 if(!prs_uint32("sess_level", ps, depth, &q_n->sess_level))
1949 return False;
1951 if (q_n->sess_level != (uint32)-1) {
1952 if(!srv_io_srv_sess_ctr("sess_ctr", &q_n->ctr, ps, depth))
1953 return False;
1956 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
1957 return False;
1959 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
1960 return False;
1962 return True;
1965 /*******************************************************************
1966 Reads or writes a structure.
1967 ********************************************************************/
1969 BOOL srv_io_r_net_sess_enum(const char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps, int depth)
1971 if (r_n == NULL)
1972 return False;
1974 prs_debug(ps, depth, desc, "srv_io_r_net_sess_enum");
1975 depth++;
1977 if(!prs_align(ps))
1978 return False;
1980 if(!prs_uint32("sess_level", ps, depth, &r_n->sess_level))
1981 return False;
1983 if (r_n->sess_level != (uint32)-1) {
1984 if(!srv_io_srv_sess_ctr("sess_ctr", &r_n->ctr, ps, depth))
1985 return False;
1988 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
1989 return False;
1990 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
1991 return False;
1992 if(!prs_werror("status", ps, depth, &r_n->status))
1993 return False;
1995 return True;
1998 /*******************************************************************
1999 Inits a SRV_Q_NET_SESS_DEL structure.
2000 ********************************************************************/
2002 void init_srv_q_net_sess_del(SRV_Q_NET_SESS_DEL *q_n, const char *srv_name,
2003 const char *cli_name, const char *user_name)
2005 DEBUG(5,("init_q_net_sess_enum\n"));
2007 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
2008 init_buf_unistr2(&q_n->uni_cli_name, &q_n->ptr_cli_name, cli_name);
2009 init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
2012 /*******************************************************************
2013 Reads or writes a structure.
2014 ********************************************************************/
2016 BOOL srv_io_q_net_sess_del(const char *desc, SRV_Q_NET_SESS_DEL *q_n, prs_struct *ps, int depth)
2018 if (q_n == NULL)
2019 return False;
2021 prs_debug(ps, depth, desc, "srv_io_q_net_sess_del");
2022 depth++;
2024 if(!prs_align(ps))
2025 return False;
2027 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
2028 return False;
2029 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
2030 return False;
2032 if(!prs_align(ps))
2033 return False;
2035 if(!prs_uint32("ptr_cli_name", ps, depth, &q_n->ptr_cli_name))
2036 return False;
2037 if(!smb_io_unistr2("", &q_n->uni_cli_name, q_n->ptr_cli_name, ps, depth))
2038 return False;
2040 if(!prs_align(ps))
2041 return False;
2042 if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
2043 return False;
2044 if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
2045 return False;
2047 return True;
2050 /*******************************************************************
2051 Reads or writes a structure.
2052 ********************************************************************/
2054 BOOL srv_io_r_net_sess_del(const char *desc, SRV_R_NET_SESS_DEL *r_n, prs_struct *ps, int depth)
2056 if (r_n == NULL)
2057 return False;
2059 prs_debug(ps, depth, desc, "srv_io_r_net_sess_del");
2060 depth++;
2062 if(!prs_align(ps))
2063 return False;
2065 if(!prs_werror("status", ps, depth, &r_n->status))
2066 return False;
2068 return True;
2071 /*******************************************************************
2072 Inits a CONN_INFO_0 structure
2073 ********************************************************************/
2075 void init_srv_conn_info0(CONN_INFO_0 *ss0, uint32 id)
2077 DEBUG(5,("init_srv_conn_info0\n"));
2079 ss0->id = id;
2082 /*******************************************************************
2083 Reads or writes a structure.
2084 ********************************************************************/
2086 static BOOL srv_io_conn_info0(const char *desc, CONN_INFO_0 *ss0, prs_struct *ps, int depth)
2088 if (ss0 == NULL)
2089 return False;
2091 prs_debug(ps, depth, desc, "srv_io_conn_info0");
2092 depth++;
2094 if(!prs_align(ps))
2095 return False;
2097 if(!prs_uint32("id", ps, depth, &ss0->id))
2098 return False;
2100 return True;
2103 /*******************************************************************
2104 Reads or writes a structure.
2105 ********************************************************************/
2107 static BOOL srv_io_srv_conn_info_0(const char *desc, SRV_CONN_INFO_0 *ss0, prs_struct *ps, int depth)
2109 if (ss0 == NULL)
2110 return False;
2112 prs_debug(ps, depth, desc, "srv_io_srv_conn_info_0");
2113 depth++;
2115 if(!prs_align(ps))
2116 return False;
2118 if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read))
2119 return False;
2120 if(!prs_uint32("ptr_conn_info", ps, depth, &ss0->ptr_conn_info))
2121 return False;
2123 if (ss0->ptr_conn_info != 0) {
2124 int i;
2125 int num_entries = ss0->num_entries_read;
2127 if (num_entries > MAX_CONN_ENTRIES) {
2128 num_entries = MAX_CONN_ENTRIES; /* report this! */
2131 if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2))
2132 return False;
2134 for (i = 0; i < num_entries; i++) {
2135 if(!srv_io_conn_info0("", &ss0->info_0[i], ps, depth))
2136 return False;
2139 if(!prs_align(ps))
2140 return False;
2143 return True;
2146 /*******************************************************************
2147 Inits a CONN_INFO_1_STR structure
2148 ********************************************************************/
2150 void init_srv_conn_info1_str(CONN_INFO_1_STR *ss1, const char *usr_name, const char *net_name)
2152 DEBUG(5,("init_srv_conn_info1_str\n"));
2154 init_unistr2(&ss1->uni_usr_name, usr_name, UNI_STR_TERMINATE);
2155 init_unistr2(&ss1->uni_net_name, net_name, UNI_STR_TERMINATE);
2158 /*******************************************************************
2159 Reads or writes a structure.
2160 ********************************************************************/
2162 static BOOL srv_io_conn_info1_str(const char *desc, CONN_INFO_1_STR *ss1, prs_struct *ps, int depth)
2164 if (ss1 == NULL)
2165 return False;
2167 prs_debug(ps, depth, desc, "srv_io_conn_info1_str");
2168 depth++;
2170 if(!prs_align(ps))
2171 return False;
2173 if(!smb_io_unistr2("", &ss1->uni_usr_name, True, ps, depth))
2174 return False;
2175 if(!smb_io_unistr2("", &ss1->uni_net_name, True, ps, depth))
2176 return False;
2178 return True;
2181 /*******************************************************************
2182 Inits a CONN_INFO_1 structure
2183 ********************************************************************/
2185 void init_srv_conn_info1(CONN_INFO_1 *ss1,
2186 uint32 id, uint32 type,
2187 uint32 num_opens, uint32 num_users, uint32 open_time,
2188 const char *usr_name, const char *net_name)
2190 DEBUG(5,("init_srv_conn_info1: %s %s\n", usr_name, net_name));
2192 ss1->id = id ;
2193 ss1->type = type ;
2194 ss1->num_opens = num_opens ;
2195 ss1->num_users = num_users;
2196 ss1->open_time = open_time;
2198 ss1->ptr_usr_name = (usr_name != NULL) ? 1 : 0;
2199 ss1->ptr_net_name = (net_name != NULL) ? 1 : 0;
2202 /*******************************************************************
2203 Reads or writes a structure.
2204 ********************************************************************/
2206 static BOOL srv_io_conn_info1(const char *desc, CONN_INFO_1 *ss1, prs_struct *ps, int depth)
2208 if (ss1 == NULL)
2209 return False;
2211 prs_debug(ps, depth, desc, "srv_io_conn_info1");
2212 depth++;
2214 if(!prs_align(ps))
2215 return False;
2217 if(!prs_uint32("id ", ps, depth, &ss1->id))
2218 return False;
2219 if(!prs_uint32("type ", ps, depth, &ss1->type))
2220 return False;
2221 if(!prs_uint32("num_opens ", ps, depth, &ss1->num_opens))
2222 return False;
2223 if(!prs_uint32("num_users ", ps, depth, &ss1->num_users))
2224 return False;
2225 if(!prs_uint32("open_time ", ps, depth, &ss1->open_time))
2226 return False;
2228 if(!prs_uint32("ptr_usr_name", ps, depth, &ss1->ptr_usr_name))
2229 return False;
2230 if(!prs_uint32("ptr_net_name", ps, depth, &ss1->ptr_net_name))
2231 return False;
2233 return True;
2236 /*******************************************************************
2237 Reads or writes a structure.
2238 ********************************************************************/
2240 static BOOL srv_io_srv_conn_info_1(const char *desc, SRV_CONN_INFO_1 *ss1, prs_struct *ps, int depth)
2242 if (ss1 == NULL)
2243 return False;
2245 prs_debug(ps, depth, desc, "srv_io_srv_conn_info_1");
2246 depth++;
2248 if(!prs_align(ps))
2249 return False;
2251 if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read))
2252 return False;
2253 if(!prs_uint32("ptr_conn_info", ps, depth, &ss1->ptr_conn_info))
2254 return False;
2256 if (ss1->ptr_conn_info != 0) {
2257 int i;
2258 int num_entries = ss1->num_entries_read;
2260 if (num_entries > MAX_CONN_ENTRIES) {
2261 num_entries = MAX_CONN_ENTRIES; /* report this! */
2264 if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2))
2265 return False;
2267 for (i = 0; i < num_entries; i++) {
2268 if(!srv_io_conn_info1("", &ss1->info_1[i], ps, depth))
2269 return False;
2272 for (i = 0; i < num_entries; i++) {
2273 if(!srv_io_conn_info1_str("", &ss1->info_1_str[i], ps, depth))
2274 return False;
2277 if(!prs_align(ps))
2278 return False;
2281 return True;
2284 /*******************************************************************
2285 Reads or writes a structure.
2286 ********************************************************************/
2288 static BOOL srv_io_srv_conn_ctr(const char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
2290 SRV_CONN_INFO_CTR *ctr = *pp_ctr;
2292 prs_debug(ps, depth, desc, "srv_io_srv_conn_ctr");
2293 depth++;
2295 if (UNMARSHALLING(ps)) {
2296 ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_CONN_INFO_CTR, 1);
2297 if (ctr == NULL)
2298 return False;
2301 if (ctr == NULL)
2302 return False;
2304 if(!prs_align(ps))
2305 return False;
2307 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
2308 return False;
2309 if(!prs_uint32("ptr_conn_ctr", ps, depth, &ctr->ptr_conn_ctr))
2310 return False;
2312 if (ctr->ptr_conn_ctr != 0) {
2313 switch (ctr->switch_value) {
2314 case 0:
2315 if(!srv_io_srv_conn_info_0("", &ctr->conn.info0, ps, depth))
2316 return False;
2317 break;
2318 case 1:
2319 if(!srv_io_srv_conn_info_1("", &ctr->conn.info1, ps, depth))
2320 return False;
2321 break;
2322 default:
2323 DEBUG(5,("%s no connection info at switch_value %d\n",
2324 tab_depth(depth), ctr->switch_value));
2325 break;
2329 return True;
2332 /*******************************************************************
2333 Reads or writes a structure.
2334 ********************************************************************/
2336 void init_srv_q_net_conn_enum(SRV_Q_NET_CONN_ENUM *q_n,
2337 const char *srv_name, const char *qual_name,
2338 uint32 conn_level, SRV_CONN_INFO_CTR *ctr,
2339 uint32 preferred_len,
2340 ENUM_HND *hnd)
2342 DEBUG(5,("init_q_net_conn_enum\n"));
2344 q_n->ctr = ctr;
2346 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name );
2347 init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name);
2349 q_n->conn_level = conn_level;
2350 q_n->preferred_len = preferred_len;
2352 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
2355 /*******************************************************************
2356 Reads or writes a structure.
2357 ********************************************************************/
2359 BOOL srv_io_q_net_conn_enum(const char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps, int depth)
2361 if (q_n == NULL)
2362 return False;
2364 prs_debug(ps, depth, desc, "srv_io_q_net_conn_enum");
2365 depth++;
2367 if(!prs_align(ps))
2368 return False;
2370 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
2371 return False;
2372 if(!smb_io_unistr2("", &q_n->uni_srv_name, q_n->ptr_srv_name, ps, depth))
2373 return False;
2375 if(!prs_align(ps))
2376 return False;
2378 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
2379 return False;
2380 if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
2381 return False;
2383 if(!prs_align(ps))
2384 return False;
2386 if(!prs_uint32("conn_level", ps, depth, &q_n->conn_level))
2387 return False;
2389 if (q_n->conn_level != (uint32)-1) {
2390 if(!srv_io_srv_conn_ctr("conn_ctr", &q_n->ctr, ps, depth))
2391 return False;
2394 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
2395 return False;
2397 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
2398 return False;
2400 return True;
2403 /*******************************************************************
2404 Reads or writes a structure.
2405 ********************************************************************/
2407 BOOL srv_io_r_net_conn_enum(const char *desc, SRV_R_NET_CONN_ENUM *r_n, prs_struct *ps, int depth)
2409 if (r_n == NULL)
2410 return False;
2412 prs_debug(ps, depth, desc, "srv_io_r_net_conn_enum");
2413 depth++;
2415 if(!prs_align(ps))
2416 return False;
2418 if(!prs_uint32("conn_level", ps, depth, &r_n->conn_level))
2419 return False;
2421 if (r_n->conn_level != (uint32)-1) {
2422 if(!srv_io_srv_conn_ctr("conn_ctr", &r_n->ctr, ps, depth))
2423 return False;
2426 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
2427 return False;
2428 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
2429 return False;
2430 if(!prs_werror("status", ps, depth, &r_n->status))
2431 return False;
2433 return True;
2436 /*******************************************************************
2437 Inits a FILE_INFO_3_STR structure
2438 ********************************************************************/
2440 void init_srv_file_info3_str(FILE_INFO_3_STR *fi3, const char *user_name, const char *path_name)
2442 DEBUG(5,("init_srv_file_info3_str\n"));
2444 init_unistr2(&fi3->uni_path_name, path_name, UNI_STR_TERMINATE);
2445 init_unistr2(&fi3->uni_user_name, user_name, UNI_STR_TERMINATE);
2448 /*******************************************************************
2449 Reads or writes a structure.
2450 ********************************************************************/
2452 static BOOL srv_io_file_info3_str(const char *desc, FILE_INFO_3_STR *sh1, prs_struct *ps, int depth)
2454 if (sh1 == NULL)
2455 return False;
2457 prs_debug(ps, depth, desc, "srv_io_file_info3_str");
2458 depth++;
2460 if(!prs_align(ps))
2461 return False;
2463 if(!smb_io_unistr2("", &sh1->uni_path_name, True, ps, depth))
2464 return False;
2465 if(!smb_io_unistr2("", &sh1->uni_user_name, True, ps, depth))
2466 return False;
2468 return True;
2471 /*******************************************************************
2472 Inits a FILE_INFO_3 structure
2473 ********************************************************************/
2475 void init_srv_file_info3(FILE_INFO_3 *fl3,
2476 uint32 id, uint32 perms, uint32 num_locks,
2477 const char *path_name, const char *user_name)
2479 DEBUG(5,("init_srv_file_info3: %s %s\n", path_name, user_name));
2481 fl3->id = id;
2482 fl3->perms = perms;
2483 fl3->num_locks = num_locks;
2485 fl3->ptr_path_name = (path_name != NULL) ? 1 : 0;
2486 fl3->ptr_user_name = (user_name != NULL) ? 1 : 0;
2489 /*******************************************************************
2490 Reads or writes a structure.
2491 ********************************************************************/
2493 static BOOL srv_io_file_info3(const char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int depth)
2495 if (fl3 == NULL)
2496 return False;
2498 prs_debug(ps, depth, desc, "srv_io_file_info3");
2499 depth++;
2501 if(!prs_align(ps))
2502 return False;
2504 if(!prs_uint32("id ", ps, depth, &fl3->id))
2505 return False;
2506 if(!prs_uint32("perms ", ps, depth, &fl3->perms))
2507 return False;
2508 if(!prs_uint32("num_locks ", ps, depth, &fl3->num_locks))
2509 return False;
2510 if(!prs_uint32("ptr_path_name", ps, depth, &fl3->ptr_path_name))
2511 return False;
2512 if(!prs_uint32("ptr_user_name", ps, depth, &fl3->ptr_user_name))
2513 return False;
2515 return True;
2518 /*******************************************************************
2519 Reads or writes a structure.
2520 ********************************************************************/
2522 static BOOL srv_io_srv_file_ctr(const char *desc, SRV_FILE_INFO_CTR *ctr, prs_struct *ps, int depth)
2524 if (ctr == NULL)
2525 return False;
2527 prs_debug(ps, depth, desc, "srv_io_srv_file_ctr");
2528 depth++;
2530 if (UNMARSHALLING(ps)) {
2531 memset(ctr, '\0', sizeof(SRV_FILE_INFO_CTR));
2534 if(!prs_align(ps))
2535 return False;
2537 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
2538 return False;
2539 if (ctr->switch_value != 3) {
2540 DEBUG(5,("%s File info %d level not supported\n",
2541 tab_depth(depth), ctr->switch_value));
2543 if(!prs_uint32("ptr_file_info", ps, depth, &ctr->ptr_file_info))
2544 return False;
2545 if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
2546 return False;
2547 if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
2548 return False;
2549 if (ctr->ptr_entries == 0)
2550 return True;
2551 if(!prs_uint32("num_entries2", ps, depth,
2552 &ctr->num_entries2))
2553 return False;
2555 switch (ctr->switch_value) {
2556 case 3: {
2557 SRV_FILE_INFO_3 *info3 = ctr->file.info3;
2558 int num_entries = ctr->num_entries;
2559 int i;
2561 if (UNMARSHALLING(ps)) {
2562 if (!(info3 = PRS_ALLOC_MEM(ps, SRV_FILE_INFO_3, num_entries)))
2563 return False;
2564 ctr->file.info3 = info3;
2567 for (i = 0; i < num_entries; i++) {
2568 if(!srv_io_file_info3("", &ctr->file.info3[i].info_3, ps, depth))
2569 return False;
2571 for (i = 0; i < num_entries; i++) {
2572 if(!srv_io_file_info3_str("", &ctr->file.info3[i].info_3_str, ps, depth))
2573 return False;
2575 break;
2577 default:
2578 DEBUG(5,("%s no file info at switch_value %d\n",
2579 tab_depth(depth), ctr->switch_value));
2580 break;
2583 return True;
2586 /*******************************************************************
2587 Inits a SRV_Q_NET_FILE_ENUM structure.
2588 ********************************************************************/
2590 void init_srv_q_net_file_enum(SRV_Q_NET_FILE_ENUM *q_n,
2591 const char *srv_name, const char *qual_name,
2592 const char *user_name,
2593 uint32 file_level, SRV_FILE_INFO_CTR *ctr,
2594 uint32 preferred_len,
2595 ENUM_HND *hnd)
2597 DEBUG(5,("init_q_net_file_enum\n"));
2599 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
2600 init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name);
2601 init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
2603 q_n->file_level = q_n->ctr.switch_value = file_level;
2604 q_n->preferred_len = preferred_len;
2605 q_n->ctr.ptr_file_info = 1;
2606 q_n->ctr.num_entries = 0;
2607 q_n->ctr.num_entries2 = 0;
2609 memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
2612 /*******************************************************************
2613 Reads or writes a structure.
2614 ********************************************************************/
2616 BOOL srv_io_q_net_file_enum(const char *desc, SRV_Q_NET_FILE_ENUM *q_n, prs_struct *ps, int depth)
2618 if (q_n == NULL)
2619 return False;
2621 prs_debug(ps, depth, desc, "srv_io_q_net_file_enum");
2622 depth++;
2624 if(!prs_align(ps))
2625 return False;
2627 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
2628 return False;
2629 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
2630 return False;
2632 if(!prs_align(ps))
2633 return False;
2635 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
2636 return False;
2637 if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
2638 return False;
2640 if(!prs_align(ps))
2641 return False;
2643 if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
2644 return False;
2645 if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
2646 return False;
2648 if(!prs_align(ps))
2649 return False;
2650 if(!prs_uint32("file_level", ps, depth, &q_n->file_level))
2651 return False;
2653 if (q_n->file_level != (uint32)-1) {
2654 if(!srv_io_srv_file_ctr("file_ctr", &q_n->ctr, ps, depth))
2655 return False;
2658 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
2659 return False;
2661 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
2662 return False;
2664 return True;
2667 /*******************************************************************
2668 Reads or writes a structure.
2669 ********************************************************************/
2671 BOOL srv_io_r_net_file_enum(const char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps, int depth)
2673 if (r_n == NULL)
2674 return False;
2676 prs_debug(ps, depth, desc, "srv_io_r_net_file_enum");
2677 depth++;
2679 if(!prs_align(ps))
2680 return False;
2682 if(!prs_uint32("file_level", ps, depth, &r_n->file_level))
2683 return False;
2685 if (r_n->file_level != 0) {
2686 if(!srv_io_srv_file_ctr("file_ctr", &r_n->ctr, ps, depth))
2687 return False;
2690 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
2691 return False;
2692 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
2693 return False;
2694 if(!prs_werror("status", ps, depth, &r_n->status))
2695 return False;
2697 return True;
2700 /*******************************************************************
2701 Initialize a net file close request
2702 ********************************************************************/
2703 void init_srv_q_net_file_close(SRV_Q_NET_FILE_CLOSE *q_n, const char *server,
2704 uint32 file_id)
2706 q_n->ptr_srv_name = 1;
2707 init_unistr2(&q_n->uni_srv_name, server, UNI_STR_TERMINATE);
2708 q_n->file_id = file_id;
2711 /*******************************************************************
2712 Reads or writes a structure.
2713 ********************************************************************/
2714 BOOL srv_io_q_net_file_close(const char *desc, SRV_Q_NET_FILE_CLOSE *q_n,
2715 prs_struct *ps, int depth)
2717 if (q_n == NULL)
2718 return False;
2720 prs_debug(ps, depth, desc, "srv_io_q_net_file_close");
2721 depth++;
2723 if(!prs_align(ps))
2724 return False;
2726 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
2727 return False;
2728 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
2729 return False;
2731 if(!prs_align(ps))
2732 return False;
2734 if(!prs_uint32("file_id", ps, depth, &q_n->file_id))
2735 return False;
2737 return True;
2740 /*******************************************************************
2741 Reads or writes a structure.
2742 ********************************************************************/
2744 BOOL srv_io_r_net_file_close(const char *desc, SRV_R_NET_FILE_CLOSE *q_n,
2745 prs_struct *ps, int depth)
2747 if (q_n == NULL)
2748 return False;
2750 prs_debug(ps, depth, desc, "srv_io_r_net_file_close");
2751 depth++;
2753 if(!prs_align(ps))
2754 return False;
2756 if(!prs_werror("status", ps, depth, &q_n->status))
2757 return False;
2759 return True;
2762 /*******************************************************************
2763 Inits a SRV_INFO_100 structure.
2764 ********************************************************************/
2766 void init_srv_info_100(SRV_INFO_100 *sv100, uint32 platform_id, const char *name)
2768 DEBUG(5,("init_srv_info_100\n"));
2770 sv100->platform_id = platform_id;
2771 init_buf_unistr2(&sv100->uni_name, &sv100->ptr_name, name);
2774 /*******************************************************************
2775 Reads or writes a SRV_INFO_101 structure.
2776 ********************************************************************/
2778 static BOOL srv_io_info_100(const char *desc, SRV_INFO_100 *sv100, prs_struct *ps, int depth)
2780 if (sv100 == NULL)
2781 return False;
2783 prs_debug(ps, depth, desc, "srv_io_info_100");
2784 depth++;
2786 if(!prs_align(ps))
2787 return False;
2789 if(!prs_uint32("platform_id ", ps, depth, &sv100->platform_id))
2790 return False;
2791 if(!prs_uint32("ptr_name ", ps, depth, &sv100->ptr_name))
2792 return False;
2794 if(!smb_io_unistr2("uni_name ", &sv100->uni_name, True, ps, depth))
2795 return False;
2797 return True;
2801 /*******************************************************************
2802 Inits a SRV_INFO_101 structure.
2803 ********************************************************************/
2805 void init_srv_info_101(SRV_INFO_101 *sv101, uint32 platform_id, const char *name,
2806 uint32 ver_major, uint32 ver_minor,
2807 uint32 srv_type, const char *comment)
2809 DEBUG(5,("init_srv_info_101\n"));
2811 sv101->platform_id = platform_id;
2812 init_buf_unistr2(&sv101->uni_name, &sv101->ptr_name, name);
2813 sv101->ver_major = ver_major;
2814 sv101->ver_minor = ver_minor;
2815 sv101->srv_type = srv_type;
2816 init_buf_unistr2(&sv101->uni_comment, &sv101->ptr_comment, comment);
2819 /*******************************************************************
2820 Reads or writes a SRV_INFO_101 structure.
2821 ********************************************************************/
2823 static BOOL srv_io_info_101(const char *desc, SRV_INFO_101 *sv101, prs_struct *ps, int depth)
2825 if (sv101 == NULL)
2826 return False;
2828 prs_debug(ps, depth, desc, "srv_io_info_101");
2829 depth++;
2831 if(!prs_align(ps))
2832 return False;
2834 if(!prs_uint32("platform_id ", ps, depth, &sv101->platform_id))
2835 return False;
2836 if(!prs_uint32("ptr_name ", ps, depth, &sv101->ptr_name))
2837 return False;
2838 if(!prs_uint32("ver_major ", ps, depth, &sv101->ver_major))
2839 return False;
2840 if(!prs_uint32("ver_minor ", ps, depth, &sv101->ver_minor))
2841 return False;
2842 if(!prs_uint32("srv_type ", ps, depth, &sv101->srv_type))
2843 return False;
2844 if(!prs_uint32("ptr_comment ", ps, depth, &sv101->ptr_comment))
2845 return False;
2847 if(!prs_align(ps))
2848 return False;
2850 if(!smb_io_unistr2("uni_name ", &sv101->uni_name, True, ps, depth))
2851 return False;
2852 if(!smb_io_unistr2("uni_comment ", &sv101->uni_comment, True, ps, depth))
2853 return False;
2855 return True;
2858 /*******************************************************************
2859 Inits a SRV_INFO_102 structure.
2860 ********************************************************************/
2862 void init_srv_info_102(SRV_INFO_102 *sv102, uint32 platform_id, const char *name,
2863 const char *comment, uint32 ver_major, uint32 ver_minor,
2864 uint32 srv_type, uint32 users, uint32 disc, uint32 hidden,
2865 uint32 announce, uint32 ann_delta, uint32 licenses,
2866 const char *usr_path)
2868 DEBUG(5,("init_srv_info_102\n"));
2870 sv102->platform_id = platform_id;
2871 init_buf_unistr2(&sv102->uni_name, &sv102->ptr_name, name);
2872 sv102->ver_major = ver_major;
2873 sv102->ver_minor = ver_minor;
2874 sv102->srv_type = srv_type;
2875 init_buf_unistr2(&sv102->uni_comment, &sv102->ptr_comment, comment);
2877 /* same as 101 up to here */
2879 sv102->users = users;
2880 sv102->disc = disc;
2881 sv102->hidden = hidden;
2882 sv102->announce = announce;
2883 sv102->ann_delta = ann_delta;
2884 sv102->licenses = licenses;
2885 init_buf_unistr2(&sv102->uni_usr_path, &sv102->ptr_usr_path, usr_path);
2889 /*******************************************************************
2890 Reads or writes a SRV_INFO_102 structure.
2891 ********************************************************************/
2893 static BOOL srv_io_info_102(const char *desc, SRV_INFO_102 *sv102, prs_struct *ps, int depth)
2895 if (sv102 == NULL)
2896 return False;
2898 prs_debug(ps, depth, desc, "srv_io_info102");
2899 depth++;
2901 if(!prs_align(ps))
2902 return False;
2904 if(!prs_uint32("platform_id ", ps, depth, &sv102->platform_id))
2905 return False;
2906 if(!prs_uint32("ptr_name ", ps, depth, &sv102->ptr_name))
2907 return False;
2908 if(!prs_uint32("ver_major ", ps, depth, &sv102->ver_major))
2909 return False;
2910 if(!prs_uint32("ver_minor ", ps, depth, &sv102->ver_minor))
2911 return False;
2912 if(!prs_uint32("srv_type ", ps, depth, &sv102->srv_type))
2913 return False;
2914 if(!prs_uint32("ptr_comment ", ps, depth, &sv102->ptr_comment))
2915 return False;
2917 /* same as 101 up to here */
2919 if(!prs_uint32("users ", ps, depth, &sv102->users))
2920 return False;
2921 if(!prs_uint32("disc ", ps, depth, &sv102->disc))
2922 return False;
2923 if(!prs_uint32("hidden ", ps, depth, &sv102->hidden))
2924 return False;
2925 if(!prs_uint32("announce ", ps, depth, &sv102->announce))
2926 return False;
2927 if(!prs_uint32("ann_delta ", ps, depth, &sv102->ann_delta))
2928 return False;
2929 if(!prs_uint32("licenses ", ps, depth, &sv102->licenses))
2930 return False;
2931 if(!prs_uint32("ptr_usr_path", ps, depth, &sv102->ptr_usr_path))
2932 return False;
2934 if(!smb_io_unistr2("uni_name ", &sv102->uni_name, True, ps, depth))
2935 return False;
2936 if(!prs_align(ps))
2937 return False;
2938 if(!smb_io_unistr2("uni_comment ", &sv102->uni_comment, True, ps, depth))
2939 return False;
2940 if(!prs_align(ps))
2941 return False;
2942 if(!smb_io_unistr2("uni_usr_path", &sv102->uni_usr_path, True, ps, depth))
2943 return False;
2945 return True;
2948 /*******************************************************************
2949 Reads or writes a SRV_INFO_102 structure.
2950 ********************************************************************/
2952 static BOOL srv_io_info_ctr(const char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int depth)
2954 if (ctr == NULL)
2955 return False;
2957 prs_debug(ps, depth, desc, "srv_io_info_ctr");
2958 depth++;
2960 if(!prs_align(ps))
2961 return False;
2963 if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
2964 return False;
2965 if(!prs_uint32("ptr_srv_ctr ", ps, depth, &ctr->ptr_srv_ctr))
2966 return False;
2968 if (ctr->ptr_srv_ctr != 0 && ctr->switch_value != 0 && ctr != NULL) {
2969 switch (ctr->switch_value) {
2970 case 100:
2971 if(!srv_io_info_100("sv100", &ctr->srv.sv100, ps, depth))
2972 return False;
2973 break;
2974 case 101:
2975 if(!srv_io_info_101("sv101", &ctr->srv.sv101, ps, depth))
2976 return False;
2977 break;
2978 case 102:
2979 if(!srv_io_info_102("sv102", &ctr->srv.sv102, ps, depth))
2980 return False;
2981 break;
2982 default:
2983 DEBUG(5,("%s no server info at switch_value %d\n",
2984 tab_depth(depth), ctr->switch_value));
2985 break;
2987 if(!prs_align(ps))
2988 return False;
2991 return True;
2994 /*******************************************************************
2995 Inits a SRV_Q_NET_SRV_GET_INFO structure.
2996 ********************************************************************/
2998 void init_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
2999 const char *server_name, uint32 switch_value)
3001 DEBUG(5,("init_srv_q_net_srv_get_info\n"));
3003 init_buf_unistr2(&srv->uni_srv_name, &srv->ptr_srv_name, server_name);
3005 srv->switch_value = switch_value;
3008 /*******************************************************************
3009 Reads or writes a structure.
3010 ********************************************************************/
3012 BOOL srv_io_q_net_srv_get_info(const char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth)
3014 if (q_n == NULL)
3015 return False;
3017 prs_debug(ps, depth, desc, "srv_io_q_net_srv_get_info");
3018 depth++;
3020 if(!prs_align(ps))
3021 return False;
3023 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
3024 return False;
3025 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3026 return False;
3028 if(!prs_align(ps))
3029 return False;
3031 if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
3032 return False;
3034 return True;
3037 /*******************************************************************
3038 Inits a SRV_R_NET_SRV_GET_INFO structure.
3039 ********************************************************************/
3041 void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
3042 uint32 switch_value, SRV_INFO_CTR *ctr, WERROR status)
3044 DEBUG(5,("init_srv_r_net_srv_get_info\n"));
3046 srv->ctr = ctr;
3048 if (W_ERROR_IS_OK(status)) {
3049 srv->ctr->switch_value = switch_value;
3050 srv->ctr->ptr_srv_ctr = 1;
3051 } else {
3052 srv->ctr->switch_value = 0;
3053 srv->ctr->ptr_srv_ctr = 0;
3056 srv->status = status;
3059 /*******************************************************************
3060 Inits a SRV_R_NET_SRV_SET_INFO structure.
3061 ********************************************************************/
3063 void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
3064 uint32 switch_value, WERROR status)
3066 DEBUG(5,("init_srv_r_net_srv_set_info\n"));
3068 srv->switch_value = switch_value;
3069 srv->status = status;
3072 /*******************************************************************
3073 Reads or writes a structure.
3074 ********************************************************************/
3076 BOOL srv_io_q_net_srv_set_info(const char *desc, SRV_Q_NET_SRV_SET_INFO *q_n,
3077 prs_struct *ps, int depth)
3079 prs_debug(ps, depth, desc, "srv_io_q_net_srv_set_info");
3080 depth++;
3082 if(!prs_align(ps))
3083 return False;
3085 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
3086 return False;
3087 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3088 return False;
3090 if(!prs_align(ps))
3091 return False;
3093 if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
3094 return False;
3096 if (UNMARSHALLING(ps)) {
3097 q_n->ctr = PRS_ALLOC_MEM(ps, SRV_INFO_CTR, 1);
3099 if (!q_n->ctr)
3100 return False;
3103 if(!srv_io_info_ctr("ctr", q_n->ctr, ps, depth))
3104 return False;
3106 return True;
3109 /*******************************************************************
3110 Reads or writes a structure.
3111 ********************************************************************/
3113 BOOL srv_io_r_net_srv_get_info(const char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth)
3115 if (r_n == NULL)
3116 return False;
3118 prs_debug(ps, depth, desc, "srv_io_r_net_srv_get_info");
3119 depth++;
3121 if(!prs_align(ps))
3122 return False;
3124 if(!srv_io_info_ctr("ctr", r_n->ctr, ps, depth))
3125 return False;
3127 if(!prs_werror("status", ps, depth, &r_n->status))
3128 return False;
3130 return True;
3133 /*******************************************************************
3134 Reads or writes a structure.
3135 ********************************************************************/
3137 BOOL srv_io_r_net_srv_set_info(const char *desc, SRV_R_NET_SRV_SET_INFO *r_n,
3138 prs_struct *ps, int depth)
3140 prs_debug(ps, depth, desc, "srv_io_r_net_srv_set_info");
3141 depth++;
3143 if(!prs_align(ps))
3144 return False;
3146 if(!prs_uint32("switch value ", ps, depth, &r_n->switch_value))
3147 return False;
3149 if(!prs_werror("status", ps, depth, &r_n->status))
3150 return False;
3152 return True;
3155 /*******************************************************************
3156 Reads or writes a structure.
3157 ********************************************************************/
3159 BOOL srv_io_q_net_remote_tod(const char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth)
3161 if (q_n == NULL)
3162 return False;
3164 prs_debug(ps, depth, desc, "srv_io_q_net_remote_tod");
3165 depth++;
3167 if(!prs_align(ps))
3168 return False;
3170 if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
3171 return False;
3172 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3173 return False;
3175 return True;
3178 /*******************************************************************
3179 Reads or writes a TIME_OF_DAY_INFO structure.
3180 ********************************************************************/
3182 static BOOL srv_io_time_of_day_info(const char *desc, TIME_OF_DAY_INFO *tod, prs_struct *ps, int depth)
3184 if (tod == NULL)
3185 return False;
3187 prs_debug(ps, depth, desc, "srv_io_time_of_day_info");
3188 depth++;
3190 if(!prs_align(ps))
3191 return False;
3193 if(!prs_uint32("elapsedt ", ps, depth, &tod->elapsedt))
3194 return False;
3195 if(!prs_uint32("msecs ", ps, depth, &tod->msecs))
3196 return False;
3197 if(!prs_uint32("hours ", ps, depth, &tod->hours))
3198 return False;
3199 if(!prs_uint32("mins ", ps, depth, &tod->mins))
3200 return False;
3201 if(!prs_uint32("secs ", ps, depth, &tod->secs))
3202 return False;
3203 if(!prs_uint32("hunds ", ps, depth, &tod->hunds))
3204 return False;
3205 if(!prs_uint32("timezone ", ps, depth, &tod->zone))
3206 return False;
3207 if(!prs_uint32("tintervals ", ps, depth, &tod->tintervals))
3208 return False;
3209 if(!prs_uint32("day ", ps, depth, &tod->day))
3210 return False;
3211 if(!prs_uint32("month ", ps, depth, &tod->month))
3212 return False;
3213 if(!prs_uint32("year ", ps, depth, &tod->year))
3214 return False;
3215 if(!prs_uint32("weekday ", ps, depth, &tod->weekday))
3216 return False;
3218 return True;
3221 /*******************************************************************
3222 Inits a TIME_OF_DAY_INFO structure.
3223 ********************************************************************/
3225 void init_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
3226 uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
3227 uint32 zone, uint32 tintervals, uint32 day,
3228 uint32 month, uint32 year, uint32 weekday)
3230 DEBUG(5,("init_time_of_day_info\n"));
3232 tod->elapsedt = elapsedt;
3233 tod->msecs = msecs;
3234 tod->hours = hours;
3235 tod->mins = mins;
3236 tod->secs = secs;
3237 tod->hunds = hunds;
3238 tod->zone = zone;
3239 tod->tintervals = tintervals;
3240 tod->day = day;
3241 tod->month = month;
3242 tod->year = year;
3243 tod->weekday = weekday;
3247 /*******************************************************************
3248 Reads or writes a structure.
3249 ********************************************************************/
3251 BOOL srv_io_r_net_remote_tod(const char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth)
3253 if (r_n == NULL)
3254 return False;
3256 prs_debug(ps, depth, desc, "srv_io_r_net_remote_tod");
3257 depth++;
3259 if(!prs_align(ps))
3260 return False;
3262 if(!prs_uint32("ptr_srv_tod ", ps, depth, &r_n->ptr_srv_tod))
3263 return False;
3265 if(!srv_io_time_of_day_info("tod", r_n->tod, ps, depth))
3266 return False;
3268 if(!prs_werror("status", ps, depth, &r_n->status))
3269 return False;
3271 return True;
3274 /*******************************************************************
3275 initialises a structure.
3276 ********************************************************************/
3278 BOOL init_srv_q_net_disk_enum(SRV_Q_NET_DISK_ENUM *q_n,
3279 const char *srv_name,
3280 uint32 preferred_len,
3281 ENUM_HND *enum_hnd
3286 DEBUG(5,("init_srv_q_net_srv_disk_enum\n"));
3288 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
3290 q_n->disk_enum_ctr.level = 0;
3291 q_n->disk_enum_ctr.disk_info_ptr = 0;
3293 q_n->preferred_len = preferred_len;
3294 memcpy(&q_n->enum_hnd, enum_hnd, sizeof(*enum_hnd));
3296 return True;
3299 /*******************************************************************
3300 Reads or writes a structure.
3301 ********************************************************************/
3303 BOOL srv_io_q_net_disk_enum(const char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth)
3305 if (q_n == NULL)
3306 return False;
3308 prs_debug(ps, depth, desc, "srv_io_q_net_disk_enum");
3309 depth++;
3311 if(!prs_align(ps))
3312 return False;
3314 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3315 return False;
3317 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3318 return False;
3320 if(!prs_align(ps))
3321 return False;
3323 if(!prs_uint32("level", ps, depth, &q_n->disk_enum_ctr.level))
3324 return False;
3326 if(!prs_uint32("entries_read", ps, depth, &q_n->disk_enum_ctr.entries_read))
3327 return False;
3329 if(!prs_uint32("buffer", ps, depth, &q_n->disk_enum_ctr.disk_info_ptr))
3330 return False;
3332 if(!prs_align(ps))
3333 return False;
3335 if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
3336 return False;
3337 if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
3338 return False;
3340 return True;
3343 /*******************************************************************
3344 Reads or writes a structure.
3345 ********************************************************************/
3347 BOOL srv_io_r_net_disk_enum(const char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth)
3350 unsigned int i;
3351 uint32 entries_read, entries_read2, entries_read3;
3353 if (r_n == NULL)
3354 return False;
3356 prs_debug(ps, depth, desc, "srv_io_r_net_disk_enum");
3357 depth++;
3359 entries_read = entries_read2 = entries_read3 = r_n->disk_enum_ctr.entries_read;
3361 if(!prs_align(ps))
3362 return False;
3364 if(!prs_uint32("entries_read", ps, depth, &entries_read))
3365 return False;
3366 if(!prs_uint32("ptr_disk_info", ps, depth, &r_n->disk_enum_ctr.disk_info_ptr))
3367 return False;
3369 /*this may be max, unknown, actual?*/
3371 if(!prs_uint32("max_elements", ps, depth, &entries_read2))
3372 return False;
3373 if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.unknown))
3374 return False;
3375 if(!prs_uint32("actual_elements", ps, depth, &entries_read3))
3376 return False;
3378 r_n->disk_enum_ctr.entries_read = entries_read3;
3380 if(UNMARSHALLING(ps)) {
3382 DISK_INFO *dinfo;
3384 if(!(dinfo = PRS_ALLOC_MEM(ps, DISK_INFO, entries_read3)))
3385 return False;
3386 r_n->disk_enum_ctr.disk_info = dinfo;
3389 for(i=0; i < r_n->disk_enum_ctr.entries_read; i++) {
3391 if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.disk_info[i].unknown))
3392 return False;
3394 if(!smb_io_unistr3("disk_name", &r_n->disk_enum_ctr.disk_info[i].disk_name, ps, depth))
3395 return False;
3397 if(!prs_align(ps))
3398 return False;
3401 if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
3402 return False;
3404 if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
3405 return False;
3407 if(!prs_werror("status", ps, depth, &r_n->status))
3408 return False;
3410 return True;
3413 /*******************************************************************
3414 initialises a structure.
3415 ********************************************************************/
3417 BOOL init_srv_q_net_name_validate(SRV_Q_NET_NAME_VALIDATE *q_n, const char *srv_name, const char *share_name, int type)
3419 uint32 ptr_share_name;
3421 DEBUG(5,("init_srv_q_net_name_validate\n"));
3423 init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
3424 init_buf_unistr2(&q_n->uni_name, &ptr_share_name, share_name);
3426 q_n->type = type;
3427 q_n->flags = 0;
3429 return True;
3432 /*******************************************************************
3433 Reads or writes a structure.
3434 ********************************************************************/
3436 BOOL srv_io_q_net_name_validate(const char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth)
3438 if (q_n == NULL)
3439 return False;
3441 prs_debug(ps, depth, desc, "srv_io_q_net_name_validate");
3442 depth++;
3444 if(!prs_align(ps))
3445 return False;
3447 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3448 return False;
3450 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3451 return False;
3453 if(!prs_align(ps))
3454 return False;
3456 if(!smb_io_unistr2("", &q_n->uni_name, True, ps, depth))
3457 return False;
3459 if(!prs_align(ps))
3460 return False;
3462 if(!prs_uint32("type", ps, depth, &q_n->type))
3463 return False;
3465 if(!prs_uint32("flags", ps, depth, &q_n->flags))
3466 return False;
3468 return True;
3471 /*******************************************************************
3472 Reads or writes a structure.
3473 ********************************************************************/
3475 BOOL srv_io_r_net_name_validate(const char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth)
3477 if (r_n == NULL)
3478 return False;
3480 prs_debug(ps, depth, desc, "srv_io_r_net_name_validate");
3481 depth++;
3483 if(!prs_align(ps))
3484 return False;
3486 if(!prs_werror("status", ps, depth, &r_n->status))
3487 return False;
3489 return True;
3492 /*******************************************************************
3493 Reads or writes a structure.
3494 ********************************************************************/
3496 BOOL srv_io_q_net_file_query_secdesc(const char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth)
3498 if (q_n == NULL)
3499 return False;
3501 prs_debug(ps, depth, desc, "srv_io_q_net_file_query_secdesc");
3502 depth++;
3504 if(!prs_align(ps))
3505 return False;
3507 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3508 return False;
3510 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3511 return False;
3513 if(!prs_align(ps))
3514 return False;
3516 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
3517 return False;
3519 if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
3520 return False;
3522 if(!prs_align(ps))
3523 return False;
3525 if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
3526 return False;
3528 if(!prs_uint32("unknown1", ps, depth, &q_n->unknown1))
3529 return False;
3531 if(!prs_uint32("unknown2", ps, depth, &q_n->unknown2))
3532 return False;
3534 if(!prs_uint32("unknown3", ps, depth, &q_n->unknown3))
3535 return False;
3537 return True;
3540 /*******************************************************************
3541 Reads or writes a structure.
3542 ********************************************************************/
3544 BOOL srv_io_r_net_file_query_secdesc(const char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth)
3546 if (r_n == NULL)
3547 return False;
3549 prs_debug(ps, depth, desc, "srv_io_r_net_file_query_secdesc");
3550 depth++;
3552 if(!prs_align(ps))
3553 return False;
3555 if(!prs_uint32("ptr_response", ps, depth, &r_n->ptr_response))
3556 return False;
3558 if(!prs_uint32("size_response", ps, depth, &r_n->size_response))
3559 return False;
3561 if(!prs_uint32("ptr_secdesc", ps, depth, &r_n->ptr_secdesc))
3562 return False;
3564 if(!prs_uint32("size_secdesc", ps, depth, &r_n->size_secdesc))
3565 return False;
3567 if(!sec_io_desc("sec_desc", &r_n->sec_desc, ps, depth))
3568 return False;
3570 if(!prs_align(ps))
3571 return False;
3573 if(!prs_werror("status", ps, depth, &r_n->status))
3574 return False;
3576 return True;
3579 /*******************************************************************
3580 Reads or writes a structure.
3581 ********************************************************************/
3583 BOOL srv_io_q_net_file_set_secdesc(const char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth)
3585 if (q_n == NULL)
3586 return False;
3588 prs_debug(ps, depth, desc, "srv_io_q_net_file_set_secdesc");
3589 depth++;
3591 if(!prs_align(ps))
3592 return False;
3594 if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
3595 return False;
3597 if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
3598 return False;
3600 if(!prs_align(ps))
3601 return False;
3603 if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
3604 return False;
3606 if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
3607 return False;
3609 if(!prs_align(ps))
3610 return False;
3612 if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
3613 return False;
3615 if(!prs_align(ps))
3616 return False;
3618 if(!prs_uint32("sec_info", ps, depth, &q_n->sec_info))
3619 return False;
3621 if(!prs_uint32("size_set", ps, depth, &q_n->size_set))
3622 return False;
3624 if(!prs_uint32("ptr_secdesc", ps, depth, &q_n->ptr_secdesc))
3625 return False;
3627 if(!prs_uint32("size_secdesc", ps, depth, &q_n->size_secdesc))
3628 return False;
3630 if(!sec_io_desc("sec_desc", &q_n->sec_desc, ps, depth))
3631 return False;
3633 return True;
3636 /*******************************************************************
3637 Reads or writes a structure.
3638 ********************************************************************/
3640 BOOL srv_io_r_net_file_set_secdesc(const char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth)
3642 if (r_n == NULL)
3643 return False;
3645 prs_debug(ps, depth, desc, "srv_io_r_net_file_set_secdesc");
3646 depth++;
3648 if(!prs_align(ps))
3649 return False;
3651 if(!prs_werror("status", ps, depth, &r_n->status))
3652 return False;
3654 return True;
3657 /*******************************************************************
3658 Inits a structure
3659 ********************************************************************/
3661 void init_srv_q_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_u, const char *server)
3663 q_u->ptr_srv_name = 1;
3664 init_unistr2(&q_u->uni_srv_name, server, UNI_STR_TERMINATE);