2 * Unix SMB/Netbios implementation.
4 * RPC Pipe client / server routines
5 * Copyright (C) Andrew Tridgell 1992-1998,
6 * Copyright (C) Luke Kenneth Casson Leighton 1996-1998,
7 * Copyright (C) Paul Ashton 1997-1998.
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 extern int DEBUGLEVEL;
30 /*******************************************************************
31 makes a SAMR_Q_CLOSE_HND structure.
32 ********************************************************************/
33 void make_samr_q_close_hnd(SAMR_Q_CLOSE_HND *q_c, POLICY_HND *hnd)
35 if (q_c == NULL || hnd == NULL) return;
37 DEBUG(5,("make_samr_q_close_hnd\n"));
39 memcpy(&(q_c->pol), hnd, sizeof(q_c->pol));
42 /*******************************************************************
43 reads or writes a structure.
44 ********************************************************************/
45 void samr_io_q_close_hnd(char *desc, SAMR_Q_CLOSE_HND *q_u, prs_struct *ps, int depth)
47 if (q_u == NULL) return;
49 prs_debug(ps, depth, desc, "samr_io_q_close_hnd");
54 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
58 /*******************************************************************
59 reads or writes a structure.
60 ********************************************************************/
61 void samr_io_r_close_hnd(char *desc, SAMR_R_CLOSE_HND *r_u, prs_struct *ps, int depth)
63 if (r_u == NULL) return;
65 prs_debug(ps, depth, desc, "samr_io_r_close_hnd");
70 smb_io_pol_hnd("pol", &(r_u->pol), ps, depth);
73 prs_uint32("status", ps, depth, &(r_u->status));
77 /*******************************************************************
78 reads or writes a structure.
79 ********************************************************************/
80 void make_samr_q_open_domain(SAMR_Q_OPEN_DOMAIN *q_u,
81 POLICY_HND *connect_pol, uint32 rid,
84 if (q_u == NULL) return;
86 DEBUG(5,("samr_make_samr_q_open_domain\n"));
88 memcpy(&q_u->connect_pol, connect_pol, sizeof(q_u->connect_pol));
90 make_dom_sid2(&(q_u->dom_sid), sid);
93 /*******************************************************************
94 reads or writes a structure.
95 ********************************************************************/
96 void samr_io_q_open_domain(char *desc, SAMR_Q_OPEN_DOMAIN *q_u, prs_struct *ps, int depth)
98 if (q_u == NULL) return;
100 prs_debug(ps, depth, desc, "samr_io_q_open_domain");
105 smb_io_pol_hnd("connect_pol", &(q_u->connect_pol), ps, depth);
108 prs_uint32("rid", ps, depth, &(q_u->rid));
110 smb_io_dom_sid2("sid", &(q_u->dom_sid), ps, depth);
115 /*******************************************************************
116 reads or writes a structure.
117 ********************************************************************/
118 void samr_io_r_open_domain(char *desc, SAMR_R_OPEN_DOMAIN *r_u, prs_struct *ps, int depth)
120 if (r_u == NULL) return;
122 prs_debug(ps, depth, desc, "samr_io_r_open_domain");
127 smb_io_pol_hnd("domain_pol", &(r_u->domain_pol), ps, depth);
130 prs_uint32("status", ps, depth, &(r_u->status));
133 /*******************************************************************
134 reads or writes a structure.
135 ********************************************************************/
136 void make_samr_q_unknown_2c(SAMR_Q_UNKNOWN_2C *q_u, POLICY_HND *user_pol)
138 if (q_u == NULL) return;
140 DEBUG(5,("samr_make_samr_q_unknown_2c\n"));
142 memcpy(&q_u->user_pol, user_pol, sizeof(q_u->user_pol));
146 /*******************************************************************
147 reads or writes a structure.
148 ********************************************************************/
149 void samr_io_q_unknown_2c(char *desc, SAMR_Q_UNKNOWN_2C *q_u, prs_struct *ps, int depth)
151 if (q_u == NULL) return;
153 prs_debug(ps, depth, desc, "samr_io_q_unknown_2c");
158 smb_io_pol_hnd("user_pol", &(q_u->user_pol), ps, depth);
162 /*******************************************************************
164 ********************************************************************/
165 void make_samr_r_unknown_2c(SAMR_R_UNKNOWN_2C *q_u, uint32 status)
167 if (q_u == NULL) return;
169 DEBUG(5,("samr_make_r_unknown_2c\n"));
171 q_u->unknown_0 = 0x00160000;
172 q_u->unknown_1 = 0x00000000;
173 q_u->status = status;
177 /*******************************************************************
178 reads or writes a structure.
179 ********************************************************************/
180 void samr_io_r_unknown_2c(char *desc, SAMR_R_UNKNOWN_2C *r_u, prs_struct *ps, int depth)
182 if (r_u == NULL) return;
184 prs_debug(ps, depth, desc, "samr_io_r_unknown_2c");
189 prs_uint32("unknown_0", ps, depth, &(r_u->unknown_0));
190 prs_uint32("unknown_1", ps, depth, &(r_u->unknown_1));
191 prs_uint32("status ", ps, depth, &(r_u->status ));
194 /*******************************************************************
195 reads or writes a structure.
196 ********************************************************************/
197 void make_samr_q_unknown_3(SAMR_Q_UNKNOWN_3 *q_u,
198 POLICY_HND *user_pol, uint16 switch_value)
200 if (q_u == NULL) return;
202 DEBUG(5,("samr_make_samr_q_unknown_3\n"));
204 memcpy(&q_u->user_pol, user_pol, sizeof(q_u->user_pol));
205 q_u->switch_value = switch_value;
209 /*******************************************************************
210 reads or writes a structure.
211 ********************************************************************/
212 void samr_io_q_unknown_3(char *desc, SAMR_Q_UNKNOWN_3 *q_u, prs_struct *ps, int depth)
214 if (q_u == NULL) return;
216 prs_debug(ps, depth, desc, "samr_io_q_unknown_3");
221 smb_io_pol_hnd("user_pol", &(q_u->user_pol), ps, depth);
224 prs_uint16("switch_value", ps, depth, &(q_u->switch_value));
228 /*******************************************************************
229 reads or writes a structure.
230 ********************************************************************/
231 void make_samr_q_query_dom_info(SAMR_Q_QUERY_DOMAIN_INFO *q_u,
232 POLICY_HND *domain_pol, uint16 switch_value)
234 if (q_u == NULL) return;
236 DEBUG(5,("samr_make_samr_q_query_dom_info\n"));
238 memcpy(&q_u->domain_pol, domain_pol, sizeof(q_u->domain_pol));
239 q_u->switch_value = switch_value;
242 /*******************************************************************
243 reads or writes a structure.
244 ********************************************************************/
245 void samr_io_q_query_dom_info(char *desc, SAMR_Q_QUERY_DOMAIN_INFO *q_u, prs_struct *ps, int depth)
247 if (q_u == NULL) return;
249 prs_debug(ps, depth, desc, "samr_io_q_query_dom_info");
254 smb_io_pol_hnd("domain_pol", &(q_u->domain_pol), ps, depth);
257 prs_uint16("switch_value", ps, depth, &(q_u->switch_value));
261 /*******************************************************************
263 ********************************************************************/
264 void make_unk_info2(SAM_UNK_INFO_2 *u_2, char *domain, char *server)
266 int len_domain = strlen(domain);
267 int len_server = strlen(server);
269 if (u_2 == NULL) return;
271 u_2->unknown_0 = 0x00000000;
272 u_2->unknown_1 = 0x80000000;
273 u_2->unknown_2 = 0x00000000;
276 make_uni_hdr(&(u_2->hdr_domain), len_domain, len_domain, 1);
277 make_uni_hdr(&(u_2->hdr_server), len_server, len_server, 1);
279 u_2->seq_num = 0x10000000;
280 u_2->unknown_3 = 0x00000000;
282 u_2->unknown_4 = 0x00000001;
283 u_2->unknown_5 = 0x00000003;
284 u_2->unknown_6 = 0x00000001;
285 u_2->num_domain_usrs = 0x00000008;
286 u_2->num_domain_grps = 0x00000003;
287 u_2->num_local_grps = 0x00000003;
289 memset(u_2->padding, 0, sizeof(u_2->padding)); /* 12 bytes zeros */
291 make_unistr2(&u_2->uni_domain, domain, len_domain);
292 make_unistr2(&u_2->uni_server, server, len_server);
295 /*******************************************************************
296 reads or writes a structure.
297 ********************************************************************/
298 void sam_io_unk_info2(char *desc, SAM_UNK_INFO_2 *u_2, prs_struct *ps, int depth)
300 if (u_2 == NULL) return;
302 prs_debug(ps, depth, desc, "sam_io_unk_info2");
305 prs_uint32("unknown_0", ps, depth, &u_2->unknown_0); /* 0x0000 0000 */
306 prs_uint32("unknown_1", ps, depth, &u_2->unknown_1); /* 0x8000 0000 */
307 prs_uint32("unknown_2", ps, depth, &u_2->unknown_2); /* 0x0000 0000 */
309 prs_uint32("ptr_0", ps, depth, &u_2->ptr_0); /* pointer to unknown structure */
310 smb_io_unihdr("hdr_domain", &u_2->hdr_domain, ps, depth); /* domain name unicode header */
311 smb_io_unihdr("hdr_server", &u_2->hdr_server, ps, depth); /* server name unicode header */
313 /* put all the data in here, at the moment, including what the above
314 pointer is referring to
317 prs_uint32("seq_num ", ps, depth, &u_2->seq_num ); /* 0x0000 0099 or 0x1000 0000 */
318 prs_uint32("unknown_3 ", ps, depth, &u_2->unknown_3 ); /* 0x0000 0000 */
320 prs_uint32("unknown_4 ", ps, depth, &u_2->unknown_4 ); /* 0x0000 0001 */
321 prs_uint32("unknown_5 ", ps, depth, &u_2->unknown_5 ); /* 0x0000 0003 */
322 prs_uint32("unknown_6 ", ps, depth, &u_2->unknown_6 ); /* 0x0000 0001 */
323 prs_uint32("num_domain_usrs ", ps, depth, &u_2->num_domain_usrs ); /* 0x0000 0008 */
324 prs_uint32("num_domain_grps", ps, depth, &u_2->num_domain_grps); /* 0x0000 0003 */
325 prs_uint32("num_local_grps", ps, depth, &u_2->num_local_grps); /* 0x0000 0003 */
327 prs_uint8s(False, "padding", ps, depth, u_2->padding, sizeof(u_2->padding)); /* 12 bytes zeros */
329 smb_io_unistr2( "uni_domain", &u_2->uni_domain, u_2->hdr_domain.buffer, ps, depth); /* domain name unicode string */
330 smb_io_unistr2( "uni_server", &u_2->uni_server, u_2->hdr_server.buffer, ps, depth); /* server name unicode string */
336 /*******************************************************************
337 makes a SAMR_R_QUERY_DOMAIN_INFO structure.
338 ********************************************************************/
339 void make_samr_r_query_dom_info(SAMR_R_QUERY_DOMAIN_INFO *r_u,
340 uint16 switch_value, SAM_UNK_CTR *ctr,
343 if (r_u == NULL || ctr == NULL) return;
345 DEBUG(5,("make_samr_r_query_dom_info\n"));
348 r_u->switch_value = 0;
349 r_u->status = status; /* return status */
353 r_u->switch_value = switch_value;
359 /*******************************************************************
360 reads or writes a structure.
361 ********************************************************************/
362 void samr_io_r_query_dom_info(char *desc, SAMR_R_QUERY_DOMAIN_INFO *r_u, prs_struct *ps, int depth)
364 if (r_u == NULL) return;
366 prs_debug(ps, depth, desc, "samr_io_r_query_dom_info");
371 prs_uint32("ptr_0 ", ps, depth, &(r_u->ptr_0));
372 prs_uint16("switch_value", ps, depth, &(r_u->switch_value));
375 if (r_u->ptr_0 != 0 && r_u->ctr != NULL)
377 switch (r_u->switch_value)
381 sam_io_unk_info2("unk_inf2", &r_u->ctr->info.inf2, ps, depth);
386 DEBUG(3,("samr_io_r_query_dom_info: unknown switch level 0x%x\n",
395 /*******************************************************************
396 makes a DOM_SID3 structure.
398 calculate length by adding up the size of the components.
399 ********************************************************************/
400 void make_dom_sid3(DOM_SID3 *sid3, uint16 unk_0, uint16 unk_1, DOM_SID *sid)
402 if (sid3 == NULL) return;
405 sid3->len = 2 + 8 + sid3->sid.num_auths * 4;
408 /*******************************************************************
409 reads or writes a SAM_SID3 structure.
411 this one's odd, because the length (in bytes) is specified at the beginning.
412 the length _includes_ the length of the length, too :-)
414 ********************************************************************/
415 static void sam_io_dom_sid3(char *desc, DOM_SID3 *sid3, prs_struct *ps, int depth)
417 if (sid3 == NULL) return;
419 prs_debug(ps, depth, desc, "sam_io_dom_sid3");
422 prs_uint16("len", ps, depth, &(sid3->len));
424 smb_io_dom_sid("", &(sid3->sid), ps, depth);
427 /*******************************************************************
428 makes a SAMR_R_UNKNOWN3 structure.
433 unknown_4,5 : 0x0000 0014
436 unknown_7 : 0x5800 or 0x0070
438 ********************************************************************/
439 static void make_sam_sid_stuff(SAM_SID_STUFF *stf,
440 uint16 unknown_2, uint16 unknown_3,
441 uint32 unknown_4, uint16 unknown_6, uint16 unknown_7,
442 int num_sid3s, DOM_SID3 sid3[MAX_SAM_SIDS])
444 stf->unknown_2 = unknown_2;
445 stf->unknown_3 = unknown_3;
447 bzero(stf->padding1, sizeof(stf->padding1));
449 stf->unknown_4 = unknown_4;
450 stf->unknown_5 = unknown_4;
452 stf->unknown_6 = unknown_6;
453 stf->unknown_7 = unknown_7;
455 stf->num_sids = num_sid3s;
457 stf->padding2 = 0x0000;
459 memcpy(stf->sid, sid3, sizeof(DOM_SID3) * num_sid3s);
462 /*******************************************************************
463 reads or writes a SAM_SID_STUFF structure.
464 ********************************************************************/
465 static void sam_io_sid_stuff(char *desc, SAM_SID_STUFF *stf, prs_struct *ps, int depth)
469 if (stf == NULL) return;
471 DEBUG(5,("make_sam_sid_stuff\n"));
473 prs_uint16("unknown_2", ps, depth, &(stf->unknown_2));
474 prs_uint16("unknown_3", ps, depth, &(stf->unknown_3));
476 prs_uint8s(False, "padding1", ps, depth, stf->padding1, sizeof(stf->padding1));
478 prs_uint32("unknown_4", ps, depth, &(stf->unknown_4));
479 prs_uint32("unknown_5", ps, depth, &(stf->unknown_5));
480 prs_uint16("unknown_6", ps, depth, &(stf->unknown_6));
481 prs_uint16("unknown_7", ps, depth, &(stf->unknown_7));
483 prs_uint32("num_sids ", ps, depth, &(stf->num_sids ));
484 prs_uint16("padding2 ", ps, depth, &(stf->padding2 ));
486 SMB_ASSERT_ARRAY(stf->sid, stf->num_sids);
488 for (i = 0; i < stf->num_sids; i++)
490 sam_io_dom_sid3("", &(stf->sid[i]), ps, depth);
494 /*******************************************************************
495 reads or writes a SAMR_R_UNKNOWN3 structure.
496 ********************************************************************/
497 void make_samr_r_unknown_3(SAMR_R_UNKNOWN_3 *r_u,
498 uint16 unknown_2, uint16 unknown_3,
499 uint32 unknown_4, uint16 unknown_6, uint16 unknown_7,
500 int num_sid3s, DOM_SID3 sid3[MAX_SAM_SIDS],
503 if (r_u == NULL) return;
505 DEBUG(5,("samr_make_r_unknown_3\n"));
514 make_sam_sid_stuff(&(r_u->sid_stuff), unknown_2, unknown_3,
515 unknown_4, unknown_6, unknown_7,
519 r_u->status = status;
523 /*******************************************************************
524 reads or writes a SAMR_R_UNKNOWN_3 structure.
526 this one's odd, because the daft buggers use a different mechanism
527 for writing out the array of sids. they put the number of sids in
528 only one place: they've calculated the length of each sid and jumped
529 by that amount. then, retrospectively, the length of the whole buffer
530 is put at the beginning of the data stream.
534 ********************************************************************/
535 void samr_io_r_unknown_3(char *desc, SAMR_R_UNKNOWN_3 *r_u, prs_struct *ps, int depth)
539 int ptr_sid_stuff = 0;
541 if (r_u == NULL) return;
543 prs_debug(ps, depth, desc, "samr_io_r_unknown_3");
548 prs_uint32("ptr_0 ", ps, depth, &(r_u->ptr_0 ));
552 /* reading. do the length later */
553 prs_uint32("sid_stuff_len0", ps, depth, &(r_u->sid_stuff_len0));
558 ptr_len0 = ps->offset; ps->offset += 4;
563 prs_uint32("ptr_1 ", ps, depth, &(r_u->ptr_1 ));
566 /* reading. do the length later */
567 prs_uint32("sid_stuff_len1", ps, depth, &(r_u->sid_stuff_len1));
572 ptr_len1 = ps->offset; ps->offset += 4;
577 ptr_sid_stuff = ps->offset;
578 sam_io_sid_stuff("", &(r_u->sid_stuff), ps, depth);
582 if (!(ps->io)) /* storing not reading. do the length, now. */
584 if (ptr_sid_stuff != 0)
586 uint32 sid_stuff_len = ps->offset - ptr_sid_stuff;
587 int old_len = ps->offset;
589 ps->offset = ptr_len0;
590 prs_uint32("sid_stuff_len0", ps, depth, &sid_stuff_len);
592 ps->offset = ptr_len1;
593 prs_uint32("sid_stuff_len1", ps, depth, &sid_stuff_len);
595 ps->offset = old_len;
599 prs_uint32("status", ps, depth, &(r_u->status));
602 /*******************************************************************
603 reads or writes a SAM_STR1 structure.
604 ********************************************************************/
605 static void sam_io_sam_str1(char *desc, SAM_STR1 *sam, uint32 acct_buf, uint32 name_buf, uint32 desc_buf, prs_struct *ps, int depth)
607 if (sam == NULL) return;
609 prs_debug(ps, depth, desc, "sam_io_sam_str1");
614 smb_io_unistr2("unistr2", &(sam->uni_acct_name), acct_buf, ps, depth); /* account name unicode string */
615 smb_io_unistr2("unistr2", &(sam->uni_full_name), name_buf, ps, depth); /* full name unicode string */
616 smb_io_unistr2("unistr2", &(sam->uni_acct_desc), desc_buf, ps, depth); /* account description unicode string */
619 /*******************************************************************
620 makes a SAM_ENTRY1 structure.
621 ********************************************************************/
622 static void make_sam_entry1(SAM_ENTRY1 *sam, uint32 user_idx,
623 uint32 len_sam_name, uint32 len_sam_full, uint32 len_sam_desc,
624 uint32 rid_user, uint16 acb_info)
626 if (sam == NULL) return;
628 DEBUG(5,("make_sam_entry1\n"));
630 sam->user_idx = user_idx;
631 sam->rid_user = rid_user;
632 sam->acb_info = acb_info;
635 make_uni_hdr(&(sam->hdr_acct_name), len_sam_name, len_sam_name, len_sam_name != 0);
636 make_uni_hdr(&(sam->hdr_user_name), len_sam_full, len_sam_full, len_sam_full != 0);
637 make_uni_hdr(&(sam->hdr_user_desc), len_sam_desc, len_sam_desc, len_sam_desc != 0);
640 /*******************************************************************
641 reads or writes a SAM_ENTRY1 structure.
642 ********************************************************************/
643 static void sam_io_sam_entry1(char *desc, SAM_ENTRY1 *sam, prs_struct *ps, int depth)
645 if (sam == NULL) return;
647 prs_debug(ps, depth, desc, "sam_io_sam_entry1");
652 prs_uint32("user_idx ", ps, depth, &(sam->user_idx ));
654 prs_uint32("rid_user ", ps, depth, &(sam->rid_user ));
655 prs_uint16("acb_info ", ps, depth, &(sam->acb_info ));
656 prs_uint16("pad ", ps, depth, &(sam->pad ));
658 smb_io_unihdr("unihdr", &(sam->hdr_acct_name), ps, depth); /* account name unicode string header */
659 smb_io_unihdr("unihdr", &(sam->hdr_user_name), ps, depth); /* account name unicode string header */
660 smb_io_unihdr("unihdr", &(sam->hdr_user_desc), ps, depth); /* account name unicode string header */
663 /*******************************************************************
664 reads or writes a SAM_STR2 structure.
665 ********************************************************************/
666 static void sam_io_sam_str2(char *desc, SAM_STR2 *sam, uint32 acct_buf, uint32 desc_buf, prs_struct *ps, int depth)
668 if (sam == NULL) return;
670 prs_debug(ps, depth, desc, "sam_io_sam_str2");
675 smb_io_unistr2("unistr2", &(sam->uni_srv_name), acct_buf, ps, depth); /* account name unicode string */
676 smb_io_unistr2("unistr2", &(sam->uni_srv_desc), desc_buf, ps, depth); /* account description unicode string */
679 /*******************************************************************
680 makes a SAM_ENTRY2 structure.
681 ********************************************************************/
682 static void make_sam_entry2(SAM_ENTRY2 *sam, uint32 user_idx,
683 uint32 len_sam_name, uint32 len_sam_desc,
684 uint32 rid_user, uint16 acb_info)
686 if (sam == NULL) return;
688 DEBUG(5,("make_sam_entry2\n"));
690 sam->user_idx = user_idx;
691 sam->rid_user = rid_user;
692 sam->acb_info = acb_info;
695 make_uni_hdr(&(sam->hdr_srv_name), len_sam_name, len_sam_name, len_sam_name != 0);
696 make_uni_hdr(&(sam->hdr_srv_desc), len_sam_desc, len_sam_desc, len_sam_desc != 0);
699 /*******************************************************************
700 reads or writes a SAM_ENTRY2 structure.
701 ********************************************************************/
702 static void sam_io_sam_entry2(char *desc, SAM_ENTRY2 *sam, prs_struct *ps, int depth)
704 if (sam == NULL) return;
706 prs_debug(ps, depth, desc, "sam_io_sam_entry2");
711 prs_uint32("user_idx ", ps, depth, &(sam->user_idx ));
713 prs_uint32("rid_user ", ps, depth, &(sam->rid_user ));
714 prs_uint16("acb_info ", ps, depth, &(sam->acb_info ));
715 prs_uint16("pad ", ps, depth, &(sam->pad ));
717 smb_io_unihdr("unihdr", &(sam->hdr_srv_name), ps, depth); /* account name unicode string header */
718 smb_io_unihdr("unihdr", &(sam->hdr_srv_desc), ps, depth); /* account name unicode string header */
721 /*******************************************************************
722 reads or writes a SAM_STR3 structure.
723 ********************************************************************/
724 static void sam_io_sam_str3(char *desc, SAM_STR3 *sam, uint32 acct_buf, uint32 desc_buf, prs_struct *ps, int depth)
726 if (sam == NULL) return;
728 prs_debug(ps, depth, desc, "sam_io_sam_str3");
733 smb_io_unistr2("unistr2", &(sam->uni_grp_name), acct_buf, ps, depth); /* account name unicode string */
734 smb_io_unistr2("unistr2", &(sam->uni_grp_desc), desc_buf, ps, depth); /* account description unicode string */
737 /*******************************************************************
738 makes a SAM_ENTRY3 structure.
739 ********************************************************************/
740 static void make_sam_entry3(SAM_ENTRY3 *sam, uint32 grp_idx,
741 uint32 len_grp_name, uint32 len_grp_desc, uint32 rid_grp)
743 if (sam == NULL) return;
745 DEBUG(5,("make_sam_entry3\n"));
747 sam->grp_idx = grp_idx;
748 sam->rid_grp = rid_grp;
749 sam->attr = 0x07; /* group rid attributes - gets ignored by nt 4.0 */
751 make_uni_hdr(&(sam->hdr_grp_name), len_grp_name, len_grp_name, len_grp_name != 0);
752 make_uni_hdr(&(sam->hdr_grp_desc), len_grp_desc, len_grp_desc, len_grp_desc != 0);
755 /*******************************************************************
756 reads or writes a SAM_ENTRY3 structure.
757 ********************************************************************/
758 static void sam_io_sam_entry3(char *desc, SAM_ENTRY3 *sam, prs_struct *ps, int depth)
760 if (sam == NULL) return;
762 prs_debug(ps, depth, desc, "sam_io_sam_entry3");
767 prs_uint32("grp_idx", ps, depth, &(sam->grp_idx));
769 prs_uint32("rid_grp", ps, depth, &(sam->rid_grp));
770 prs_uint32("attr ", ps, depth, &(sam->attr ));
772 smb_io_unihdr("unihdr", &(sam->hdr_grp_name), ps, depth); /* account name unicode string header */
773 smb_io_unihdr("unihdr", &(sam->hdr_grp_desc), ps, depth); /* account name unicode string header */
776 /*******************************************************************
777 makes a SAM_ENTRY structure.
778 ********************************************************************/
779 static void make_sam_entry(SAM_ENTRY *sam, uint32 len_sam_name, uint32 rid)
781 if (sam == NULL) return;
783 DEBUG(5,("make_sam_entry\n"));
786 make_uni_hdr(&(sam->hdr_name), len_sam_name, len_sam_name, len_sam_name != 0);
789 /*******************************************************************
790 reads or writes a SAM_ENTRY structure.
791 ********************************************************************/
792 static void sam_io_sam_entry(char *desc, SAM_ENTRY *sam, prs_struct *ps, int depth)
794 if (sam == NULL) return;
796 prs_debug(ps, depth, desc, "sam_io_sam_entry");
800 prs_uint32("rid", ps, depth, &(sam->rid ));
801 smb_io_unihdr("unihdr", &(sam->hdr_name), ps, depth); /* account name unicode string header */
805 /*******************************************************************
806 makes a SAMR_Q_ENUM_DOM_USERS structure.
807 ********************************************************************/
808 void make_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS *q_e, POLICY_HND *pol,
809 uint16 req_num_entries, uint16 unk_0,
810 uint16 acb_mask, uint16 unk_1, uint32 size)
812 if (q_e == NULL || pol == NULL) return;
814 DEBUG(5,("make_samr_q_enum_dom_users\n"));
816 memcpy(&(q_e->pol), pol, sizeof(*pol));
818 q_e->req_num_entries = req_num_entries; /* zero indicates lots */
819 q_e->unknown_0 = unk_0; /* this gets returned in the response */
820 q_e->acb_mask = acb_mask;
821 q_e->unknown_1 = unk_1;
822 q_e->max_size = size;
825 /*******************************************************************
826 reads or writes a structure.
827 ********************************************************************/
828 void samr_io_q_enum_dom_users(char *desc, SAMR_Q_ENUM_DOM_USERS *q_e, prs_struct *ps, int depth)
830 if (q_e == NULL) return;
832 prs_debug(ps, depth, desc, "samr_io_q_enum_dom_users");
837 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
840 prs_uint16("req_num_entries", ps, depth, &(q_e->req_num_entries));
841 prs_uint16("unknown_0 ", ps, depth, &(q_e->unknown_0 ));
843 prs_uint16("acb_mask ", ps, depth, &(q_e->acb_mask ));
844 prs_uint16("unknown_1 ", ps, depth, &(q_e->unknown_1 ));
846 prs_uint32("max_size ", ps, depth, &(q_e->max_size ));
852 /*******************************************************************
853 makes a SAMR_R_ENUM_DOM_USERS structure.
854 ********************************************************************/
855 void make_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS *r_u,
856 uint16 total_num_entries, uint16 unk_0,
857 uint32 num_sam_entries, SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES], uint32 status)
861 if (r_u == NULL) return;
863 DEBUG(5,("make_samr_r_enum_dom_users\n"));
865 if (num_sam_entries >= MAX_SAM_ENTRIES)
867 num_sam_entries = MAX_SAM_ENTRIES;
868 DEBUG(5,("limiting number of entries to %d\n",
872 r_u->total_num_entries = total_num_entries;
873 r_u->unknown_0 = unk_0;
875 if (total_num_entries > 0)
877 r_u->ptr_entries1 = 1;
878 r_u->ptr_entries2 = 1;
879 r_u->num_entries2 = num_sam_entries;
880 r_u->num_entries3 = num_sam_entries;
882 SMB_ASSERT_ARRAY(r_u->sam, num_sam_entries);
883 SMB_ASSERT_ARRAY(r_u->uni_acct_name, num_sam_entries);
885 for (i = 0; i < num_sam_entries; i++)
887 make_sam_entry(&(r_u->sam[i]),
888 pass[i].uni_user_name.uni_str_len,
891 copy_unistr2(&(r_u->uni_acct_name[i]), &(pass[i].uni_user_name));
894 r_u->num_entries4 = num_sam_entries;
898 r_u->ptr_entries1 = 0;
899 r_u->num_entries2 = num_sam_entries;
900 r_u->ptr_entries2 = 1;
903 r_u->status = status;
906 /*******************************************************************
907 reads or writes a structure.
908 ********************************************************************/
909 void samr_io_r_enum_dom_users(char *desc, SAMR_R_ENUM_DOM_USERS *r_u, prs_struct *ps, int depth)
913 if (r_u == NULL) return;
915 prs_debug(ps, depth, desc, "samr_io_r_enum_dom_users");
920 prs_uint16("total_num_entries", ps, depth, &(r_u->total_num_entries));
921 prs_uint16("unknown_0 ", ps, depth, &(r_u->unknown_0 ));
922 prs_uint32("ptr_entries1", ps, depth, &(r_u->ptr_entries1));
924 if (r_u->total_num_entries != 0 && r_u->ptr_entries1 != 0)
926 prs_uint32("num_entries2", ps, depth, &(r_u->num_entries2));
927 prs_uint32("ptr_entries2", ps, depth, &(r_u->ptr_entries2));
928 prs_uint32("num_entries3", ps, depth, &(r_u->num_entries3));
930 SMB_ASSERT_ARRAY(r_u->sam, r_u->num_entries2);
932 for (i = 0; i < r_u->num_entries2; i++)
935 sam_io_sam_entry("", &(r_u->sam[i]), ps, depth);
938 SMB_ASSERT_ARRAY(r_u->uni_acct_name, r_u->num_entries2);
940 for (i = 0; i < r_u->num_entries2; i++)
943 smb_io_unistr2("", &(r_u->uni_acct_name[i]), r_u->sam[i].hdr_name.buffer, ps, depth);
948 prs_uint32("num_entries4", ps, depth, &(r_u->num_entries4));
951 prs_uint32("status", ps, depth, &(r_u->status));
954 /*******************************************************************
955 makes a SAMR_Q_QUERY_DISPINFO structure.
956 ********************************************************************/
957 void make_samr_q_query_dispinfo(SAMR_Q_QUERY_DISPINFO *q_e, POLICY_HND *pol,
958 uint16 switch_level, uint32 start_idx, uint32 size)
960 if (q_e == NULL || pol == NULL) return;
962 DEBUG(5,("make_samr_q_query_dispinfo\n"));
964 memcpy(&(q_e->pol), pol, sizeof(*pol));
966 q_e->switch_level = switch_level;
969 q_e->start_idx = start_idx;
970 q_e->unknown_1 = 0x000007d0;
971 q_e->max_size = size;
974 /*******************************************************************
975 reads or writes a structure.
976 ********************************************************************/
977 void samr_io_q_query_dispinfo(char *desc, SAMR_Q_QUERY_DISPINFO *q_e, prs_struct *ps, int depth)
979 if (q_e == NULL) return;
981 prs_debug(ps, depth, desc, "samr_io_q_query_dispinfo");
986 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
989 prs_uint16("switch_level", ps, depth, &(q_e->switch_level));
990 prs_uint16("unknown_0 ", ps, depth, &(q_e->unknown_0 ));
991 prs_uint32("start_idx ", ps, depth, &(q_e->start_idx ));
992 prs_uint32("unknown_1 ", ps, depth, &(q_e->unknown_1 ));
993 prs_uint32("max_size ", ps, depth, &(q_e->max_size ));
999 /*******************************************************************
1000 makes a SAM_INFO_2 structure.
1001 ********************************************************************/
1002 void make_sam_info_2(SAM_INFO_2 *sam, uint32 acb_mask,
1003 uint32 start_idx, uint32 num_sam_entries,
1004 SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES])
1009 if (sam == NULL) return;
1011 DEBUG(5,("make_sam_info_2\n"));
1013 if (num_sam_entries >= MAX_SAM_ENTRIES)
1015 num_sam_entries = MAX_SAM_ENTRIES;
1016 DEBUG(5,("limiting number of entries to %d\n",
1020 for (i = start_idx, entries_added = 0; i < num_sam_entries; i++)
1022 if (IS_BITS_SET_ALL(pass[i].acb_info, acb_mask))
1024 make_sam_entry2(&(sam->sam[entries_added]),
1025 start_idx + entries_added + 1,
1026 pass[i].uni_user_name.uni_str_len,
1027 pass[i].uni_acct_desc.uni_str_len,
1031 copy_unistr2(&(sam->str[entries_added].uni_srv_name), &(pass[i].uni_user_name));
1032 copy_unistr2(&(sam->str[entries_added].uni_srv_desc), &(pass[i].uni_acct_desc));
1037 sam->num_entries = entries_added;
1038 sam->ptr_entries = 1;
1039 sam->num_entries2 = entries_added;
1043 /*******************************************************************
1044 reads or writes a structure.
1045 ********************************************************************/
1046 static void sam_io_sam_info_2(char *desc, SAM_INFO_2 *sam, prs_struct *ps, int depth)
1050 if (sam == NULL) return;
1052 prs_debug(ps, depth, desc, "sam_io_sam_info_2");
1057 prs_uint32("num_entries ", ps, depth, &(sam->num_entries ));
1058 prs_uint32("ptr_entries ", ps, depth, &(sam->ptr_entries ));
1060 prs_uint32("num_entries2 ", ps, depth, &(sam->num_entries2 ));
1062 SMB_ASSERT_ARRAY(sam->sam, sam->num_entries);
1064 for (i = 0; i < sam->num_entries; i++)
1067 sam_io_sam_entry2("", &(sam->sam[i]), ps, depth);
1070 for (i = 0; i < sam->num_entries; i++)
1073 sam_io_sam_str2 ("", &(sam->str[i]),
1074 sam->sam[i].hdr_srv_name.buffer,
1075 sam->sam[i].hdr_srv_desc.buffer,
1081 /*******************************************************************
1082 makes a SAM_INFO_1 structure.
1083 ********************************************************************/
1084 void make_sam_info_1(SAM_INFO_1 *sam, uint32 acb_mask,
1085 uint32 start_idx, uint32 num_sam_entries,
1086 SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES])
1091 if (sam == NULL) return;
1093 DEBUG(5,("make_sam_info_1\n"));
1095 if (num_sam_entries >= MAX_SAM_ENTRIES)
1097 num_sam_entries = MAX_SAM_ENTRIES;
1098 DEBUG(5,("limiting number of entries to %d\n",
1102 for (i = start_idx, entries_added = 0; i < num_sam_entries; i++)
1104 if (IS_BITS_SET_ALL(pass[i].acb_info, acb_mask))
1106 make_sam_entry1(&(sam->sam[entries_added]),
1107 start_idx + entries_added + 1,
1108 pass[i].uni_user_name.uni_str_len,
1109 pass[i].uni_full_name.uni_str_len,
1110 pass[i].uni_acct_desc.uni_str_len,
1114 copy_unistr2(&(sam->str[entries_added].uni_acct_name), &(pass[i].uni_user_name));
1115 copy_unistr2(&(sam->str[entries_added].uni_full_name), &(pass[i].uni_full_name));
1116 copy_unistr2(&(sam->str[entries_added].uni_acct_desc), &(pass[i].uni_acct_desc));
1122 sam->num_entries = entries_added;
1123 sam->ptr_entries = 1;
1124 sam->num_entries2 = entries_added;
1128 /*******************************************************************
1129 reads or writes a structure.
1130 ********************************************************************/
1131 static void sam_io_sam_info_1(char *desc, SAM_INFO_1 *sam, prs_struct *ps, int depth)
1135 if (sam == NULL) return;
1137 prs_debug(ps, depth, desc, "sam_io_sam_info_1");
1142 prs_uint32("num_entries ", ps, depth, &(sam->num_entries ));
1143 prs_uint32("ptr_entries ", ps, depth, &(sam->ptr_entries ));
1145 prs_uint32("num_entries2 ", ps, depth, &(sam->num_entries2 ));
1147 SMB_ASSERT_ARRAY(sam->sam, sam->num_entries);
1149 for (i = 0; i < sam->num_entries; i++)
1152 sam_io_sam_entry1("", &(sam->sam[i]), ps, depth);
1155 for (i = 0; i < sam->num_entries; i++)
1158 sam_io_sam_str1 ("", &(sam->str[i]),
1159 sam->sam[i].hdr_acct_name.buffer,
1160 sam->sam[i].hdr_user_name.buffer,
1161 sam->sam[i].hdr_user_desc.buffer,
1167 /*******************************************************************
1168 makes a SAMR_R_QUERY_DISPINFO structure.
1169 ********************************************************************/
1170 void make_samr_r_query_dispinfo(SAMR_R_QUERY_DISPINFO *r_u,
1171 uint16 switch_level, SAM_INFO_CTR *ctr, uint32 status)
1173 if (r_u == NULL) return;
1175 DEBUG(5,("make_samr_r_query_dispinfo\n"));
1179 r_u->unknown_0 = 0x0000001;
1180 r_u->unknown_1 = 0x0000001;
1184 r_u->unknown_0 = 0x0;
1185 r_u->unknown_1 = 0x0;
1188 r_u->switch_level = switch_level;
1190 r_u->status = status;
1194 /*******************************************************************
1195 reads or writes a structure.
1196 ********************************************************************/
1197 void samr_io_r_query_dispinfo(char *desc, SAMR_R_QUERY_DISPINFO *r_u, prs_struct *ps, int depth)
1199 if (r_u == NULL) return;
1201 prs_debug(ps, depth, desc, "samr_io_r_query_dispinfo");
1206 prs_uint32("unknown_0 ", ps, depth, &(r_u->unknown_0 ));
1207 prs_uint32("unknown_1 ", ps, depth, &(r_u->unknown_1 ));
1208 prs_uint16("switch_level ", ps, depth, &(r_u->switch_level ));
1212 switch (r_u->switch_level)
1216 sam_io_sam_info_1("users", r_u->ctr->sam.info1, ps, depth);
1221 sam_io_sam_info_2("servers", r_u->ctr->sam.info2, ps, depth);
1226 DEBUG(5,("samr_io_r_query_dispinfo: unknown switch value\n"));
1231 prs_uint32("status", ps, depth, &(r_u->status));
1235 /*******************************************************************
1236 makes a SAMR_Q_OPEN_GROUP structure.
1237 ********************************************************************/
1238 void make_samr_q_open_group(SAMR_Q_OPEN_GROUP *q_c,
1239 POLICY_HND *hnd, uint32 unk, uint32 rid)
1241 if (q_c == NULL || hnd == NULL) return;
1243 DEBUG(5,("make_samr_q_open_group\n"));
1245 memcpy(&(q_c->domain_pol), hnd, sizeof(q_c->domain_pol));
1247 q_c->rid_group = rid;
1250 /*******************************************************************
1251 reads or writes a structure.
1252 ********************************************************************/
1253 void samr_io_q_open_group(char *desc, SAMR_Q_OPEN_GROUP *q_u, prs_struct *ps, int depth)
1255 if (q_u == NULL) return;
1257 prs_debug(ps, depth, desc, "samr_io_q_open_group");
1262 smb_io_pol_hnd("domain_pol", &(q_u->domain_pol), ps, depth);
1264 prs_uint32("unknown ", ps, depth, &(q_u->unknown ));
1265 prs_uint32("rid_group", ps, depth, &(q_u->rid_group));
1268 /*******************************************************************
1269 reads or writes a structure.
1270 ********************************************************************/
1271 void samr_io_r_open_group(char *desc, SAMR_R_OPEN_GROUP *r_u, prs_struct *ps, int depth)
1273 if (r_u == NULL) return;
1275 prs_debug(ps, depth, desc, "samr_io_r_open_group");
1280 smb_io_pol_hnd("pol", &(r_u->pol), ps, depth);
1283 prs_uint32("status", ps, depth, &(r_u->status));
1287 /*******************************************************************
1288 makes a GROUP_INFO1 structure.
1289 ********************************************************************/
1290 void make_samr_group_info1(GROUP_INFO1 *gr1,
1291 char *acct_name, char *acct_desc)
1293 int desc_len = acct_desc != NULL ? strlen(acct_desc) : 0;
1294 int acct_len = acct_name != NULL ? strlen(acct_name) : 0;
1295 if (gr1 == NULL) return;
1297 DEBUG(5,("make_samr_group_info1\n"));
1299 make_uni_hdr(&(gr1->hdr_acct_name), acct_len , acct_len, acct_name ? 1 : 0);
1301 gr1->unknown_1 = 0x3;
1302 gr1->unknown_2 = 0x3;
1304 make_uni_hdr(&(gr1->hdr_acct_desc), desc_len , desc_len, acct_desc ? 1 : 0);
1306 make_unistr2(&(gr1->uni_acct_name), acct_name, acct_len);
1307 make_unistr2(&(gr1->uni_acct_desc), acct_desc, desc_len);
1311 /*******************************************************************
1312 reads or writes a structure.
1313 ********************************************************************/
1314 void samr_io_group_info1(char *desc, GROUP_INFO1 *gr1, prs_struct *ps, int depth)
1316 if (gr1 == NULL) return;
1318 prs_debug(ps, depth, desc, "samr_io_group_info1");
1323 smb_io_unihdr ("hdr_acct_name", &(gr1->hdr_acct_name) , ps, depth);
1325 prs_uint32("unknown_1", ps, depth, &(gr1->unknown_1));
1326 prs_uint32("unknown_2", ps, depth, &(gr1->unknown_2));
1328 smb_io_unihdr ("hdr_acct_desc", &(gr1->hdr_acct_desc) , ps, depth);
1330 smb_io_unistr2("uni_acct_name", &(gr1->uni_acct_name), gr1->hdr_acct_name.buffer, ps, depth);
1333 smb_io_unistr2("uni_acct_desc", &(gr1->uni_acct_desc), gr1->hdr_acct_desc.buffer, ps, depth);
1336 /*******************************************************************
1337 makes a GROUP_INFO4 structure.
1338 ********************************************************************/
1339 void make_samr_group_info4(GROUP_INFO4 *gr4, char *acct_desc)
1341 int acct_len = acct_desc != NULL ? strlen(acct_desc) : 0;
1342 if (gr4 == NULL) return;
1344 DEBUG(5,("make_samr_group_info4\n"));
1346 make_uni_hdr(&(gr4->hdr_acct_desc), acct_len , acct_len, acct_desc ? 1 : 0);
1347 make_unistr2(&(gr4->uni_acct_desc), acct_desc, acct_len);
1351 /*******************************************************************
1352 reads or writes a structure.
1353 ********************************************************************/
1354 void samr_io_group_info4(char *desc, GROUP_INFO4 *gr4, prs_struct *ps, int depth)
1356 if (gr4 == NULL) return;
1358 prs_debug(ps, depth, desc, "samr_io_group_info4");
1363 smb_io_unihdr ("hdr_acct_desc", &(gr4->hdr_acct_desc) , ps, depth);
1364 smb_io_unistr2("uni_acct_desc", &(gr4->uni_acct_desc), gr4->hdr_acct_desc.buffer, ps, depth);
1367 /*******************************************************************
1368 reads or writes a structure.
1369 ********************************************************************/
1370 void samr_group_info_ctr(char *desc, GROUP_INFO_CTR *ctr, prs_struct *ps, int depth)
1372 if (ctr == NULL) return;
1374 prs_debug(ps, depth, desc, "samr_group_info_ctr");
1377 prs_uint16("switch_value", ps, depth, &(ctr->switch_value));
1380 switch (ctr->switch_value)
1384 samr_io_group_info1("group_info1", &(ctr->group.info1), ps, depth);
1389 samr_io_group_info4("group_info4", &(ctr->group.info4), ps, depth);
1394 DEBUG(4,("samr_group_info_ctr: unsupported switch level\n"));
1403 /*******************************************************************
1404 makes a SAMR_Q_CREATE_DOM_GROUP structure.
1405 ********************************************************************/
1406 void make_samr_q_create_dom_group(SAMR_Q_CREATE_DOM_GROUP *q_e,
1410 int acct_len = acct_desc != NULL ? strlen(acct_desc) : 0;
1411 if (q_e == NULL || pol == NULL) return;
1413 DEBUG(5,("make_samr_q_create_dom_group\n"));
1415 memcpy(&(q_e->pol), pol, sizeof(*pol));
1417 make_uni_hdr(&(q_e->hdr_acct_desc), acct_len , acct_len, acct_desc ? 1 : 0);
1418 make_unistr2(&(q_e->uni_acct_desc), acct_desc, acct_len);
1420 q_e->unknown_1 = 0x0002;
1421 q_e->unknown_2 = 0x0001;
1425 /*******************************************************************
1426 reads or writes a structure.
1427 ********************************************************************/
1428 void samr_io_q_create_dom_group(char *desc, SAMR_Q_CREATE_DOM_GROUP *q_e, prs_struct *ps, int depth)
1430 if (q_e == NULL) return;
1432 prs_debug(ps, depth, desc, "samr_io_q_create_dom_group");
1437 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
1440 smb_io_unihdr ("hdr_acct_desc", &(q_e->hdr_acct_desc), ps, depth);
1441 smb_io_unistr2("uni_acct_desc", &(q_e->uni_acct_desc), q_e->hdr_acct_desc.buffer, ps, depth);
1444 prs_uint16("unknown_1", ps, depth, &(q_e->unknown_1));
1445 prs_uint16("unknown_2", ps, depth, &(q_e->unknown_2));
1449 /*******************************************************************
1450 makes a SAMR_R_CREATE_DOM_GROUP structure.
1451 ********************************************************************/
1452 void make_samr_r_create_dom_group(SAMR_R_CREATE_DOM_GROUP *r_u, POLICY_HND *pol,
1453 uint32 rid, uint32 status)
1455 if (r_u == NULL) return;
1457 DEBUG(5,("make_samr_r_create_dom_group\n"));
1459 memcpy(&(r_u->pol), pol, sizeof(*pol));
1462 r_u->status = status;
1466 /*******************************************************************
1467 reads or writes a structure.
1468 ********************************************************************/
1469 void samr_io_r_create_dom_group(char *desc, SAMR_R_CREATE_DOM_GROUP *r_u, prs_struct *ps, int depth)
1471 if (r_u == NULL) return;
1473 prs_debug(ps, depth, desc, "samr_io_r_create_dom_group");
1478 smb_io_pol_hnd("pol", &(r_u->pol), ps, depth);
1481 prs_uint32("rid ", ps, depth, &(r_u->rid ));
1482 prs_uint32("status", ps, depth, &(r_u->status));
1486 /*******************************************************************
1487 makes a SAMR_Q_ADD_GROUPMEM structure.
1488 ********************************************************************/
1489 void make_samr_q_add_groupmem(SAMR_Q_ADD_GROUPMEM *q_e,
1493 if (q_e == NULL || pol == NULL) return;
1495 DEBUG(5,("make_samr_q_add_groupmem\n"));
1497 memcpy(&(q_e->pol), pol, sizeof(*pol));
1500 q_e->unknown = 0x0005;
1504 /*******************************************************************
1505 reads or writes a structure.
1506 ********************************************************************/
1507 void samr_io_q_add_groupmem(char *desc, SAMR_Q_ADD_GROUPMEM *q_e, prs_struct *ps, int depth)
1509 if (q_e == NULL) return;
1511 prs_debug(ps, depth, desc, "samr_io_q_add_groupmem");
1516 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
1519 prs_uint32("rid ", ps, depth, &(q_e->rid));
1520 prs_uint32("unknown", ps, depth, &(q_e->unknown));
1524 /*******************************************************************
1525 makes a SAMR_R_ADD_GROUPMEM structure.
1526 ********************************************************************/
1527 void make_samr_r_add_groupmem(SAMR_R_ADD_GROUPMEM *r_u, POLICY_HND *pol,
1530 if (r_u == NULL) return;
1532 DEBUG(5,("make_samr_r_add_groupmem\n"));
1534 r_u->status = status;
1538 /*******************************************************************
1539 reads or writes a structure.
1540 ********************************************************************/
1541 void samr_io_r_add_groupmem(char *desc, SAMR_R_ADD_GROUPMEM *r_u, prs_struct *ps, int depth)
1543 if (r_u == NULL) return;
1545 prs_debug(ps, depth, desc, "samr_io_r_add_groupmem");
1550 prs_uint32("status", ps, depth, &(r_u->status));
1554 /*******************************************************************
1555 makes a SAMR_Q_SET_GROUPINFO structure.
1556 ********************************************************************/
1557 void make_samr_q_set_groupinfo(SAMR_Q_SET_GROUPINFO *q_e,
1558 POLICY_HND *pol, GROUP_INFO_CTR *ctr)
1560 if (q_e == NULL || pol == NULL) return;
1562 DEBUG(5,("make_samr_q_set_groupinfo\n"));
1564 memcpy(&(q_e->pol), pol, sizeof(*pol));
1569 /*******************************************************************
1570 reads or writes a structure.
1571 ********************************************************************/
1572 void samr_io_q_set_groupinfo(char *desc, SAMR_Q_SET_GROUPINFO *q_e, prs_struct *ps, int depth)
1574 if (q_e == NULL) return;
1576 prs_debug(ps, depth, desc, "samr_io_q_set_groupinfo");
1581 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
1584 samr_group_info_ctr("ctr", q_e->ctr, ps, depth);
1588 /*******************************************************************
1589 makes a SAMR_R_SET_GROUPINFO structure.
1590 ********************************************************************/
1591 void make_samr_r_set_groupinfo(SAMR_R_SET_GROUPINFO *r_u,
1594 if (r_u == NULL) return;
1596 DEBUG(5,("make_samr_r_set_groupinfo\n"));
1598 r_u->status = status;
1602 /*******************************************************************
1603 reads or writes a structure.
1604 ********************************************************************/
1605 void samr_io_r_set_groupinfo(char *desc, SAMR_R_SET_GROUPINFO *r_u, prs_struct *ps, int depth)
1607 if (r_u == NULL) return;
1609 prs_debug(ps, depth, desc, "samr_io_r_set_groupinfo");
1614 prs_uint32("status", ps, depth, &(r_u->status));
1617 /*******************************************************************
1618 makes a SAMR_Q_QUERY_GROUPINFO structure.
1619 ********************************************************************/
1620 void make_samr_q_query_groupinfo(SAMR_Q_QUERY_GROUPINFO *q_e,
1622 uint16 switch_level)
1624 if (q_e == NULL || pol == NULL) return;
1626 DEBUG(5,("make_samr_q_query_groupinfo\n"));
1628 memcpy(&(q_e->pol), pol, sizeof(*pol));
1630 q_e->switch_level = switch_level;
1634 /*******************************************************************
1635 reads or writes a structure.
1636 ********************************************************************/
1637 void samr_io_q_query_groupinfo(char *desc, SAMR_Q_QUERY_GROUPINFO *q_e, prs_struct *ps, int depth)
1639 if (q_e == NULL) return;
1641 prs_debug(ps, depth, desc, "samr_io_q_query_groupinfo");
1646 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
1649 prs_uint16("switch_level", ps, depth, &(q_e->switch_level));
1653 /*******************************************************************
1654 makes a SAMR_R_QUERY_GROUPINFO structure.
1655 ********************************************************************/
1656 void make_samr_r_query_groupinfo(SAMR_R_QUERY_GROUPINFO *r_u, GROUP_INFO_CTR *ctr,
1659 if (r_u == NULL) return;
1661 DEBUG(5,("make_samr_r_query_groupinfo\n"));
1663 r_u->ptr = (status == 0x0 && ctr != NULL) ? 1 : 0;
1665 r_u->status = status;
1669 /*******************************************************************
1670 reads or writes a structure.
1671 ********************************************************************/
1672 void samr_io_r_query_groupinfo(char *desc, SAMR_R_QUERY_GROUPINFO *r_u, prs_struct *ps, int depth)
1674 if (r_u == NULL) return;
1676 prs_debug(ps, depth, desc, "samr_io_r_query_groupinfo");
1681 prs_uint32("ptr", ps, depth, &(r_u->ptr));
1685 samr_group_info_ctr("ctr", r_u->ctr, ps, depth);
1688 prs_uint32("status", ps, depth, &(r_u->status));
1692 /*******************************************************************
1693 makes a SAMR_Q_QUERY_GROUPMEM structure.
1694 ********************************************************************/
1695 void make_samr_q_query_groupmem(SAMR_Q_QUERY_GROUPMEM *q_c, POLICY_HND *hnd)
1697 if (q_c == NULL || hnd == NULL) return;
1699 DEBUG(5,("make_samr_q_query_groupmem\n"));
1701 memcpy(&(q_c->group_pol), hnd, sizeof(q_c->group_pol));
1704 /*******************************************************************
1705 reads or writes a structure.
1706 ********************************************************************/
1707 void samr_io_q_query_groupmem(char *desc, SAMR_Q_QUERY_GROUPMEM *q_u, prs_struct *ps, int depth)
1709 if (q_u == NULL) return;
1711 prs_debug(ps, depth, desc, "samr_io_q_query_groupmem");
1716 smb_io_pol_hnd("group_pol", &(q_u->group_pol), ps, depth);
1719 /*******************************************************************
1720 makes a SAMR_R_QUERY_GROUPMEM structure.
1721 ********************************************************************/
1722 void make_samr_r_query_groupmem(SAMR_R_QUERY_GROUPMEM *r_u,
1723 uint32 num_entries, uint32 *rid, uint32 *attr, uint32 status)
1725 if (r_u == NULL) return;
1727 DEBUG(5,("make_samr_r_query_groupmem\n"));
1731 r_u->ptr = (num_entries != 0) ? 1 : 0;
1732 r_u->num_entries = num_entries;
1734 r_u->ptr_attrs = attr != NULL ? 1 : 0;
1735 r_u->ptr_rids = rid != NULL ? 1 : 0;
1737 r_u->num_rids = num_entries;
1740 r_u->num_attrs = num_entries;
1746 r_u->num_entries = 0;
1749 r_u->status = status;
1752 /*******************************************************************
1753 reads or writes a structure.
1754 ********************************************************************/
1755 void samr_io_r_query_groupmem(char *desc, SAMR_R_QUERY_GROUPMEM *r_u, prs_struct *ps, int depth)
1759 if (r_u == NULL) return;
1761 prs_debug(ps, depth, desc, "samr_io_r_query_groupmem");
1766 prs_uint32("ptr", ps, depth, &(r_u->ptr));
1767 prs_uint32("num_entries ", ps, depth, &(r_u->num_entries));
1771 prs_uint32("ptr_rids ", ps, depth, &(r_u->ptr_rids ));
1772 prs_uint32("ptr_attrs", ps, depth, &(r_u->ptr_attrs));
1774 if (r_u->ptr_rids != 0)
1776 prs_uint32("num_rids", ps, depth, &(r_u->num_rids));
1777 for (i = 0; i < r_u->num_rids; i++)
1780 prs_uint32("", ps, depth, &(r_u->rid[i]));
1784 if (r_u->ptr_attrs != 0)
1786 prs_uint32("num_attrs", ps, depth, &(r_u->num_attrs));
1787 for (i = 0; i < r_u->num_attrs; i++)
1790 prs_uint32("", ps, depth, &(r_u->attr[i]));
1795 prs_uint32("status", ps, depth, &(r_u->status));
1799 /*******************************************************************
1800 makes a SAMR_Q_ENUM_DOM_GROUPS structure.
1801 ********************************************************************/
1802 void make_samr_q_enum_dom_groups(SAMR_Q_ENUM_DOM_GROUPS *q_e, POLICY_HND *pol,
1803 uint16 switch_level, uint32 start_idx, uint32 size)
1805 if (q_e == NULL || pol == NULL) return;
1807 DEBUG(5,("make_samr_q_enum_dom_groups\n"));
1809 memcpy(&(q_e->pol), pol, sizeof(*pol));
1811 q_e->switch_level = switch_level;
1814 q_e->start_idx = start_idx;
1815 q_e->unknown_1 = 0x000007d0;
1816 q_e->max_size = size;
1820 /*******************************************************************
1821 reads or writes a structure.
1822 ********************************************************************/
1823 void samr_io_q_enum_dom_groups(char *desc, SAMR_Q_ENUM_DOM_GROUPS *q_e, prs_struct *ps, int depth)
1825 if (q_e == NULL) return;
1827 prs_debug(ps, depth, desc, "samr_io_q_enum_dom_groups");
1832 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
1835 prs_uint16("switch_level", ps, depth, &(q_e->switch_level));
1836 prs_uint16("unknown_0 ", ps, depth, &(q_e->unknown_0 ));
1837 prs_uint32("start_idx ", ps, depth, &(q_e->start_idx ));
1838 prs_uint32("unknown_1 ", ps, depth, &(q_e->unknown_1 ));
1839 prs_uint32("max_size ", ps, depth, &(q_e->max_size ));
1845 /*******************************************************************
1846 makes a SAMR_R_ENUM_DOM_GROUPS structure.
1847 ********************************************************************/
1848 void make_samr_r_enum_dom_groups(SAMR_R_ENUM_DOM_GROUPS *r_u,
1849 uint32 start_idx, uint32 num_sam_entries,
1856 if (r_u == NULL) return;
1858 DEBUG(5,("make_samr_r_enum_dom_groups\n"));
1860 if (num_sam_entries >= MAX_SAM_ENTRIES)
1862 num_sam_entries = MAX_SAM_ENTRIES;
1863 DEBUG(5,("limiting number of entries to %d\n",
1869 for (i = start_idx, entries_added = 0; i < num_sam_entries; i++)
1871 int acct_name_len = strlen(grp[i].name);
1872 int acct_desc_len = strlen(grp[i].comment);
1874 make_sam_entry3(&(r_u->sam[entries_added]),
1875 start_idx + entries_added + 1,
1880 make_unistr2(&(r_u->str[entries_added].uni_grp_name), grp[i].name , acct_name_len);
1881 make_unistr2(&(r_u->str[entries_added].uni_grp_desc), grp[i].comment, acct_desc_len);
1886 if (entries_added > 0)
1888 r_u->unknown_0 = 0x0000492;
1889 r_u->unknown_1 = 0x000049a;
1893 r_u->unknown_0 = 0x0;
1894 r_u->unknown_1 = 0x0;
1896 r_u->switch_level = 3;
1897 r_u->num_entries = entries_added;
1898 r_u->ptr_entries = 1;
1899 r_u->num_entries2 = entries_added;
1903 r_u->switch_level = 0;
1906 r_u->status = status;
1909 /*******************************************************************
1910 reads or writes a structure.
1911 ********************************************************************/
1912 void samr_io_r_enum_dom_groups(char *desc, SAMR_R_ENUM_DOM_GROUPS *r_u, prs_struct *ps, int depth)
1916 if (r_u == NULL) return;
1918 prs_debug(ps, depth, desc, "samr_io_r_enum_dom_groups");
1923 prs_uint32("unknown_0 ", ps, depth, &(r_u->unknown_0 ));
1924 prs_uint32("unknown_1 ", ps, depth, &(r_u->unknown_1 ));
1925 prs_uint32("switch_level ", ps, depth, &(r_u->switch_level ));
1927 if (r_u->switch_level != 0)
1929 prs_uint32("num_entries ", ps, depth, &(r_u->num_entries ));
1930 prs_uint32("ptr_entries ", ps, depth, &(r_u->ptr_entries ));
1932 prs_uint32("num_entries2 ", ps, depth, &(r_u->num_entries2 ));
1934 SMB_ASSERT_ARRAY(r_u->sam, r_u->num_entries);
1936 for (i = 0; i < r_u->num_entries; i++)
1939 sam_io_sam_entry3("", &(r_u->sam[i]), ps, depth);
1942 for (i = 0; i < r_u->num_entries; i++)
1945 sam_io_sam_str3 ("", &(r_u->str[i]),
1946 r_u->sam[i].hdr_grp_name.buffer,
1947 r_u->sam[i].hdr_grp_desc.buffer,
1952 prs_uint32("status", ps, depth, &(r_u->status));
1955 /*******************************************************************
1956 makes a SAMR_Q_QUERY_USERGROUPS structure.
1957 ********************************************************************/
1958 void make_samr_q_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u,
1961 if (q_u == NULL || hnd == NULL) return;
1963 DEBUG(5,("make_samr_q_query_usergroups\n"));
1965 memcpy(&(q_u->pol), hnd, sizeof(q_u->pol));
1969 /*******************************************************************
1970 reads or writes a structure.
1971 ********************************************************************/
1972 void samr_io_q_query_usergroups(char *desc, SAMR_Q_QUERY_USERGROUPS *q_u, prs_struct *ps, int depth)
1974 if (q_u == NULL) return;
1976 prs_debug(ps, depth, desc, "samr_io_q_query_usergroups");
1981 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
1985 /*******************************************************************
1986 makes a SAMR_R_QUERY_USERGROUPS structure.
1987 ********************************************************************/
1988 void make_samr_r_query_usergroups(SAMR_R_QUERY_USERGROUPS *r_u,
1989 uint32 num_gids, DOM_GID *gid, uint32 status)
1991 if (r_u == NULL) return;
1993 DEBUG(5,("make_samr_r_query_usergroups\n"));
1998 r_u->num_entries = num_gids;
1999 r_u->ptr_1 = (num_gids != 0) ? 1 : 0;
2000 r_u->num_entries2 = num_gids;
2007 r_u->num_entries = 0;
2011 r_u->status = status;
2014 /*******************************************************************
2015 reads or writes a structure.
2016 ********************************************************************/
2017 void samr_io_r_query_usergroups(char *desc, SAMR_R_QUERY_USERGROUPS *r_u, prs_struct *ps, int depth)
2020 if (r_u == NULL) return;
2022 prs_debug(ps, depth, desc, "samr_io_r_query_usergroups");
2027 prs_uint32("ptr_0 ", ps, depth, &(r_u->ptr_0 ));
2029 if (r_u->ptr_0 != 0)
2031 prs_uint32("num_entries ", ps, depth, &(r_u->num_entries));
2032 prs_uint32("ptr_1 ", ps, depth, &(r_u->ptr_1 ));
2034 if (r_u->num_entries != 0)
2036 prs_uint32("num_entries2", ps, depth, &(r_u->num_entries2));
2038 for (i = 0; i < r_u->num_entries2; i++)
2041 smb_io_gid("", &(r_u->gid[i]), ps, depth);
2045 prs_uint32("status", ps, depth, &(r_u->status));
2049 /*******************************************************************
2050 makes a SAMR_Q_ENUM_DOM_ALIASES structure.
2051 ********************************************************************/
2052 void make_samr_q_enum_dom_aliases(SAMR_Q_ENUM_DOM_ALIASES *q_e, POLICY_HND *pol, uint32 size)
2054 if (q_e == NULL || pol == NULL) return;
2056 DEBUG(5,("make_samr_q_enum_dom_aliases\n"));
2058 memcpy(&(q_e->pol), pol, sizeof(*pol));
2061 q_e->max_size = size;
2065 /*******************************************************************
2066 reads or writes a structure.
2067 ********************************************************************/
2068 void samr_io_q_enum_dom_aliases(char *desc, SAMR_Q_ENUM_DOM_ALIASES *q_e, prs_struct *ps, int depth)
2070 if (q_e == NULL) return;
2072 prs_debug(ps, depth, desc, "samr_io_q_enum_dom_aliases");
2077 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
2080 prs_uint32("unknown_0", ps, depth, &(q_e->unknown_0));
2081 prs_uint32("max_size ", ps, depth, &(q_e->max_size ));
2087 /*******************************************************************
2088 makes a SAMR_R_ENUM_DOM_ALIASES structure.
2089 ********************************************************************/
2090 void make_samr_r_enum_dom_aliases(SAMR_R_ENUM_DOM_ALIASES *r_u,
2091 uint32 num_sam_entries, LOCAL_GRP *alss,
2096 if (r_u == NULL) return;
2098 DEBUG(5,("make_samr_r_enum_dom_aliases\n"));
2100 if (num_sam_entries >= MAX_SAM_ENTRIES)
2102 num_sam_entries = MAX_SAM_ENTRIES;
2103 DEBUG(5,("limiting number of entries to %d\n",
2107 r_u->num_entries = num_sam_entries;
2109 if (num_sam_entries > 0)
2111 r_u->ptr_entries = 1;
2112 r_u->num_entries2 = num_sam_entries;
2113 r_u->ptr_entries2 = 1;
2114 r_u->num_entries3 = num_sam_entries;
2116 SMB_ASSERT_ARRAY(r_u->sam, num_sam_entries);
2118 for (i = 0; i < num_sam_entries; i++)
2120 int acct_name_len = strlen(alss[i].name);
2122 make_sam_entry(&(r_u->sam[i]),
2126 make_unistr2(&(r_u->uni_grp_name[i]), alss[i].name , acct_name_len);
2129 r_u->num_entries4 = num_sam_entries;
2133 r_u->ptr_entries = 0;
2136 r_u->status = status;
2139 /*******************************************************************
2140 reads or writes a structure.
2141 ********************************************************************/
2142 void samr_io_r_enum_dom_aliases(char *desc, SAMR_R_ENUM_DOM_ALIASES *r_u, prs_struct *ps, int depth)
2146 if (r_u == NULL) return;
2148 prs_debug(ps, depth, desc, "samr_io_r_enum_dom_aliases");
2153 prs_uint32("num_entries", ps, depth, &(r_u->num_entries));
2154 prs_uint32("ptr_entries", ps, depth, &(r_u->ptr_entries));
2156 if (r_u->num_entries != 0 && r_u->ptr_entries != 0)
2158 prs_uint32("num_entries2", ps, depth, &(r_u->num_entries2));
2159 prs_uint32("ptr_entries2", ps, depth, &(r_u->ptr_entries2));
2160 prs_uint32("num_entries3", ps, depth, &(r_u->num_entries3));
2162 SMB_ASSERT_ARRAY(r_u->sam, r_u->num_entries);
2164 for (i = 0; i < r_u->num_entries; i++)
2166 sam_io_sam_entry("", &(r_u->sam[i]), ps, depth);
2169 for (i = 0; i < r_u->num_entries; i++)
2171 smb_io_unistr2("", &(r_u->uni_grp_name[i]), r_u->sam[i].hdr_name.buffer, ps, depth);
2176 prs_uint32("num_entries4", ps, depth, &(r_u->num_entries4));
2179 prs_uint32("status", ps, depth, &(r_u->status));
2183 /*******************************************************************
2184 makes a ALIAS_INFO3 structure.
2185 ********************************************************************/
2186 void make_samr_alias_info3(ALIAS_INFO3 *al3, char *acct_desc)
2188 int acct_len = acct_desc != NULL ? strlen(acct_desc) : 0;
2189 if (al3 == NULL) return;
2191 DEBUG(5,("make_samr_alias_info3\n"));
2193 make_uni_hdr(&(al3->hdr_acct_desc), acct_len , acct_len, acct_desc ? 1 : 0);
2194 make_unistr2(&(al3->uni_acct_desc), acct_desc, acct_len);
2198 /*******************************************************************
2199 reads or writes a structure.
2200 ********************************************************************/
2201 void samr_io_alias_info3(char *desc, ALIAS_INFO3 *al3, prs_struct *ps, int depth)
2203 if (al3 == NULL) return;
2205 prs_debug(ps, depth, desc, "samr_io_alias_info3");
2210 smb_io_unihdr ("hdr_acct_desc", &(al3->hdr_acct_desc) , ps, depth);
2211 smb_io_unistr2("uni_acct_desc", &(al3->uni_acct_desc), al3->hdr_acct_desc.buffer, ps, depth);
2214 /*******************************************************************
2215 reads or writes a structure.
2216 ********************************************************************/
2217 void samr_alias_info_ctr(char *desc, ALIAS_INFO_CTR *ctr, prs_struct *ps, int depth)
2219 if (ctr == NULL) return;
2221 prs_debug(ps, depth, desc, "samr_alias_info_ctr");
2224 prs_uint16("switch_value", ps, depth, &(ctr->switch_value));
2227 if (ctr->switch_value != 0)
2229 switch (ctr->switch_value)
2233 samr_io_alias_info3("alias_info3", &(ctr->alias.info3), ps, depth);
2238 DEBUG(4,("samr_alias_info_ctr: unsupported switch level\n"));
2248 /*******************************************************************
2249 makes a SAMR_Q_QUERY_ALIASINFO structure.
2250 ********************************************************************/
2251 void make_samr_q_query_aliasinfo(SAMR_Q_QUERY_ALIASINFO *q_e,
2253 uint16 switch_level)
2255 if (q_e == NULL || pol == NULL) return;
2257 DEBUG(5,("make_samr_q_query_aliasinfo\n"));
2259 memcpy(&(q_e->pol), pol, sizeof(*pol));
2261 q_e->switch_level = switch_level;
2265 /*******************************************************************
2266 reads or writes a structure.
2267 ********************************************************************/
2268 void samr_io_q_query_aliasinfo(char *desc, SAMR_Q_QUERY_ALIASINFO *q_e, prs_struct *ps, int depth)
2270 if (q_e == NULL) return;
2272 prs_debug(ps, depth, desc, "samr_io_q_query_aliasinfo");
2277 smb_io_pol_hnd("pol", &(q_e->pol), ps, depth);
2280 prs_uint16("switch_level", ps, depth, &(q_e->switch_level));
2284 /*******************************************************************
2285 makes a SAMR_R_QUERY_ALIASINFO structure.
2286 ********************************************************************/
2287 void make_samr_r_query_aliasinfo(SAMR_R_QUERY_ALIASINFO *r_u, ALIAS_INFO_CTR *ctr,
2290 if (r_u == NULL) return;
2292 DEBUG(5,("make_samr_r_query_aliasinfo\n"));
2294 r_u->ptr = (status == 0x0 && ctr != NULL) ? 1 : 0;
2296 r_u->status = status;
2300 /*******************************************************************
2301 reads or writes a structure.
2302 ********************************************************************/
2303 void samr_io_r_query_aliasinfo(char *desc, SAMR_R_QUERY_ALIASINFO *r_u, prs_struct *ps, int depth)
2305 if (r_u == NULL) return;
2307 prs_debug(ps, depth, desc, "samr_io_r_query_aliasinfo");
2312 prs_uint32("ptr", ps, depth, &(r_u->ptr));
2316 samr_alias_info_ctr("ctr", r_u->ctr, ps, depth);
2319 prs_uint32("status", ps, depth, &(r_u->status));
2323 /*******************************************************************
2324 makes a SAMR_Q_SET_ALIASINFO structure.
2325 ********************************************************************/
2326 void make_samr_q_set_aliasinfo(SAMR_Q_SET_ALIASINFO *q_u, POLICY_HND *hnd,
2327 ALIAS_INFO_CTR *ctr)
2329 if (q_u == NULL) return;
2331 DEBUG(5,("make_samr_q_set_aliasinfo\n"));
2333 memcpy(&(q_u->alias_pol), hnd, sizeof(q_u->alias_pol));
2338 /*******************************************************************
2339 reads or writes a structure.
2340 ********************************************************************/
2341 void samr_io_q_set_aliasinfo(char *desc, SAMR_Q_SET_ALIASINFO *q_u, prs_struct *ps, int depth)
2343 if (q_u == NULL) return;
2345 prs_debug(ps, depth, desc, "samr_io_q_set_aliasinfo");
2350 smb_io_pol_hnd("alias_pol", &(q_u->alias_pol), ps, depth);
2351 samr_alias_info_ctr("ctr", q_u->ctr, ps, depth);
2354 /*******************************************************************
2355 reads or writes a structure.
2356 ********************************************************************/
2357 void samr_io_r_set_aliasinfo(char *desc, SAMR_R_SET_ALIASINFO *r_u, prs_struct *ps, int depth)
2359 if (r_u == NULL) return;
2361 prs_debug(ps, depth, desc, "samr_io_r_set_aliasinfo");
2365 prs_uint32("status", ps, depth, &(r_u->status));
2370 /*******************************************************************
2371 makes a SAMR_Q_QUERY_USERALIASES structure.
2372 ********************************************************************/
2373 void make_samr_q_query_useraliases(SAMR_Q_QUERY_USERALIASES *q_u,
2377 if (q_u == NULL || hnd == NULL) return;
2379 DEBUG(5,("make_samr_q_query_useraliases\n"));
2381 memcpy(&(q_u->pol), hnd, sizeof(q_u->pol));
2388 q_u->ptr_sid[0] = 1;
2389 make_dom_sid2(&q_u->sid[0], sid);
2393 /*******************************************************************
2394 reads or writes a SAMR_Q_QUERY_USERALIASES structure.
2395 ********************************************************************/
2396 void samr_io_q_query_useraliases(char *desc, SAMR_Q_QUERY_USERALIASES *q_u, prs_struct *ps, int depth)
2401 if (q_u == NULL) return;
2403 prs_debug(ps, depth, desc, "samr_io_q_query_useraliases");
2408 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
2411 prs_uint32("num_sids1", ps, depth, &(q_u->num_sids1));
2412 prs_uint32("ptr ", ps, depth, &(q_u->ptr ));
2413 prs_uint32("num_sids2", ps, depth, &(q_u->num_sids2));
2415 SMB_ASSERT_ARRAY(q_u->ptr_sid, q_u->num_sids2);
2417 for (i = 0; i < q_u->num_sids2; i++)
2419 slprintf(tmp, sizeof(tmp) - 1, "ptr[%02d]", i);
2420 prs_uint32(tmp, ps, depth, &(q_u->ptr_sid[i]));
2423 for (i = 0; i < q_u->num_sids2; i++)
2425 if (q_u->ptr_sid[i] != 0)
2428 slprintf(tmp, sizeof(tmp)-1, "sid[%02d]", i);
2429 smb_io_dom_sid2(tmp, &(q_u->sid[i]), ps, depth);
2437 /*******************************************************************
2438 makes a SAMR_R_QUERY_USERALIASES structure.
2439 ********************************************************************/
2440 void make_samr_r_query_useraliases(SAMR_R_QUERY_USERALIASES *r_u,
2441 uint32 num_rids, uint32 *rid, uint32 status)
2443 if (r_u == NULL) return;
2445 DEBUG(5,("make_samr_r_query_useraliases\n"));
2449 r_u->num_entries = num_rids;
2451 r_u->num_entries2 = num_rids;
2457 r_u->num_entries = 0;
2459 r_u->num_entries2 = 0;
2462 r_u->status = status;
2465 /*******************************************************************
2466 reads or writes a structure.
2467 ********************************************************************/
2468 void samr_io_r_query_useraliases(char *desc, SAMR_R_QUERY_USERALIASES *r_u, prs_struct *ps, int depth)
2472 if (r_u == NULL) return;
2474 prs_debug(ps, depth, desc, "samr_io_r_query_useraliases");
2479 prs_uint32("num_entries", ps, depth, &(r_u->num_entries));
2480 prs_uint32("ptr ", ps, depth, &(r_u->ptr ));
2481 prs_uint32("num_entries2", ps, depth, &(r_u->num_entries2));
2483 if (r_u->num_entries != 0)
2485 for (i = 0; i < r_u->num_entries2; i++)
2487 slprintf(tmp, sizeof(tmp)-1, "rid[%02d]", i);
2488 prs_uint32(tmp, ps, depth, &(r_u->rid[i]));
2492 prs_uint32("status", ps, depth, &(r_u->status));
2495 /*******************************************************************
2496 makes a SAMR_Q_OPEN_ALIAS structure.
2497 ********************************************************************/
2498 void make_samr_q_open_alias(SAMR_Q_OPEN_ALIAS *q_u, POLICY_HND *pol,
2499 uint32 unknown_0, uint32 rid)
2501 if (q_u == NULL) return;
2503 DEBUG(5,("make_samr_q_open_alias\n"));
2505 memcpy(&(q_u->dom_pol), pol, sizeof(q_u->dom_pol));
2507 /* example values: 0x0000 0008 */
2508 q_u->unknown_0 = unknown_0;
2510 q_u->rid_alias = rid;
2513 /*******************************************************************
2514 reads or writes a structure.
2515 ********************************************************************/
2516 void samr_io_q_open_alias(char *desc, SAMR_Q_OPEN_ALIAS *q_u, prs_struct *ps, int depth)
2518 if (q_u == NULL) return;
2520 prs_debug(ps, depth, desc, "samr_io_q_open_alias");
2525 smb_io_pol_hnd("dom_pol", &(q_u->dom_pol), ps, depth);
2527 prs_uint32("unknown_0", ps, depth, &(q_u->unknown_0));
2528 prs_uint32("rid_alias", ps, depth, &(q_u->rid_alias));
2531 /*******************************************************************
2532 reads or writes a structure.
2533 ********************************************************************/
2534 void samr_io_r_open_alias(char *desc, SAMR_R_OPEN_ALIAS *r_u, prs_struct *ps, int depth)
2536 if (r_u == NULL) return;
2538 prs_debug(ps, depth, desc, "samr_io_r_open_alias");
2543 smb_io_pol_hnd("pol", &(r_u->pol), ps, depth);
2546 prs_uint32("status", ps, depth, &(r_u->status));
2549 /*******************************************************************
2550 makes a SAMR_Q_UNKNOWN_12 structure.
2551 ********************************************************************/
2552 void make_samr_q_unknown_12(SAMR_Q_UNKNOWN_12 *q_u,
2553 POLICY_HND *pol, uint32 rid,
2554 uint32 num_gids, uint32 *gid)
2557 if (q_u == NULL) return;
2559 DEBUG(5,("make_samr_r_unknwon_12\n"));
2561 memcpy(&(q_u->pol), pol, sizeof(*pol));
2563 q_u->num_gids1 = num_gids;
2566 q_u->num_gids2 = num_gids;
2568 for (i = 0; i < num_gids; i++)
2570 q_u->gid[i] = gid[i];
2574 /*******************************************************************
2575 reads or writes a structure.
2576 ********************************************************************/
2577 void samr_io_q_unknown_12(char *desc, SAMR_Q_UNKNOWN_12 *q_u, prs_struct *ps, int depth)
2582 if (q_u == NULL) return;
2584 prs_debug(ps, depth, desc, "samr_io_q_unknown_12");
2589 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
2592 prs_uint32("num_gids1", ps, depth, &(q_u->num_gids1));
2593 prs_uint32("rid ", ps, depth, &(q_u->rid ));
2594 prs_uint32("ptr ", ps, depth, &(q_u->ptr ));
2595 prs_uint32("num_gids2", ps, depth, &(q_u->num_gids2));
2597 SMB_ASSERT_ARRAY(q_u->gid, q_u->num_gids2);
2599 for (i = 0; i < q_u->num_gids2; i++)
2602 slprintf(tmp, sizeof(tmp) - 1, "gid[%02d] ", i);
2603 prs_uint32(tmp, ps, depth, &(q_u->gid[i]));
2610 /*******************************************************************
2611 makes a SAMR_R_UNKNOWN_12 structure.
2612 ********************************************************************/
2613 void make_samr_r_unknown_12(SAMR_R_UNKNOWN_12 *r_u,
2614 uint32 num_names, fstring *name, uint8 *type,
2618 if (r_u == NULL || name == NULL || type == NULL) return;
2620 DEBUG(5,("make_samr_r_unknown_12\n"));
2624 r_u->num_names1 = num_names;
2626 r_u->num_names2 = num_names;
2628 r_u->num_types1 = num_names;
2630 r_u->num_types2 = num_names;
2632 SMB_ASSERT_ARRAY(r_u->hdr_name, num_names);
2634 for (i = 0; i < num_names; i++)
2636 int len = name[i] != NULL ? strlen(name[i]) : 0;
2637 make_uni_hdr(&(r_u->hdr_name[i]), len , len, name[i] ? 1 : 0);
2638 make_unistr2(&(r_u->uni_name[i]), name[i], len);
2639 r_u->type[i] = type[i];
2644 r_u->num_names1 = num_names;
2646 r_u->num_names2 = num_names;
2648 r_u->num_types1 = num_names;
2650 r_u->num_types2 = num_names;
2653 r_u->status = status;
2656 /*******************************************************************
2657 reads or writes a structure.
2658 ********************************************************************/
2659 void samr_io_r_unknown_12(char *desc, SAMR_R_UNKNOWN_12 *r_u, prs_struct *ps, int depth)
2663 if (r_u == NULL) return;
2665 prs_debug(ps, depth, desc, "samr_io_r_unknown_12");
2670 prs_uint32("num_names1", ps, depth, &(r_u->num_names1));
2671 prs_uint32("ptr_names ", ps, depth, &(r_u->ptr_names ));
2672 prs_uint32("num_names2", ps, depth, &(r_u->num_names2));
2674 if (r_u->ptr_names != 0 && r_u->num_names1 != 0)
2676 SMB_ASSERT_ARRAY(r_u->hdr_name, r_u->num_names2);
2678 for (i = 0; i < r_u->num_names2; i++)
2681 slprintf(tmp, sizeof(tmp) - 1, "hdr[%02d] ", i);
2682 smb_io_unihdr ("", &(r_u->hdr_name[i]), ps, depth);
2684 for (i = 0; i < r_u->num_names2; i++)
2687 slprintf(tmp, sizeof(tmp) - 1, "str[%02d] ", i);
2688 smb_io_unistr2("", &(r_u->uni_name[i]), r_u->hdr_name[i].buffer, ps, depth);
2694 prs_uint32("num_types1", ps, depth, &(r_u->num_types1));
2695 prs_uint32("ptr_types ", ps, depth, &(r_u->ptr_types ));
2696 prs_uint32("num_types2", ps, depth, &(r_u->num_types2));
2698 if (r_u->ptr_types != 0 && r_u->num_types1 != 0)
2700 for (i = 0; i < r_u->num_types2; i++)
2703 slprintf(tmp, sizeof(tmp) - 1, "type[%02d] ", i);
2704 prs_uint32(tmp, ps, depth, &(r_u->type[i]));
2708 prs_uint32("status", ps, depth, &(r_u->status));
2711 /*******************************************************************
2712 makes a SAMR_Q_OPEN_ALIAS structure.
2713 ********************************************************************/
2714 void make_samr_q_delete_alias(SAMR_Q_DELETE_DOM_ALIAS *q_u, POLICY_HND *hnd)
2716 if (q_u == NULL) return;
2718 DEBUG(5,("make_samr_q_delete_alias\n"));
2720 memcpy(&(q_u->alias_pol), hnd, sizeof(q_u->alias_pol));
2724 /*******************************************************************
2725 reads or writes a structure.
2726 ********************************************************************/
2727 void samr_io_q_delete_alias(char *desc, SAMR_Q_DELETE_DOM_ALIAS *q_u, prs_struct *ps, int depth)
2729 if (q_u == NULL) return;
2731 prs_debug(ps, depth, desc, "samr_io_q_delete_alias");
2736 smb_io_pol_hnd("alias_pol", &(q_u->alias_pol), ps, depth);
2739 /*******************************************************************
2740 reads or writes a structure.
2741 ********************************************************************/
2742 void samr_io_r_delete_alias(char *desc, SAMR_R_DELETE_DOM_ALIAS *r_u, prs_struct *ps, int depth)
2744 if (r_u == NULL) return;
2746 prs_debug(ps, depth, desc, "samr_io_r_delete_alias");
2751 smb_io_pol_hnd("pol", &(r_u->pol), ps, depth);
2752 prs_uint32("status", ps, depth, &(r_u->status));
2756 /*******************************************************************
2757 makes a SAMR_Q_CREATE_DOM_ALIAS structure.
2758 ********************************************************************/
2759 void make_samr_q_create_dom_alias(SAMR_Q_CREATE_DOM_ALIAS *q_u, POLICY_HND *hnd,
2762 int acct_len = acct_desc != NULL ? strlen(acct_desc) : 0;
2763 if (q_u == NULL) return;
2765 DEBUG(5,("make_samr_q_create_dom_alias\n"));
2767 memcpy(&(q_u->dom_pol), hnd, sizeof(q_u->dom_pol));
2769 make_uni_hdr(&(q_u->hdr_acct_desc), acct_len , acct_len, acct_desc ? 1 : 0);
2770 make_unistr2(&(q_u->uni_acct_desc), acct_desc, acct_len);
2772 q_u->unknown_1 = 0x001f;
2773 q_u->unknown_2 = 0x000f;
2777 /*******************************************************************
2778 reads or writes a structure.
2779 ********************************************************************/
2780 void samr_io_q_create_dom_alias(char *desc, SAMR_Q_CREATE_DOM_ALIAS *q_u, prs_struct *ps, int depth)
2782 if (q_u == NULL) return;
2784 prs_debug(ps, depth, desc, "samr_io_q_create_dom_alias");
2789 smb_io_pol_hnd("dom_pol", &(q_u->dom_pol), ps, depth);
2791 smb_io_unihdr ("hdr_acct_desc", &(q_u->hdr_acct_desc) , ps, depth);
2792 smb_io_unistr2("uni_acct_desc", &(q_u->uni_acct_desc), q_u->hdr_acct_desc.buffer, ps, depth);
2794 prs_uint16("unknown_1", ps, depth, &(q_u->unknown_1));
2795 prs_uint16("unknown_2", ps, depth, &(q_u->unknown_2));
2798 /*******************************************************************
2799 reads or writes a structure.
2800 ********************************************************************/
2801 void samr_io_r_create_dom_alias(char *desc, SAMR_R_CREATE_DOM_ALIAS *r_u, prs_struct *ps, int depth)
2803 if (r_u == NULL) return;
2805 prs_debug(ps, depth, desc, "samr_io_r_create_dom_alias");
2810 smb_io_pol_hnd("alias_pol", &(r_u->alias_pol), ps, depth);
2811 prs_uint32("rid", ps, depth, &(r_u->rid));
2813 prs_uint32("status", ps, depth, &(r_u->status));
2818 /*******************************************************************
2819 makes a SAMR_Q_UNK_ALIASMEM structure.
2820 ********************************************************************/
2821 void make_samr_q_unk_aliasmem(SAMR_Q_UNK_ALIASMEM *q_u, POLICY_HND *hnd,
2824 if (q_u == NULL) return;
2826 DEBUG(5,("make_samr_q_unk_aliasmem\n"));
2828 memcpy(&(q_u->alias_pol), hnd, sizeof(q_u->alias_pol));
2829 sid_copy(&q_u->sid, sid);
2833 /*******************************************************************
2834 reads or writes a structure.
2835 ********************************************************************/
2836 void samr_io_q_unk_aliasmem(char *desc, SAMR_Q_UNK_ALIASMEM *q_u, prs_struct *ps, int depth)
2838 if (q_u == NULL) return;
2840 prs_debug(ps, depth, desc, "samr_io_q_unk_aliasmem");
2845 smb_io_pol_hnd("alias_pol", &(q_u->alias_pol), ps, depth);
2846 smb_io_dom_sid("sid ", &(q_u->sid ), ps, depth);
2849 /*******************************************************************
2850 reads or writes a structure.
2851 ********************************************************************/
2852 void samr_io_r_unk_aliasmem(char *desc, SAMR_R_UNK_ALIASMEM *r_u, prs_struct *ps, int depth)
2854 if (r_u == NULL) return;
2856 prs_debug(ps, depth, desc, "samr_io_r_unk_aliasmem");
2861 prs_uint32("status", ps, depth, &(r_u->status));
2865 /*******************************************************************
2866 makes a SAMR_Q_ADD_ALIASMEM structure.
2867 ********************************************************************/
2868 void make_samr_q_add_aliasmem(SAMR_Q_ADD_ALIASMEM *q_u, POLICY_HND *hnd,
2871 if (q_u == NULL) return;
2873 DEBUG(5,("make_samr_q_add_aliasmem\n"));
2875 memcpy(&(q_u->alias_pol), hnd, sizeof(q_u->alias_pol));
2876 sid_copy(&q_u->sid, sid);
2880 /*******************************************************************
2881 reads or writes a structure.
2882 ********************************************************************/
2883 void samr_io_q_add_aliasmem(char *desc, SAMR_Q_ADD_ALIASMEM *q_u, prs_struct *ps, int depth)
2885 if (q_u == NULL) return;
2887 prs_debug(ps, depth, desc, "samr_io_q_add_aliasmem");
2892 smb_io_pol_hnd("alias_pol", &(q_u->alias_pol), ps, depth);
2893 smb_io_dom_sid("sid ", &(q_u->sid ), ps, depth);
2896 /*******************************************************************
2897 reads or writes a structure.
2898 ********************************************************************/
2899 void samr_io_r_add_aliasmem(char *desc, SAMR_R_ADD_ALIASMEM *r_u, prs_struct *ps, int depth)
2901 if (r_u == NULL) return;
2903 prs_debug(ps, depth, desc, "samr_io_r_add_aliasmem");
2908 prs_uint32("status", ps, depth, &(r_u->status));
2911 /*******************************************************************
2912 makes a SAMR_Q_QUERY_ALIASMEM structure.
2913 ********************************************************************/
2914 void make_samr_q_query_aliasmem(SAMR_Q_QUERY_ALIASMEM *q_c, POLICY_HND *hnd)
2916 if (q_c == NULL || hnd == NULL) return;
2918 DEBUG(5,("make_samr_q_query_aliasmem\n"));
2920 memcpy(&(q_c->alias_pol), hnd, sizeof(q_c->alias_pol));
2923 /*******************************************************************
2924 reads or writes a structure.
2925 ********************************************************************/
2926 void samr_io_q_query_aliasmem(char *desc, SAMR_Q_QUERY_ALIASMEM *q_u, prs_struct *ps, int depth)
2928 if (q_u == NULL) return;
2930 prs_debug(ps, depth, desc, "samr_io_q_query_aliasmem");
2935 smb_io_pol_hnd("alias_pol", &(q_u->alias_pol), ps, depth);
2938 /*******************************************************************
2939 makes a SAMR_R_QUERY_ALIASMEM structure.
2940 ********************************************************************/
2941 void make_samr_r_query_aliasmem(SAMR_R_QUERY_ALIASMEM *r_u,
2942 uint32 num_sids, DOM_SID2 *sid, uint32 status)
2944 if (r_u == NULL) return;
2946 DEBUG(5,("make_samr_r_query_aliasmem\n"));
2950 r_u->num_sids = num_sids;
2951 r_u->ptr = (num_sids != 0) ? 1 : 0;
2952 r_u->num_sids1 = num_sids;
2962 r_u->status = status;
2965 /*******************************************************************
2966 reads or writes a structure.
2967 ********************************************************************/
2968 void samr_io_r_query_aliasmem(char *desc, SAMR_R_QUERY_ALIASMEM *r_u, prs_struct *ps, int depth)
2971 uint32 ptr_sid[MAX_LOOKUP_SIDS];
2973 if (r_u == NULL) return;
2975 prs_debug(ps, depth, desc, "samr_io_r_query_aliasmem");
2980 prs_uint32("num_sids ", ps, depth, &(r_u->num_sids));
2981 prs_uint32("ptr", ps, depth, &(r_u->ptr));
2985 SMB_ASSERT_ARRAY(ptr_sid, r_u->num_sids);
2987 if (r_u->num_sids != 0)
2989 prs_uint32("num_sids1", ps, depth, &(r_u->num_sids1));
2991 for (i = 0; i < r_u->num_sids1; i++)
2995 prs_uint32("", ps, depth, &(ptr_sid[i]));
2997 for (i = 0; i < r_u->num_sids1; i++)
3000 if (ptr_sid[i] != 0)
3002 smb_io_dom_sid2("", &(r_u->sid[i]), ps, depth);
3007 prs_uint32("status", ps, depth, &(r_u->status));
3011 /*******************************************************************
3012 reads or writes a structure.
3013 ********************************************************************/
3014 void samr_io_q_lookup_names(char *desc, SAMR_Q_LOOKUP_NAMES *q_u, prs_struct *ps, int depth)
3018 if (q_u == NULL) return;
3020 prs_debug(ps, depth, desc, "samr_io_q_lookup_names");
3025 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
3028 prs_uint32("num_rids1", ps, depth, &(q_u->num_rids1));
3029 prs_uint32("rid ", ps, depth, &(q_u->rid ));
3030 prs_uint32("ptr ", ps, depth, &(q_u->ptr ));
3031 prs_uint32("num_rids2", ps, depth, &(q_u->num_rids2));
3033 SMB_ASSERT_ARRAY(q_u->hdr_user_name, q_u->num_rids2);
3035 for (i = 0; i < q_u->num_rids2; i++)
3038 smb_io_unihdr ("", &(q_u->hdr_user_name[i]), ps, depth);
3040 for (i = 0; i < q_u->num_rids2; i++)
3043 smb_io_unistr2("", &(q_u->uni_user_name[i]), q_u->hdr_user_name[i].buffer, ps, depth);
3050 /*******************************************************************
3051 makes a SAMR_R_LOOKUP_NAMES structure.
3052 ********************************************************************/
3053 void make_samr_r_lookup_names(SAMR_R_LOOKUP_NAMES *r_u,
3054 uint32 num_rids, uint32 *rid, uint8 *type, uint32 status)
3057 if (r_u == NULL) return;
3059 DEBUG(5,("make_samr_r_lookup_names\n"));
3063 r_u->num_entries = num_rids;
3064 r_u->undoc_buffer = 1;
3065 r_u->num_entries2 = num_rids;
3067 SMB_ASSERT_ARRAY(r_u->dom_rid, num_rids);
3069 for (i = 0; i < num_rids; i++)
3071 make_dom_rid3(&(r_u->dom_rid[i]), rid[i], type[i]);
3076 r_u->num_entries = 0;
3077 r_u->undoc_buffer = 0;
3078 r_u->num_entries2 = 0;
3081 r_u->status = status;
3084 /*******************************************************************
3085 reads or writes a structure.
3086 ********************************************************************/
3087 void samr_io_r_lookup_names(char *desc, SAMR_R_LOOKUP_NAMES *r_u, prs_struct *ps, int depth)
3090 if (r_u == NULL) return;
3092 prs_debug(ps, depth, desc, "samr_io_r_lookup_names");
3097 prs_uint32("num_entries ", ps, depth, &(r_u->num_entries ));
3098 prs_uint32("undoc_buffer", ps, depth, &(r_u->undoc_buffer));
3099 prs_uint32("num_entries2", ps, depth, &(r_u->num_entries2));
3101 if (r_u->num_entries != 0)
3103 SMB_ASSERT_ARRAY(r_u->dom_rid, r_u->num_entries2);
3105 for (i = 0; i < r_u->num_entries2; i++)
3108 smb_io_dom_rid3("", &(r_u->dom_rid[i]), ps, depth);
3113 prs_uint32("status", ps, depth, &(r_u->status));
3117 /*******************************************************************
3118 reads or writes a structure.
3119 ********************************************************************/
3120 void make_samr_q_open_user(SAMR_Q_OPEN_USER *q_u,
3122 uint32 unk_0, uint32 rid)
3124 if (q_u == NULL) return;
3126 DEBUG(5,("samr_make_samr_q_open_user\n"));
3128 memcpy(&q_u->domain_pol, pol, sizeof(q_u->domain_pol));
3130 q_u->unknown_0 = unk_0;
3131 q_u->user_rid = rid;
3134 /*******************************************************************
3135 reads or writes a structure.
3136 ********************************************************************/
3137 void samr_io_q_open_user(char *desc, SAMR_Q_OPEN_USER *q_u, prs_struct *ps, int depth)
3139 if (q_u == NULL) return;
3141 prs_debug(ps, depth, desc, "samr_io_q_open_user");
3146 smb_io_pol_hnd("domain_pol", &(q_u->domain_pol), ps, depth);
3149 prs_uint32("unknown_0", ps, depth, &(q_u->unknown_0));
3150 prs_uint32("user_rid ", ps, depth, &(q_u->user_rid ));
3155 /*******************************************************************
3156 reads or writes a structure.
3157 ********************************************************************/
3158 void samr_io_r_open_user(char *desc, SAMR_R_OPEN_USER *r_u, prs_struct *ps, int depth)
3160 if (r_u == NULL) return;
3162 prs_debug(ps, depth, desc, "samr_io_r_open_user");
3167 smb_io_pol_hnd("user_pol", &(r_u->user_pol), ps, depth);
3170 prs_uint32("status", ps, depth, &(r_u->status));
3173 /*******************************************************************
3174 makes a SAMR_Q_QUERY_USERINFO structure.
3175 ********************************************************************/
3176 void make_samr_q_query_userinfo(SAMR_Q_QUERY_USERINFO *q_u,
3177 POLICY_HND *hnd, uint16 switch_value)
3179 if (q_u == NULL || hnd == NULL) return;
3181 DEBUG(5,("make_samr_q_query_userinfo\n"));
3183 memcpy(&(q_u->pol), hnd, sizeof(q_u->pol));
3184 q_u->switch_value = switch_value;
3188 /*******************************************************************
3189 reads or writes a structure.
3190 ********************************************************************/
3191 void samr_io_q_query_userinfo(char *desc, SAMR_Q_QUERY_USERINFO *q_u, prs_struct *ps, int depth)
3193 if (q_u == NULL) return;
3195 prs_debug(ps, depth, desc, "samr_io_q_query_userinfo");
3200 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
3203 prs_uint16("switch_value", ps, depth, &(q_u->switch_value)); /* 0x0015 or 0x0011 */
3208 /*******************************************************************
3209 reads or writes a LOGON_HRS structure.
3210 ********************************************************************/
3211 static void sam_io_logon_hrs(char *desc, LOGON_HRS *hrs, prs_struct *ps, int depth)
3213 if (hrs == NULL) return;
3215 prs_debug(ps, depth, desc, "sam_io_logon_hrs");
3220 prs_uint32 ( "len ", ps, depth, &(hrs->len ));
3224 DEBUG(5,("sam_io_logon_hrs: truncating length\n"));
3228 prs_uint8s (False, "hours", ps, depth, hrs->hours, hrs->len);
3231 /*******************************************************************
3232 makes a SAM_USER_INFO_10 structure.
3233 ********************************************************************/
3234 void make_sam_user_info10(SAM_USER_INFO_10 *usr,
3237 if (usr == NULL) return;
3239 DEBUG(5,("make_sam_user_info10\n"));
3241 usr->acb_info = acb_info;
3244 /*******************************************************************
3245 reads or writes a structure.
3246 ********************************************************************/
3247 void sam_io_user_info10(char *desc, SAM_USER_INFO_10 *usr, prs_struct *ps, int depth)
3249 if (usr == NULL) return;
3251 prs_debug(ps, depth, desc, "samr_io_r_user_info10");
3256 prs_uint32("acb_info", ps, depth, &(usr->acb_info));
3259 /*******************************************************************
3260 makes a SAM_USER_INFO_11 structure.
3261 ********************************************************************/
3262 void make_sam_user_info11(SAM_USER_INFO_11 *usr,
3271 if (usr == NULL || expiry == NULL || mach_acct == NULL) return;
3273 DEBUG(5,("make_sam_user_info11\n"));
3275 len_mach_acct = strlen(mach_acct);
3277 memcpy(&(usr->expiry),expiry, sizeof(usr->expiry)); /* expiry time or something? */
3278 bzero(usr->padding_1, sizeof(usr->padding_1)); /* 0 - padding 24 bytes */
3280 make_uni_hdr(&(usr->hdr_mach_acct), len_mach_acct, len_mach_acct, 4); /* unicode header for machine account */
3281 usr->padding_2 = 0; /* 0 - padding 4 bytes */
3283 usr->ptr_1 = 1; /* pointer */
3284 bzero(usr->padding_3, sizeof(usr->padding_3)); /* 0 - padding 32 bytes */
3285 usr->padding_4 = 0; /* 0 - padding 4 bytes */
3287 usr->ptr_2 = 1; /* pointer */
3288 usr->padding_5 = 0; /* 0 - padding 4 bytes */
3290 usr->ptr_3 = 1; /* pointer */
3291 bzero(usr->padding_6, sizeof(usr->padding_6)); /* 0 - padding 32 bytes */
3293 usr->rid_user = rid_user;
3294 usr->rid_group = rid_group;
3296 usr->acct_ctrl = acct_ctrl;
3297 usr->unknown_3 = 0x0000;
3299 usr->unknown_4 = 0x003f; /* 0x003f - 16 bit unknown */
3300 usr->unknown_5 = 0x003c; /* 0x003c - 16 bit unknown */
3302 bzero(usr->padding_7, sizeof(usr->padding_7)); /* 0 - padding 16 bytes */
3303 usr->padding_8 = 0; /* 0 - padding 4 bytes */
3305 make_unistr2(&(usr->uni_mach_acct), mach_acct, len_mach_acct); /* unicode string for machine account */
3307 bzero(usr->padding_9, sizeof(usr->padding_9)); /* 0 - padding 48 bytes */
3310 /*******************************************************************
3311 reads or writes a structure.
3312 ********************************************************************/
3313 void sam_io_user_info11(char *desc, SAM_USER_INFO_11 *usr, prs_struct *ps, int depth)
3315 if (usr == NULL) return;
3317 prs_debug(ps, depth, desc, "samr_io_r_unknown_24");
3322 prs_uint8s (False, "padding_0", ps, depth, usr->padding_0, sizeof(usr->padding_0));
3324 smb_io_time("time", &(usr->expiry), ps, depth);
3326 prs_uint8s (False, "padding_1", ps, depth, usr->padding_1, sizeof(usr->padding_1));
3328 smb_io_unihdr ("unihdr", &(usr->hdr_mach_acct), ps, depth);
3329 prs_uint32( "padding_2", ps, depth, &(usr->padding_2));
3331 prs_uint32( "ptr_1 ", ps, depth, &(usr->ptr_1 ));
3332 prs_uint8s (False, "padding_3", ps, depth, usr->padding_3, sizeof(usr->padding_3));
3333 prs_uint32( "padding_4", ps, depth, &(usr->padding_4));
3335 prs_uint32( "ptr_2 ", ps, depth, &(usr->ptr_2 ));
3336 prs_uint32( "padding_5", ps, depth, &(usr->padding_5));
3338 prs_uint32( "ptr_3 ", ps, depth, &(usr->ptr_3 ));
3339 prs_uint8s (False, "padding_6", ps, depth, usr->padding_6, sizeof(usr->padding_6));
3341 prs_uint32( "rid_user ", ps, depth, &(usr->rid_user ));
3342 prs_uint32( "rid_group", ps, depth, &(usr->rid_group));
3343 prs_uint16( "acct_ctrl", ps, depth, &(usr->acct_ctrl));
3344 prs_uint16( "unknown_3", ps, depth, &(usr->unknown_3));
3345 prs_uint16( "unknown_4", ps, depth, &(usr->unknown_4));
3346 prs_uint16( "unknown_5", ps, depth, &(usr->unknown_5));
3348 prs_uint8s (False, "padding_7", ps, depth, usr->padding_7, sizeof(usr->padding_7));
3349 prs_uint32( "padding_8", ps, depth, &(usr->padding_8));
3351 smb_io_unistr2("unistr2", &(usr->uni_mach_acct), True, ps, depth);
3354 prs_uint8s (False, "padding_9", ps, depth, usr->padding_9, sizeof(usr->padding_9));
3356 /*************************************************************************
3357 make_sam_user_info21
3359 unknown_3 = 0x00ff ffff
3360 unknown_5 = 0x0002 0000
3361 unknown_6 = 0x0000 04ec
3363 *************************************************************************/
3364 void make_sam_user_info21(SAM_USER_INFO_21 *usr,
3367 NTTIME *logoff_time,
3368 NTTIME *kickoff_time,
3369 NTTIME *pass_last_set_time,
3370 NTTIME *pass_can_change_time,
3371 NTTIME *pass_must_change_time,
3394 int len_user_name = user_name != NULL ? strlen(user_name ) : 0;
3395 int len_full_name = full_name != NULL ? strlen(full_name ) : 0;
3396 int len_home_dir = home_dir != NULL ? strlen(home_dir ) : 0;
3397 int len_dir_drive = dir_drive != NULL ? strlen(dir_drive ) : 0;
3398 int len_logon_script = logon_script != NULL ? strlen(logon_script) : 0;
3399 int len_profile_path = profile_path != NULL ? strlen(profile_path) : 0;
3400 int len_description = description != NULL ? strlen(description ) : 0;
3401 int len_workstations = workstations != NULL ? strlen(workstations) : 0;
3402 int len_unknown_str = unknown_str != NULL ? strlen(unknown_str ) : 0;
3403 int len_munged_dial = munged_dial != NULL ? strlen(munged_dial ) : 0;
3405 usr->logon_time = *logon_time;
3406 usr->logoff_time = *logoff_time;
3407 usr->kickoff_time = *kickoff_time;
3408 usr->pass_last_set_time = *pass_last_set_time;
3409 usr->pass_can_change_time = *pass_can_change_time;
3410 usr->pass_must_change_time = *pass_must_change_time;
3412 make_uni_hdr(&(usr->hdr_user_name ), len_user_name , len_user_name , 1);
3413 make_uni_hdr(&(usr->hdr_full_name ), len_full_name , len_full_name , 1);
3414 make_uni_hdr(&(usr->hdr_home_dir ), len_home_dir , len_home_dir , 1);
3415 make_uni_hdr(&(usr->hdr_dir_drive ), len_dir_drive , len_dir_drive , 1);
3416 make_uni_hdr(&(usr->hdr_logon_script), len_logon_script, len_logon_script, 1);
3417 make_uni_hdr(&(usr->hdr_profile_path), len_profile_path, len_profile_path, 1);
3418 make_uni_hdr(&(usr->hdr_acct_desc ), len_description , len_description , 1);
3419 make_uni_hdr(&(usr->hdr_workstations), len_workstations, len_workstations, 1);
3420 make_uni_hdr(&(usr->hdr_unknown_str ), len_unknown_str , len_unknown_str , 1);
3421 make_uni_hdr(&(usr->hdr_munged_dial ), len_munged_dial , len_munged_dial , 1);
3423 bzero(usr->nt_pwd, sizeof(usr->nt_pwd));
3424 bzero(usr->lm_pwd, sizeof(usr->lm_pwd));
3426 usr->user_rid = user_rid;
3427 usr->group_rid = group_rid;
3428 usr->acb_info = acb_info;
3429 usr->unknown_3 = unknown_3; /* 0x00ff ffff */
3431 usr->logon_divs = logon_divs; /* should be 168 (hours/week) */
3432 usr->ptr_logon_hrs = hrs ? 1 : 0;
3433 usr->unknown_5 = unknown_5; /* 0x0002 0000 */
3435 bzero(usr->padding1, sizeof(usr->padding1));
3437 make_unistr2(&(usr->uni_user_name ), user_name , len_user_name );
3438 make_unistr2(&(usr->uni_full_name ), full_name , len_full_name );
3439 make_unistr2(&(usr->uni_home_dir ), home_dir , len_home_dir );
3440 make_unistr2(&(usr->uni_dir_drive ), dir_drive , len_dir_drive );
3441 make_unistr2(&(usr->uni_logon_script), logon_script, len_logon_script);
3442 make_unistr2(&(usr->uni_profile_path), profile_path, len_profile_path);
3443 make_unistr2(&(usr->uni_acct_desc ), description , len_description );
3444 make_unistr2(&(usr->uni_workstations), workstations, len_workstations);
3445 make_unistr2(&(usr->uni_unknown_str ), unknown_str , len_unknown_str );
3446 make_unistr2(&(usr->uni_munged_dial ), munged_dial , len_munged_dial );
3448 usr->unknown_6 = unknown_6; /* 0x0000 04ec */
3453 memcpy(&(usr->logon_hrs), hrs, sizeof(usr->logon_hrs));
3457 memset(&(usr->logon_hrs), 0xff, sizeof(usr->logon_hrs));
3462 /*******************************************************************
3463 reads or writes a structure.
3464 ********************************************************************/
3465 static void sam_io_user_info21(char *desc, SAM_USER_INFO_21 *usr, prs_struct *ps, int depth)
3467 if (usr == NULL) return;
3469 prs_debug(ps, depth, desc, "lsa_io_user_info");
3474 smb_io_time("logon_time ", &(usr->logon_time) , ps, depth);
3475 smb_io_time("logoff_time ", &(usr->logoff_time) , ps, depth);
3476 smb_io_time("kickoff_time ", &(usr->kickoff_time) , ps, depth);
3477 smb_io_time("pass_last_set_time ", &(usr->pass_last_set_time) , ps, depth);
3478 smb_io_time("pass_can_change_time ", &(usr->pass_can_change_time) , ps, depth);
3479 smb_io_time("pass_must_change_time", &(usr->pass_must_change_time), ps, depth);
3481 smb_io_unihdr("hdr_user_name ", &(usr->hdr_user_name) , ps, depth); /* username unicode string header */
3482 smb_io_unihdr("hdr_full_name ", &(usr->hdr_full_name) , ps, depth); /* user's full name unicode string header */
3483 smb_io_unihdr("hdr_home_dir ", &(usr->hdr_home_dir) , ps, depth); /* home directory unicode string header */
3484 smb_io_unihdr("hdr_dir_drive ", &(usr->hdr_dir_drive) , ps, depth); /* home directory drive */
3485 smb_io_unihdr("hdr_logon_script", &(usr->hdr_logon_script), ps, depth); /* logon script unicode string header */
3486 smb_io_unihdr("hdr_profile_path", &(usr->hdr_profile_path), ps, depth); /* profile path unicode string header */
3487 smb_io_unihdr("hdr_acct_desc ", &(usr->hdr_acct_desc ) , ps, depth); /* account description */
3488 smb_io_unihdr("hdr_workstations", &(usr->hdr_workstations), ps, depth); /* workstations user can log on from */
3489 smb_io_unihdr("hdr_unknown_str ", &(usr->hdr_unknown_str ), ps, depth); /* unknown string */
3490 smb_io_unihdr("hdr_munged_dial ", &(usr->hdr_munged_dial ), ps, depth); /* workstations user can log on from */
3492 prs_uint8s (False, "lm_pwd ", ps, depth, usr->lm_pwd , sizeof(usr->lm_pwd ));
3493 prs_uint8s (False, "nt_pwd ", ps, depth, usr->nt_pwd , sizeof(usr->nt_pwd ));
3495 prs_uint32("user_rid ", ps, depth, &(usr->user_rid )); /* User ID */
3496 prs_uint32("group_rid ", ps, depth, &(usr->group_rid )); /* Group ID */
3497 prs_uint16("acb_info ", ps, depth, &(usr->acb_info )); /* Group ID */
3500 prs_uint32("unknown_3 ", ps, depth, &(usr->unknown_3 ));
3501 prs_uint16("logon_divs ", ps, depth, &(usr->logon_divs )); /* logon divisions per week */
3503 prs_uint32("ptr_logon_hrs ", ps, depth, &(usr->ptr_logon_hrs));
3504 prs_uint32("unknown_5 ", ps, depth, &(usr->unknown_5 ));
3506 prs_uint8s (False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1));
3508 /* here begins pointed-to data */
3510 smb_io_unistr2("uni_user_name ", &(usr->uni_user_name) , usr->hdr_user_name .buffer, ps, depth); /* username unicode string */
3511 smb_io_unistr2("uni_full_name ", &(usr->uni_full_name) , usr->hdr_full_name .buffer, ps, depth); /* user's full name unicode string */
3512 smb_io_unistr2("uni_home_dir ", &(usr->uni_home_dir) , usr->hdr_home_dir .buffer, ps, depth); /* home directory unicode string */
3513 smb_io_unistr2("uni_dir_drive ", &(usr->uni_dir_drive) , usr->hdr_dir_drive .buffer, ps, depth); /* home directory drive unicode string */
3514 smb_io_unistr2("uni_logon_script", &(usr->uni_logon_script), usr->hdr_logon_script.buffer, ps, depth); /* logon script unicode string */
3515 smb_io_unistr2("uni_profile_path", &(usr->uni_profile_path), usr->hdr_profile_path.buffer, ps, depth); /* profile path unicode string */
3516 smb_io_unistr2("uni_acct_desc ", &(usr->uni_acct_desc ), usr->hdr_acct_desc .buffer, ps, depth); /* user description unicode string */
3517 smb_io_unistr2("uni_workstations", &(usr->uni_workstations), usr->hdr_workstations.buffer, ps, depth); /* worksations user can log on from */
3518 smb_io_unistr2("uni_unknown_str ", &(usr->uni_unknown_str ), usr->hdr_unknown_str .buffer, ps, depth); /* unknown string */
3519 smb_io_unistr2("uni_munged_dial ", &(usr->uni_munged_dial ), usr->hdr_munged_dial .buffer, ps, depth); /* worksations user can log on from */
3521 prs_uint32("unknown_6 ", ps, depth, &(usr->unknown_6 ));
3522 prs_uint32("padding4 ", ps, depth, &(usr->padding4 ));
3524 if (usr->ptr_logon_hrs)
3526 sam_io_logon_hrs("logon_hrs", &(usr->logon_hrs) , ps, depth);
3532 /*******************************************************************
3533 makes a SAMR_R_QUERY_USERINFO structure.
3534 ********************************************************************/
3535 void make_samr_r_query_userinfo(SAMR_R_QUERY_USERINFO *r_u,
3536 uint16 switch_value, void *info, uint32 status)
3539 if (r_u == NULL || info == NULL) return;
3541 DEBUG(5,("make_samr_r_query_userinfo\n"));
3544 r_u->switch_value = 0;
3548 r_u->switch_value = switch_value;
3550 switch (switch_value)
3555 r_u->info.id10 = (SAM_USER_INFO_10*)info;
3563 r_u->info.id11 = (SAM_USER_INFO_11*)info;
3571 r_u->info.id21 = (SAM_USER_INFO_21*)info;
3578 DEBUG(4,("make_samr_r_query_userinfo: unsupported switch level\n"));
3584 r_u->status = status; /* return status */
3587 /*******************************************************************
3588 reads or writes a structure.
3589 ********************************************************************/
3590 void samr_io_r_query_userinfo(char *desc, SAMR_R_QUERY_USERINFO *r_u, prs_struct *ps, int depth)
3592 if (r_u == NULL) return;
3594 prs_debug(ps, depth, desc, "samr_io_r_query_userinfo");
3599 prs_uint32("ptr ", ps, depth, &(r_u->ptr ));
3600 prs_uint16("switch_value", ps, depth, &(r_u->switch_value));
3603 if (r_u->ptr != 0 && r_u->switch_value != 0)
3605 switch (r_u->switch_value)
3609 if (r_u->info.id10 != NULL)
3611 sam_io_user_info10("", r_u->info.id10, ps, depth);
3615 DEBUG(2,("samr_io_r_query_userinfo: info pointer not initialised\n"));
3623 if (r_u->info.id11 != NULL)
3625 sam_io_user_info11("", r_u->info.id11, ps, depth);
3629 DEBUG(2,("samr_io_r_query_userinfo: info pointer not initialised\n"));
3637 if (r_u->info.id21 != NULL)
3639 sam_io_user_info21("", r_u->info.id21, ps, depth);
3643 DEBUG(2,("samr_io_r_query_userinfo: info pointer not initialised\n"));
3650 DEBUG(2,("samr_io_r_query_userinfo: unknown switch level\n"));
3657 prs_uint32("status", ps, depth, &(r_u->status));
3660 /*******************************************************************
3661 reads or writes a structure.
3662 ********************************************************************/
3663 void samr_io_q_unknown_32(char *desc, SAMR_Q_UNKNOWN_32 *q_u, prs_struct *ps, int depth)
3665 if (q_u == NULL) return;
3667 prs_debug(ps, depth, desc, "samr_io_q_unknown_32");
3672 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
3675 smb_io_unihdr ("", &(q_u->hdr_mach_acct), ps, depth);
3676 smb_io_unistr2("", &(q_u->uni_mach_acct), q_u->hdr_mach_acct.buffer, ps, depth);
3680 prs_uint32("acct_ctrl", ps, depth, &(q_u->acct_ctrl));
3681 prs_uint16("unknown_1", ps, depth, &(q_u->unknown_1));
3682 prs_uint16("unknown_2", ps, depth, &(q_u->unknown_2));
3685 /*******************************************************************
3686 reads or writes a structure.
3687 ********************************************************************/
3688 void samr_io_r_unknown_32(char *desc, SAMR_R_UNKNOWN_32 *r_u, prs_struct *ps, int depth)
3690 if (r_u == NULL) return;
3692 prs_debug(ps, depth, desc, "samr_io_r_unknown_32");
3697 smb_io_pol_hnd("pol", &(r_u->pol), ps, depth);
3700 prs_uint32("status", ps, depth, &(r_u->status));
3704 /*******************************************************************
3705 makes a SAMR_Q_CONNECT structure.
3706 ********************************************************************/
3707 void make_samr_q_connect(SAMR_Q_CONNECT *q_u,
3708 char *srv_name, uint32 unknown_0)
3710 int len_srv_name = strlen(srv_name);
3712 if (q_u == NULL) return;
3714 DEBUG(5,("make_samr_q_connect\n"));
3716 /* make PDC server name \\server */
3717 q_u->ptr_srv_name = len_srv_name > 0 ? 1 : 0;
3718 make_unistr2(&(q_u->uni_srv_name), srv_name, len_srv_name+1);
3720 /* example values: 0x0000 0002 */
3721 q_u->unknown_0 = unknown_0;
3725 /*******************************************************************
3726 reads or writes a structure.
3727 ********************************************************************/
3728 void samr_io_q_connect(char *desc, SAMR_Q_CONNECT *q_u, prs_struct *ps, int depth)
3730 if (q_u == NULL) return;
3732 prs_debug(ps, depth, desc, "samr_io_q_connect");
3737 prs_uint32("ptr_srv_name", ps, depth, &(q_u->ptr_srv_name));
3738 smb_io_unistr2("", &(q_u->uni_srv_name), q_u->ptr_srv_name, ps, depth);
3742 prs_uint32("unknown_0 ", ps, depth, &(q_u->unknown_0 ));
3745 /*******************************************************************
3746 reads or writes a structure.
3747 ********************************************************************/
3748 void samr_io_r_connect(char *desc, SAMR_R_CONNECT *r_u, prs_struct *ps, int depth)
3750 if (r_u == NULL) return;
3752 prs_debug(ps, depth, desc, "samr_io_r_connect");
3757 smb_io_pol_hnd("connect_pol", &(r_u->connect_pol), ps, depth);
3760 prs_uint32("status", ps, depth, &(r_u->status));
3763 /*******************************************************************
3764 makes a SAMR_Q_CONNECT_ANON structure.
3765 ********************************************************************/
3766 void make_samr_q_connect_anon(SAMR_Q_CONNECT_ANON *q_u)
3768 if (q_u == NULL) return;
3770 DEBUG(5,("make_samr_q_connect_anon\n"));
3773 q_u->unknown_0 = 0x5c; /* server name (?!!) */
3774 q_u->unknown_1 = 0x01;
3775 q_u->unknown_2 = 0x20;
3779 /*******************************************************************
3780 reads or writes a structure.
3781 ********************************************************************/
3782 void samr_io_q_connect_anon(char *desc, SAMR_Q_CONNECT_ANON *q_u, prs_struct *ps, int depth)
3784 if (q_u == NULL) return;
3786 prs_debug(ps, depth, desc, "samr_io_q_connect_anon");
3791 prs_uint32("ptr ", ps, depth, &(q_u->ptr ));
3792 prs_uint16("unknown_0", ps, depth, &(q_u->unknown_0));
3793 prs_uint16("unknown_1", ps, depth, &(q_u->unknown_1));
3794 prs_uint32("unknown_2", ps, depth, &(q_u->unknown_2));
3797 /*******************************************************************
3798 reads or writes a structure.
3799 ********************************************************************/
3800 void samr_io_r_connect_anon(char *desc, SAMR_R_CONNECT_ANON *r_u, prs_struct *ps, int depth)
3802 if (r_u == NULL) return;
3804 prs_debug(ps, depth, desc, "samr_io_r_connect_anon");
3809 smb_io_pol_hnd("connect_pol", &(r_u->connect_pol), ps, depth);
3812 prs_uint32("status", ps, depth, &(r_u->status));
3815 /*******************************************************************
3816 makes a SAMR_Q_UNKNOWN_38 structure.
3817 ********************************************************************/
3818 void make_samr_q_unknown_38(SAMR_Q_UNKNOWN_38 *q_u, char *srv_name)
3820 int len_srv_name = strlen(srv_name);
3822 if (q_u == NULL) return;
3824 DEBUG(5,("make_samr_q_unknown_38\n"));
3827 make_uni_hdr(&(q_u->hdr_srv_name), len_srv_name, len_srv_name, len_srv_name != 0);
3828 make_unistr2(&(q_u->uni_srv_name), srv_name, len_srv_name);
3832 /*******************************************************************
3833 reads or writes a structure.
3834 ********************************************************************/
3835 void samr_io_q_unknown_38(char *desc, SAMR_Q_UNKNOWN_38 *q_u, prs_struct *ps, int depth)
3837 if (q_u == NULL) return;
3839 prs_debug(ps, depth, desc, "samr_io_q_unknown_38");
3844 prs_uint32("ptr", ps, depth, &(q_u->ptr));
3847 smb_io_unihdr ("", &(q_u->hdr_srv_name), ps, depth);
3848 smb_io_unistr2("", &(q_u->uni_srv_name), q_u->hdr_srv_name.buffer, ps, depth);
3852 /*******************************************************************
3853 makes a SAMR_R_UNKNOWN_38 structure.
3854 ********************************************************************/
3855 void make_samr_r_unknown_38(SAMR_R_UNKNOWN_38 *r_u)
3857 if (r_u == NULL) return;
3859 DEBUG(5,("make_r_unknown_38\n"));
3867 /*******************************************************************
3868 reads or writes a structure.
3869 ********************************************************************/
3870 void samr_io_r_unknown_38(char *desc, SAMR_R_UNKNOWN_38 *r_u, prs_struct *ps, int depth)
3872 if (r_u == NULL) return;
3874 prs_debug(ps, depth, desc, "samr_io_r_unknown_38");
3879 prs_uint16("unk_0", ps, depth, &(r_u->unk_0));
3881 prs_uint16("unk_1", ps, depth, &(r_u->unk_1));
3883 prs_uint16("unk_2", ps, depth, &(r_u->unk_2));
3885 prs_uint16("unk_3", ps, depth, &(r_u->unk_3));
3889 /*******************************************************************
3890 make a SAMR_ENC_PASSWD structure.
3891 ********************************************************************/
3892 void make_enc_passwd(SAMR_ENC_PASSWD *pwd, char pass[512])
3894 if (pwd == NULL) return;
3897 memcpy(pwd->pass, pass, sizeof(pwd->pass));
3900 /*******************************************************************
3901 reads or writes a SAMR_ENC_PASSWD structure.
3902 ********************************************************************/
3903 void samr_io_enc_passwd(char *desc, SAMR_ENC_PASSWD *pwd, prs_struct *ps, int depth)
3905 if (pwd == NULL) return;
3907 prs_debug(ps, depth, desc, "samr_io_enc_passwd");
3912 prs_uint32("ptr", ps, depth, &(pwd->ptr));
3913 prs_uint8s(False, "pwd", ps, depth, pwd->pass, sizeof(pwd->pass));
3916 /*******************************************************************
3917 makes a SAMR_ENC_HASH structure.
3918 ********************************************************************/
3919 void make_enc_hash(SAMR_ENC_HASH *hsh, uchar hash[16])
3921 if (hsh == NULL) return;
3924 memcpy(hsh->hash, hash, sizeof(hsh->hash));
3927 /*******************************************************************
3928 reads or writes a SAMR_ENC_HASH structure.
3929 ********************************************************************/
3930 void samr_io_enc_hash(char *desc, SAMR_ENC_HASH *hsh, prs_struct *ps, int depth)
3932 if (hsh == NULL) return;
3934 prs_debug(ps, depth, desc, "samr_io_enc_hash");
3939 prs_uint32("ptr ", ps, depth, &(hsh->ptr));
3940 prs_uint8s(False, "hash", ps, depth, hsh->hash, sizeof(hsh->hash));
3943 /*******************************************************************
3944 makes a SAMR_R_UNKNOWN_38 structure.
3945 ********************************************************************/
3946 void make_samr_q_chgpasswd_user(SAMR_Q_CHGPASSWD_USER *q_u,
3947 char *dest_host, char *user_name,
3948 char nt_newpass[516], uchar nt_oldhash[16],
3949 char lm_newpass[516], uchar lm_oldhash[16])
3951 int len_dest_host = strlen(dest_host);
3952 int len_user_name = strlen(user_name);
3954 if (q_u == NULL) return;
3956 DEBUG(5,("make_samr_q_chgpasswd_user\n"));
3959 make_uni_hdr(&(q_u->hdr_dest_host), len_dest_host, len_dest_host, len_dest_host != 0);
3960 make_unistr2(&(q_u->uni_dest_host), dest_host, len_dest_host);
3961 make_uni_hdr(&(q_u->hdr_user_name), len_user_name, len_user_name, len_user_name != 0);
3962 make_unistr2(&(q_u->uni_user_name), user_name, len_user_name);
3964 make_enc_passwd(&(q_u->nt_newpass), nt_newpass);
3965 make_enc_hash (&(q_u->nt_oldhash), nt_oldhash);
3967 q_u->unknown = 0x01;
3969 make_enc_passwd(&(q_u->lm_newpass), lm_newpass);
3970 make_enc_hash (&(q_u->lm_oldhash), lm_oldhash);
3973 /*******************************************************************
3974 reads or writes a structure.
3975 ********************************************************************/
3976 void samr_io_q_chgpasswd_user(char *desc, SAMR_Q_CHGPASSWD_USER *q_u, prs_struct *ps, int depth)
3978 if (q_u == NULL) return;
3980 prs_debug(ps, depth, desc, "samr_io_q_chgpasswd_user");
3985 prs_uint32("ptr_0", ps, depth, &(q_u->ptr_0));
3987 smb_io_unihdr ("", &(q_u->hdr_dest_host), ps, depth);
3988 smb_io_unistr2("", &(q_u->uni_dest_host), q_u->hdr_dest_host.buffer, ps, depth);
3989 smb_io_unihdr ("", &(q_u->hdr_user_name), ps, depth);
3990 smb_io_unistr2("", &(q_u->uni_user_name), q_u->hdr_user_name.buffer, ps, depth);
3992 samr_io_enc_passwd("nt_newpass", &(q_u->nt_newpass), ps, depth);
3994 samr_io_enc_hash ("nt_oldhash", &(q_u->nt_oldhash), ps, depth);
3996 prs_uint32("unknown", ps, depth, &(q_u->unknown));
3998 samr_io_enc_passwd("lm_newpass", &(q_u->lm_newpass), ps, depth);
4000 samr_io_enc_hash ("lm_oldhash", &(q_u->lm_oldhash), ps, depth);
4003 /*******************************************************************
4004 makes a SAMR_R_CHGPASSWD_USER structure.
4005 ********************************************************************/
4006 void make_samr_r_chgpasswd_user(SAMR_R_CHGPASSWD_USER *r_u, uint32 status)
4008 if (r_u == NULL) return;
4010 DEBUG(5,("make_r_chgpasswd_user\n"));
4012 r_u->status = status;
4015 /*******************************************************************
4016 reads or writes a structure.
4017 ********************************************************************/
4018 void samr_io_r_chgpasswd_user(char *desc, SAMR_R_CHGPASSWD_USER *r_u, prs_struct *ps, int depth)
4020 if (r_u == NULL) return;
4022 prs_debug(ps, depth, desc, "samr_io_r_chgpasswd_user");
4027 prs_uint32("status", ps, depth, &(r_u->status));