2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
4 * Copyright (C) Andrew Tridgell 1992-2000,
5 * Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
6 * Copyright (C) Paul Ashton 1997-2000,
7 * Copyright (C) Elrond 2000,
8 * Copyright (C) Jeremy Allison 2001,
9 * Copyright (C) Jean François Micouleau 1998-2001,
10 * Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002.
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 3 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <http://www.gnu.org/licenses/>.
29 #define DBGC_CLASS DBGC_RPC_PARSE
31 /*******************************************************************
32 inits a SAMR_Q_CLOSE_HND structure.
33 ********************************************************************/
35 void init_samr_q_close_hnd(SAMR_Q_CLOSE_HND * q_c, POLICY_HND *hnd)
37 DEBUG(5, ("init_samr_q_close_hnd\n"));
42 /*******************************************************************
43 reads or writes a structure.
44 ********************************************************************/
46 BOOL samr_io_q_close_hnd(const char *desc, SAMR_Q_CLOSE_HND * q_u,
47 prs_struct *ps, int depth)
52 prs_debug(ps, depth, desc, "samr_io_q_close_hnd");
58 return smb_io_pol_hnd("pol", &q_u->pol, ps, depth);
61 /*******************************************************************
62 reads or writes a structure.
63 ********************************************************************/
65 BOOL samr_io_r_close_hnd(const char *desc, SAMR_R_CLOSE_HND * r_u,
66 prs_struct *ps, int depth)
71 prs_debug(ps, depth, desc, "samr_io_r_close_hnd");
77 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
80 if(!prs_ntstatus("status", ps, depth, &r_u->status))
86 /*******************************************************************
87 inits a SAMR_Q_LOOKUP_DOMAIN structure.
88 ********************************************************************/
90 void init_samr_q_lookup_domain(SAMR_Q_LOOKUP_DOMAIN * q_u,
91 POLICY_HND *pol, char *dom_name)
93 DEBUG(5, ("init_samr_q_lookup_domain\n"));
95 q_u->connect_pol = *pol;
97 init_unistr2(&q_u->uni_domain, dom_name, UNI_FLAGS_NONE);
98 init_uni_hdr(&q_u->hdr_domain, &q_u->uni_domain);
101 /*******************************************************************
102 reads or writes a structure.
103 ********************************************************************/
104 BOOL samr_io_q_lookup_domain(const char *desc, SAMR_Q_LOOKUP_DOMAIN * q_u,
105 prs_struct *ps, int depth)
110 prs_debug(ps, depth, desc, "samr_io_q_lookup_domain");
116 if(!smb_io_pol_hnd("connect_pol", &q_u->connect_pol, ps, depth))
119 if(!smb_io_unihdr("hdr_domain", &q_u->hdr_domain, ps, depth))
122 if(!smb_io_unistr2("uni_domain", &q_u->uni_domain, q_u->hdr_domain.buffer, ps, depth))
128 /*******************************************************************
129 inits a SAMR_R_LOOKUP_DOMAIN structure.
130 ********************************************************************/
132 void init_samr_r_lookup_domain(SAMR_R_LOOKUP_DOMAIN * r_u,
133 DOM_SID *dom_sid, NTSTATUS status)
135 DEBUG(5, ("init_samr_r_lookup_domain\n"));
137 r_u->status = status;
139 if (NT_STATUS_IS_OK(status)) {
141 init_dom_sid2(&r_u->dom_sid, dom_sid);
145 /*******************************************************************
146 reads or writes a structure.
147 ********************************************************************/
149 BOOL samr_io_r_lookup_domain(const char *desc, SAMR_R_LOOKUP_DOMAIN * r_u,
150 prs_struct *ps, int depth)
155 prs_debug(ps, depth, desc, "samr_io_r_lookup_domain");
161 if(!prs_uint32("ptr", ps, depth, &r_u->ptr_sid))
164 if (r_u->ptr_sid != 0) {
165 if(!smb_io_dom_sid2("sid", &r_u->dom_sid, ps, depth))
171 if(!prs_ntstatus("status", ps, depth, &r_u->status))
177 /*******************************************************************
178 reads or writes a structure.
179 ********************************************************************/
181 void init_samr_q_remove_sid_foreign_domain(SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN * q_u, POLICY_HND *dom_pol, DOM_SID *sid)
183 DEBUG(5, ("samr_init_samr_q_remove_sid_foreign_domain\n"));
185 q_u->dom_pol = *dom_pol;
186 init_dom_sid2(&q_u->sid, sid);
189 /*******************************************************************
190 reads or writes a structure.
191 ********************************************************************/
193 BOOL samr_io_q_remove_sid_foreign_domain(const char *desc, SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN * q_u,
194 prs_struct *ps, int depth)
199 prs_debug(ps, depth, desc, "samr_io_q_remove_sid_foreign_domain");
205 if(!smb_io_pol_hnd("domain_pol", &q_u->dom_pol, ps, depth))
208 if(!smb_io_dom_sid2("sid", &q_u->sid, ps, depth))
217 /*******************************************************************
218 reads or writes a structure.
219 ********************************************************************/
221 BOOL samr_io_r_remove_sid_foreign_domain(const char *desc, SAMR_R_REMOVE_SID_FOREIGN_DOMAIN * r_u,
222 prs_struct *ps, int depth)
227 prs_debug(ps, depth, desc, "samr_io_r_remove_sid_foreign_domain");
233 if(!prs_ntstatus("status", ps, depth, &r_u->status))
239 /*******************************************************************
240 reads or writes a structure.
241 ********************************************************************/
243 void init_samr_q_open_domain(SAMR_Q_OPEN_DOMAIN * q_u,
244 POLICY_HND *pol, uint32 flags,
247 DEBUG(5, ("samr_init_samr_q_open_domain\n"));
251 init_dom_sid2(&q_u->dom_sid, sid);
254 /*******************************************************************
255 reads or writes a structure.
256 ********************************************************************/
258 BOOL samr_io_q_open_domain(const char *desc, SAMR_Q_OPEN_DOMAIN * q_u,
259 prs_struct *ps, int depth)
264 prs_debug(ps, depth, desc, "samr_io_q_open_domain");
270 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
273 if(!prs_uint32("flags", ps, depth, &q_u->flags))
276 if(!smb_io_dom_sid2("sid", &q_u->dom_sid, ps, depth))
282 /*******************************************************************
283 reads or writes a structure.
284 ********************************************************************/
286 BOOL samr_io_r_open_domain(const char *desc, SAMR_R_OPEN_DOMAIN * r_u,
287 prs_struct *ps, int depth)
292 prs_debug(ps, depth, desc, "samr_io_r_open_domain");
298 if(!smb_io_pol_hnd("domain_pol", &r_u->domain_pol, ps, depth))
301 if(!prs_ntstatus("status", ps, depth, &r_u->status))
307 /*******************************************************************
308 reads or writes a structure.
309 ********************************************************************/
311 void init_samr_q_get_usrdom_pwinfo(SAMR_Q_GET_USRDOM_PWINFO * q_u,
312 POLICY_HND *user_pol)
314 DEBUG(5, ("samr_init_samr_q_get_usrdom_pwinfo\n"));
316 q_u->user_pol = *user_pol;
319 /*******************************************************************
320 reads or writes a structure.
321 ********************************************************************/
323 BOOL samr_io_q_get_usrdom_pwinfo(const char *desc, SAMR_Q_GET_USRDOM_PWINFO * q_u,
324 prs_struct *ps, int depth)
329 prs_debug(ps, depth, desc, "samr_io_q_get_usrdom_pwinfo");
335 return smb_io_pol_hnd("user_pol", &q_u->user_pol, ps, depth);
338 /*******************************************************************
340 ********************************************************************/
342 void init_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *r_u, NTSTATUS status)
344 DEBUG(5, ("init_samr_r_get_usrdom_pwinfo\n"));
346 r_u->min_pwd_length = 0x0000;
350 * r_u->unknown_1 = 0x0015;
353 r_u->unknown_1 = 0x01D1;
354 r_u->unknown_1 = 0x0015;
356 r_u->password_properties = 0x00000000;
358 r_u->status = status;
361 /*******************************************************************
362 reads or writes a structure.
363 ********************************************************************/
365 BOOL samr_io_r_get_usrdom_pwinfo(const char *desc, SAMR_R_GET_USRDOM_PWINFO * r_u,
366 prs_struct *ps, int depth)
371 prs_debug(ps, depth, desc, "samr_io_r_get_usrdom_pwinfo");
377 if(!prs_uint16("min_pwd_length", ps, depth, &r_u->min_pwd_length))
379 if(!prs_uint16("unknown_1", ps, depth, &r_u->unknown_1))
381 if(!prs_uint32("password_properties", ps, depth, &r_u->password_properties))
384 if(!prs_ntstatus("status ", ps, depth, &r_u->status))
391 /*******************************************************************
392 reads or writes a structure.
393 ********************************************************************/
395 BOOL samr_io_q_set_sec_obj(const char *desc, SAMR_Q_SET_SEC_OBJ * q_u,
396 prs_struct *ps, int depth)
401 prs_debug(ps, depth, desc, "samr_io_q_set_sec_obj");
407 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
410 if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
413 if(!sec_io_desc_buf("sec_desc", &q_u->buf, ps, depth))
420 /*******************************************************************
421 reads or writes a structure.
422 ********************************************************************/
424 void init_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ * q_u,
425 POLICY_HND *user_pol, uint32 sec_info)
427 DEBUG(5, ("samr_init_samr_q_query_sec_obj\n"));
429 q_u->user_pol = *user_pol;
430 q_u->sec_info = sec_info;
434 /*******************************************************************
435 reads or writes a structure.
436 ********************************************************************/
438 BOOL samr_io_q_query_sec_obj(const char *desc, SAMR_Q_QUERY_SEC_OBJ * q_u,
439 prs_struct *ps, int depth)
444 prs_debug(ps, depth, desc, "samr_io_q_query_sec_obj");
450 if(!smb_io_pol_hnd("user_pol", &q_u->user_pol, ps, depth))
453 if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
459 /*******************************************************************
460 reads or writes a structure.
461 ********************************************************************/
463 void init_samr_q_query_domain_info(SAMR_Q_QUERY_DOMAIN_INFO * q_u,
464 POLICY_HND *domain_pol, uint16 switch_value)
466 DEBUG(5, ("samr_init_samr_q_query_domain_info\n"));
468 q_u->domain_pol = *domain_pol;
469 q_u->switch_value = switch_value;
472 /*******************************************************************
473 reads or writes a structure.
474 ********************************************************************/
476 BOOL samr_io_q_query_domain_info(const char *desc, SAMR_Q_QUERY_DOMAIN_INFO * q_u,
477 prs_struct *ps, int depth)
482 prs_debug(ps, depth, desc, "samr_io_q_query_domain_info");
488 if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
491 if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
497 /*******************************************************************
499 ********************************************************************/
501 void init_unk_info1(SAM_UNK_INFO_1 *u_1, uint16 min_pass_len, uint16 pass_hist,
502 uint32 password_properties, NTTIME nt_expire, NTTIME nt_min_age)
504 u_1->min_length_password = min_pass_len;
505 u_1->password_history = pass_hist;
507 if (lp_check_password_script() && *lp_check_password_script()) {
508 password_properties |= DOMAIN_PASSWORD_COMPLEX;
510 u_1->password_properties = password_properties;
512 /* password never expire */
513 u_1->expire = nt_expire;
515 /* can change the password now */
516 u_1->min_passwordage = nt_min_age;
520 /*******************************************************************
521 reads or writes a structure.
522 ********************************************************************/
524 static BOOL sam_io_unk_info1(const char *desc, SAM_UNK_INFO_1 * u_1,
525 prs_struct *ps, int depth)
530 prs_debug(ps, depth, desc, "sam_io_unk_info1");
533 if(!prs_uint16("min_length_password", ps, depth, &u_1->min_length_password))
535 if(!prs_uint16("password_history", ps, depth, &u_1->password_history))
537 if(!prs_uint32("password_properties", ps, depth, &u_1->password_properties))
539 if(!smb_io_time("expire", &u_1->expire, ps, depth))
541 if(!smb_io_time("min_passwordage", &u_1->min_passwordage, ps, depth))
547 /*******************************************************************
549 ********************************************************************/
551 void init_unk_info2(SAM_UNK_INFO_2 * u_2,
552 const char *comment, const char *domain, const char *server,
553 uint32 seq_num, uint32 num_users, uint32 num_groups, uint32 num_alias, NTTIME nt_logout, uint32 server_role)
555 u_2->logout = nt_logout;
557 u_2->seq_num = seq_num;
560 u_2->unknown_4 = 0x00000001;
561 u_2->server_role = server_role;
562 u_2->unknown_6 = 0x00000001;
563 u_2->num_domain_usrs = num_users;
564 u_2->num_domain_grps = num_groups;
565 u_2->num_local_grps = num_alias;
567 init_unistr2(&u_2->uni_comment, comment, UNI_FLAGS_NONE);
568 init_uni_hdr(&u_2->hdr_comment, &u_2->uni_comment);
569 init_unistr2(&u_2->uni_domain, domain, UNI_FLAGS_NONE);
570 init_uni_hdr(&u_2->hdr_domain, &u_2->uni_domain);
571 init_unistr2(&u_2->uni_server, server, UNI_FLAGS_NONE);
572 init_uni_hdr(&u_2->hdr_server, &u_2->uni_server);
575 /*******************************************************************
576 reads or writes a structure.
577 ********************************************************************/
579 static BOOL sam_io_unk_info2(const char *desc, SAM_UNK_INFO_2 * u_2,
580 prs_struct *ps, int depth)
585 prs_debug(ps, depth, desc, "sam_io_unk_info2");
588 if(!smb_io_time("logout", &u_2->logout, ps, depth))
590 if(!smb_io_unihdr("hdr_comment", &u_2->hdr_comment, ps, depth))
592 if(!smb_io_unihdr("hdr_domain", &u_2->hdr_domain, ps, depth))
594 if(!smb_io_unihdr("hdr_server", &u_2->hdr_server, ps, depth))
597 /* put all the data in here, at the moment, including what the above
598 pointer is referring to
601 if(!prs_uint64("seq_num ", ps, depth, &u_2->seq_num))
604 if(!prs_uint32("unknown_4 ", ps, depth, &u_2->unknown_4)) /* 0x0000 0001 */
606 if(!prs_uint32("server_role ", ps, depth, &u_2->server_role))
608 if(!prs_uint32("unknown_6 ", ps, depth, &u_2->unknown_6)) /* 0x0000 0001 */
610 if(!prs_uint32("num_domain_usrs ", ps, depth, &u_2->num_domain_usrs))
612 if(!prs_uint32("num_domain_grps", ps, depth, &u_2->num_domain_grps))
614 if(!prs_uint32("num_local_grps", ps, depth, &u_2->num_local_grps))
617 if(!smb_io_unistr2("uni_comment", &u_2->uni_comment, u_2->hdr_comment.buffer, ps, depth))
619 if(!smb_io_unistr2("uni_domain", &u_2->uni_domain, u_2->hdr_domain.buffer, ps, depth))
621 if(!smb_io_unistr2("uni_server", &u_2->uni_server, u_2->hdr_server.buffer, ps, depth))
627 /*******************************************************************
629 ********************************************************************/
631 void init_unk_info3(SAM_UNK_INFO_3 *u_3, NTTIME nt_logout)
633 u_3->logout = nt_logout;
636 /*******************************************************************
637 reads or writes a structure.
638 ********************************************************************/
640 static BOOL sam_io_unk_info3(const char *desc, SAM_UNK_INFO_3 * u_3,
641 prs_struct *ps, int depth)
646 prs_debug(ps, depth, desc, "sam_io_unk_info3");
649 if(!smb_io_time("logout", &u_3->logout, ps, depth))
655 /*******************************************************************
657 ********************************************************************/
659 void init_unk_info4(SAM_UNK_INFO_4 * u_4,const char *comment)
661 init_unistr2(&u_4->uni_comment, comment, UNI_FLAGS_NONE);
662 init_uni_hdr(&u_4->hdr_comment, &u_4->uni_comment);
665 /*******************************************************************
666 reads or writes a structure.
667 ********************************************************************/
669 static BOOL sam_io_unk_info4(const char *desc, SAM_UNK_INFO_4 * u_4,
670 prs_struct *ps, int depth)
675 prs_debug(ps, depth, desc, "sam_io_unk_info4");
678 if(!smb_io_unihdr("hdr_comment", &u_4->hdr_comment, ps, depth))
681 if(!smb_io_unistr2("uni_comment", &u_4->uni_comment, u_4->hdr_comment.buffer, ps, depth))
687 /*******************************************************************
689 ********************************************************************/
691 void init_unk_info5(SAM_UNK_INFO_5 * u_5,const char *domain)
693 init_unistr2(&u_5->uni_domain, domain, UNI_FLAGS_NONE);
694 init_uni_hdr(&u_5->hdr_domain, &u_5->uni_domain);
697 /*******************************************************************
698 reads or writes a structure.
699 ********************************************************************/
701 static BOOL sam_io_unk_info5(const char *desc, SAM_UNK_INFO_5 * u_5,
702 prs_struct *ps, int depth)
707 prs_debug(ps, depth, desc, "sam_io_unk_info5");
710 if(!smb_io_unihdr("hdr_domain", &u_5->hdr_domain, ps, depth))
713 if(!smb_io_unistr2("uni_domain", &u_5->uni_domain, u_5->hdr_domain.buffer, ps, depth))
719 /*******************************************************************
721 ********************************************************************/
723 void init_unk_info6(SAM_UNK_INFO_6 * u_6, const char *server)
725 init_unistr2(&u_6->uni_server, server, UNI_FLAGS_NONE);
726 init_uni_hdr(&u_6->hdr_server, &u_6->uni_server);
729 /*******************************************************************
730 reads or writes a structure.
731 ********************************************************************/
733 static BOOL sam_io_unk_info6(const char *desc, SAM_UNK_INFO_6 * u_6,
734 prs_struct *ps, int depth)
739 prs_debug(ps, depth, desc, "sam_io_unk_info6");
742 if(!smb_io_unihdr("hdr_server", &u_6->hdr_server, ps, depth))
745 if(!smb_io_unistr2("uni_server", &u_6->uni_server, u_6->hdr_server.buffer, ps, depth))
751 /*******************************************************************
753 ********************************************************************/
755 void init_unk_info7(SAM_UNK_INFO_7 * u_7, uint32 server_role)
757 u_7->server_role = server_role;
760 /*******************************************************************
761 reads or writes a structure.
762 ********************************************************************/
764 static BOOL sam_io_unk_info7(const char *desc, SAM_UNK_INFO_7 * u_7,
765 prs_struct *ps, int depth)
770 prs_debug(ps, depth, desc, "sam_io_unk_info7");
773 if(!prs_uint16("server_role", ps, depth, &u_7->server_role))
779 /*******************************************************************
781 ********************************************************************/
783 void init_unk_info8(SAM_UNK_INFO_8 * u_8, uint32 seq_num)
785 unix_to_nt_time(&u_8->domain_create_time, 0);
786 u_8->seq_num = seq_num;
789 /*******************************************************************
790 reads or writes a structure.
791 ********************************************************************/
793 static BOOL sam_io_unk_info8(const char *desc, SAM_UNK_INFO_8 * u_8,
794 prs_struct *ps, int depth)
799 prs_debug(ps, depth, desc, "sam_io_unk_info8");
802 if (!prs_uint64("seq_num", ps, depth, &u_8->seq_num))
805 if(!smb_io_time("domain_create_time", &u_8->domain_create_time, ps, depth))
811 /*******************************************************************
813 ********************************************************************/
815 void init_unk_info9(SAM_UNK_INFO_9 * u_9, uint32 unknown)
817 u_9->unknown = unknown;
820 /*******************************************************************
821 reads or writes a structure.
822 ********************************************************************/
824 static BOOL sam_io_unk_info9(const char *desc, SAM_UNK_INFO_9 * u_9,
825 prs_struct *ps, int depth)
830 prs_debug(ps, depth, desc, "sam_io_unk_info9");
833 if (!prs_uint32("unknown", ps, depth, &u_9->unknown))
839 /*******************************************************************
841 ********************************************************************/
843 void init_unk_info12(SAM_UNK_INFO_12 * u_12, NTTIME nt_lock_duration, NTTIME nt_reset_time, uint16 lockout)
845 u_12->duration = nt_lock_duration;
846 u_12->reset_count = nt_reset_time;
848 u_12->bad_attempt_lockout = lockout;
851 /*******************************************************************
852 reads or writes a structure.
853 ********************************************************************/
855 static BOOL sam_io_unk_info12(const char *desc, SAM_UNK_INFO_12 * u_12,
856 prs_struct *ps, int depth)
861 prs_debug(ps, depth, desc, "sam_io_unk_info12");
864 if(!smb_io_time("duration", &u_12->duration, ps, depth))
866 if(!smb_io_time("reset_count", &u_12->reset_count, ps, depth))
868 if(!prs_uint16("bad_attempt_lockout", ps, depth, &u_12->bad_attempt_lockout))
874 /*******************************************************************
876 ********************************************************************/
878 void init_unk_info13(SAM_UNK_INFO_13 * u_13, uint32 seq_num)
880 unix_to_nt_time(&u_13->domain_create_time, 0);
881 u_13->seq_num = seq_num;
886 /*******************************************************************
887 reads or writes a structure.
888 ********************************************************************/
890 static BOOL sam_io_unk_info13(const char *desc, SAM_UNK_INFO_13 * u_13,
891 prs_struct *ps, int depth)
896 prs_debug(ps, depth, desc, "sam_io_unk_info13");
899 if (!prs_uint64("seq_num", ps, depth, &u_13->seq_num))
902 if(!smb_io_time("domain_create_time", &u_13->domain_create_time, ps, depth))
905 if (!prs_uint32("unknown1", ps, depth, &u_13->unknown1))
907 if (!prs_uint32("unknown2", ps, depth, &u_13->unknown2))
913 /*******************************************************************
914 inits a SAMR_R_QUERY_DOMAIN_INFO structure.
915 ********************************************************************/
917 void init_samr_r_query_domain_info(SAMR_R_QUERY_DOMAIN_INFO * r_u,
918 uint16 switch_value, SAM_UNK_CTR * ctr,
921 DEBUG(5, ("init_samr_r_query_domain_info\n"));
924 r_u->switch_value = 0;
925 r_u->status = status; /* return status */
927 if (NT_STATUS_IS_OK(status)) {
928 r_u->switch_value = switch_value;
934 /*******************************************************************
935 reads or writes a structure.
936 ********************************************************************/
938 BOOL samr_io_r_query_domain_info(const char *desc, SAMR_R_QUERY_DOMAIN_INFO * r_u,
939 prs_struct *ps, int depth)
944 prs_debug(ps, depth, desc, "samr_io_r_query_domain_info");
950 if(!prs_uint32("ptr_0 ", ps, depth, &r_u->ptr_0))
953 if (r_u->ptr_0 != 0 && r_u->ctr != NULL) {
954 if(!prs_uint16("switch_value", ps, depth, &r_u->switch_value))
959 switch (r_u->switch_value) {
961 if(!sam_io_unk_info13("unk_inf13", &r_u->ctr->info.inf13, ps, depth))
965 if(!sam_io_unk_info12("unk_inf12", &r_u->ctr->info.inf12, ps, depth))
969 if(!sam_io_unk_info9("unk_inf9",&r_u->ctr->info.inf9, ps,depth))
973 if(!sam_io_unk_info8("unk_inf8",&r_u->ctr->info.inf8, ps,depth))
977 if(!sam_io_unk_info7("unk_inf7",&r_u->ctr->info.inf7, ps,depth))
981 if(!sam_io_unk_info6("unk_inf6",&r_u->ctr->info.inf6, ps,depth))
985 if(!sam_io_unk_info5("unk_inf5",&r_u->ctr->info.inf5, ps,depth))
989 if(!sam_io_unk_info4("unk_inf4",&r_u->ctr->info.inf4, ps,depth))
993 if(!sam_io_unk_info3("unk_inf3",&r_u->ctr->info.inf3, ps,depth))
997 if(!sam_io_unk_info2("unk_inf2",&r_u->ctr->info.inf2, ps,depth))
1001 if(!sam_io_unk_info1("unk_inf1",&r_u->ctr->info.inf1, ps,depth))
1005 DEBUG(0, ("samr_io_r_query_domain_info: unknown switch level 0x%x\n",
1006 r_u->switch_value));
1007 r_u->status = NT_STATUS_INVALID_INFO_CLASS;
1015 if(!prs_ntstatus("status", ps, depth, &r_u->status))
1021 /*******************************************************************
1022 reads or writes a structure.
1023 ********************************************************************/
1025 void init_samr_q_set_sec_obj(SAMR_Q_SET_SEC_OBJ * q_u,
1026 POLICY_HND *pol, uint32 sec_info, SEC_DESC_BUF *buf)
1028 DEBUG(5, ("samr_init_samr_q_set_sec_obj\n"));
1031 q_u->sec_info = sec_info;
1036 /*******************************************************************
1037 reads or writes a SAMR_R_SET_SEC_OBJ structure.
1038 ********************************************************************/
1040 BOOL samr_io_r_set_sec_obj(const char *desc, SAMR_R_SET_SEC_OBJ * r_u,
1041 prs_struct *ps, int depth)
1046 prs_debug(ps, depth, desc, "samr_io_r_set_sec_obj");
1052 if(!prs_ntstatus("status", ps, depth, &r_u->status))
1058 /*******************************************************************
1059 reads or writes a SAMR_R_QUERY_SEC_OBJ structure.
1060 ********************************************************************/
1062 BOOL samr_io_r_query_sec_obj(const char *desc, SAMR_R_QUERY_SEC_OBJ * r_u,
1063 prs_struct *ps, int depth)
1068 prs_debug(ps, depth, desc, "samr_io_r_query_sec_obj");
1074 if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
1076 if (r_u->ptr != 0) {
1077 if(!sec_io_desc_buf("sec", &r_u->buf, ps, depth))
1081 if(!prs_ntstatus("status", ps, depth, &r_u->status))
1087 /*******************************************************************
1088 reads or writes a SAM_STR1 structure.
1089 ********************************************************************/
1091 static BOOL sam_io_sam_str1(const char *desc, SAM_STR1 * sam, uint32 acct_buf,
1092 uint32 name_buf, uint32 desc_buf,
1093 prs_struct *ps, int depth)
1098 prs_debug(ps, depth, desc, "sam_io_sam_str1");
1103 if (!smb_io_unistr2("name", &sam->uni_acct_name, acct_buf, ps, depth))
1106 if (!smb_io_unistr2("desc", &sam->uni_acct_desc, desc_buf, ps, depth))
1109 if (!smb_io_unistr2("full", &sam->uni_full_name, name_buf, ps, depth))
1115 /*******************************************************************
1116 inits a SAM_ENTRY1 structure.
1117 ********************************************************************/
1119 static void init_sam_entry1(SAM_ENTRY1 *sam, uint32 user_idx,
1120 UNISTR2 *sam_name, UNISTR2 *sam_full,
1121 UNISTR2 *sam_desc, uint32 rid_user,
1124 DEBUG(5, ("init_sam_entry1\n"));
1128 sam->user_idx = user_idx;
1129 sam->rid_user = rid_user;
1130 sam->acb_info = acb_info;
1132 init_uni_hdr(&sam->hdr_acct_name, sam_name);
1133 init_uni_hdr(&sam->hdr_user_name, sam_full);
1134 init_uni_hdr(&sam->hdr_user_desc, sam_desc);
1137 /*******************************************************************
1138 reads or writes a SAM_ENTRY1 structure.
1139 ********************************************************************/
1141 static BOOL sam_io_sam_entry1(const char *desc, SAM_ENTRY1 * sam,
1142 prs_struct *ps, int depth)
1147 prs_debug(ps, depth, desc, "sam_io_sam_entry1");
1153 if(!prs_uint32("user_idx ", ps, depth, &sam->user_idx))
1156 if(!prs_uint32("rid_user ", ps, depth, &sam->rid_user))
1158 if(!prs_uint32("acb_info ", ps, depth, &sam->acb_info))
1161 if (!smb_io_unihdr("hdr_acct_name", &sam->hdr_acct_name, ps, depth))
1163 if (!smb_io_unihdr("hdr_user_desc", &sam->hdr_user_desc, ps, depth))
1165 if (!smb_io_unihdr("hdr_user_name", &sam->hdr_user_name, ps, depth))
1171 /*******************************************************************
1172 reads or writes a SAM_STR2 structure.
1173 ********************************************************************/
1175 static BOOL sam_io_sam_str2(const char *desc, SAM_STR2 * sam, uint32 acct_buf,
1176 uint32 desc_buf, prs_struct *ps, int depth)
1181 prs_debug(ps, depth, desc, "sam_io_sam_str2");
1187 if(!smb_io_unistr2("uni_srv_name", &sam->uni_srv_name, acct_buf, ps, depth)) /* account name unicode string */
1189 if(!smb_io_unistr2("uni_srv_desc", &sam->uni_srv_desc, desc_buf, ps, depth)) /* account desc unicode string */
1195 /*******************************************************************
1196 inits a SAM_ENTRY2 structure.
1197 ********************************************************************/
1198 static void init_sam_entry2(SAM_ENTRY2 * sam, uint32 user_idx,
1199 UNISTR2 *sam_name, UNISTR2 *sam_desc,
1200 uint32 rid_user, uint32 acb_info)
1202 DEBUG(5, ("init_sam_entry2\n"));
1204 sam->user_idx = user_idx;
1205 sam->rid_user = rid_user;
1206 sam->acb_info = acb_info;
1208 init_uni_hdr(&sam->hdr_srv_name, sam_name);
1209 init_uni_hdr(&sam->hdr_srv_desc, sam_desc);
1212 /*******************************************************************
1213 reads or writes a SAM_ENTRY2 structure.
1214 ********************************************************************/
1216 static BOOL sam_io_sam_entry2(const char *desc, SAM_ENTRY2 * sam,
1217 prs_struct *ps, int depth)
1222 prs_debug(ps, depth, desc, "sam_io_sam_entry2");
1228 if(!prs_uint32("user_idx ", ps, depth, &sam->user_idx))
1231 if(!prs_uint32("rid_user ", ps, depth, &sam->rid_user))
1233 if(!prs_uint32("acb_info ", ps, depth, &sam->acb_info))
1236 if(!smb_io_unihdr("unihdr", &sam->hdr_srv_name, ps, depth)) /* account name unicode string header */
1238 if(!smb_io_unihdr("unihdr", &sam->hdr_srv_desc, ps, depth)) /* account name unicode string header */
1244 /*******************************************************************
1245 reads or writes a SAM_STR3 structure.
1246 ********************************************************************/
1248 static BOOL sam_io_sam_str3(const char *desc, SAM_STR3 * sam, uint32 acct_buf,
1249 uint32 desc_buf, prs_struct *ps, int depth)
1254 prs_debug(ps, depth, desc, "sam_io_sam_str3");
1260 if(!smb_io_unistr2("uni_grp_name", &sam->uni_grp_name, acct_buf, ps, depth)) /* account name unicode string */
1262 if(!smb_io_unistr2("uni_grp_desc", &sam->uni_grp_desc, desc_buf, ps, depth)) /* account desc unicode string */
1268 /*******************************************************************
1269 inits a SAM_ENTRY3 structure.
1270 ********************************************************************/
1272 static void init_sam_entry3(SAM_ENTRY3 * sam, uint32 grp_idx,
1273 UNISTR2 *grp_name, UNISTR2 *grp_desc,
1276 DEBUG(5, ("init_sam_entry3\n"));
1278 sam->grp_idx = grp_idx;
1279 sam->rid_grp = rid_grp;
1280 sam->attr = 0x07; /* group rid attributes - gets ignored by nt 4.0 */
1282 init_uni_hdr(&sam->hdr_grp_name, grp_name);
1283 init_uni_hdr(&sam->hdr_grp_desc, grp_desc);
1286 /*******************************************************************
1287 reads or writes a SAM_ENTRY3 structure.
1288 ********************************************************************/
1290 static BOOL sam_io_sam_entry3(const char *desc, SAM_ENTRY3 * sam,
1291 prs_struct *ps, int depth)
1296 prs_debug(ps, depth, desc, "sam_io_sam_entry3");
1302 if(!prs_uint32("grp_idx", ps, depth, &sam->grp_idx))
1305 if(!prs_uint32("rid_grp", ps, depth, &sam->rid_grp))
1307 if(!prs_uint32("attr ", ps, depth, &sam->attr))
1310 if(!smb_io_unihdr("unihdr", &sam->hdr_grp_name, ps, depth)) /* account name unicode string header */
1312 if(!smb_io_unihdr("unihdr", &sam->hdr_grp_desc, ps, depth)) /* account name unicode string header */
1318 /*******************************************************************
1319 inits a SAM_ENTRY4 structure.
1320 ********************************************************************/
1322 static void init_sam_entry4(SAM_ENTRY4 * sam, uint32 user_idx,
1323 uint32 len_acct_name)
1325 DEBUG(5, ("init_sam_entry4\n"));
1327 sam->user_idx = user_idx;
1328 init_str_hdr(&sam->hdr_acct_name, len_acct_name+1, len_acct_name, len_acct_name != 0);
1331 /*******************************************************************
1332 reads or writes a SAM_ENTRY4 structure.
1333 ********************************************************************/
1335 static BOOL sam_io_sam_entry4(const char *desc, SAM_ENTRY4 * sam,
1336 prs_struct *ps, int depth)
1341 prs_debug(ps, depth, desc, "sam_io_sam_entry4");
1347 if(!prs_uint32("user_idx", ps, depth, &sam->user_idx))
1349 if(!smb_io_strhdr("strhdr", &sam->hdr_acct_name, ps, depth))
1355 /*******************************************************************
1356 inits a SAM_ENTRY5 structure.
1357 ********************************************************************/
1359 static void init_sam_entry5(SAM_ENTRY5 * sam, uint32 grp_idx,
1360 uint32 len_grp_name)
1362 DEBUG(5, ("init_sam_entry5\n"));
1364 sam->grp_idx = grp_idx;
1365 init_str_hdr(&sam->hdr_grp_name, len_grp_name, len_grp_name,
1369 /*******************************************************************
1370 reads or writes a SAM_ENTRY5 structure.
1371 ********************************************************************/
1373 static BOOL sam_io_sam_entry5(const char *desc, SAM_ENTRY5 * sam,
1374 prs_struct *ps, int depth)
1379 prs_debug(ps, depth, desc, "sam_io_sam_entry5");
1385 if(!prs_uint32("grp_idx", ps, depth, &sam->grp_idx))
1387 if(!smb_io_strhdr("strhdr", &sam->hdr_grp_name, ps, depth))
1393 /*******************************************************************
1394 inits a SAM_ENTRY structure.
1395 ********************************************************************/
1397 void init_sam_entry(SAM_ENTRY *sam, UNISTR2 *uni2, uint32 rid)
1399 DEBUG(10, ("init_sam_entry: %d\n", rid));
1402 init_uni_hdr(&sam->hdr_name, uni2);
1405 /*******************************************************************
1406 reads or writes a SAM_ENTRY structure.
1407 ********************************************************************/
1409 static BOOL sam_io_sam_entry(const char *desc, SAM_ENTRY * sam,
1410 prs_struct *ps, int depth)
1415 prs_debug(ps, depth, desc, "sam_io_sam_entry");
1420 if(!prs_uint32("rid", ps, depth, &sam->rid))
1422 if(!smb_io_unihdr("unihdr", &sam->hdr_name, ps, depth)) /* account name unicode string header */
1428 /*******************************************************************
1429 inits a SAMR_Q_ENUM_DOM_USERS structure.
1430 ********************************************************************/
1432 void init_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS * q_e, POLICY_HND *pol,
1434 uint32 acb_mask, uint32 size)
1436 DEBUG(5, ("init_samr_q_enum_dom_users\n"));
1440 q_e->start_idx = start_idx; /* zero indicates lots */
1441 q_e->acb_mask = acb_mask;
1442 q_e->max_size = size;
1445 /*******************************************************************
1446 reads or writes a structure.
1447 ********************************************************************/
1449 BOOL samr_io_q_enum_dom_users(const char *desc, SAMR_Q_ENUM_DOM_USERS * q_e,
1450 prs_struct *ps, int depth)
1455 prs_debug(ps, depth, desc, "samr_io_q_enum_dom_users");
1461 if(!smb_io_pol_hnd("domain_pol", &q_e->pol, ps, depth))
1464 if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
1466 if(!prs_uint32("acb_mask ", ps, depth, &q_e->acb_mask))
1469 if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
1476 /*******************************************************************
1477 inits a SAMR_R_ENUM_DOM_USERS structure.
1478 ********************************************************************/
1480 void init_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS * r_u,
1481 uint32 next_idx, uint32 num_sam_entries)
1483 DEBUG(5, ("init_samr_r_enum_dom_users\n"));
1485 r_u->next_idx = next_idx;
1487 if (num_sam_entries != 0) {
1488 r_u->ptr_entries1 = 1;
1489 r_u->ptr_entries2 = 1;
1490 r_u->num_entries2 = num_sam_entries;
1491 r_u->num_entries3 = num_sam_entries;
1493 r_u->num_entries4 = num_sam_entries;
1495 r_u->ptr_entries1 = 0;
1496 r_u->num_entries2 = num_sam_entries;
1497 r_u->ptr_entries2 = 1;
1501 /*******************************************************************
1502 reads or writes a structure.
1503 ********************************************************************/
1505 BOOL samr_io_r_enum_dom_users(const char *desc, SAMR_R_ENUM_DOM_USERS * r_u,
1506 prs_struct *ps, int depth)
1513 prs_debug(ps, depth, desc, "samr_io_r_enum_dom_users");
1519 if(!prs_uint32("next_idx ", ps, depth, &r_u->next_idx))
1521 if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
1524 if (r_u->ptr_entries1 != 0) {
1525 if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
1527 if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
1529 if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
1532 if (UNMARSHALLING(ps) && (r_u->num_entries2 != 0)) {
1533 r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY, r_u->num_entries2);
1534 r_u->uni_acct_name = PRS_ALLOC_MEM(ps,UNISTR2, r_u->num_entries2);
1537 if ((r_u->sam == NULL || r_u->uni_acct_name == NULL) && r_u->num_entries2 != 0) {
1538 DEBUG(0,("NULL pointers in SAMR_R_ENUM_DOM_USERS\n"));
1539 r_u->num_entries4 = 0;
1540 r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
1544 for (i = 0; i < r_u->num_entries2; i++) {
1545 if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
1549 for (i = 0; i < r_u->num_entries2; i++) {
1550 if(!smb_io_unistr2("", &r_u->uni_acct_name[i],r_u->sam[i].hdr_name.buffer, ps,depth))
1559 if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
1561 if(!prs_ntstatus("status", ps, depth, &r_u->status))
1567 /*******************************************************************
1568 inits a SAMR_Q_QUERY_DISPINFO structure.
1569 ********************************************************************/
1571 void init_samr_q_query_dispinfo(SAMR_Q_QUERY_DISPINFO * q_e, POLICY_HND *pol,
1572 uint16 switch_level, uint32 start_idx,
1573 uint32 max_entries, uint32 max_size)
1575 DEBUG(5, ("init_samr_q_query_dispinfo\n"));
1577 q_e->domain_pol = *pol;
1579 q_e->switch_level = switch_level;
1581 q_e->start_idx = start_idx;
1582 q_e->max_entries = max_entries;
1583 q_e->max_size = max_size;
1586 /*******************************************************************
1587 reads or writes a structure.
1588 ********************************************************************/
1590 BOOL samr_io_q_query_dispinfo(const char *desc, SAMR_Q_QUERY_DISPINFO * q_e,
1591 prs_struct *ps, int depth)
1596 prs_debug(ps, depth, desc, "samr_io_q_query_dispinfo");
1602 if(!smb_io_pol_hnd("domain_pol", &q_e->domain_pol, ps, depth))
1605 if(!prs_uint16("switch_level", ps, depth, &q_e->switch_level))
1610 if(!prs_uint32("start_idx ", ps, depth, &q_e->start_idx))
1612 if(!prs_uint32("max_entries ", ps, depth, &q_e->max_entries))
1614 if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
1620 /*******************************************************************
1621 inits a SAM_DISPINFO_1 structure.
1622 ********************************************************************/
1624 NTSTATUS init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 **sam,
1625 uint32 num_entries, uint32 start_idx,
1626 struct samr_displayentry *entries)
1630 DEBUG(10, ("init_sam_dispinfo_1: num_entries: %d\n", num_entries));
1633 return NT_STATUS_OK;
1635 *sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_1, num_entries);
1637 return NT_STATUS_NO_MEMORY;
1639 (*sam)->sam=TALLOC_ARRAY(ctx, SAM_ENTRY1, num_entries);
1640 if ((*sam)->sam == NULL)
1641 return NT_STATUS_NO_MEMORY;
1643 (*sam)->str=TALLOC_ARRAY(ctx, SAM_STR1, num_entries);
1644 if ((*sam)->str == NULL)
1645 return NT_STATUS_NO_MEMORY;
1647 for (i = 0; i < num_entries ; i++) {
1648 init_unistr2(&(*sam)->str[i].uni_acct_name,
1649 entries[i].account_name, UNI_FLAGS_NONE);
1650 init_unistr2(&(*sam)->str[i].uni_full_name,
1651 entries[i].fullname, UNI_FLAGS_NONE);
1652 init_unistr2(&(*sam)->str[i].uni_acct_desc,
1653 entries[i].description, UNI_FLAGS_NONE);
1655 init_sam_entry1(&(*sam)->sam[i], start_idx+i+1,
1656 &(*sam)->str[i].uni_acct_name,
1657 &(*sam)->str[i].uni_full_name,
1658 &(*sam)->str[i].uni_acct_desc,
1659 entries[i].rid, entries[i].acct_flags);
1662 return NT_STATUS_OK;
1665 /*******************************************************************
1666 reads or writes a structure.
1667 ********************************************************************/
1669 static BOOL sam_io_sam_dispinfo_1(const char *desc, SAM_DISPINFO_1 * sam,
1671 prs_struct *ps, int depth)
1675 prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_1");
1681 if (UNMARSHALLING(ps) && num_entries > 0) {
1683 if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY1, num_entries)) == NULL) {
1684 DEBUG(0, ("out of memory allocating SAM_ENTRY1\n"));
1688 if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR1, num_entries)) == NULL) {
1689 DEBUG(0, ("out of memory allocating SAM_STR1\n"));
1694 for (i = 0; i < num_entries; i++) {
1695 if(!sam_io_sam_entry1("", &sam->sam[i], ps, depth))
1699 for (i = 0; i < num_entries; i++) {
1700 if(!sam_io_sam_str1("", &sam->str[i],
1701 sam->sam[i].hdr_acct_name.buffer,
1702 sam->sam[i].hdr_user_name.buffer,
1703 sam->sam[i].hdr_user_desc.buffer, ps, depth))
1710 /*******************************************************************
1711 inits a SAM_DISPINFO_2 structure.
1712 ********************************************************************/
1714 NTSTATUS init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 **sam,
1715 uint32 num_entries, uint32 start_idx,
1716 struct samr_displayentry *entries)
1720 DEBUG(10, ("init_sam_dispinfo_2: num_entries: %d\n", num_entries));
1723 return NT_STATUS_OK;
1725 *sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_2, num_entries);
1727 return NT_STATUS_NO_MEMORY;
1729 (*sam)->sam = TALLOC_ARRAY(ctx, SAM_ENTRY2, num_entries);
1730 if ((*sam)->sam == NULL)
1731 return NT_STATUS_NO_MEMORY;
1733 (*sam)->str=TALLOC_ARRAY(ctx, SAM_STR2, num_entries);
1734 if ((*sam)->str == NULL)
1735 return NT_STATUS_NO_MEMORY;
1737 for (i = 0; i < num_entries; i++) {
1738 init_unistr2(&(*sam)->str[i].uni_srv_name,
1739 entries[i].account_name, UNI_FLAGS_NONE);
1740 init_unistr2(&(*sam)->str[i].uni_srv_desc,
1741 entries[i].description, UNI_FLAGS_NONE);
1743 init_sam_entry2(&(*sam)->sam[i], start_idx + i + 1,
1744 &(*sam)->str[i].uni_srv_name,
1745 &(*sam)->str[i].uni_srv_desc,
1746 entries[i].rid, entries[i].acct_flags);
1749 return NT_STATUS_OK;
1752 /*******************************************************************
1753 reads or writes a structure.
1754 ********************************************************************/
1756 static BOOL sam_io_sam_dispinfo_2(const char *desc, SAM_DISPINFO_2 * sam,
1758 prs_struct *ps, int depth)
1765 prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_2");
1771 if (UNMARSHALLING(ps) && num_entries > 0) {
1773 if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY2, num_entries)) == NULL) {
1774 DEBUG(0, ("out of memory allocating SAM_ENTRY2\n"));
1778 if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR2, num_entries)) == NULL) {
1779 DEBUG(0, ("out of memory allocating SAM_STR2\n"));
1784 for (i = 0; i < num_entries; i++) {
1785 if(!sam_io_sam_entry2("", &sam->sam[i], ps, depth))
1789 for (i = 0; i < num_entries; i++) {
1790 if(!sam_io_sam_str2("", &sam->str[i],
1791 sam->sam[i].hdr_srv_name.buffer,
1792 sam->sam[i].hdr_srv_desc.buffer, ps, depth))
1799 /*******************************************************************
1800 inits a SAM_DISPINFO_3 structure.
1801 ********************************************************************/
1803 NTSTATUS init_sam_dispinfo_3(TALLOC_CTX *ctx, SAM_DISPINFO_3 **sam,
1804 uint32 num_entries, uint32 start_idx,
1805 struct samr_displayentry *entries)
1809 DEBUG(5, ("init_sam_dispinfo_3: num_entries: %d\n", num_entries));
1812 return NT_STATUS_OK;
1814 *sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_3, num_entries);
1816 return NT_STATUS_NO_MEMORY;
1818 if (!((*sam)->sam=TALLOC_ARRAY(ctx, SAM_ENTRY3, num_entries)))
1819 return NT_STATUS_NO_MEMORY;
1821 if (!((*sam)->str=TALLOC_ARRAY(ctx, SAM_STR3, num_entries)))
1822 return NT_STATUS_NO_MEMORY;
1824 for (i = 0; i < num_entries; i++) {
1825 DEBUG(11, ("init_sam_dispinfo_3: entry: %d\n",i));
1827 init_unistr2(&(*sam)->str[i].uni_grp_name,
1828 entries[i].account_name, UNI_FLAGS_NONE);
1829 init_unistr2(&(*sam)->str[i].uni_grp_desc,
1830 entries[i].description, UNI_FLAGS_NONE);
1832 init_sam_entry3(&(*sam)->sam[i], start_idx+i+1,
1833 &(*sam)->str[i].uni_grp_name,
1834 &(*sam)->str[i].uni_grp_desc,
1838 return NT_STATUS_OK;
1841 /*******************************************************************
1842 reads or writes a structure.
1843 ********************************************************************/
1845 static BOOL sam_io_sam_dispinfo_3(const char *desc, SAM_DISPINFO_3 * sam,
1847 prs_struct *ps, int depth)
1854 prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_3");
1860 if (UNMARSHALLING(ps) && num_entries > 0) {
1862 if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY3, num_entries)) == NULL) {
1863 DEBUG(0, ("out of memory allocating SAM_ENTRY3\n"));
1867 if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR3, num_entries)) == NULL) {
1868 DEBUG(0, ("out of memory allocating SAM_STR3\n"));
1873 for (i = 0; i < num_entries; i++) {
1874 if(!sam_io_sam_entry3("", &sam->sam[i], ps, depth))
1878 for (i = 0; i < num_entries; i++) {
1879 if(!sam_io_sam_str3("", &sam->str[i],
1880 sam->sam[i].hdr_grp_name.buffer,
1881 sam->sam[i].hdr_grp_desc.buffer, ps, depth))
1888 /*******************************************************************
1889 inits a SAM_DISPINFO_4 structure.
1890 ********************************************************************/
1892 NTSTATUS init_sam_dispinfo_4(TALLOC_CTX *ctx, SAM_DISPINFO_4 **sam,
1893 uint32 num_entries, uint32 start_idx,
1894 struct samr_displayentry *entries)
1898 DEBUG(5, ("init_sam_dispinfo_4: num_entries: %d\n", num_entries));
1901 return NT_STATUS_OK;
1903 *sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_4, num_entries);
1905 return NT_STATUS_NO_MEMORY;
1907 (*sam)->sam = TALLOC_ARRAY(ctx, SAM_ENTRY4, num_entries);
1908 if ((*sam)->sam == NULL)
1909 return NT_STATUS_NO_MEMORY;
1911 (*sam)->str=TALLOC_ARRAY(ctx, SAM_STR4, num_entries);
1912 if ((*sam)->str == NULL)
1913 return NT_STATUS_NO_MEMORY;
1915 for (i = 0; i < num_entries; i++) {
1916 size_t len_sam_name = strlen(entries[i].account_name);
1918 DEBUG(11, ("init_sam_dispinfo_2: entry: %d\n",i));
1920 init_sam_entry4(&(*sam)->sam[i], start_idx + i + 1,
1923 init_string2(&(*sam)->str[i].acct_name,
1924 entries[i].account_name, len_sam_name+1,
1928 return NT_STATUS_OK;
1931 /*******************************************************************
1932 reads or writes a structure.
1933 ********************************************************************/
1935 static BOOL sam_io_sam_dispinfo_4(const char *desc, SAM_DISPINFO_4 * sam,
1937 prs_struct *ps, int depth)
1944 prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_4");
1950 if (UNMARSHALLING(ps) && num_entries > 0) {
1952 if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY4, num_entries)) == NULL) {
1953 DEBUG(0, ("out of memory allocating SAM_ENTRY4\n"));
1957 if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR4, num_entries)) == NULL) {
1958 DEBUG(0, ("out of memory allocating SAM_STR4\n"));
1963 for (i = 0; i < num_entries; i++) {
1964 if(!sam_io_sam_entry4("", &sam->sam[i], ps, depth))
1968 for (i = 0; i < num_entries; i++) {
1969 if(!smb_io_string2("acct_name", &sam->str[i].acct_name,
1970 sam->sam[i].hdr_acct_name.buffer, ps, depth))
1977 /*******************************************************************
1978 inits a SAM_DISPINFO_5 structure.
1979 ********************************************************************/
1981 NTSTATUS init_sam_dispinfo_5(TALLOC_CTX *ctx, SAM_DISPINFO_5 **sam,
1982 uint32 num_entries, uint32 start_idx,
1983 struct samr_displayentry *entries)
1985 uint32 len_sam_name;
1988 DEBUG(5, ("init_sam_dispinfo_5: num_entries: %d\n", num_entries));
1991 return NT_STATUS_OK;
1993 *sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_5, num_entries);
1995 return NT_STATUS_NO_MEMORY;
1997 if (!((*sam)->sam=TALLOC_ARRAY(ctx, SAM_ENTRY5, num_entries)))
1998 return NT_STATUS_NO_MEMORY;
2000 if (!((*sam)->str=TALLOC_ARRAY(ctx, SAM_STR5, num_entries)))
2001 return NT_STATUS_NO_MEMORY;
2003 for (i = 0; i < num_entries; i++) {
2004 DEBUG(11, ("init_sam_dispinfo_5: entry: %d\n",i));
2006 len_sam_name = strlen(entries[i].account_name);
2008 init_sam_entry5(&(*sam)->sam[i], start_idx+i+1, len_sam_name);
2009 init_string2(&(*sam)->str[i].grp_name, entries[i].account_name,
2010 len_sam_name+1, len_sam_name);
2013 return NT_STATUS_OK;
2016 /*******************************************************************
2017 reads or writes a structure.
2018 ********************************************************************/
2020 static BOOL sam_io_sam_dispinfo_5(const char *desc, SAM_DISPINFO_5 * sam,
2022 prs_struct *ps, int depth)
2029 prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_5");
2035 if (UNMARSHALLING(ps) && num_entries > 0) {
2037 if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY5, num_entries)) == NULL) {
2038 DEBUG(0, ("out of memory allocating SAM_ENTRY5\n"));
2042 if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR5, num_entries)) == NULL) {
2043 DEBUG(0, ("out of memory allocating SAM_STR5\n"));
2048 for (i = 0; i < num_entries; i++) {
2049 if(!sam_io_sam_entry5("", &sam->sam[i], ps, depth))
2053 for (i = 0; i < num_entries; i++) {
2054 if(!smb_io_string2("grp_name", &sam->str[i].grp_name,
2055 sam->sam[i].hdr_grp_name.buffer, ps, depth))
2062 /*******************************************************************
2063 inits a SAMR_R_QUERY_DISPINFO structure.
2064 ********************************************************************/
2066 void init_samr_r_query_dispinfo(SAMR_R_QUERY_DISPINFO * r_u,
2067 uint32 num_entries, uint32 total_size, uint32 data_size,
2068 uint16 switch_level, SAM_DISPINFO_CTR * ctr,
2071 DEBUG(5, ("init_samr_r_query_dispinfo: level %d\n", switch_level));
2073 r_u->total_size = total_size;
2075 r_u->data_size = data_size;
2077 r_u->switch_level = switch_level;
2078 r_u->num_entries = num_entries;
2081 r_u->ptr_entries = 0;
2083 r_u->ptr_entries = 1;
2085 r_u->num_entries2 = num_entries;
2088 r_u->status = status;
2091 /*******************************************************************
2092 reads or writes a structure.
2093 ********************************************************************/
2095 BOOL samr_io_r_query_dispinfo(const char *desc, SAMR_R_QUERY_DISPINFO * r_u,
2096 prs_struct *ps, int depth)
2101 prs_debug(ps, depth, desc, "samr_io_r_query_dispinfo");
2107 if(!prs_uint32("total_size ", ps, depth, &r_u->total_size))
2109 if(!prs_uint32("data_size ", ps, depth, &r_u->data_size))
2111 if(!prs_uint16("switch_level", ps, depth, &r_u->switch_level))
2116 if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
2118 if(!prs_uint32("ptr_entries ", ps, depth, &r_u->ptr_entries))
2121 if (r_u->ptr_entries==0) {
2124 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2130 if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
2133 switch (r_u->switch_level) {
2135 if(!sam_io_sam_dispinfo_1("users", r_u->ctr->sam.info1,
2136 r_u->num_entries, ps, depth))
2140 if(!sam_io_sam_dispinfo_2("servers", r_u->ctr->sam.info2,
2141 r_u->num_entries, ps, depth))
2145 if(!sam_io_sam_dispinfo_3("groups", r_u->ctr->sam.info3,
2146 r_u->num_entries, ps, depth))
2150 if(!sam_io_sam_dispinfo_4("user list",
2151 r_u->ctr->sam.info4,
2152 r_u->num_entries, ps, depth))
2156 if(!sam_io_sam_dispinfo_5("group list",
2157 r_u->ctr->sam.info5,
2158 r_u->num_entries, ps, depth))
2162 DEBUG(0,("samr_io_r_query_dispinfo: unknown switch value\n"));
2168 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2174 /*******************************************************************
2175 inits a SAMR_Q_GET_DISPENUM_INDEX structure.
2176 ********************************************************************/
2178 void init_samr_q_get_dispenum_index(SAMR_Q_GET_DISPENUM_INDEX * q_e, POLICY_HND *pol,
2179 uint16 switch_level, const char *name)
2181 DEBUG(5, ("init_samr_q_get_dispenum_index\n"));
2183 q_e->domain_pol = *pol;
2185 q_e->switch_level = switch_level;
2187 init_lsa_string(&q_e->name, name);
2190 /*******************************************************************
2191 reads or writes a structure.
2192 ********************************************************************/
2194 BOOL samr_io_q_get_dispenum_index(const char *desc, SAMR_Q_GET_DISPENUM_INDEX * q_e,
2195 prs_struct *ps, int depth)
2200 prs_debug(ps, depth, desc, "samr_io_q_get_dispenum_index");
2206 if(!smb_io_pol_hnd("domain_pol", &q_e->domain_pol, ps, depth))
2209 if(!prs_uint16("switch_level", ps, depth, &q_e->switch_level))
2212 if (!smb_io_lsa_string("name", &q_e->name, ps, depth))
2218 /*******************************************************************
2219 reads or writes a structure.
2220 ********************************************************************/
2222 BOOL samr_io_r_get_dispenum_index(const char *desc, SAMR_R_GET_DISPENUM_INDEX * r_u,
2223 prs_struct *ps, int depth)
2228 prs_debug(ps, depth, desc, "samr_io_r_get_dispenum_index");
2234 if(!prs_uint32("idx", ps, depth, &r_u->idx))
2237 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2244 /*******************************************************************
2245 inits a SAMR_Q_OPEN_GROUP structure.
2246 ********************************************************************/
2248 void init_samr_q_open_group(SAMR_Q_OPEN_GROUP * q_c,
2250 uint32 access_mask, uint32 rid)
2252 DEBUG(5, ("init_samr_q_open_group\n"));
2254 q_c->domain_pol = *hnd;
2255 q_c->access_mask = access_mask;
2256 q_c->rid_group = rid;
2259 /*******************************************************************
2260 reads or writes a structure.
2261 ********************************************************************/
2263 BOOL samr_io_q_open_group(const char *desc, SAMR_Q_OPEN_GROUP * q_u,
2264 prs_struct *ps, int depth)
2269 prs_debug(ps, depth, desc, "samr_io_q_open_group");
2275 if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
2278 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
2280 if(!prs_uint32("rid_group", ps, depth, &q_u->rid_group))
2286 /*******************************************************************
2287 reads or writes a structure.
2288 ********************************************************************/
2290 BOOL samr_io_r_open_group(const char *desc, SAMR_R_OPEN_GROUP * r_u,
2291 prs_struct *ps, int depth)
2296 prs_debug(ps, depth, desc, "samr_io_r_open_group");
2302 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
2305 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2311 /*******************************************************************
2312 inits a GROUP_INFO1 structure.
2313 ********************************************************************/
2315 void init_samr_group_info1(GROUP_INFO1 * gr1,
2316 char *acct_name, char *acct_desc,
2319 DEBUG(5, ("init_samr_group_info1\n"));
2321 gr1->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
2322 gr1->num_members = num_members;
2324 init_unistr2(&gr1->uni_acct_name, acct_name, UNI_FLAGS_NONE);
2325 init_uni_hdr(&gr1->hdr_acct_name, &gr1->uni_acct_name);
2326 init_unistr2(&gr1->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
2327 init_uni_hdr(&gr1->hdr_acct_desc, &gr1->uni_acct_desc);
2330 /*******************************************************************
2331 reads or writes a structure.
2332 ********************************************************************/
2334 BOOL samr_io_group_info1(const char *desc, GROUP_INFO1 * gr1,
2335 prs_struct *ps, int depth)
2342 prs_debug(ps, depth, desc, "samr_io_group_info1");
2345 if(!prs_uint16("level", ps, depth, &dummy))
2351 if(!smb_io_unihdr("hdr_acct_name", &gr1->hdr_acct_name, ps, depth))
2354 if(!prs_uint32("group_attr", ps, depth, &gr1->group_attr))
2356 if(!prs_uint32("num_members", ps, depth, &gr1->num_members))
2359 if(!smb_io_unihdr("hdr_acct_desc", &gr1->hdr_acct_desc, ps, depth))
2362 if(!smb_io_unistr2("uni_acct_name", &gr1->uni_acct_name,
2363 gr1->hdr_acct_name.buffer, ps, depth))
2366 if(!smb_io_unistr2("uni_acct_desc", &gr1->uni_acct_desc,
2367 gr1->hdr_acct_desc.buffer, ps, depth))
2373 /*******************************************************************
2374 inits a GROUP_INFO2 structure.
2375 ********************************************************************/
2377 void init_samr_group_info2(GROUP_INFO2 * gr2, const char *acct_name)
2379 DEBUG(5, ("init_samr_group_info2\n"));
2382 init_unistr2(&gr2->uni_acct_name, acct_name, UNI_FLAGS_NONE);
2383 init_uni_hdr(&gr2->hdr_acct_name, &gr2->uni_acct_name);
2386 /*******************************************************************
2387 reads or writes a structure.
2388 ********************************************************************/
2390 BOOL samr_io_group_info2(const char *desc, GROUP_INFO2 *gr2, prs_struct *ps, int depth)
2395 prs_debug(ps, depth, desc, "samr_io_group_info2");
2398 if(!prs_uint16("hdr_level", ps, depth, &gr2->level))
2401 if(!smb_io_unihdr("hdr_acct_name", &gr2->hdr_acct_name, ps, depth))
2403 if(!smb_io_unistr2("uni_acct_name", &gr2->uni_acct_name,
2404 gr2->hdr_acct_name.buffer, ps, depth))
2410 /*******************************************************************
2411 inits a GROUP_INFO3 structure.
2412 ********************************************************************/
2414 void init_samr_group_info3(GROUP_INFO3 *gr3)
2416 DEBUG(5, ("init_samr_group_info3\n"));
2418 gr3->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
2421 /*******************************************************************
2422 reads or writes a structure.
2423 ********************************************************************/
2425 BOOL samr_io_group_info3(const char *desc, GROUP_INFO3 *gr3, prs_struct *ps, int depth)
2430 prs_debug(ps, depth, desc, "samr_io_group_info3");
2436 if(!prs_uint32("group_attr", ps, depth, &gr3->group_attr))
2442 /*******************************************************************
2443 inits a GROUP_INFO4 structure.
2444 ********************************************************************/
2446 void init_samr_group_info4(GROUP_INFO4 * gr4, const char *acct_desc)
2448 DEBUG(5, ("init_samr_group_info4\n"));
2451 init_unistr2(&gr4->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
2452 init_uni_hdr(&gr4->hdr_acct_desc, &gr4->uni_acct_desc);
2455 /*******************************************************************
2456 reads or writes a structure.
2457 ********************************************************************/
2459 BOOL samr_io_group_info4(const char *desc, GROUP_INFO4 * gr4,
2460 prs_struct *ps, int depth)
2465 prs_debug(ps, depth, desc, "samr_io_group_info4");
2468 if(!prs_uint16("hdr_level", ps, depth, &gr4->level))
2470 if(!smb_io_unihdr("hdr_acct_desc", &gr4->hdr_acct_desc, ps, depth))
2472 if(!smb_io_unistr2("uni_acct_desc", &gr4->uni_acct_desc,
2473 gr4->hdr_acct_desc.buffer, ps, depth))
2479 /*******************************************************************
2480 inits a GROUP_INFO5 structure.
2481 ********************************************************************/
2483 void init_samr_group_info5(GROUP_INFO5 * gr5,
2484 char *acct_name, char *acct_desc,
2487 DEBUG(5, ("init_samr_group_info5\n"));
2489 gr5->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
2490 gr5->num_members = num_members;
2492 init_unistr2(&gr5->uni_acct_name, acct_name, UNI_FLAGS_NONE);
2493 init_uni_hdr(&gr5->hdr_acct_name, &gr5->uni_acct_name);
2494 init_unistr2(&gr5->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
2495 init_uni_hdr(&gr5->hdr_acct_desc, &gr5->uni_acct_desc);
2498 /*******************************************************************
2499 reads or writes a structure.
2500 ********************************************************************/
2502 BOOL samr_io_group_info5(const char *desc, GROUP_INFO5 * gr5,
2503 prs_struct *ps, int depth)
2510 prs_debug(ps, depth, desc, "samr_io_group_info5");
2513 if(!prs_uint16("level", ps, depth, &dummy))
2519 if(!smb_io_unihdr("hdr_acct_name", &gr5->hdr_acct_name, ps, depth))
2522 if(!prs_uint32("group_attr", ps, depth, &gr5->group_attr))
2524 if(!prs_uint32("num_members", ps, depth, &gr5->num_members))
2527 if(!smb_io_unihdr("hdr_acct_desc", &gr5->hdr_acct_desc, ps, depth))
2530 if(!smb_io_unistr2("uni_acct_name", &gr5->uni_acct_name,
2531 gr5->hdr_acct_name.buffer, ps, depth))
2534 if(!smb_io_unistr2("uni_acct_desc", &gr5->uni_acct_desc,
2535 gr5->hdr_acct_desc.buffer, ps, depth))
2542 /*******************************************************************
2543 reads or writes a structure.
2544 ********************************************************************/
2546 static BOOL samr_group_info_ctr(const char *desc, GROUP_INFO_CTR **ctr,
2547 prs_struct *ps, int depth)
2549 if (UNMARSHALLING(ps))
2550 *ctr = PRS_ALLOC_MEM(ps,GROUP_INFO_CTR,1);
2555 prs_debug(ps, depth, desc, "samr_group_info_ctr");
2558 if(!prs_uint16("switch_value1", ps, depth, &(*ctr)->switch_value1))
2561 switch ((*ctr)->switch_value1) {
2563 if(!samr_io_group_info1("group_info1", &(*ctr)->group.info1, ps, depth))
2567 if(!samr_io_group_info2("group_info2", &(*ctr)->group.info2, ps, depth))
2571 if(!samr_io_group_info3("group_info3", &(*ctr)->group.info3, ps, depth))
2575 if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))
2579 if(!samr_io_group_info5("group_info5", &(*ctr)->group.info5, ps, depth))
2583 DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));
2590 /*******************************************************************
2591 inits a SAMR_Q_CREATE_DOM_GROUP structure.
2592 ********************************************************************/
2594 void init_samr_q_create_dom_group(SAMR_Q_CREATE_DOM_GROUP * q_e,
2595 POLICY_HND *pol, const char *acct_desc,
2598 DEBUG(5, ("init_samr_q_create_dom_group\n"));
2602 init_unistr2(&q_e->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
2603 init_uni_hdr(&q_e->hdr_acct_desc, &q_e->uni_acct_desc);
2605 q_e->access_mask = access_mask;
2608 /*******************************************************************
2609 reads or writes a structure.
2610 ********************************************************************/
2612 BOOL samr_io_q_create_dom_group(const char *desc, SAMR_Q_CREATE_DOM_GROUP * q_e,
2613 prs_struct *ps, int depth)
2618 prs_debug(ps, depth, desc, "samr_io_q_create_dom_group");
2624 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
2627 if(!smb_io_unihdr("hdr_acct_desc", &q_e->hdr_acct_desc, ps, depth))
2629 if(!smb_io_unistr2("uni_acct_desc", &q_e->uni_acct_desc,
2630 q_e->hdr_acct_desc.buffer, ps, depth))
2635 if(!prs_uint32("access", ps, depth, &q_e->access_mask))
2641 /*******************************************************************
2642 reads or writes a structure.
2643 ********************************************************************/
2645 BOOL samr_io_r_create_dom_group(const char *desc, SAMR_R_CREATE_DOM_GROUP * r_u,
2646 prs_struct *ps, int depth)
2651 prs_debug(ps, depth, desc, "samr_io_r_create_dom_group");
2657 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
2660 if(!prs_uint32("rid ", ps, depth, &r_u->rid))
2662 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2668 /*******************************************************************
2669 inits a SAMR_Q_DELETE_DOM_GROUP structure.
2670 ********************************************************************/
2672 void init_samr_q_delete_dom_group(SAMR_Q_DELETE_DOM_GROUP * q_c,
2675 DEBUG(5, ("init_samr_q_delete_dom_group\n"));
2677 q_c->group_pol = *hnd;
2680 /*******************************************************************
2681 reads or writes a structure.
2682 ********************************************************************/
2684 BOOL samr_io_q_delete_dom_group(const char *desc, SAMR_Q_DELETE_DOM_GROUP * q_u,
2685 prs_struct *ps, int depth)
2690 prs_debug(ps, depth, desc, "samr_io_q_delete_dom_group");
2696 if(!smb_io_pol_hnd("group_pol", &q_u->group_pol, ps, depth))
2702 /*******************************************************************
2703 reads or writes a structure.
2704 ********************************************************************/
2706 BOOL samr_io_r_delete_dom_group(const char *desc, SAMR_R_DELETE_DOM_GROUP * r_u,
2707 prs_struct *ps, int depth)
2712 prs_debug(ps, depth, desc, "samr_io_r_delete_dom_group");
2718 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
2721 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2727 /*******************************************************************
2728 inits a SAMR_Q_DEL_GROUPMEM structure.
2729 ********************************************************************/
2731 void init_samr_q_del_groupmem(SAMR_Q_DEL_GROUPMEM * q_e,
2732 POLICY_HND *pol, uint32 rid)
2734 DEBUG(5, ("init_samr_q_del_groupmem\n"));
2740 /*******************************************************************
2741 reads or writes a structure.
2742 ********************************************************************/
2744 BOOL samr_io_q_del_groupmem(const char *desc, SAMR_Q_DEL_GROUPMEM * q_e,
2745 prs_struct *ps, int depth)
2750 prs_debug(ps, depth, desc, "samr_io_q_del_groupmem");
2756 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
2759 if(!prs_uint32("rid", ps, depth, &q_e->rid))
2765 /*******************************************************************
2766 inits a SAMR_R_DEL_GROUPMEM structure.
2767 ********************************************************************/
2769 void init_samr_r_del_groupmem(SAMR_R_DEL_GROUPMEM * r_u, POLICY_HND *pol,
2772 DEBUG(5, ("init_samr_r_del_groupmem\n"));
2774 r_u->status = status;
2777 /*******************************************************************
2778 reads or writes a structure.
2779 ********************************************************************/
2781 BOOL samr_io_r_del_groupmem(const char *desc, SAMR_R_DEL_GROUPMEM * r_u,
2782 prs_struct *ps, int depth)
2787 prs_debug(ps, depth, desc, "samr_io_r_del_groupmem");
2793 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2799 /*******************************************************************
2800 inits a SAMR_Q_ADD_GROUPMEM structure.
2801 ********************************************************************/
2803 void init_samr_q_add_groupmem(SAMR_Q_ADD_GROUPMEM * q_e,
2804 POLICY_HND *pol, uint32 rid)
2806 DEBUG(5, ("init_samr_q_add_groupmem\n"));
2810 q_e->unknown = 0x0005;
2813 /*******************************************************************
2814 reads or writes a structure.
2815 ********************************************************************/
2817 BOOL samr_io_q_add_groupmem(const char *desc, SAMR_Q_ADD_GROUPMEM * q_e,
2818 prs_struct *ps, int depth)
2823 prs_debug(ps, depth, desc, "samr_io_q_add_groupmem");
2829 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
2832 if(!prs_uint32("rid ", ps, depth, &q_e->rid))
2834 if(!prs_uint32("unknown", ps, depth, &q_e->unknown))
2840 /*******************************************************************
2841 inits a SAMR_R_ADD_GROUPMEM structure.
2842 ********************************************************************/
2844 void init_samr_r_add_groupmem(SAMR_R_ADD_GROUPMEM * r_u, POLICY_HND *pol,
2847 DEBUG(5, ("init_samr_r_add_groupmem\n"));
2849 r_u->status = status;
2852 /*******************************************************************
2853 reads or writes a structure.
2854 ********************************************************************/
2856 BOOL samr_io_r_add_groupmem(const char *desc, SAMR_R_ADD_GROUPMEM * r_u,
2857 prs_struct *ps, int depth)
2862 prs_debug(ps, depth, desc, "samr_io_r_add_groupmem");
2868 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2874 /*******************************************************************
2875 inits a SAMR_Q_SET_GROUPINFO structure.
2876 ********************************************************************/
2878 void init_samr_q_set_groupinfo(SAMR_Q_SET_GROUPINFO * q_e,
2879 POLICY_HND *pol, GROUP_INFO_CTR * ctr)
2881 DEBUG(5, ("init_samr_q_set_groupinfo\n"));
2887 /*******************************************************************
2888 reads or writes a structure.
2889 ********************************************************************/
2891 BOOL samr_io_q_set_groupinfo(const char *desc, SAMR_Q_SET_GROUPINFO * q_e,
2892 prs_struct *ps, int depth)
2897 prs_debug(ps, depth, desc, "samr_io_q_set_groupinfo");
2903 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
2906 if(!samr_group_info_ctr("ctr", &q_e->ctr, ps, depth))
2912 /*******************************************************************
2913 inits a SAMR_R_SET_GROUPINFO structure.
2914 ********************************************************************/
2916 void init_samr_r_set_groupinfo(SAMR_R_SET_GROUPINFO * r_u, NTSTATUS status)
2918 DEBUG(5, ("init_samr_r_set_groupinfo\n"));
2920 r_u->status = status;
2923 /*******************************************************************
2924 reads or writes a structure.
2925 ********************************************************************/
2927 BOOL samr_io_r_set_groupinfo(const char *desc, SAMR_R_SET_GROUPINFO * r_u,
2928 prs_struct *ps, int depth)
2933 prs_debug(ps, depth, desc, "samr_io_r_set_groupinfo");
2939 if(!prs_ntstatus("status", ps, depth, &r_u->status))
2945 /*******************************************************************
2946 inits a SAMR_Q_QUERY_GROUPINFO structure.
2947 ********************************************************************/
2949 void init_samr_q_query_groupinfo(SAMR_Q_QUERY_GROUPINFO * q_e,
2950 POLICY_HND *pol, uint16 switch_level)
2952 DEBUG(5, ("init_samr_q_query_groupinfo\n"));
2956 q_e->switch_level = switch_level;
2959 /*******************************************************************
2960 reads or writes a structure.
2961 ********************************************************************/
2963 BOOL samr_io_q_query_groupinfo(const char *desc, SAMR_Q_QUERY_GROUPINFO * q_e,
2964 prs_struct *ps, int depth)
2969 prs_debug(ps, depth, desc, "samr_io_q_query_groupinfo");
2975 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
2978 if(!prs_uint16("switch_level", ps, depth, &q_e->switch_level))
2984 /*******************************************************************
2985 inits a SAMR_R_QUERY_GROUPINFO structure.
2986 ********************************************************************/
2988 void init_samr_r_query_groupinfo(SAMR_R_QUERY_GROUPINFO * r_u,
2989 GROUP_INFO_CTR * ctr, NTSTATUS status)
2991 DEBUG(5, ("init_samr_r_query_groupinfo\n"));
2993 r_u->ptr = (NT_STATUS_IS_OK(status) && ctr != NULL) ? 1 : 0;
2995 r_u->status = status;
2998 /*******************************************************************
2999 reads or writes a structure.
3000 ********************************************************************/
3002 BOOL samr_io_r_query_groupinfo(const char *desc, SAMR_R_QUERY_GROUPINFO * r_u,
3003 prs_struct *ps, int depth)
3008 prs_debug(ps, depth, desc, "samr_io_r_query_groupinfo");
3014 if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
3017 if (r_u->ptr != 0) {
3018 if(!samr_group_info_ctr("ctr", &r_u->ctr, ps, depth))
3024 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3030 /*******************************************************************
3031 inits a SAMR_Q_QUERY_GROUPMEM structure.
3032 ********************************************************************/
3034 void init_samr_q_query_groupmem(SAMR_Q_QUERY_GROUPMEM * q_c, POLICY_HND *hnd)
3036 DEBUG(5, ("init_samr_q_query_groupmem\n"));
3038 q_c->group_pol = *hnd;
3041 /*******************************************************************
3042 reads or writes a structure.
3043 ********************************************************************/
3045 BOOL samr_io_q_query_groupmem(const char *desc, SAMR_Q_QUERY_GROUPMEM * q_u,
3046 prs_struct *ps, int depth)
3051 prs_debug(ps, depth, desc, "samr_io_q_query_groupmem");
3057 if(!smb_io_pol_hnd("group_pol", &q_u->group_pol, ps, depth))
3063 /*******************************************************************
3064 inits a SAMR_R_QUERY_GROUPMEM structure.
3065 ********************************************************************/
3067 void init_samr_r_query_groupmem(SAMR_R_QUERY_GROUPMEM * r_u,
3068 uint32 num_entries, uint32 *rid,
3069 uint32 *attr, NTSTATUS status)
3071 DEBUG(5, ("init_samr_r_query_groupmem\n"));
3073 if (NT_STATUS_IS_OK(status)) {
3075 r_u->num_entries = num_entries;
3077 r_u->ptr_attrs = attr != NULL ? 1 : 0;
3078 r_u->ptr_rids = rid != NULL ? 1 : 0;
3080 r_u->num_rids = num_entries;
3083 r_u->num_attrs = num_entries;
3087 r_u->num_entries = 0;
3090 r_u->status = status;
3093 /*******************************************************************
3094 reads or writes a structure.
3095 ********************************************************************/
3097 BOOL samr_io_r_query_groupmem(const char *desc, SAMR_R_QUERY_GROUPMEM * r_u,
3098 prs_struct *ps, int depth)
3105 if (UNMARSHALLING(ps))
3108 prs_debug(ps, depth, desc, "samr_io_r_query_groupmem");
3114 if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
3116 if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
3119 if (r_u->ptr != 0) {
3120 if(!prs_uint32("ptr_rids ", ps, depth, &r_u->ptr_rids))
3122 if(!prs_uint32("ptr_attrs", ps, depth, &r_u->ptr_attrs))
3125 if (r_u->ptr_rids != 0) {
3126 if(!prs_uint32("num_rids", ps, depth, &r_u->num_rids))
3128 if (UNMARSHALLING(ps) && r_u->num_rids != 0) {
3129 r_u->rid = PRS_ALLOC_MEM(ps,uint32,r_u->num_rids);
3130 if (r_u->rid == NULL)
3134 for (i = 0; i < r_u->num_rids; i++) {
3135 if(!prs_uint32("", ps, depth, &r_u->rid[i]))
3140 if (r_u->ptr_attrs != 0) {
3141 if(!prs_uint32("num_attrs", ps, depth, &r_u->num_attrs))
3144 if (UNMARSHALLING(ps) && r_u->num_attrs != 0) {
3145 r_u->attr = PRS_ALLOC_MEM(ps,uint32,r_u->num_attrs);
3146 if (r_u->attr == NULL)
3150 for (i = 0; i < r_u->num_attrs; i++) {
3151 if(!prs_uint32("", ps, depth, &r_u->attr[i]))
3157 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3163 /*******************************************************************
3164 inits a SAMR_Q_QUERY_USERGROUPS structure.
3165 ********************************************************************/
3167 void init_samr_q_query_usergroups(SAMR_Q_QUERY_USERGROUPS * q_u,
3170 DEBUG(5, ("init_samr_q_query_usergroups\n"));
3175 /*******************************************************************
3176 reads or writes a structure.
3177 ********************************************************************/
3179 BOOL samr_io_q_query_usergroups(const char *desc, SAMR_Q_QUERY_USERGROUPS * q_u,
3180 prs_struct *ps, int depth)
3185 prs_debug(ps, depth, desc, "samr_io_q_query_usergroups");
3191 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
3197 /*******************************************************************
3198 inits a SAMR_R_QUERY_USERGROUPS structure.
3199 ********************************************************************/
3201 void init_samr_r_query_usergroups(SAMR_R_QUERY_USERGROUPS * r_u,
3202 uint32 num_gids, DOM_GID * gid,
3205 DEBUG(5, ("init_samr_r_query_usergroups\n"));
3207 if (NT_STATUS_IS_OK(status)) {
3209 r_u->num_entries = num_gids;
3210 r_u->ptr_1 = (num_gids != 0) ? 1 : 0;
3211 r_u->num_entries2 = num_gids;
3216 r_u->num_entries = 0;
3221 r_u->status = status;
3224 /*******************************************************************
3225 reads or writes a structure.
3226 ********************************************************************/
3228 BOOL samr_io_gids(const char *desc, uint32 *num_gids, DOM_GID ** gid,
3229 prs_struct *ps, int depth)
3235 prs_debug(ps, depth, desc, "samr_io_gids");
3241 if(!prs_uint32("num_gids", ps, depth, num_gids))
3244 if ((*num_gids) != 0) {
3245 if (UNMARSHALLING(ps)) {
3246 (*gid) = PRS_ALLOC_MEM(ps,DOM_GID,*num_gids);
3249 if ((*gid) == NULL) {
3253 for (i = 0; i < (*num_gids); i++) {
3254 if(!smb_io_gid("gids", &(*gid)[i], ps, depth))
3262 /*******************************************************************
3263 reads or writes a structure.
3264 ********************************************************************/
3266 BOOL samr_io_r_query_usergroups(const char *desc, SAMR_R_QUERY_USERGROUPS * r_u,
3267 prs_struct *ps, int depth)
3272 prs_debug(ps, depth, desc, "samr_io_r_query_usergroups");
3278 if(!prs_uint32("ptr_0 ", ps, depth, &r_u->ptr_0))
3281 if (r_u->ptr_0 != 0) {
3282 if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
3284 if(!prs_uint32("ptr_1 ", ps, depth, &r_u->ptr_1))
3287 if (r_u->num_entries != 0 && r_u->ptr_1 != 0) {
3288 if(!samr_io_gids("gids", &r_u->num_entries2, &r_u->gid, ps, depth))
3295 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3301 /*******************************************************************
3302 inits a SAMR_Q_ENUM_DOMAINS structure.
3303 ********************************************************************/
3305 void init_samr_q_enum_domains(SAMR_Q_ENUM_DOMAINS * q_e,
3307 uint32 start_idx, uint32 size)
3309 DEBUG(5, ("init_samr_q_enum_domains\n"));
3313 q_e->start_idx = start_idx;
3314 q_e->max_size = size;
3317 /*******************************************************************
3318 reads or writes a structure.
3319 ********************************************************************/
3321 BOOL samr_io_q_enum_domains(const char *desc, SAMR_Q_ENUM_DOMAINS * q_e,
3322 prs_struct *ps, int depth)
3327 prs_debug(ps, depth, desc, "samr_io_q_enum_domains");
3333 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
3336 if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
3338 if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
3344 /*******************************************************************
3345 inits a SAMR_R_ENUM_DOMAINS structure.
3346 ********************************************************************/
3348 void init_samr_r_enum_domains(SAMR_R_ENUM_DOMAINS * r_u,
3349 uint32 next_idx, uint32 num_sam_entries)
3351 DEBUG(5, ("init_samr_r_enum_domains\n"));
3353 r_u->next_idx = next_idx;
3355 if (num_sam_entries != 0) {
3356 r_u->ptr_entries1 = 1;
3357 r_u->ptr_entries2 = 1;
3358 r_u->num_entries2 = num_sam_entries;
3359 r_u->num_entries3 = num_sam_entries;
3361 r_u->num_entries4 = num_sam_entries;
3363 r_u->ptr_entries1 = 0;
3364 r_u->num_entries2 = num_sam_entries;
3365 r_u->ptr_entries2 = 1;
3369 /*******************************************************************
3370 reads or writes a structure.
3371 ********************************************************************/
3373 BOOL samr_io_r_enum_domains(const char *desc, SAMR_R_ENUM_DOMAINS * r_u,
3374 prs_struct *ps, int depth)
3381 prs_debug(ps, depth, desc, "samr_io_r_enum_domains");
3387 if(!prs_uint32("next_idx ", ps, depth, &r_u->next_idx))
3389 if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
3392 if (r_u->ptr_entries1 != 0) {
3393 if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
3395 if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
3397 if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
3400 if (UNMARSHALLING(ps) && r_u->num_entries2) {
3401 r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY,r_u->num_entries2);
3402 r_u->uni_dom_name = PRS_ALLOC_MEM(ps,UNISTR2,r_u->num_entries2);
3405 if ((r_u->sam == NULL || r_u->uni_dom_name == NULL) && r_u->num_entries2 != 0) {
3406 DEBUG(0, ("NULL pointers in SAMR_R_ENUM_DOMAINS\n"));
3407 r_u->num_entries4 = 0;
3408 r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
3412 for (i = 0; i < r_u->num_entries2; i++) {
3414 slprintf(tmp, sizeof(tmp) - 1, "dom[%d]", i);
3415 if(!sam_io_sam_entry(tmp, &r_u->sam[i], ps, depth))
3419 for (i = 0; i < r_u->num_entries2; i++) {
3421 slprintf(tmp, sizeof(tmp) - 1, "dom[%d]", i);
3422 if(!smb_io_unistr2(tmp, &r_u->uni_dom_name[i],
3423 r_u->sam[i].hdr_name.buffer, ps,
3432 if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
3434 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3440 /*******************************************************************
3441 inits a SAMR_Q_ENUM_DOM_GROUPS structure.
3442 ********************************************************************/
3444 void init_samr_q_enum_dom_groups(SAMR_Q_ENUM_DOM_GROUPS * q_e,
3446 uint32 start_idx, uint32 size)
3448 DEBUG(5, ("init_samr_q_enum_dom_groups\n"));
3452 q_e->start_idx = start_idx;
3453 q_e->max_size = size;
3456 /*******************************************************************
3457 reads or writes a structure.
3458 ********************************************************************/
3460 BOOL samr_io_q_enum_dom_groups(const char *desc, SAMR_Q_ENUM_DOM_GROUPS * q_e,
3461 prs_struct *ps, int depth)
3466 prs_debug(ps, depth, desc, "samr_io_q_enum_dom_groups");
3472 if(!smb_io_pol_hnd("pol", &(q_e->pol), ps, depth))
3475 if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
3477 if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
3483 /*******************************************************************
3484 inits a SAMR_R_ENUM_DOM_GROUPS structure.
3485 ********************************************************************/
3487 void init_samr_r_enum_dom_groups(SAMR_R_ENUM_DOM_GROUPS * r_u,
3488 uint32 next_idx, uint32 num_sam_entries)
3490 DEBUG(5, ("init_samr_r_enum_dom_groups\n"));
3492 r_u->next_idx = next_idx;
3494 if (num_sam_entries != 0) {
3495 r_u->ptr_entries1 = 1;
3496 r_u->ptr_entries2 = 1;
3497 r_u->num_entries2 = num_sam_entries;
3498 r_u->num_entries3 = num_sam_entries;
3500 r_u->num_entries4 = num_sam_entries;
3502 r_u->ptr_entries1 = 0;
3503 r_u->num_entries2 = num_sam_entries;
3504 r_u->ptr_entries2 = 1;
3508 /*******************************************************************
3509 reads or writes a structure.
3510 ********************************************************************/
3512 BOOL samr_io_r_enum_dom_groups(const char *desc, SAMR_R_ENUM_DOM_GROUPS * r_u,
3513 prs_struct *ps, int depth)
3520 prs_debug(ps, depth, desc, "samr_io_r_enum_dom_groups");
3526 if(!prs_uint32("next_idx ", ps, depth, &r_u->next_idx))
3528 if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
3531 if (r_u->ptr_entries1 != 0) {
3532 if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
3534 if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
3536 if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
3539 if (UNMARSHALLING(ps) && r_u->num_entries2) {
3540 r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY,r_u->num_entries2);
3541 r_u->uni_grp_name = PRS_ALLOC_MEM(ps,UNISTR2,r_u->num_entries2);
3544 if ((r_u->sam == NULL || r_u->uni_grp_name == NULL) && r_u->num_entries2 != 0) {
3546 ("NULL pointers in SAMR_R_ENUM_DOM_GROUPS\n"));
3547 r_u->num_entries4 = 0;
3548 r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
3552 for (i = 0; i < r_u->num_entries2; i++) {
3553 if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
3557 for (i = 0; i < r_u->num_entries2; i++) {
3558 if(!smb_io_unistr2("", &r_u->uni_grp_name[i],
3559 r_u->sam[i].hdr_name.buffer, ps, depth))
3566 if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
3568 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3574 /*******************************************************************
3575 inits a SAMR_Q_ENUM_DOM_ALIASES structure.
3576 ********************************************************************/
3578 void init_samr_q_enum_dom_aliases(SAMR_Q_ENUM_DOM_ALIASES * q_e,
3579 POLICY_HND *pol, uint32 start_idx,
3582 DEBUG(5, ("init_samr_q_enum_dom_aliases\n"));
3586 q_e->start_idx = start_idx;
3587 q_e->max_size = size;
3591 /*******************************************************************
3592 reads or writes a structure.
3593 ********************************************************************/
3595 BOOL samr_io_q_enum_dom_aliases(const char *desc, SAMR_Q_ENUM_DOM_ALIASES * q_e,
3596 prs_struct *ps, int depth)
3601 prs_debug(ps, depth, desc, "samr_io_q_enum_dom_aliases");
3607 if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
3610 if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
3612 if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
3618 /*******************************************************************
3619 inits a SAMR_R_ENUM_DOM_ALIASES structure.
3620 ********************************************************************/
3622 void init_samr_r_enum_dom_aliases(SAMR_R_ENUM_DOM_ALIASES *r_u, uint32 next_idx, uint32 num_sam_entries)
3624 DEBUG(5, ("init_samr_r_enum_dom_aliases\n"));
3626 r_u->next_idx = next_idx;
3628 if (num_sam_entries != 0) {
3629 r_u->ptr_entries1 = 1;
3630 r_u->ptr_entries2 = 1;
3631 r_u->num_entries2 = num_sam_entries;
3632 r_u->num_entries3 = num_sam_entries;
3634 r_u->num_entries4 = num_sam_entries;
3636 r_u->ptr_entries1 = 0;
3637 r_u->num_entries2 = num_sam_entries;
3638 r_u->ptr_entries2 = 1;
3642 /*******************************************************************
3643 reads or writes a structure.
3644 ********************************************************************/
3646 BOOL samr_io_r_enum_dom_aliases(const char *desc, SAMR_R_ENUM_DOM_ALIASES * r_u,
3647 prs_struct *ps, int depth)
3654 prs_debug(ps, depth, desc, "samr_io_r_enum_dom_aliases");
3660 if(!prs_uint32("next_idx ", ps, depth, &r_u->next_idx))
3662 if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
3665 if (r_u->ptr_entries1 != 0) {
3666 if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
3668 if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
3670 if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
3673 if (UNMARSHALLING(ps) && (r_u->num_entries2 > 0)) {
3674 r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY,r_u->num_entries2);
3675 r_u->uni_grp_name = PRS_ALLOC_MEM(ps,UNISTR2,r_u->num_entries2);
3678 if (r_u->num_entries2 != 0 &&
3679 (r_u->sam == NULL || r_u->uni_grp_name == NULL)) {
3680 DEBUG(0,("NULL pointers in SAMR_R_ENUM_DOM_ALIASES\n"));
3681 r_u->num_entries4 = 0;
3682 r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
3686 for (i = 0; i < r_u->num_entries2; i++) {
3687 if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
3691 for (i = 0; i < r_u->num_entries2; i++) {
3692 if(!smb_io_unistr2("", &r_u->uni_grp_name[i],
3693 r_u->sam[i].hdr_name.buffer, ps,
3701 if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
3703 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3709 /*******************************************************************
3710 inits a ALIAS_INFO1 structure.
3711 ********************************************************************/
3713 void init_samr_alias_info1(ALIAS_INFO1 * al1, char *acct_name, uint32 num_member, char *acct_desc)
3715 DEBUG(5, ("init_samr_alias_info1\n"));
3717 init_unistr4(&al1->name, acct_name, UNI_FLAGS_NONE);
3718 al1->num_member = num_member;
3719 init_unistr4(&al1->description, acct_desc, UNI_FLAGS_NONE);
3722 /*******************************************************************
3723 reads or writes a structure.
3724 ********************************************************************/
3726 BOOL samr_io_alias_info1(const char *desc, ALIAS_INFO1 * al1,
3727 prs_struct *ps, int depth)
3732 prs_debug(ps, depth, desc, "samr_io_alias_info1");
3738 if ( !prs_unistr4_hdr("name", ps, depth, &al1->name) )
3740 if ( !prs_uint32("num_member", ps, depth, &al1->num_member) )
3742 if ( !prs_unistr4_hdr("description", ps, depth, &al1->description) )
3745 if ( !prs_unistr4_str("name", ps, depth, &al1->name) )
3747 if ( !prs_align(ps) )
3749 if ( !prs_unistr4_str("description", ps, depth, &al1->description) )
3751 if ( !prs_align(ps) )
3757 /*******************************************************************
3758 inits a ALIAS_INFO3 structure.
3759 ********************************************************************/
3761 void init_samr_alias_info3(ALIAS_INFO3 * al3, const char *acct_desc)
3763 DEBUG(5, ("init_samr_alias_info3\n"));
3765 init_unistr4(&al3->description, acct_desc, UNI_FLAGS_NONE);
3768 /*******************************************************************
3769 reads or writes a structure.
3770 ********************************************************************/
3772 BOOL samr_io_alias_info3(const char *desc, ALIAS_INFO3 *al3,
3773 prs_struct *ps, int depth)
3778 prs_debug(ps, depth, desc, "samr_io_alias_info3");
3784 if (!prs_unistr4("description", ps, depth, &al3->description))
3790 /*******************************************************************
3791 reads or writes a structure.
3792 ********************************************************************/
3794 BOOL samr_io_alias_info2(const char *desc, ALIAS_INFO2 *al2,
3795 prs_struct *ps, int depth)
3800 prs_debug(ps, depth, desc, "samr_io_alias_info2");
3806 if (!prs_unistr4("name", ps, depth, &al2->name))
3812 /*******************************************************************
3813 reads or writes a structure.
3814 ********************************************************************/
3816 BOOL samr_alias_info_ctr(const char *desc, prs_struct *ps, int depth, ALIAS_INFO_CTR * ctr)
3821 prs_debug(ps, depth, desc, "samr_alias_info_ctr");
3824 if ( !prs_uint16("level", ps, depth, &ctr->level) )
3829 switch (ctr->level) {
3831 if(!samr_io_alias_info1("alias_info1", &ctr->alias.info1, ps, depth))
3835 if(!samr_io_alias_info2("alias_info2", &ctr->alias.info2, ps, depth))
3839 if(!samr_io_alias_info3("alias_info3", &ctr->alias.info3, ps, depth))
3843 DEBUG(0,("samr_alias_info_ctr: unsupported switch level\n"));
3850 /*******************************************************************
3851 inits a SAMR_Q_QUERY_ALIASINFO structure.
3852 ********************************************************************/
3854 void init_samr_q_query_aliasinfo(SAMR_Q_QUERY_ALIASINFO * q_e,
3855 POLICY_HND *pol, uint32 switch_level)
3857 DEBUG(5, ("init_samr_q_query_aliasinfo\n"));
3860 q_e->level = switch_level;
3863 /*******************************************************************
3864 reads or writes a structure.
3865 ********************************************************************/
3867 BOOL samr_io_q_query_aliasinfo(const char *desc, SAMR_Q_QUERY_ALIASINFO *in,
3868 prs_struct *ps, int depth)
3873 prs_debug(ps, depth, desc, "samr_io_q_query_aliasinfo");
3879 if ( !smb_io_pol_hnd("pol", &(in->pol), ps, depth) )
3882 if ( !prs_uint16("level", ps, depth, &in->level) )
3888 /*******************************************************************
3889 inits a SAMR_R_QUERY_ALIASINFO structure.
3890 ********************************************************************/
3892 void init_samr_r_query_aliasinfo(SAMR_R_QUERY_ALIASINFO *out,
3893 ALIAS_INFO_CTR * ctr, NTSTATUS status)
3895 DEBUG(5, ("init_samr_r_query_aliasinfo\n"));
3898 out->status = status;
3901 /*******************************************************************
3902 reads or writes a structure.
3903 ********************************************************************/
3905 BOOL samr_io_r_query_aliasinfo(const char *desc, SAMR_R_QUERY_ALIASINFO *out,
3906 prs_struct *ps, int depth)
3911 prs_debug(ps, depth, desc, "samr_io_r_query_aliasinfo");
3917 if ( !prs_pointer("alias", ps, depth, (void*)&out->ctr, sizeof(ALIAS_INFO_CTR), (PRS_POINTER_CAST)samr_alias_info_ctr))
3922 if(!prs_ntstatus("status", ps, depth, &out->status))
3928 /*******************************************************************
3929 inits a SAMR_Q_SET_ALIASINFO structure.
3930 ********************************************************************/
3932 void init_samr_q_set_aliasinfo(SAMR_Q_SET_ALIASINFO * q_u,
3933 POLICY_HND *hnd, ALIAS_INFO_CTR * ctr)
3935 DEBUG(5, ("init_samr_q_set_aliasinfo\n"));
3937 q_u->alias_pol = *hnd;
3941 /*******************************************************************
3942 reads or writes a structure.
3943 ********************************************************************/
3945 BOOL samr_io_q_set_aliasinfo(const char *desc, SAMR_Q_SET_ALIASINFO * q_u,
3946 prs_struct *ps, int depth)
3951 prs_debug(ps, depth, desc, "samr_io_q_set_aliasinfo");
3957 if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
3959 if(!samr_alias_info_ctr("ctr", ps, depth, &q_u->ctr))
3965 /*******************************************************************
3966 reads or writes a structure.
3967 ********************************************************************/
3969 BOOL samr_io_r_set_aliasinfo(const char *desc, SAMR_R_SET_ALIASINFO * r_u,
3970 prs_struct *ps, int depth)
3975 prs_debug(ps, depth, desc, "samr_io_r_set_aliasinfo");
3980 if(!prs_ntstatus("status", ps, depth, &r_u->status))
3986 /*******************************************************************
3987 inits a SAMR_Q_QUERY_USERALIASES structure.
3988 ********************************************************************/
3990 void init_samr_q_query_useraliases(SAMR_Q_QUERY_USERALIASES * q_u,
3993 uint32 *ptr_sid, DOM_SID2 * sid)
3995 DEBUG(5, ("init_samr_q_query_useraliases\n"));
3999 q_u->num_sids1 = num_sids;
4001 q_u->num_sids2 = num_sids;
4003 q_u->ptr_sid = ptr_sid;
4007 /*******************************************************************
4008 reads or writes a SAMR_Q_QUERY_USERALIASES structure.
4009 ********************************************************************/
4011 BOOL samr_io_q_query_useraliases(const char *desc, SAMR_Q_QUERY_USERALIASES * q_u,
4012 prs_struct *ps, int depth)
4020 prs_debug(ps, depth, desc, "samr_io_q_query_useraliases");
4026 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
4029 if(!prs_uint32("num_sids1", ps, depth, &q_u->num_sids1))
4031 if(!prs_uint32("ptr ", ps, depth, &q_u->ptr))
4037 if(!prs_uint32("num_sids2", ps, depth, &q_u->num_sids2))
4040 if (UNMARSHALLING(ps) && (q_u->num_sids2 != 0)) {
4041 q_u->ptr_sid = PRS_ALLOC_MEM(ps,uint32,q_u->num_sids2);
4042 if (q_u->ptr_sid == NULL)
4045 q_u->sid = PRS_ALLOC_MEM(ps, DOM_SID2, q_u->num_sids2);
4046 if (q_u->sid == NULL)
4050 for (i = 0; i < q_u->num_sids2; i++) {
4051 slprintf(tmp, sizeof(tmp) - 1, "ptr[%02d]", i);
4052 if(!prs_uint32(tmp, ps, depth, &q_u->ptr_sid[i]))
4056 for (i = 0; i < q_u->num_sids2; i++) {
4057 if (q_u->ptr_sid[i] != 0) {
4058 slprintf(tmp, sizeof(tmp) - 1, "sid[%02d]", i);
4059 if(!smb_io_dom_sid2(tmp, &q_u->sid[i], ps, depth))
4067 /*******************************************************************
4068 inits a SAMR_R_QUERY_USERALIASES structure.
4069 ********************************************************************/
4071 void init_samr_r_query_useraliases(SAMR_R_QUERY_USERALIASES * r_u,
4072 uint32 num_rids, uint32 *rid,
4075 DEBUG(5, ("init_samr_r_query_useraliases\n"));
4077 if (NT_STATUS_IS_OK(status)) {
4078 r_u->num_entries = num_rids;
4080 r_u->num_entries2 = num_rids;
4084 r_u->num_entries = 0;
4086 r_u->num_entries2 = 0;
4089 r_u->status = status;
4092 /*******************************************************************
4093 reads or writes a structure.
4094 ********************************************************************/
4096 BOOL samr_io_rids(const char *desc, uint32 *num_rids, uint32 **rid,
4097 prs_struct *ps, int depth)
4104 prs_debug(ps, depth, desc, "samr_io_rids");
4110 if(!prs_uint32("num_rids", ps, depth, num_rids))
4113 if ((*num_rids) != 0) {
4114 if (UNMARSHALLING(ps)) {
4116 (*rid) = PRS_ALLOC_MEM(ps,uint32, *num_rids);
4121 for (i = 0; i < (*num_rids); i++) {
4122 slprintf(tmp, sizeof(tmp) - 1, "rid[%02d]", i);
4123 if(!prs_uint32(tmp, ps, depth, &((*rid)[i])))
4131 /*******************************************************************
4132 reads or writes a structure.
4133 ********************************************************************/
4135 BOOL samr_io_r_query_useraliases(const char *desc, SAMR_R_QUERY_USERALIASES * r_u,
4136 prs_struct *ps, int depth)
4141 prs_debug(ps, depth, desc, "samr_io_r_query_useraliases");
4147 if(!prs_uint32("num_entries", ps, depth, &r_u->num_entries))
4149 if(!prs_uint32("ptr ", ps, depth, &r_u->ptr))
4152 if (r_u->ptr != 0) {
4153 if(!samr_io_rids("rids", &r_u->num_entries2, &r_u->rid, ps, depth))
4159 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4165 /*******************************************************************
4166 inits a SAMR_Q_OPEN_ALIAS structure.
4167 ********************************************************************/
4169 void init_samr_q_open_alias(SAMR_Q_OPEN_ALIAS * q_u, POLICY_HND *pol,
4170 uint32 access_mask, uint32 rid)
4172 DEBUG(5, ("init_samr_q_open_alias\n"));
4174 q_u->dom_pol = *pol;
4175 q_u->access_mask = access_mask;
4176 q_u->rid_alias = rid;
4179 /*******************************************************************
4180 reads or writes a structure.
4181 ********************************************************************/
4183 BOOL samr_io_q_open_alias(const char *desc, SAMR_Q_OPEN_ALIAS * q_u,
4184 prs_struct *ps, int depth)
4189 prs_debug(ps, depth, desc, "samr_io_q_open_alias");
4195 if(!smb_io_pol_hnd("domain_pol", &q_u->dom_pol, ps, depth))
4198 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
4200 if(!prs_uint32("rid_alias", ps, depth, &q_u->rid_alias))
4206 /*******************************************************************
4207 reads or writes a structure.
4208 ********************************************************************/
4210 BOOL samr_io_r_open_alias(const char *desc, SAMR_R_OPEN_ALIAS * r_u,
4211 prs_struct *ps, int depth)
4216 prs_debug(ps, depth, desc, "samr_io_r_open_alias");
4222 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
4225 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4231 /*******************************************************************
4232 inits a SAMR_Q_LOOKUP_RIDS structure.
4233 ********************************************************************/
4235 void init_samr_q_lookup_rids(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_RIDS * q_u,
4236 POLICY_HND *pol, uint32 flags,
4237 uint32 num_rids, uint32 *rid)
4239 DEBUG(5, ("init_samr_q_lookup_rids\n"));
4243 q_u->num_rids1 = num_rids;
4246 q_u->num_rids2 = num_rids;
4248 q_u->rid = TALLOC_ZERO_ARRAY(ctx, uint32, num_rids );
4252 if (q_u->rid == NULL) {
4256 memcpy(q_u->rid, rid, num_rids * sizeof(q_u->rid[0]));
4260 /*******************************************************************
4261 reads or writes a structure.
4262 ********************************************************************/
4264 BOOL samr_io_q_lookup_rids(const char *desc, SAMR_Q_LOOKUP_RIDS * q_u,
4265 prs_struct *ps, int depth)
4273 prs_debug(ps, depth, desc, "samr_io_q_lookup_rids");
4276 if (UNMARSHALLING(ps))
4282 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
4285 if(!prs_uint32("num_rids1", ps, depth, &q_u->num_rids1))
4287 if(!prs_uint32("flags ", ps, depth, &q_u->flags))
4289 if(!prs_uint32("ptr ", ps, depth, &q_u->ptr))
4291 if(!prs_uint32("num_rids2", ps, depth, &q_u->num_rids2))
4294 if (UNMARSHALLING(ps) && (q_u->num_rids2 != 0)) {
4295 q_u->rid = PRS_ALLOC_MEM(ps, uint32, q_u->num_rids2);
4296 if (q_u->rid == NULL)
4300 for (i = 0; i < q_u->num_rids2; i++) {
4301 slprintf(tmp, sizeof(tmp) - 1, "rid[%02d] ", i);
4302 if(!prs_uint32(tmp, ps, depth, &q_u->rid[i]))
4309 /*******************************************************************
4310 inits a SAMR_R_LOOKUP_RIDS structure.
4311 ********************************************************************/
4313 void init_samr_r_lookup_rids(SAMR_R_LOOKUP_RIDS * r_u,
4314 uint32 num_names, UNIHDR * hdr_name,
4315 UNISTR2 *uni_name, uint32 *type)
4317 DEBUG(5, ("init_samr_r_lookup_rids\n"));
4319 r_u->hdr_name = NULL;
4320 r_u->uni_name = NULL;
4323 if (num_names != 0) {
4324 r_u->num_names1 = num_names;
4326 r_u->num_names2 = num_names;
4328 r_u->num_types1 = num_names;
4330 r_u->num_types2 = num_names;
4332 r_u->hdr_name = hdr_name;
4333 r_u->uni_name = uni_name;
4336 r_u->num_names1 = num_names;
4338 r_u->num_names2 = num_names;
4340 r_u->num_types1 = num_names;
4342 r_u->num_types2 = num_names;
4346 /*******************************************************************
4347 reads or writes a structure.
4348 ********************************************************************/
4350 BOOL samr_io_r_lookup_rids(const char *desc, SAMR_R_LOOKUP_RIDS * r_u,
4351 prs_struct *ps, int depth)
4358 prs_debug(ps, depth, desc, "samr_io_r_lookup_rids");
4364 if(!prs_uint32("num_names1", ps, depth, &r_u->num_names1))
4366 if(!prs_uint32("ptr_names ", ps, depth, &r_u->ptr_names))
4369 if (r_u->ptr_names != 0) {
4371 if(!prs_uint32("num_names2", ps, depth, &r_u->num_names2))
4375 if (UNMARSHALLING(ps) && (r_u->num_names2 != 0)) {
4376 r_u->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, r_u->num_names2);
4377 if (r_u->hdr_name == NULL)
4380 r_u->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, r_u->num_names2);
4381 if (r_u->uni_name == NULL)
4385 for (i = 0; i < r_u->num_names2; i++) {
4386 slprintf(tmp, sizeof(tmp) - 1, "hdr[%02d] ", i);
4387 if(!smb_io_unihdr("", &r_u->hdr_name[i], ps, depth))
4390 for (i = 0; i < r_u->num_names2; i++) {
4391 slprintf(tmp, sizeof(tmp) - 1, "str[%02d] ", i);
4392 if(!smb_io_unistr2("", &r_u->uni_name[i], r_u->hdr_name[i].buffer, ps, depth))
4400 if(!prs_uint32("num_types1", ps, depth, &r_u->num_types1))
4402 if(!prs_uint32("ptr_types ", ps, depth, &r_u->ptr_types))
4405 if (r_u->ptr_types != 0) {
4407 if(!prs_uint32("num_types2", ps, depth, &r_u->num_types2))
4410 if (UNMARSHALLING(ps) && (r_u->num_types2 != 0)) {
4411 r_u->type = PRS_ALLOC_MEM(ps, uint32, r_u->num_types2);
4412 if (r_u->type == NULL)
4416 for (i = 0; i < r_u->num_types2; i++) {
4417 slprintf(tmp, sizeof(tmp) - 1, "type[%02d] ", i);
4418 if(!prs_uint32(tmp, ps, depth, &r_u->type[i]))
4423 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4429 /*******************************************************************
4430 inits a SAMR_Q_OPEN_ALIAS structure.
4431 ********************************************************************/
4433 void init_samr_q_delete_alias(SAMR_Q_DELETE_DOM_ALIAS * q_u, POLICY_HND *hnd)
4435 DEBUG(5, ("init_samr_q_delete_alias\n"));
4437 q_u->alias_pol = *hnd;
4440 /*******************************************************************
4441 reads or writes a structure.
4442 ********************************************************************/
4444 BOOL samr_io_q_delete_alias(const char *desc, SAMR_Q_DELETE_DOM_ALIAS * q_u,
4445 prs_struct *ps, int depth)
4450 prs_debug(ps, depth, desc, "samr_io_q_delete_alias");
4456 if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
4462 /*******************************************************************
4463 reads or writes a structure.
4464 ********************************************************************/
4466 BOOL samr_io_r_delete_alias(const char *desc, SAMR_R_DELETE_DOM_ALIAS * r_u,
4467 prs_struct *ps, int depth)
4472 prs_debug(ps, depth, desc, "samr_io_r_delete_alias");
4478 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
4480 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4486 /*******************************************************************
4487 inits a SAMR_Q_CREATE_DOM_ALIAS structure.
4488 ********************************************************************/
4490 void init_samr_q_create_dom_alias(SAMR_Q_CREATE_DOM_ALIAS * q_u,
4491 POLICY_HND *hnd, const char *acct_desc)
4493 DEBUG(5, ("init_samr_q_create_dom_alias\n"));
4495 q_u->dom_pol = *hnd;
4497 init_unistr2(&q_u->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
4498 init_uni_hdr(&q_u->hdr_acct_desc, &q_u->uni_acct_desc);
4500 q_u->access_mask = MAXIMUM_ALLOWED_ACCESS;
4503 /*******************************************************************
4504 reads or writes a structure.
4505 ********************************************************************/
4507 BOOL samr_io_q_create_dom_alias(const char *desc, SAMR_Q_CREATE_DOM_ALIAS * q_u,
4508 prs_struct *ps, int depth)
4513 prs_debug(ps, depth, desc, "samr_io_q_create_dom_alias");
4519 if(!smb_io_pol_hnd("dom_pol", &q_u->dom_pol, ps, depth))
4522 if(!smb_io_unihdr("hdr_acct_desc", &q_u->hdr_acct_desc, ps, depth))
4524 if(!smb_io_unistr2("uni_acct_desc", &q_u->uni_acct_desc,
4525 q_u->hdr_acct_desc.buffer, ps, depth))
4530 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
4536 /*******************************************************************
4537 reads or writes a structure.
4538 ********************************************************************/
4540 BOOL samr_io_r_create_dom_alias(const char *desc, SAMR_R_CREATE_DOM_ALIAS * r_u,
4541 prs_struct *ps, int depth)
4546 prs_debug(ps, depth, desc, "samr_io_r_create_dom_alias");
4552 if(!smb_io_pol_hnd("alias_pol", &r_u->alias_pol, ps, depth))
4555 if(!prs_uint32("rid", ps, depth, &r_u->rid))
4558 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4564 /*******************************************************************
4565 inits a SAMR_Q_ADD_ALIASMEM structure.
4566 ********************************************************************/
4568 void init_samr_q_add_aliasmem(SAMR_Q_ADD_ALIASMEM * q_u, POLICY_HND *hnd,
4571 DEBUG(5, ("init_samr_q_add_aliasmem\n"));
4573 q_u->alias_pol = *hnd;
4574 init_dom_sid2(&q_u->sid, sid);
4577 /*******************************************************************
4578 reads or writes a structure.
4579 ********************************************************************/
4581 BOOL samr_io_q_add_aliasmem(const char *desc, SAMR_Q_ADD_ALIASMEM * q_u,
4582 prs_struct *ps, int depth)
4587 prs_debug(ps, depth, desc, "samr_io_q_add_aliasmem");
4593 if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
4595 if(!smb_io_dom_sid2("sid ", &q_u->sid, ps, depth))
4601 /*******************************************************************
4602 reads or writes a structure.
4603 ********************************************************************/
4605 BOOL samr_io_r_add_aliasmem(const char *desc, SAMR_R_ADD_ALIASMEM * r_u,
4606 prs_struct *ps, int depth)
4611 prs_debug(ps, depth, desc, "samr_io_r_add_aliasmem");
4617 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4623 /*******************************************************************
4624 inits a SAMR_Q_DEL_ALIASMEM structure.
4625 ********************************************************************/
4627 void init_samr_q_del_aliasmem(SAMR_Q_DEL_ALIASMEM * q_u, POLICY_HND *hnd,
4630 DEBUG(5, ("init_samr_q_del_aliasmem\n"));
4632 q_u->alias_pol = *hnd;
4633 init_dom_sid2(&q_u->sid, sid);
4636 /*******************************************************************
4637 reads or writes a structure.
4638 ********************************************************************/
4640 BOOL samr_io_q_del_aliasmem(const char *desc, SAMR_Q_DEL_ALIASMEM * q_u,
4641 prs_struct *ps, int depth)
4646 prs_debug(ps, depth, desc, "samr_io_q_del_aliasmem");
4652 if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
4654 if(!smb_io_dom_sid2("sid ", &q_u->sid, ps, depth))
4660 /*******************************************************************
4661 reads or writes a structure.
4662 ********************************************************************/
4664 BOOL samr_io_r_del_aliasmem(const char *desc, SAMR_R_DEL_ALIASMEM * r_u,
4665 prs_struct *ps, int depth)
4670 prs_debug(ps, depth, desc, "samr_io_r_del_aliasmem");
4676 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4682 /*******************************************************************
4683 inits a SAMR_Q_DELETE_DOM_ALIAS structure.
4684 ********************************************************************/
4686 void init_samr_q_delete_dom_alias(SAMR_Q_DELETE_DOM_ALIAS * q_c,
4689 DEBUG(5, ("init_samr_q_delete_dom_alias\n"));
4691 q_c->alias_pol = *hnd;
4694 /*******************************************************************
4695 reads or writes a structure.
4696 ********************************************************************/
4698 BOOL samr_io_q_delete_dom_alias(const char *desc, SAMR_Q_DELETE_DOM_ALIAS * q_u,
4699 prs_struct *ps, int depth)
4704 prs_debug(ps, depth, desc, "samr_io_q_delete_dom_alias");
4710 if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
4716 /*******************************************************************
4717 inits a SAMR_R_DELETE_DOM_ALIAS structure.
4718 ********************************************************************/
4720 void init_samr_r_delete_dom_alias(SAMR_R_DELETE_DOM_ALIAS * r_u,
4723 DEBUG(5, ("init_samr_r_delete_dom_alias\n"));
4725 r_u->status = status;
4728 /*******************************************************************
4729 reads or writes a structure.
4730 ********************************************************************/
4732 BOOL samr_io_r_delete_dom_alias(const char *desc, SAMR_R_DELETE_DOM_ALIAS * r_u,
4733 prs_struct *ps, int depth)
4738 prs_debug(ps, depth, desc, "samr_io_r_delete_dom_alias");
4744 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
4747 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4753 /*******************************************************************
4754 inits a SAMR_Q_QUERY_ALIASMEM structure.
4755 ********************************************************************/
4757 void init_samr_q_query_aliasmem(SAMR_Q_QUERY_ALIASMEM * q_c,
4760 DEBUG(5, ("init_samr_q_query_aliasmem\n"));
4762 q_c->alias_pol = *hnd;
4765 /*******************************************************************
4766 reads or writes a structure.
4767 ********************************************************************/
4769 BOOL samr_io_q_query_aliasmem(const char *desc, SAMR_Q_QUERY_ALIASMEM * q_u,
4770 prs_struct *ps, int depth)
4775 prs_debug(ps, depth, desc, "samr_io_q_query_aliasmem");
4781 if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
4787 /*******************************************************************
4788 inits a SAMR_R_QUERY_ALIASMEM structure.
4789 ********************************************************************/
4791 void init_samr_r_query_aliasmem(SAMR_R_QUERY_ALIASMEM * r_u,
4792 uint32 num_sids, DOM_SID2 * sid,
4795 DEBUG(5, ("init_samr_r_query_aliasmem\n"));
4797 if (NT_STATUS_IS_OK(status)) {
4798 r_u->num_sids = num_sids;
4799 r_u->ptr = (num_sids != 0) ? 1 : 0;
4800 r_u->num_sids1 = num_sids;
4808 r_u->status = status;
4811 /*******************************************************************
4812 reads or writes a structure.
4813 ********************************************************************/
4815 BOOL samr_io_r_query_aliasmem(const char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
4816 prs_struct *ps, int depth)
4823 prs_debug(ps, depth, desc, "samr_io_r_query_aliasmem");
4829 if(!prs_uint32("num_sids ", ps, depth, &r_u->num_sids))
4831 if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
4834 if (r_u->ptr != 0 && r_u->num_sids != 0) {
4835 uint32 *ptr_sid = NULL;
4837 if(!prs_uint32("num_sids1", ps, depth, &r_u->num_sids1))
4840 /* We must always use talloc here even when marshalling. */
4841 if (r_u->num_sids1) {
4842 ptr_sid = TALLOC_ARRAY(ps->mem_ctx, uint32, r_u->num_sids1);
4850 for (i = 0; i < r_u->num_sids1; i++) {
4852 if(!prs_uint32("ptr_sid", ps, depth, &ptr_sid[i]))
4856 if (UNMARSHALLING(ps)) {
4857 if (r_u->num_sids1) {
4858 r_u->sid = TALLOC_ARRAY(ps->mem_ctx, DOM_SID2, r_u->num_sids1);
4867 for (i = 0; i < r_u->num_sids1; i++) {
4868 if (ptr_sid[i] != 0) {
4869 if(!smb_io_dom_sid2("sid", &r_u->sid[i], ps, depth))
4877 if(!prs_ntstatus("status", ps, depth, &r_u->status))
4883 /*******************************************************************
4884 inits a SAMR_Q_LOOKUP_NAMES structure.
4885 ********************************************************************/
4887 NTSTATUS init_samr_q_lookup_names(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_NAMES * q_u,
4888 POLICY_HND *pol, uint32 flags,
4889 uint32 num_names, const char **name)
4893 DEBUG(5, ("init_samr_q_lookup_names\n"));
4897 q_u->num_names1 = num_names;
4900 q_u->num_names2 = num_names;
4903 if (!(q_u->hdr_name = TALLOC_ZERO_ARRAY(ctx, UNIHDR, num_names)))
4904 return NT_STATUS_NO_MEMORY;
4906 if (!(q_u->uni_name = TALLOC_ZERO_ARRAY(ctx, UNISTR2, num_names)))
4907 return NT_STATUS_NO_MEMORY;
4909 q_u->hdr_name = NULL;
4910 q_u->uni_name = NULL;
4913 for (i = 0; i < num_names; i++) {
4914 init_unistr2(&q_u->uni_name[i], name[i], UNI_FLAGS_NONE); /* unicode string for machine account */
4915 init_uni_hdr(&q_u->hdr_name[i], &q_u->uni_name[i]); /* unicode header for user_name */
4918 return NT_STATUS_OK;
4921 /*******************************************************************
4922 reads or writes a structure.
4923 ********************************************************************/
4925 BOOL samr_io_q_lookup_names(const char *desc, SAMR_Q_LOOKUP_NAMES * q_u,
4926 prs_struct *ps, int depth)
4933 prs_debug(ps, depth, desc, "samr_io_q_lookup_names");
4936 if (UNMARSHALLING(ps))
4942 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
4945 if(!prs_uint32("num_names1", ps, depth, &q_u->num_names1))
4947 if(!prs_uint32("flags ", ps, depth, &q_u->flags))
4949 if(!prs_uint32("ptr ", ps, depth, &q_u->ptr))
4951 if(!prs_uint32("num_names2", ps, depth, &q_u->num_names2))
4954 if (UNMARSHALLING(ps) && (q_u->num_names2 != 0)) {
4955 q_u->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, q_u->num_names2);
4956 q_u->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, q_u->num_names2);
4957 if (!q_u->hdr_name || !q_u->uni_name)
4961 for (i = 0; i < q_u->num_names2; i++) {
4962 if(!smb_io_unihdr("", &q_u->hdr_name[i], ps, depth))
4966 for (i = 0; i < q_u->num_names2; i++) {
4967 if(!smb_io_unistr2("", &q_u->uni_name[i], q_u->hdr_name[i].buffer, ps, depth))
4974 /*******************************************************************
4975 inits a SAMR_R_LOOKUP_NAMES structure.
4976 ********************************************************************/
4978 NTSTATUS init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
4980 uint32 *rid, enum lsa_SidType *type,
4983 DEBUG(5, ("init_samr_r_lookup_names\n"));
4985 if (NT_STATUS_IS_OK(status) && (num_rids != 0)) {
4988 r_u->num_types1 = num_rids;
4990 r_u->num_types2 = num_rids;
4992 r_u->num_rids1 = num_rids;
4994 r_u->num_rids2 = num_rids;
4996 if (!(r_u->rids = TALLOC_ZERO_ARRAY(ctx, uint32, num_rids)))
4997 return NT_STATUS_NO_MEMORY;
4998 if (!(r_u->types = TALLOC_ZERO_ARRAY(ctx, uint32, num_rids)))
4999 return NT_STATUS_NO_MEMORY;
5001 for (i = 0; i < num_rids; i++) {
5002 r_u->rids[i] = rid[i];
5003 r_u->types[i] = type[i];
5007 r_u->num_types1 = 0;
5009 r_u->num_types2 = 0;
5019 r_u->status = status;
5021 return NT_STATUS_OK;
5024 /*******************************************************************
5025 reads or writes a structure.
5026 ********************************************************************/
5028 BOOL samr_io_r_lookup_names(const char *desc, SAMR_R_LOOKUP_NAMES * r_u,
5029 prs_struct *ps, int depth)
5037 prs_debug(ps, depth, desc, "samr_io_r_lookup_names");
5040 if (UNMARSHALLING(ps))
5046 if(!prs_uint32("num_rids1", ps, depth, &r_u->num_rids1))
5048 if(!prs_uint32("ptr_rids ", ps, depth, &r_u->ptr_rids))
5051 if (r_u->ptr_rids != 0) {
5052 if(!prs_uint32("num_rids2", ps, depth, &r_u->num_rids2))
5055 if (r_u->num_rids2 != r_u->num_rids1) {
5060 if (UNMARSHALLING(ps) && r_u->num_rids2) {
5061 r_u->rids = PRS_ALLOC_MEM(ps, uint32, r_u->num_rids2);
5064 DEBUG(0, ("NULL rids in samr_io_r_lookup_names\n"));
5069 for (i = 0; i < r_u->num_rids2; i++) {
5070 slprintf(tmp, sizeof(tmp) - 1, "rid[%02d] ", i);
5071 if(!prs_uint32(tmp, ps, depth, &r_u->rids[i]))
5076 if(!prs_uint32("num_types1", ps, depth, &r_u->num_types1))
5078 if(!prs_uint32("ptr_types ", ps, depth, &r_u->ptr_types))
5081 if (r_u->ptr_types != 0) {
5082 if(!prs_uint32("num_types2", ps, depth, &r_u->num_types2))
5085 if (r_u->num_types2 != r_u->num_types1) {
5090 if (UNMARSHALLING(ps) && r_u->num_types2) {
5091 r_u->types = PRS_ALLOC_MEM(ps, uint32, r_u->num_types2);
5094 DEBUG(0, ("NULL types in samr_io_r_lookup_names\n"));
5099 for (i = 0; i < r_u->num_types2; i++) {
5100 slprintf(tmp, sizeof(tmp) - 1, "type[%02d] ", i);
5101 if(!prs_uint32(tmp, ps, depth, &r_u->types[i]))
5106 if(!prs_ntstatus("status", ps, depth, &r_u->status))
5112 /*******************************************************************
5113 inits a SAMR_Q_DELETE_DOM_USER structure.
5114 ********************************************************************/
5116 void init_samr_q_delete_dom_user(SAMR_Q_DELETE_DOM_USER * q_c,
5119 DEBUG(5, ("init_samr_q_delete_dom_user\n"));
5121 q_c->user_pol = *hnd;
5124 /*******************************************************************
5125 reads or writes a structure.
5126 ********************************************************************/
5128 BOOL samr_io_q_delete_dom_user(const char *desc, SAMR_Q_DELETE_DOM_USER * q_u,
5129 prs_struct *ps, int depth)
5134 prs_debug(ps, depth, desc, "samr_io_q_delete_dom_user");
5140 if(!smb_io_pol_hnd("user_pol", &q_u->user_pol, ps, depth))
5146 /*******************************************************************
5147 reads or writes a structure.
5148 ********************************************************************/
5150 BOOL samr_io_r_delete_dom_user(const char *desc, SAMR_R_DELETE_DOM_USER * r_u,
5151 prs_struct *ps, int depth)
5156 prs_debug(ps, depth, desc, "samr_io_r_delete_dom_user");
5162 if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
5164 if(!prs_ntstatus("status", ps, depth, &r_u->status))
5170 /*******************************************************************
5171 reads or writes a structure.
5172 ********************************************************************/
5174 void init_samr_q_open_user(SAMR_Q_OPEN_USER * q_u,
5176 uint32 access_mask, uint32 rid)
5178 DEBUG(5, ("samr_init_samr_q_open_user\n"));
5180 q_u->domain_pol = *pol;
5181 q_u->access_mask = access_mask;
5182 q_u->user_rid = rid;
5185 /*******************************************************************
5186 reads or writes a structure.
5187 ********************************************************************/
5189 BOOL samr_io_q_open_user(const char *desc, SAMR_Q_OPEN_USER * q_u,
5190 prs_struct *ps, int depth)
5195 prs_debug(ps, depth, desc, "samr_io_q_open_user");
5201 if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
5204 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
5206 if(!prs_uint32("user_rid ", ps, depth, &q_u->user_rid))
5212 /*******************************************************************
5213 reads or writes a structure.
5214 ********************************************************************/
5216 BOOL samr_io_r_open_user(const char *desc, SAMR_R_OPEN_USER * r_u,
5217 prs_struct *ps, int depth)
5222 prs_debug(ps, depth, desc, "samr_io_r_open_user");
5228 if(!smb_io_pol_hnd("user_pol", &r_u->user_pol, ps, depth))
5231 if(!prs_ntstatus("status", ps, depth, &r_u->status))
5238 /*******************************************************************
5239 reads or writes a structure.
5240 ********************************************************************/
5242 void init_samr_q_create_user(SAMR_Q_CREATE_USER * q_u,
5245 uint32 acb_info, uint32 access_mask)
5247 DEBUG(5, ("samr_init_samr_q_create_user\n"));
5249 q_u->domain_pol = *pol;
5251 init_unistr2(&q_u->uni_name, name, UNI_FLAGS_NONE);
5252 init_uni_hdr(&q_u->hdr_name, &q_u->uni_name);
5254 q_u->acb_info = acb_info;
5255 q_u->access_mask = access_mask;
5258 /*******************************************************************
5259 reads or writes a structure.
5260 ********************************************************************/
5262 BOOL samr_io_q_create_user(const char *desc, SAMR_Q_CREATE_USER * q_u,
5263 prs_struct *ps, int depth)
5268 prs_debug(ps, depth, desc, "samr_io_q_create_user");
5274 if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
5277 if(!smb_io_unihdr("hdr_name", &q_u->hdr_name, ps, depth))
5279 if(!smb_io_unistr2("uni_name", &q_u->uni_name, q_u->hdr_name.buffer, ps, depth))
5284 if(!prs_uint32("acb_info ", ps, depth, &q_u->acb_info))
5286 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
5292 /*******************************************************************
5293 reads or writes a structure.
5294 ********************************************************************/
5296 BOOL samr_io_r_create_user(const char *desc, SAMR_R_CREATE_USER * r_u,
5297 prs_struct *ps, int depth)
5302 prs_debug(ps, depth, desc, "samr_io_r_create_user");
5308 if(!smb_io_pol_hnd("user_pol", &r_u->user_pol, ps, depth))
5311 if(!prs_uint32("access_granted", ps, depth, &r_u->access_granted))
5313 if(!prs_uint32("user_rid ", ps, depth, &r_u->user_rid))
5315 if(!prs_ntstatus("status", ps, depth, &r_u->status))
5321 /*******************************************************************
5322 inits a SAMR_Q_QUERY_USERINFO structure.
5323 ********************************************************************/
5325 void init_samr_q_query_userinfo(SAMR_Q_QUERY_USERINFO * q_u,
5326 const POLICY_HND *hnd, uint16 switch_value)
5328 DEBUG(5, ("init_samr_q_query_userinfo\n"));
5331 q_u->switch_value = switch_value;
5334 /*******************************************************************
5335 reads or writes a structure.
5336 ********************************************************************/
5338 BOOL samr_io_q_query_userinfo(const char *desc, SAMR_Q_QUERY_USERINFO * q_u,
5339 prs_struct *ps, int depth)
5344 prs_debug(ps, depth, desc, "samr_io_q_query_userinfo");
5350 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
5353 if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value)) /* 0x0015 or 0x0011 */
5359 /*******************************************************************
5360 reads or writes a LOGON_HRS structure.
5361 ********************************************************************/
5363 static BOOL sam_io_logon_hrs(const char *desc, LOGON_HRS * hrs,
5364 prs_struct *ps, int depth)
5369 prs_debug(ps, depth, desc, "sam_io_logon_hrs");
5375 if(!prs_uint32("maxlen", ps, depth, &hrs->max_len))
5378 if(!prs_uint32("offset", ps, depth, &hrs->offset))
5381 if(!prs_uint32("len ", ps, depth, &hrs->len))
5384 if (hrs->len > sizeof(hrs->hours)) {
5385 DEBUG(3, ("sam_io_logon_hrs: truncating length from %d\n", hrs->len));
5386 hrs->len = sizeof(hrs->hours);
5389 if(!prs_uint8s(False, "hours", ps, depth, hrs->hours, hrs->len))
5395 /*******************************************************************
5396 inits a SAM_USER_INFO_18 structure.
5397 ********************************************************************/
5399 void init_sam_user_info18(SAM_USER_INFO_18 * usr,
5400 const uint8 lm_pwd[16], const uint8 nt_pwd[16])
5402 DEBUG(5, ("init_sam_user_info18\n"));
5404 usr->lm_pwd_active =
5405 memcpy(usr->lm_pwd, lm_pwd, sizeof(usr->lm_pwd)) ? 1 : 0;
5406 usr->nt_pwd_active =
5407 memcpy(usr->nt_pwd, nt_pwd, sizeof(usr->nt_pwd)) ? 1 : 0;
5410 /*******************************************************************
5411 reads or writes a structure.
5412 ********************************************************************/
5414 static BOOL sam_io_user_info18(const char *desc, SAM_USER_INFO_18 * u,
5415 prs_struct *ps, int depth)
5420 prs_debug(ps, depth, desc, "samr_io_r_user_info18");
5426 if(!prs_uint8s(False, "lm_pwd", ps, depth, u->lm_pwd, sizeof(u->lm_pwd)))
5428 if(!prs_uint8s(False, "nt_pwd", ps, depth, u->nt_pwd, sizeof(u->nt_pwd)))
5431 if(!prs_uint8("lm_pwd_active", ps, depth, &u->lm_pwd_active))
5433 if(!prs_uint8("nt_pwd_active", ps, depth, &u->nt_pwd_active))
5439 /*******************************************************************
5440 inits a SAM_USER_INFO_7 structure.
5441 ********************************************************************/
5443 void init_sam_user_info7(SAM_USER_INFO_7 * usr, const char *name)
5445 DEBUG(5, ("init_sam_user_info7\n"));
5447 init_unistr2(&usr->uni_name, name, UNI_FLAGS_NONE); /* unicode string for name */
5448 init_uni_hdr(&usr->hdr_name, &usr->uni_name); /* unicode header for name */
5452 /*******************************************************************
5453 reads or writes a structure.
5454 ********************************************************************/
5456 static BOOL sam_io_user_info7(const char *desc, SAM_USER_INFO_7 * usr,
5457 prs_struct *ps, int depth)
5462 prs_debug(ps, depth, desc, "samr_io_r_user_info7");
5468 if(!smb_io_unihdr("unihdr", &usr->hdr_name, ps, depth))
5471 if(!smb_io_unistr2("unistr2", &usr->uni_name, True, ps, depth))
5477 /*******************************************************************
5478 inits a SAM_USER_INFO_9 structure.
5479 ********************************************************************/
5481 void init_sam_user_info9(SAM_USER_INFO_9 * usr, uint32 rid_group)
5483 DEBUG(5, ("init_sam_user_info9\n"));
5485 usr->rid_group = rid_group;
5488 /*******************************************************************
5489 reads or writes a structure.
5490 ********************************************************************/
5492 static BOOL sam_io_user_info9(const char *desc, SAM_USER_INFO_9 * usr,
5493 prs_struct *ps, int depth)
5498 prs_debug(ps, depth, desc, "samr_io_r_user_info9");
5504 if(!prs_uint32("rid_group", ps, depth, &usr->rid_group))
5510 /*******************************************************************
5511 inits a SAM_USER_INFO_16 structure.
5512 ********************************************************************/
5514 void init_sam_user_info16(SAM_USER_INFO_16 * usr, uint32 acb_info)
5516 DEBUG(5, ("init_sam_user_info16\n"));
5518 usr->acb_info = acb_info;
5521 /*******************************************************************
5522 reads or writes a structure.
5523 ********************************************************************/
5525 static BOOL sam_io_user_info16(const char *desc, SAM_USER_INFO_16 * usr,
5526 prs_struct *ps, int depth)
5531 prs_debug(ps, depth, desc, "samr_io_r_user_info16");
5537 if(!prs_uint32("acb_info", ps, depth, &usr->acb_info))
5543 /*******************************************************************
5544 inits a SAM_USER_INFO_17 structure.
5545 ********************************************************************/
5547 void init_sam_user_info17(SAM_USER_INFO_17 * usr,
5550 uint32 rid_user, uint32 rid_group, uint16 acct_ctrl)
5552 DEBUG(5, ("init_sam_user_info17\n"));
5554 memcpy(&usr->expiry, expiry, sizeof(usr->expiry)); /* expiry time or something? */
5555 ZERO_STRUCT(usr->padding_1); /* 0 - padding 24 bytes */
5557 usr->padding_2 = 0; /* 0 - padding 4 bytes */
5559 usr->ptr_1 = 1; /* pointer */
5560 ZERO_STRUCT(usr->padding_3); /* 0 - padding 32 bytes */
5561 usr->padding_4 = 0; /* 0 - padding 4 bytes */
5563 usr->ptr_2 = 1; /* pointer */
5564 usr->padding_5 = 0; /* 0 - padding 4 bytes */
5566 usr->ptr_3 = 1; /* pointer */
5567 ZERO_STRUCT(usr->padding_6); /* 0 - padding 32 bytes */
5569 usr->rid_user = rid_user;
5570 usr->rid_group = rid_group;
5572 usr->acct_ctrl = acct_ctrl;
5573 usr->unknown_3 = 0x0000;
5575 usr->unknown_4 = 0x003f; /* 0x003f - 16 bit unknown */
5576 usr->unknown_5 = 0x003c; /* 0x003c - 16 bit unknown */
5578 ZERO_STRUCT(usr->padding_7); /* 0 - padding 16 bytes */
5579 usr->padding_8 = 0; /* 0 - padding 4 bytes */
5581 init_unistr2(&usr->uni_mach_acct, mach_acct, UNI_FLAGS_NONE); /* unicode string for machine account */
5582 init_uni_hdr(&usr->hdr_mach_acct, &usr->uni_mach_acct); /* unicode header for machine account */
5585 /*******************************************************************
5586 reads or writes a structure.
5587 ********************************************************************/
5589 static BOOL sam_io_user_info17(const char *desc, SAM_USER_INFO_17 * usr,
5590 prs_struct *ps, int depth)
5595 prs_debug(ps, depth, desc, "samr_io_r_unknown_17");
5601 if(!prs_uint8s(False, "padding_0", ps, depth, usr->padding_0, sizeof(usr->padding_0)))
5604 if(!smb_io_time("time", &usr->expiry, ps, depth))
5607 if(!prs_uint8s(False, "padding_1", ps, depth, usr->padding_1, sizeof(usr->padding_1)))
5610 if(!smb_io_unihdr("unihdr", &usr->hdr_mach_acct, ps, depth))
5613 if(!prs_uint32("padding_2", ps, depth, &usr->padding_2))
5616 if(!prs_uint32("ptr_1 ", ps, depth, &usr->ptr_1))
5618 if(!prs_uint8s(False, "padding_3", ps, depth, usr->padding_3, sizeof(usr->padding_3)))
5621 if(!prs_uint32("padding_4", ps, depth, &usr->padding_4))
5624 if(!prs_uint32("ptr_2 ", ps, depth, &usr->ptr_2))
5626 if(!prs_uint32("padding_5", ps, depth, &usr->padding_5))
5629 if(!prs_uint32("ptr_3 ", ps, depth, &usr->ptr_3))
5631 if(!prs_uint8s(False, "padding_6", ps, depth, usr->padding_6,sizeof(usr->padding_6)))
5634 if(!prs_uint32("rid_user ", ps, depth, &usr->rid_user))
5636 if(!prs_uint32("rid_group", ps, depth, &usr->rid_group))
5638 if(!prs_uint16("acct_ctrl", ps, depth, &usr->acct_ctrl))
5640 if(!prs_uint16("unknown_3", ps, depth, &usr->unknown_3))
5642 if(!prs_uint16("unknown_4", ps, depth, &usr->unknown_4))
5644 if(!prs_uint16("unknown_5", ps, depth, &usr->unknown_5))
5647 if(!prs_uint8s(False, "padding_7", ps, depth, usr->padding_7, sizeof(usr->padding_7)))
5650 if(!prs_uint32("padding_8", ps, depth, &(usr->padding_8)))
5653 if(!smb_io_unistr2("unistr2", &usr->uni_mach_acct, True, ps, depth))
5659 if(!prs_uint8s(False, "padding_9", ps, depth, usr->padding_9, sizeof(usr->padding_9)))
5665 /*************************************************************************
5667 *************************************************************************/
5669 void init_sam_user_info24(SAM_USER_INFO_24 * usr, char newpass[516],
5672 DEBUG(10, ("init_sam_user_info24:\n"));
5673 memcpy(usr->pass, newpass, sizeof(usr->pass));
5674 usr->pw_len = pw_len;
5677 /*******************************************************************
5678 reads or writes a structure.
5679 ********************************************************************/
5681 static BOOL sam_io_user_info24(const char *desc, SAM_USER_INFO_24 * usr,
5682 prs_struct *ps, int depth)
5687 prs_debug(ps, depth, desc, "sam_io_user_info24");
5693 if(!prs_uint8s(False, "password", ps, depth, usr->pass,
5697 if (MARSHALLING(ps) && (usr->pw_len != 0)) {
5698 if (!prs_uint8("pw_len", ps, depth, &usr->pw_len))
5700 } else if (UNMARSHALLING(ps)) {
5701 if (!prs_uint8("pw_len", ps, depth, &usr->pw_len))
5708 /*******************************************************************
5709 reads or writes a structure.
5710 ********************************************************************/
5712 static BOOL sam_io_user_info26(const char *desc, SAM_USER_INFO_26 * usr,
5713 prs_struct *ps, int depth)
5718 prs_debug(ps, depth, desc, "sam_io_user_info26");
5724 if(!prs_uint8s(False, "password", ps, depth, usr->pass,
5728 if (!prs_uint8("pw_len", ps, depth, &usr->pw_len))
5735 /*************************************************************************
5736 init_sam_user_info23
5738 unknown_6 = 0x0000 04ec
5740 *************************************************************************/
5742 void init_sam_user_info23W(SAM_USER_INFO_23 * usr, NTTIME * logon_time, /* all zeros */
5743 NTTIME * logoff_time, /* all zeros */
5744 NTTIME * kickoff_time, /* all zeros */
5745 NTTIME * pass_last_set_time, /* all zeros */
5746 NTTIME * pass_can_change_time, /* all zeros */
5747 NTTIME * pass_must_change_time, /* all zeros */
5758 uint32 user_rid, /* 0x0000 0000 */
5761 uint32 fields_present,
5764 uint16 bad_password_count,
5768 usr->logon_time = *logon_time; /* all zeros */
5769 usr->logoff_time = *logoff_time; /* all zeros */
5770 usr->kickoff_time = *kickoff_time; /* all zeros */
5771 usr->pass_last_set_time = *pass_last_set_time; /* all zeros */
5772 usr->pass_can_change_time = *pass_can_change_time; /* all zeros */
5773 usr->pass_must_change_time = *pass_must_change_time; /* all zeros */
5775 ZERO_STRUCT(usr->nt_pwd);
5776 ZERO_STRUCT(usr->lm_pwd);
5778 usr->user_rid = user_rid; /* 0x0000 0000 */
5779 usr->group_rid = group_rid;
5780 usr->acb_info = acb_info;
5781 usr->fields_present = fields_present; /* 09f8 27fa */
5783 usr->logon_divs = logon_divs; /* should be 168 (hours/week) */
5784 usr->ptr_logon_hrs = hrs ? 1 : 0;
5786 if (nt_time_is_zero(pass_must_change_time)) {
5787 usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
5789 usr->passmustchange=0;
5792 ZERO_STRUCT(usr->padding1);
5793 ZERO_STRUCT(usr->padding2);
5795 usr->bad_password_count = bad_password_count;
5796 usr->logon_count = logon_count;
5798 memcpy(usr->pass, newpass, sizeof(usr->pass));
5800 copy_unistr2(&usr->uni_user_name, user_name);
5801 init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
5803 copy_unistr2(&usr->uni_full_name, full_name);
5804 init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
5806 copy_unistr2(&usr->uni_home_dir, home_dir);
5807 init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
5809 copy_unistr2(&usr->uni_dir_drive, dir_drive);
5810 init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
5812 copy_unistr2(&usr->uni_logon_script, log_scr);
5813 init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
5815 copy_unistr2(&usr->uni_profile_path, prof_path);
5816 init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
5818 copy_unistr2(&usr->uni_acct_desc, desc);
5819 init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
5821 copy_unistr2(&usr->uni_workstations, wkstas);
5822 init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
5824 copy_unistr2(&usr->uni_comment, unk_str);
5825 init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
5827 copy_unistr2(&usr->uni_munged_dial, mung_dial);
5828 init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
5831 memcpy(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
5833 ZERO_STRUCT(usr->logon_hrs);
5837 /*************************************************************************
5838 init_sam_user_info23
5840 unknown_6 = 0x0000 04ec
5842 *************************************************************************/
5844 void init_sam_user_info23A(SAM_USER_INFO_23 * usr, NTTIME * logon_time, /* all zeros */
5845 NTTIME * logoff_time, /* all zeros */
5846 NTTIME * kickoff_time, /* all zeros */
5847 NTTIME * pass_last_set_time, /* all zeros */
5848 NTTIME * pass_can_change_time, /* all zeros */
5849 NTTIME * pass_must_change_time, /* all zeros */
5850 char *user_name, /* NULL */
5852 char *home_dir, char *dir_drive, char *log_scr,
5853 char *prof_path, const char *desc, char *wkstas,
5854 char *unk_str, char *mung_dial, uint32 user_rid, /* 0x0000 0000 */
5855 uint32 group_rid, uint32 acb_info,
5856 uint32 fields_present, uint16 logon_divs,
5857 LOGON_HRS * hrs, uint16 bad_password_count, uint16 logon_count,
5860 DATA_BLOB blob = base64_decode_data_blob(mung_dial);
5862 usr->logon_time = *logon_time; /* all zeros */
5863 usr->logoff_time = *logoff_time; /* all zeros */
5864 usr->kickoff_time = *kickoff_time; /* all zeros */
5865 usr->pass_last_set_time = *pass_last_set_time; /* all zeros */
5866 usr->pass_can_change_time = *pass_can_change_time; /* all zeros */
5867 usr->pass_must_change_time = *pass_must_change_time; /* all zeros */
5869 ZERO_STRUCT(usr->nt_pwd);
5870 ZERO_STRUCT(usr->lm_pwd);
5872 usr->user_rid = user_rid; /* 0x0000 0000 */
5873 usr->group_rid = group_rid;
5874 usr->acb_info = acb_info;
5875 usr->fields_present = fields_present; /* 09f8 27fa */
5877 usr->logon_divs = logon_divs; /* should be 168 (hours/week) */
5878 usr->ptr_logon_hrs = hrs ? 1 : 0;
5880 if (nt_time_is_zero(pass_must_change_time)) {
5881 usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
5883 usr->passmustchange=0;
5886 ZERO_STRUCT(usr->padding1);
5887 ZERO_STRUCT(usr->padding2);
5889 usr->bad_password_count = bad_password_count;
5890 usr->logon_count = logon_count;
5892 memcpy(usr->pass, newpass, sizeof(usr->pass));
5894 init_unistr2(&usr->uni_user_name, user_name, UNI_FLAGS_NONE);
5895 init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
5897 init_unistr2(&usr->uni_full_name, full_name, UNI_FLAGS_NONE);
5898 init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
5900 init_unistr2(&usr->uni_home_dir, home_dir, UNI_FLAGS_NONE);
5901 init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
5903 init_unistr2(&usr->uni_dir_drive, dir_drive, UNI_FLAGS_NONE);
5904 init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
5906 init_unistr2(&usr->uni_logon_script, log_scr, UNI_FLAGS_NONE);
5907 init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
5909 init_unistr2(&usr->uni_profile_path, prof_path, UNI_FLAGS_NONE);
5910 init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
5912 init_unistr2(&usr->uni_acct_desc, desc, UNI_FLAGS_NONE);
5913 init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
5915 init_unistr2(&usr->uni_workstations, wkstas, UNI_FLAGS_NONE);
5916 init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
5918 init_unistr2(&usr->uni_comment, unk_str, UNI_FLAGS_NONE);
5919 init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
5921 init_unistr2_from_datablob(&usr->uni_munged_dial, &blob);
5922 init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
5924 data_blob_free(&blob);
5927 memcpy(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
5929 ZERO_STRUCT(usr->logon_hrs);
5934 /*************************************************************************
5935 init_samr_user_info25P
5936 fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS
5937 *************************************************************************/
5939 void init_sam_user_info25P(SAM_USER_INFO_25 * usr,
5940 uint32 fields_present, uint32 acb_info,
5943 usr->fields_present = fields_present;
5944 ZERO_STRUCT(usr->padding1);
5945 ZERO_STRUCT(usr->padding2);
5947 usr->acb_info = acb_info;
5948 memcpy(usr->pass, newpass, sizeof(usr->pass));
5952 /*******************************************************************
5953 reads or writes a structure.
5954 ********************************************************************/
5956 static BOOL sam_io_user_info23(const char *desc, SAM_USER_INFO_23 * usr,
5957 prs_struct *ps, int depth)
5962 prs_debug(ps, depth, desc, "sam_io_user_info23");
5968 if(!smb_io_time("logon_time ", &usr->logon_time, ps, depth))
5970 if(!smb_io_time("logoff_time ", &usr->logoff_time, ps, depth))
5972 if(!smb_io_time("kickoff_time ", &usr->kickoff_time, ps, depth))
5974 if(!smb_io_time("pass_last_set_time ", &usr->pass_last_set_time, ps, depth))
5976 if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps, depth))
5978 if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
5981 if(!smb_io_unihdr("hdr_user_name ", &usr->hdr_user_name, ps, depth)) /* username unicode string header */
5983 if(!smb_io_unihdr("hdr_full_name ", &usr->hdr_full_name, ps, depth)) /* user's full name unicode string header */
5985 if(!smb_io_unihdr("hdr_home_dir ", &usr->hdr_home_dir, ps, depth)) /* home directory unicode string header */
5987 if(!smb_io_unihdr("hdr_dir_drive ", &usr->hdr_dir_drive, ps, depth)) /* home directory drive */
5989 if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth)) /* logon script unicode string header */
5991 if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth)) /* profile path unicode string header */
5993 if(!smb_io_unihdr("hdr_acct_desc ", &usr->hdr_acct_desc, ps, depth)) /* account desc */
5995 if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth)) /* wkstas user can log on from */
5997 if(!smb_io_unihdr("hdr_comment ", &usr->hdr_comment, ps, depth)) /* unknown string */
5999 if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth)) /* wkstas user can log on from */
6002 if(!prs_uint8s(False, "lm_pwd ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
6004 if(!prs_uint8s(False, "nt_pwd ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
6007 if(!prs_uint32("user_rid ", ps, depth, &usr->user_rid)) /* User ID */
6009 if(!prs_uint32("group_rid ", ps, depth, &usr->group_rid)) /* Group ID */
6011 if(!prs_uint32("acb_info ", ps, depth, &usr->acb_info))
6014 if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
6016 if(!prs_uint16("logon_divs ", ps, depth, &usr->logon_divs)) /* logon divisions per week */
6020 if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
6023 if(!prs_uint16("bad_password_count ", ps, depth, &usr->bad_password_count))
6025 if(!prs_uint16("logon_count ", ps, depth, &usr->logon_count))
6028 if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1)))
6030 if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange))
6032 if(!prs_uint8("padding2 ", ps, depth, &usr->padding2))
6036 if(!prs_uint8s(False, "password ", ps, depth, usr->pass, sizeof(usr->pass)))
6039 /* here begins pointed-to data */
6041 if(!smb_io_unistr2("uni_user_name ", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth)) /* username unicode string */
6044 if(!smb_io_unistr2("uni_full_name ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth)) /* user's full name unicode string */
6047 if(!smb_io_unistr2("uni_home_dir ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth)) /* home directory unicode string */
6050 if(!smb_io_unistr2("uni_dir_drive ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth)) /* home directory drive unicode string */
6053 if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth)) /* logon script unicode string */
6056 if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth)) /* profile path unicode string */
6059 if(!smb_io_unistr2("uni_acct_desc ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth)) /* user desc unicode string */
6062 if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth)) /* worksations user can log on from */
6065 if(!smb_io_unistr2("uni_comment ", &usr->uni_comment, usr->hdr_comment.buffer, ps, depth)) /* unknown string */
6068 if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial, usr->hdr_munged_dial.buffer, ps, depth))
6071 /* ok, this is only guess-work (as usual) */
6072 if (usr->ptr_logon_hrs) {
6073 if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
6080 /*******************************************************************
6081 reads or writes a structure.
6082 NB. This structure is *definately* incorrect. It's my best guess
6083 currently for W2K SP2. The password field is encrypted in a different
6084 way than normal... And there are definately other problems. JRA.
6085 ********************************************************************/
6087 static BOOL sam_io_user_info25(const char *desc, SAM_USER_INFO_25 * usr, prs_struct *ps, int depth)
6092 prs_debug(ps, depth, desc, "sam_io_user_info25");
6098 if(!smb_io_time("logon_time ", &usr->logon_time, ps, depth))
6100 if(!smb_io_time("logoff_time ", &usr->logoff_time, ps, depth))
6102 if(!smb_io_time("kickoff_time ", &usr->kickoff_time, ps, depth))
6104 if(!smb_io_time("pass_last_set_time ", &usr->pass_last_set_time, ps, depth))
6106 if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps, depth))
6108 if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
6111 if(!smb_io_unihdr("hdr_user_name ", &usr->hdr_user_name, ps, depth)) /* username unicode string header */
6113 if(!smb_io_unihdr("hdr_full_name ", &usr->hdr_full_name, ps, depth)) /* user's full name unicode string header */
6115 if(!smb_io_unihdr("hdr_home_dir ", &usr->hdr_home_dir, ps, depth)) /* home directory unicode string header */
6117 if(!smb_io_unihdr("hdr_dir_drive ", &usr->hdr_dir_drive, ps, depth)) /* home directory drive */
6119 if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth)) /* logon script unicode string header */
6121 if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth)) /* profile path unicode string header */
6123 if(!smb_io_unihdr("hdr_acct_desc ", &usr->hdr_acct_desc, ps, depth)) /* account desc */
6125 if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth)) /* wkstas user can log on from */
6127 if(!smb_io_unihdr("hdr_comment ", &usr->hdr_comment, ps, depth)) /* unknown string */
6129 if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth)) /* wkstas user can log on from */
6132 if(!prs_uint8s(False, "lm_pwd ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
6134 if(!prs_uint8s(False, "nt_pwd ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
6137 if(!prs_uint32("user_rid ", ps, depth, &usr->user_rid)) /* User ID */
6139 if(!prs_uint32("group_rid ", ps, depth, &usr->group_rid)) /* Group ID */
6141 if(!prs_uint32("acb_info ", ps, depth, &usr->acb_info))
6143 if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
6146 if(!prs_uint16("logon_divs ", ps, depth, &usr->logon_divs)) /* logon divisions per week */
6150 if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
6153 if(!prs_uint16("bad_password_count ", ps, depth, &usr->bad_password_count))
6155 if(!prs_uint16("logon_count ", ps, depth, &usr->logon_count))
6158 if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1)))
6160 if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange))
6162 if(!prs_uint8("padding2 ", ps, depth, &usr->padding2))
6166 if(!prs_uint8s(False, "password ", ps, depth, usr->pass, sizeof(usr->pass)))
6169 /* here begins pointed-to data */
6171 if(!smb_io_unistr2("uni_user_name ", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth)) /* username unicode string */
6174 if(!smb_io_unistr2("uni_full_name ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth)) /* user's full name unicode string */
6177 if(!smb_io_unistr2("uni_home_dir ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth)) /* home directory unicode string */
6180 if(!smb_io_unistr2("uni_dir_drive ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth)) /* home directory drive unicode string */
6183 if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth)) /* logon script unicode string */
6186 if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth)) /* profile path unicode string */
6189 if(!smb_io_unistr2("uni_acct_desc ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth)) /* user desc unicode string */
6192 if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth)) /* worksations user can log on from */
6195 if(!smb_io_unistr2("uni_comment ", &usr->uni_comment, usr->hdr_comment.buffer, ps, depth)) /* unknown string */
6198 if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial, usr->hdr_munged_dial.buffer, ps, depth))
6201 /* ok, this is only guess-work (as usual) */
6202 if (usr->ptr_logon_hrs) {
6203 if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
6211 /*************************************************************************
6212 init_sam_user_info21W
6214 unknown_6 = 0x0000 04ec
6216 *************************************************************************/
6218 void init_sam_user_info21W(SAM_USER_INFO_21 * usr,
6219 NTTIME * logon_time,
6220 NTTIME * logoff_time,
6221 NTTIME * kickoff_time,
6222 NTTIME * pass_last_set_time,
6223 NTTIME * pass_can_change_time,
6224 NTTIME * pass_must_change_time,
6240 uint32 fields_present,
6243 uint16 bad_password_count,
6246 usr->logon_time = *logon_time;
6247 usr->logoff_time = *logoff_time;
6248 usr->kickoff_time = *kickoff_time;
6249 usr->pass_last_set_time = *pass_last_set_time;
6250 usr->pass_can_change_time = *pass_can_change_time;
6251 usr->pass_must_change_time = *pass_must_change_time;
6253 memcpy(usr->lm_pwd, lm_pwd, sizeof(usr->lm_pwd));
6254 memcpy(usr->nt_pwd, nt_pwd, sizeof(usr->nt_pwd));
6256 usr->user_rid = user_rid;
6257 usr->group_rid = group_rid;
6258 usr->acb_info = acb_info;
6259 usr->fields_present = fields_present; /* 0x00ff ffff */
6261 usr->logon_divs = logon_divs; /* should be 168 (hours/week) */
6262 usr->ptr_logon_hrs = hrs ? 1 : 0;
6263 usr->bad_password_count = bad_password_count;
6264 usr->logon_count = logon_count;
6266 if (nt_time_is_zero(pass_must_change_time)) {
6267 usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
6269 usr->passmustchange=0;
6272 ZERO_STRUCT(usr->padding1);
6273 ZERO_STRUCT(usr->padding2);
6275 copy_unistr2(&usr->uni_user_name, user_name);
6276 init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
6278 copy_unistr2(&usr->uni_full_name, full_name);
6279 init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
6281 copy_unistr2(&usr->uni_home_dir, home_dir);
6282 init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
6284 copy_unistr2(&usr->uni_dir_drive, dir_drive);
6285 init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
6287 copy_unistr2(&usr->uni_logon_script, log_scr);
6288 init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
6290 copy_unistr2(&usr->uni_profile_path, prof_path);
6291 init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
6293 copy_unistr2(&usr->uni_acct_desc, desc);
6294 init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
6296 copy_unistr2(&usr->uni_workstations, wkstas);
6297 init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
6299 copy_unistr2(&usr->uni_comment, unk_str);
6300 init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
6302 copy_unistr2(&usr->uni_munged_dial, mung_dial);
6303 init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
6306 memcpy(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
6308 ZERO_STRUCT(usr->logon_hrs);
6312 /*************************************************************************
6313 init_sam_user_info21
6315 unknown_6 = 0x0000 04ec
6317 *************************************************************************/
6319 NTSTATUS init_sam_user_info21A(SAM_USER_INFO_21 *usr, struct samu *pw, DOM_SID *domain_sid)
6321 NTTIME logon_time, logoff_time, kickoff_time,
6322 pass_last_set_time, pass_can_change_time,
6323 pass_must_change_time;
6325 time_t must_change_time;
6326 const char* user_name = pdb_get_username(pw);
6327 const char* full_name = pdb_get_fullname(pw);
6328 const char* home_dir = pdb_get_homedir(pw);
6329 const char* dir_drive = pdb_get_dir_drive(pw);
6330 const char* logon_script = pdb_get_logon_script(pw);
6331 const char* profile_path = pdb_get_profile_path(pw);
6332 const char* description = pdb_get_acct_desc(pw);
6333 const char* workstations = pdb_get_workstations(pw);
6334 const char* munged_dial = pdb_get_munged_dial(pw);
6335 DATA_BLOB munged_dial_blob;
6338 const DOM_SID *user_sid;
6341 const DOM_SID *group_sid;
6344 munged_dial_blob = base64_decode_data_blob(munged_dial);
6346 munged_dial_blob = data_blob_null;
6349 /* Create NTTIME structs */
6350 unix_to_nt_time (&logon_time, pdb_get_logon_time(pw));
6351 unix_to_nt_time (&logoff_time, pdb_get_logoff_time(pw));
6352 unix_to_nt_time (&kickoff_time, pdb_get_kickoff_time(pw));
6353 unix_to_nt_time (&pass_last_set_time, pdb_get_pass_last_set_time(pw));
6354 unix_to_nt_time (&pass_can_change_time,pdb_get_pass_can_change_time(pw));
6355 must_change_time = pdb_get_pass_must_change_time(pw);
6356 if (must_change_time == get_time_t_max())
6357 unix_to_nt_time_abs(&pass_must_change_time, must_change_time);
6359 unix_to_nt_time(&pass_must_change_time, must_change_time);
6361 /* structure assignment */
6362 usr->logon_time = logon_time;
6363 usr->logoff_time = logoff_time;
6364 usr->kickoff_time = kickoff_time;
6365 usr->pass_last_set_time = pass_last_set_time;
6366 usr->pass_can_change_time = pass_can_change_time;
6367 usr->pass_must_change_time = pass_must_change_time;
6369 ZERO_STRUCT(usr->nt_pwd);
6370 ZERO_STRUCT(usr->lm_pwd);
6372 user_sid = pdb_get_user_sid(pw);
6374 if (!sid_peek_check_rid(domain_sid, user_sid, &user_rid)) {
6375 fstring user_sid_string;
6376 fstring domain_sid_string;
6377 DEBUG(0, ("init_sam_user_info_21A: User %s has SID %s, \nwhich conflicts with "
6378 "the domain sid %s. Failing operation.\n",
6380 sid_to_string(user_sid_string, user_sid),
6381 sid_to_string(domain_sid_string, domain_sid)));
6382 data_blob_free(&munged_dial_blob);
6383 return NT_STATUS_UNSUCCESSFUL;
6387 group_sid = pdb_get_group_sid(pw);
6390 if (!sid_peek_check_rid(domain_sid, group_sid, &group_rid)) {
6391 fstring group_sid_string;
6392 fstring domain_sid_string;
6393 DEBUG(0, ("init_sam_user_info_21A: User %s has Primary Group SID %s, \n"
6394 "which conflicts with the domain sid %s. Failing operation.\n",
6396 sid_to_string(group_sid_string, group_sid),
6397 sid_to_string(domain_sid_string, domain_sid)));
6398 data_blob_free(&munged_dial_blob);
6399 return NT_STATUS_UNSUCCESSFUL;
6402 usr->user_rid = user_rid;
6403 usr->group_rid = group_rid;
6404 usr->acb_info = pdb_get_acct_ctrl(pw);
6407 Look at a user on a real NT4 PDC with usrmgr, press
6408 'ok'. Then you will see that fields_present is set to
6409 0x08f827fa. Look at the user immediately after that again,
6410 and you will see that 0x00fffff is returned. This solves
6411 the problem that you get access denied after having looked
6415 usr->fields_present = pdb_build_fields_present(pw);
6417 usr->logon_divs = pdb_get_logon_divs(pw);
6418 usr->ptr_logon_hrs = pdb_get_hours(pw) ? 1 : 0;
6419 usr->bad_password_count = pdb_get_bad_password_count(pw);
6420 usr->logon_count = pdb_get_logon_count(pw);
6422 if (pdb_get_pass_must_change_time(pw) == 0) {
6423 usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
6425 usr->passmustchange=0;
6428 ZERO_STRUCT(usr->padding1);
6429 ZERO_STRUCT(usr->padding2);
6431 init_unistr2(&usr->uni_user_name, user_name, UNI_STR_TERMINATE);
6432 init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
6434 init_unistr2(&usr->uni_full_name, full_name, UNI_STR_TERMINATE);
6435 init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
6437 init_unistr2(&usr->uni_home_dir, home_dir, UNI_STR_TERMINATE);
6438 init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
6440 init_unistr2(&usr->uni_dir_drive, dir_drive, UNI_STR_TERMINATE);
6441 init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
6443 init_unistr2(&usr->uni_logon_script, logon_script, UNI_STR_TERMINATE);
6444 init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
6446 init_unistr2(&usr->uni_profile_path, profile_path, UNI_STR_TERMINATE);
6447 init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
6449 init_unistr2(&usr->uni_acct_desc, description, UNI_STR_TERMINATE);
6450 init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
6452 init_unistr2(&usr->uni_workstations, workstations, UNI_STR_TERMINATE);
6453 init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
6455 init_unistr2(&usr->uni_comment, NULL, UNI_STR_TERMINATE);
6456 init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
6458 init_unistr2_from_datablob(&usr->uni_munged_dial, &munged_dial_blob);
6459 init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
6460 data_blob_free(&munged_dial_blob);
6462 if (pdb_get_hours(pw)) {
6463 usr->logon_hrs.max_len = 1260;
6464 usr->logon_hrs.offset = 0;
6465 usr->logon_hrs.len = pdb_get_hours_len(pw);
6466 memcpy(&usr->logon_hrs.hours, pdb_get_hours(pw), MAX_HOURS_LEN);
6468 usr->logon_hrs.max_len = 1260;
6469 usr->logon_hrs.offset = 0;
6470 usr->logon_hrs.len = 0;
6471 memset(&usr->logon_hrs, 0xff, sizeof(usr->logon_hrs));
6474 return NT_STATUS_OK;
6477 /*******************************************************************
6478 reads or writes a structure.
6479 ********************************************************************/
6481 static BOOL sam_io_user_info21(const char *desc, SAM_USER_INFO_21 * usr,
6482 prs_struct *ps, int depth)
6487 prs_debug(ps, depth, desc, "sam_io_user_info21");
6493 if(!smb_io_time("logon_time ", &usr->logon_time, ps, depth))
6495 if(!smb_io_time("logoff_time ", &usr->logoff_time, ps, depth))
6497 if(!smb_io_time("pass_last_set_time ", &usr->pass_last_set_time, ps,depth))
6499 if(!smb_io_time("kickoff_time ", &usr->kickoff_time, ps, depth))
6501 if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps,depth))
6503 if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
6506 if(!smb_io_unihdr("hdr_user_name ", &usr->hdr_user_name, ps, depth)) /* username unicode string header */
6508 if(!smb_io_unihdr("hdr_full_name ", &usr->hdr_full_name, ps, depth)) /* user's full name unicode string header */
6510 if(!smb_io_unihdr("hdr_home_dir ", &usr->hdr_home_dir, ps, depth)) /* home directory unicode string header */
6512 if(!smb_io_unihdr("hdr_dir_drive ", &usr->hdr_dir_drive, ps, depth)) /* home directory drive */
6514 if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth)) /* logon script unicode string header */
6516 if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth)) /* profile path unicode string header */
6518 if(!smb_io_unihdr("hdr_acct_desc ", &usr->hdr_acct_desc, ps, depth)) /* account desc */
6520 if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth)) /* wkstas user can log on from */
6522 if(!smb_io_unihdr("hdr_comment ", &usr->hdr_comment, ps, depth)) /* unknown string */
6524 if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth)) /* wkstas user can log on from */
6527 if(!prs_uint8s(False, "lm_pwd ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
6529 if(!prs_uint8s(False, "nt_pwd ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
6532 if(!prs_uint32("user_rid ", ps, depth, &usr->user_rid)) /* User ID */
6534 if(!prs_uint32("group_rid ", ps, depth, &usr->group_rid)) /* Group ID */
6536 if(!prs_uint32("acb_info ", ps, depth, &usr->acb_info))
6539 if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
6541 if(!prs_uint16("logon_divs ", ps, depth, &usr->logon_divs)) /* logon divisions per week */
6545 if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
6548 if(!prs_uint16("bad_password_count ", ps, depth, &usr->bad_password_count))
6550 if(!prs_uint16("logon_count ", ps, depth, &usr->logon_count))
6553 if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1)))
6555 if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange))
6557 if(!prs_uint8("padding2 ", ps, depth, &usr->padding2))
6560 /* here begins pointed-to data */
6562 if(!smb_io_unistr2("uni_user_name ", &usr->uni_user_name,usr->hdr_user_name.buffer, ps, depth))
6564 if(!smb_io_unistr2("uni_full_name ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth))
6566 if(!smb_io_unistr2("uni_home_dir ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth))
6568 if(!smb_io_unistr2("uni_dir_drive ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth))
6570 if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth))
6572 if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth))
6574 if(!smb_io_unistr2("uni_acct_desc ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth))
6576 if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth))
6578 if(!smb_io_unistr2("uni_comment", &usr->uni_comment, usr->hdr_comment.buffer, ps, depth))
6580 if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial,usr->hdr_munged_dial.buffer, ps, depth))
6583 /* ok, this is only guess-work (as usual) */
6584 if (usr->ptr_logon_hrs) {
6585 if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
6592 void init_sam_user_info20A(SAM_USER_INFO_20 *usr, struct samu *pw)
6594 const char *munged_dial = pdb_get_munged_dial(pw);
6598 blob = base64_decode_data_blob(munged_dial);
6600 blob = data_blob_null;
6603 init_unistr2_from_datablob(&usr->uni_munged_dial, &blob);
6604 init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
6605 data_blob_free(&blob);
6608 /*******************************************************************
6609 reads or writes a structure.
6610 ********************************************************************/
6612 static BOOL sam_io_user_info20(const char *desc, SAM_USER_INFO_20 *usr,
6613 prs_struct *ps, int depth)
6618 prs_debug(ps, depth, desc, "sam_io_user_info20");
6624 if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth)) /* wkstas user can log on from */
6627 if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial,usr->hdr_munged_dial.buffer, ps, depth)) /* worksations user can log on from */
6633 /*******************************************************************
6634 inits a SAM_USERINFO_CTR structure.
6635 ********************************************************************/
6637 NTSTATUS make_samr_userinfo_ctr_usr21(TALLOC_CTX *ctx, SAM_USERINFO_CTR * ctr,
6638 uint16 switch_value,
6639 SAM_USER_INFO_21 * usr)
6641 DEBUG(5, ("make_samr_userinfo_ctr_usr21\n"));
6643 ctr->switch_value = switch_value;
6644 ctr->info.id = NULL;
6646 switch (switch_value) {
6648 ctr->info.id16 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_16);
6649 if (ctr->info.id16 == NULL)
6650 return NT_STATUS_NO_MEMORY;
6652 init_sam_user_info16(ctr->info.id16, usr->acb_info);
6655 /* whoops - got this wrong. i think. or don't understand what's happening. */
6659 info = (void *)&id11;
6661 expire.low = 0xffffffff;
6662 expire.high = 0x7fffffff;
6664 ctr->info.id = TALLOC_ZERO_P(ctx,SAM_USER_INFO_17);
6665 init_sam_user_info11(ctr->info.id17, &expire,
6666 "BROOKFIELDS$", /* name */
6667 0x03ef, /* user rid */
6668 0x201, /* group rid */
6669 0x0080); /* acb info */
6675 ctr->info.id18 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_18);
6676 if (ctr->info.id18 == NULL)
6677 return NT_STATUS_NO_MEMORY;
6679 init_sam_user_info18(ctr->info.id18, usr->lm_pwd, usr->nt_pwd);
6683 SAM_USER_INFO_21 *cusr;
6684 cusr = TALLOC_ZERO_P(ctx,SAM_USER_INFO_21);
6685 ctr->info.id21 = cusr;
6686 if (ctr->info.id21 == NULL)
6687 return NT_STATUS_NO_MEMORY;
6688 memcpy(cusr, usr, sizeof(*usr));
6689 memset(cusr->lm_pwd, 0, sizeof(cusr->lm_pwd));
6690 memset(cusr->nt_pwd, 0, sizeof(cusr->nt_pwd));
6694 DEBUG(4,("make_samr_userinfo_ctr: unsupported info\n"));
6695 return NT_STATUS_INVALID_INFO_CLASS;
6698 return NT_STATUS_OK;
6701 /*******************************************************************
6702 inits a SAM_USERINFO_CTR structure.
6703 ********************************************************************/
6705 static void init_samr_userinfo_ctr(SAM_USERINFO_CTR * ctr, DATA_BLOB *sess_key,
6706 uint16 switch_value, void *info)
6708 DEBUG(5, ("init_samr_userinfo_ctr\n"));
6710 ctr->switch_value = switch_value;
6711 ctr->info.id = info;
6713 switch (switch_value) {
6715 SamOEMhashBlob(ctr->info.id24->pass, 516, sess_key);
6716 dump_data(100, sess_key->data, sess_key->length);
6717 dump_data(100, ctr->info.id24->pass, 516);
6720 SamOEMhashBlob(ctr->info.id23->pass, 516, sess_key);
6721 dump_data(100, sess_key->data, sess_key->length);
6722 dump_data(100, ctr->info.id23->pass, 516);
6727 DEBUG(4,("init_samr_userinfo_ctr: unsupported switch level: %d\n", switch_value));
6731 /*******************************************************************
6732 reads or writes a structure.
6733 ********************************************************************/
6735 static BOOL samr_io_userinfo_ctr(const char *desc, SAM_USERINFO_CTR **ppctr,
6736 prs_struct *ps, int depth)
6739 SAM_USERINFO_CTR *ctr;
6741 prs_debug(ps, depth, desc, "samr_io_userinfo_ctr");
6744 if (UNMARSHALLING(ps)) {
6745 ctr = PRS_ALLOC_MEM(ps,SAM_USERINFO_CTR,1);
6753 /* lkclXXXX DO NOT ALIGN BEFORE READING SWITCH VALUE! */
6755 if(!prs_uint16("switch_value", ps, depth, &ctr->switch_value))
6762 switch (ctr->switch_value) {
6764 if (UNMARSHALLING(ps))
6765 ctr->info.id7 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_7,1);
6766 if (ctr->info.id7 == NULL) {
6767 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6770 ret = sam_io_user_info7("", ctr->info.id7, ps, depth);
6773 if (UNMARSHALLING(ps))
6774 ctr->info.id9 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_9,1);
6775 if (ctr->info.id9 == NULL) {
6776 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6779 ret = sam_io_user_info9("", ctr->info.id9, ps, depth);
6782 if (UNMARSHALLING(ps))
6783 ctr->info.id16 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_16,1);
6784 if (ctr->info.id16 == NULL) {
6785 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6788 ret = sam_io_user_info16("", ctr->info.id16, ps, depth);
6791 if (UNMARSHALLING(ps))
6792 ctr->info.id17 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_17,1);
6794 if (ctr->info.id17 == NULL) {
6795 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6798 ret = sam_io_user_info17("", ctr->info.id17, ps, depth);
6801 if (UNMARSHALLING(ps))
6802 ctr->info.id18 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_18,1);
6804 if (ctr->info.id18 == NULL) {
6805 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6808 ret = sam_io_user_info18("", ctr->info.id18, ps, depth);
6811 if (UNMARSHALLING(ps))
6812 ctr->info.id20 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_20,1);
6814 if (ctr->info.id20 == NULL) {
6815 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6818 ret = sam_io_user_info20("", ctr->info.id20, ps, depth);
6821 if (UNMARSHALLING(ps))
6822 ctr->info.id21 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_21,1);
6824 if (ctr->info.id21 == NULL) {
6825 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6828 ret = sam_io_user_info21("", ctr->info.id21, ps, depth);
6831 if (UNMARSHALLING(ps))
6832 ctr->info.id23 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_23,1);
6834 if (ctr->info.id23 == NULL) {
6835 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6838 ret = sam_io_user_info23("", ctr->info.id23, ps, depth);
6841 if (UNMARSHALLING(ps))
6842 ctr->info.id24 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_24,1);
6844 if (ctr->info.id24 == NULL) {
6845 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6848 ret = sam_io_user_info24("", ctr->info.id24, ps, depth);
6851 if (UNMARSHALLING(ps))
6852 ctr->info.id25 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_25,1);
6854 if (ctr->info.id25 == NULL) {
6855 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6858 ret = sam_io_user_info25("", ctr->info.id25, ps, depth);
6861 if (UNMARSHALLING(ps))
6862 ctr->info.id26 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_26,1);
6864 if (ctr->info.id26 == NULL) {
6865 DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
6868 ret = sam_io_user_info26("", ctr->info.id26, ps, depth);
6871 DEBUG(2, ("samr_io_userinfo_ctr: unknown switch level 0x%x\n", ctr->switch_value));
6879 /*******************************************************************
6880 inits a SAMR_R_QUERY_USERINFO structure.
6881 ********************************************************************/
6883 void init_samr_r_query_userinfo(SAMR_R_QUERY_USERINFO * r_u,
6884 SAM_USERINFO_CTR * ctr, NTSTATUS status)
6886 DEBUG(5, ("init_samr_r_query_userinfo\n"));
6891 if (NT_STATUS_IS_OK(status)) {
6896 r_u->status = status; /* return status */
6899 /*******************************************************************
6900 reads or writes a structure.
6901 ********************************************************************/
6903 BOOL samr_io_r_query_userinfo(const char *desc, SAMR_R_QUERY_USERINFO * r_u,
6904 prs_struct *ps, int depth)
6909 prs_debug(ps, depth, desc, "samr_io_r_query_userinfo");
6915 if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
6918 if (r_u->ptr != 0) {
6919 if(!samr_io_userinfo_ctr("ctr", &r_u->ctr, ps, depth))
6925 if(!prs_ntstatus("status", ps, depth, &r_u->status))
6931 /*******************************************************************
6932 inits a SAMR_Q_SET_USERINFO structure.
6933 ********************************************************************/
6935 void init_samr_q_set_userinfo(SAMR_Q_SET_USERINFO * q_u,
6936 const POLICY_HND *hnd, DATA_BLOB *sess_key,
6937 uint16 switch_value, void *info)
6939 DEBUG(5, ("init_samr_q_set_userinfo\n"));
6942 q_u->switch_value = switch_value;
6943 init_samr_userinfo_ctr(q_u->ctr, sess_key, switch_value, info);
6946 /*******************************************************************
6947 reads or writes a structure.
6948 ********************************************************************/
6950 BOOL samr_io_q_set_userinfo(const char *desc, SAMR_Q_SET_USERINFO * q_u,
6951 prs_struct *ps, int depth)
6956 prs_debug(ps, depth, desc, "samr_io_q_set_userinfo");
6962 smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
6964 if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
6966 if(!samr_io_userinfo_ctr("ctr", &q_u->ctr, ps, depth))
6972 /*******************************************************************
6973 inits a SAMR_R_SET_USERINFO structure.
6974 ********************************************************************/
6976 void init_samr_r_set_userinfo(SAMR_R_SET_USERINFO * r_u, NTSTATUS status)
6978 DEBUG(5, ("init_samr_r_set_userinfo\n"));
6980 r_u->status = status; /* return status */
6983 /*******************************************************************
6984 reads or writes a structure.
6985 ********************************************************************/
6987 BOOL samr_io_r_set_userinfo(const char *desc, SAMR_R_SET_USERINFO * r_u,
6988 prs_struct *ps, int depth)
6993 prs_debug(ps, depth, desc, "samr_io_r_set_userinfo");
6999 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7005 /*******************************************************************
7006 inits a SAMR_Q_SET_USERINFO2 structure.
7007 ********************************************************************/
7009 void init_samr_q_set_userinfo2(SAMR_Q_SET_USERINFO2 * q_u,
7010 const POLICY_HND *hnd, DATA_BLOB *sess_key,
7011 uint16 switch_value, SAM_USERINFO_CTR * ctr)
7013 DEBUG(5, ("init_samr_q_set_userinfo2\n"));
7016 q_u->switch_value = switch_value;
7019 q_u->ctr->switch_value = switch_value;
7021 switch (switch_value) {
7023 SamOEMhashBlob(ctr->info.id18->lm_pwd, 16, sess_key);
7024 SamOEMhashBlob(ctr->info.id18->nt_pwd, 16, sess_key);
7025 dump_data(100, sess_key->data, sess_key->length);
7026 dump_data(100, ctr->info.id18->lm_pwd, 16);
7027 dump_data(100, ctr->info.id18->nt_pwd, 16);
7032 /*******************************************************************
7033 reads or writes a structure.
7034 ********************************************************************/
7036 BOOL samr_io_q_set_userinfo2(const char *desc, SAMR_Q_SET_USERINFO2 * q_u,
7037 prs_struct *ps, int depth)
7042 prs_debug(ps, depth, desc, "samr_io_q_set_userinfo2");
7048 if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
7051 if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
7053 if(!samr_io_userinfo_ctr("ctr", &q_u->ctr, ps, depth))
7059 /*******************************************************************
7060 inits a SAMR_R_SET_USERINFO2 structure.
7061 ********************************************************************/
7063 void init_samr_r_set_userinfo2(SAMR_R_SET_USERINFO2 * r_u, NTSTATUS status)
7065 DEBUG(5, ("init_samr_r_set_userinfo2\n"));
7067 r_u->status = status; /* return status */
7070 /*******************************************************************
7071 reads or writes a structure.
7072 ********************************************************************/
7074 BOOL samr_io_r_set_userinfo2(const char *desc, SAMR_R_SET_USERINFO2 * r_u,
7075 prs_struct *ps, int depth)
7080 prs_debug(ps, depth, desc, "samr_io_r_set_userinfo2");
7086 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7092 /*******************************************************************
7093 inits a SAMR_Q_CONNECT structure.
7094 ********************************************************************/
7096 void init_samr_q_connect(SAMR_Q_CONNECT * q_u,
7097 char *srv_name, uint32 access_mask)
7099 DEBUG(5, ("init_samr_q_connect\n"));
7101 /* make PDC server name \\server */
7102 q_u->ptr_srv_name = (srv_name != NULL && *srv_name) ? 1 : 0;
7103 init_unistr2(&q_u->uni_srv_name, srv_name, UNI_STR_TERMINATE);
7105 /* example values: 0x0000 0002 */
7106 q_u->access_mask = access_mask;
7109 /*******************************************************************
7110 reads or writes a structure.
7111 ********************************************************************/
7113 BOOL samr_io_q_connect(const char *desc, SAMR_Q_CONNECT * q_u,
7114 prs_struct *ps, int depth)
7119 prs_debug(ps, depth, desc, "samr_io_q_connect");
7125 if(!prs_uint32("ptr_srv_name", ps, depth, &q_u->ptr_srv_name))
7127 if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->ptr_srv_name, ps, depth))
7132 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
7138 /*******************************************************************
7139 reads or writes a structure.
7140 ********************************************************************/
7142 BOOL samr_io_r_connect(const char *desc, SAMR_R_CONNECT * r_u,
7143 prs_struct *ps, int depth)
7148 prs_debug(ps, depth, desc, "samr_io_r_connect");
7154 if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
7157 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7163 /*******************************************************************
7164 inits a SAMR_Q_CONNECT4 structure.
7165 ********************************************************************/
7167 void init_samr_q_connect4(SAMR_Q_CONNECT4 * q_u,
7168 char *srv_name, uint32 access_mask)
7170 DEBUG(5, ("init_samr_q_connect4\n"));
7172 /* make PDC server name \\server */
7173 q_u->ptr_srv_name = (srv_name != NULL && *srv_name) ? 1 : 0;
7174 init_unistr2(&q_u->uni_srv_name, srv_name, UNI_STR_TERMINATE);
7176 /* Only value we've seen, possibly an address type ? */
7179 /* example values: 0x0000 0002 */
7180 q_u->access_mask = access_mask;
7183 /*******************************************************************
7184 reads or writes a structure.
7185 ********************************************************************/
7187 BOOL samr_io_q_connect4(const char *desc, SAMR_Q_CONNECT4 * q_u,
7188 prs_struct *ps, int depth)
7193 prs_debug(ps, depth, desc, "samr_io_q_connect4");
7199 if(!prs_uint32("ptr_srv_name", ps, depth, &q_u->ptr_srv_name))
7201 if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->ptr_srv_name, ps, depth))
7206 if(!prs_uint32("unk_0", ps, depth, &q_u->unk_0))
7208 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
7214 /*******************************************************************
7215 reads or writes a structure.
7216 ********************************************************************/
7218 BOOL samr_io_r_connect4(const char *desc, SAMR_R_CONNECT4 * r_u,
7219 prs_struct *ps, int depth)
7224 prs_debug(ps, depth, desc, "samr_io_r_connect4");
7230 if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
7233 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7239 /*******************************************************************
7240 inits a SAMR_Q_CONNECT5 structure.
7241 ********************************************************************/
7243 void init_samr_q_connect5(SAMR_Q_CONNECT5 * q_u,
7244 char *srv_name, uint32 access_mask)
7246 DEBUG(5, ("init_samr_q_connect5\n"));
7248 /* make PDC server name \\server */
7249 q_u->ptr_srv_name = (srv_name != NULL && *srv_name) ? 1 : 0;
7250 init_unistr2(&q_u->uni_srv_name, srv_name, UNI_STR_TERMINATE);
7252 /* example values: 0x0000 0002 */
7253 q_u->access_mask = access_mask;
7256 q_u->info1_unk1 = 3;
7257 q_u->info1_unk2 = 0;
7260 /*******************************************************************
7261 inits a SAMR_R_CONNECT5 structure.
7262 ********************************************************************/
7264 void init_samr_r_connect5(SAMR_R_CONNECT5 * r_u, POLICY_HND *pol, NTSTATUS status)
7266 DEBUG(5, ("init_samr_q_connect5\n"));
7269 r_u->info1_unk1 = 3;
7270 r_u->info1_unk2 = 0;
7272 r_u->connect_pol = *pol;
7273 r_u->status = status;
7276 /*******************************************************************
7277 reads or writes a structure.
7278 ********************************************************************/
7280 BOOL samr_io_q_connect5(const char *desc, SAMR_Q_CONNECT5 * q_u,
7281 prs_struct *ps, int depth)
7286 prs_debug(ps, depth, desc, "samr_io_q_connect5");
7292 if(!prs_uint32("ptr_srv_name", ps, depth, &q_u->ptr_srv_name))
7294 if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->ptr_srv_name, ps, depth))
7299 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
7302 if(!prs_uint32("level", ps, depth, &q_u->level))
7304 if(!prs_uint32("level", ps, depth, &q_u->level))
7307 if(!prs_uint32("info1_unk1", ps, depth, &q_u->info1_unk1))
7309 if(!prs_uint32("info1_unk2", ps, depth, &q_u->info1_unk2))
7315 /*******************************************************************
7316 reads or writes a structure.
7317 ********************************************************************/
7319 BOOL samr_io_r_connect5(const char *desc, SAMR_R_CONNECT5 * r_u,
7320 prs_struct *ps, int depth)
7325 prs_debug(ps, depth, desc, "samr_io_r_connect5");
7331 if(!prs_uint32("level", ps, depth, &r_u->level))
7333 if(!prs_uint32("level", ps, depth, &r_u->level))
7335 if(!prs_uint32("info1_unk1", ps, depth, &r_u->info1_unk1))
7337 if(!prs_uint32("info1_unk2", ps, depth, &r_u->info1_unk2))
7340 if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
7343 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7349 /*******************************************************************
7350 inits a SAMR_Q_CONNECT_ANON structure.
7351 ********************************************************************/
7353 void init_samr_q_connect_anon(SAMR_Q_CONNECT_ANON * q_u)
7355 DEBUG(5, ("init_samr_q_connect_anon\n"));
7358 q_u->unknown_0 = 0x5c; /* server name (?!!) */
7359 q_u->access_mask = MAXIMUM_ALLOWED_ACCESS;
7362 /*******************************************************************
7363 reads or writes a structure.
7364 ********************************************************************/
7366 BOOL samr_io_q_connect_anon(const char *desc, SAMR_Q_CONNECT_ANON * q_u,
7367 prs_struct *ps, int depth)
7372 prs_debug(ps, depth, desc, "samr_io_q_connect_anon");
7378 if(!prs_uint32("ptr ", ps, depth, &q_u->ptr))
7381 if(!prs_uint16("unknown_0", ps, depth, &q_u->unknown_0))
7386 if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
7392 /*******************************************************************
7393 reads or writes a structure.
7394 ********************************************************************/
7396 BOOL samr_io_r_connect_anon(const char *desc, SAMR_R_CONNECT_ANON * r_u,
7397 prs_struct *ps, int depth)
7402 prs_debug(ps, depth, desc, "samr_io_r_connect_anon");
7408 if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
7411 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7417 /*******************************************************************
7418 inits a SAMR_Q_GET_DOM_PWINFO structure.
7419 ********************************************************************/
7421 void init_samr_q_get_dom_pwinfo(SAMR_Q_GET_DOM_PWINFO * q_u,
7424 DEBUG(5, ("init_samr_q_get_dom_pwinfo\n"));
7427 init_unistr2(&q_u->uni_srv_name, srv_name, UNI_FLAGS_NONE);
7428 init_uni_hdr(&q_u->hdr_srv_name, &q_u->uni_srv_name);
7431 /*******************************************************************
7432 reads or writes a structure.
7433 ********************************************************************/
7435 BOOL samr_io_q_get_dom_pwinfo(const char *desc, SAMR_Q_GET_DOM_PWINFO * q_u,
7436 prs_struct *ps, int depth)
7441 prs_debug(ps, depth, desc, "samr_io_q_get_dom_pwinfo");
7447 if(!prs_uint32("ptr", ps, depth, &q_u->ptr))
7449 if (q_u->ptr != 0) {
7450 if(!smb_io_unihdr("", &q_u->hdr_srv_name, ps, depth))
7452 if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->hdr_srv_name.buffer, ps, depth))
7459 /*******************************************************************
7460 reads or writes a structure.
7461 ********************************************************************/
7463 BOOL samr_io_r_get_dom_pwinfo(const char *desc, SAMR_R_GET_DOM_PWINFO * r_u,
7464 prs_struct *ps, int depth)
7469 prs_debug(ps, depth, desc, "samr_io_r_get_dom_pwinfo");
7475 if(!prs_uint16("min_pwd_length", ps, depth, &r_u->min_pwd_length))
7479 if(!prs_uint32("password_properties", ps, depth, &r_u->password_properties))
7482 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7488 /*******************************************************************
7489 make a SAMR_ENC_PASSWD structure.
7490 ********************************************************************/
7492 void init_enc_passwd(SAMR_ENC_PASSWD * pwd, const char pass[512])
7500 memcpy(pwd->pass, pass, sizeof(pwd->pass));
7504 /*******************************************************************
7505 reads or writes a SAMR_ENC_PASSWD structure.
7506 ********************************************************************/
7508 BOOL samr_io_enc_passwd(const char *desc, SAMR_ENC_PASSWD * pwd,
7509 prs_struct *ps, int depth)
7514 prs_debug(ps, depth, desc, "samr_io_enc_passwd");
7520 if(!prs_uint32("ptr", ps, depth, &pwd->ptr))
7523 if (pwd->ptr != 0) {
7524 if(!prs_uint8s(False, "pwd", ps, depth, pwd->pass, sizeof(pwd->pass)))
7531 /*******************************************************************
7532 inits a SAMR_ENC_HASH structure.
7533 ********************************************************************/
7535 void init_enc_hash(SAMR_ENC_HASH * hsh, const uchar hash[16])
7543 memcpy(hsh->hash, hash, sizeof(hsh->hash));
7547 /*******************************************************************
7548 reads or writes a SAMR_ENC_HASH structure.
7549 ********************************************************************/
7551 BOOL samr_io_enc_hash(const char *desc, SAMR_ENC_HASH * hsh,
7552 prs_struct *ps, int depth)
7557 prs_debug(ps, depth, desc, "samr_io_enc_hash");
7563 if(!prs_uint32("ptr ", ps, depth, &hsh->ptr))
7565 if (hsh->ptr != 0) {
7566 if(!prs_uint8s(False, "hash", ps, depth, hsh->hash,sizeof(hsh->hash)))
7573 /*******************************************************************
7574 inits a SAMR_Q_CHGPASSWD_USER structure.
7575 ********************************************************************/
7577 void init_samr_q_chgpasswd_user(SAMR_Q_CHGPASSWD_USER * q_u,
7578 const char *dest_host, const char *user_name,
7579 const uchar nt_newpass[516],
7580 const uchar nt_oldhash[16],
7581 const uchar lm_newpass[516],
7582 const uchar lm_oldhash[16])
7584 DEBUG(5, ("init_samr_q_chgpasswd_user\n"));
7587 init_unistr2(&q_u->uni_dest_host, dest_host, UNI_FLAGS_NONE);
7588 init_uni_hdr(&q_u->hdr_dest_host, &q_u->uni_dest_host);
7590 init_unistr2(&q_u->uni_user_name, user_name, UNI_FLAGS_NONE);
7591 init_uni_hdr(&q_u->hdr_user_name, &q_u->uni_user_name);
7593 init_enc_passwd(&q_u->nt_newpass, (const char *)nt_newpass);
7594 init_enc_hash(&q_u->nt_oldhash, nt_oldhash);
7596 q_u->unknown = 0x01;
7598 init_enc_passwd(&q_u->lm_newpass, (const char *)lm_newpass);
7599 init_enc_hash(&q_u->lm_oldhash, lm_oldhash);
7602 /*******************************************************************
7603 reads or writes a structure.
7604 ********************************************************************/
7606 BOOL samr_io_q_chgpasswd_user(const char *desc, SAMR_Q_CHGPASSWD_USER * q_u,
7607 prs_struct *ps, int depth)
7612 prs_debug(ps, depth, desc, "samr_io_q_chgpasswd_user");
7618 if(!prs_uint32("ptr_0", ps, depth, &q_u->ptr_0))
7621 if(!smb_io_unihdr("", &q_u->hdr_dest_host, ps, depth))
7623 if(!smb_io_unistr2("", &q_u->uni_dest_host, q_u->hdr_dest_host.buffer, ps, depth))
7628 if(!smb_io_unihdr("", &q_u->hdr_user_name, ps, depth))
7630 if(!smb_io_unistr2("", &q_u->uni_user_name, q_u->hdr_user_name.buffer,ps, depth))
7633 if(!samr_io_enc_passwd("nt_newpass", &q_u->nt_newpass, ps, depth))
7635 if(!samr_io_enc_hash("nt_oldhash", &q_u->nt_oldhash, ps, depth))
7638 if(!prs_uint32("unknown", ps, depth, &q_u->unknown))
7641 if(!samr_io_enc_passwd("lm_newpass", &q_u->lm_newpass, ps, depth))
7643 if(!samr_io_enc_hash("lm_oldhash", &q_u->lm_oldhash, ps, depth))
7649 /*******************************************************************
7650 inits a SAMR_R_CHGPASSWD_USER structure.
7651 ********************************************************************/
7653 void init_samr_r_chgpasswd_user(SAMR_R_CHGPASSWD_USER * r_u, NTSTATUS status)
7655 DEBUG(5, ("init_samr_r_chgpasswd_user\n"));
7657 r_u->status = status;
7660 /*******************************************************************
7661 reads or writes a structure.
7662 ********************************************************************/
7664 BOOL samr_io_r_chgpasswd_user(const char *desc, SAMR_R_CHGPASSWD_USER * r_u,
7665 prs_struct *ps, int depth)
7670 prs_debug(ps, depth, desc, "samr_io_r_chgpasswd_user");
7676 if(!prs_ntstatus("status", ps, depth, &r_u->status))
7682 /*******************************************************************
7683 inits a SAMR_Q_CHGPASSWD3 structure.
7684 ********************************************************************/
7686 void init_samr_q_chgpasswd_user3(SAMR_Q_CHGPASSWD_USER3 * q_u,
7687 const char *dest_host, const char *user_name,
7688 const uchar nt_newpass[516],
7689 const uchar nt_oldhash[16],
7690 const uchar lm_newpass[516],
7691 const uchar lm_oldhash[16])
7693 DEBUG(5, ("init_samr_q_chgpasswd_user3\n"));
7696 init_unistr2(&q_u->uni_dest_host, dest_host, UNI_FLAGS_NONE);
7697 init_uni_hdr(&q_u->hdr_dest_host, &q_u->uni_dest_host);
7699 init_unistr2(&q_u->uni_user_name, user_name, UNI_FLAGS_NONE);
7700 init_uni_hdr(&q_u->hdr_user_name, &q_u->uni_user_name);
7702 init_enc_passwd(&q_u->nt_newpass, (const char *)nt_newpass);
7703 init_enc_hash(&q_u->nt_oldhash, nt_oldhash);
7705 q_u->lm_change = 0x01;
7707 init_enc_passwd(&q_u->lm_newpass, (const char *)lm_newpass);
7708 init_enc_hash(&q_u->lm_oldhash, lm_oldhash);
7710 init_enc_passwd(&q_u->password3, NULL);
7713 /*******************************************************************
7714 reads or writes a structure.
7715 ********************************************************************/
7717 BOOL samr_io_q_chgpasswd_user3(const char *desc, SAMR_Q_CHGPASSWD_USER3 * q_u,
7718 prs_struct *ps, int depth)
7723 prs_debug(ps, depth, desc, "samr_io_q_chgpasswd_user3");
7729 if(!prs_uint32("ptr_0", ps, depth, &q_u->ptr_0))
7732 if(!smb_io_unihdr("", &q_u->hdr_dest_host, ps, depth))
7734 if(!smb_io_unistr2("", &q_u->uni_dest_host, q_u->hdr_dest_host.buffer, ps, depth))
7739 if(!smb_io_unihdr("", &q_u->hdr_user_name, ps, depth))
7741 if(!smb_io_unistr2("", &q_u->uni_user_name, q_u->hdr_user_name.buffer,ps, depth))
7744 if(!samr_io_enc_passwd("nt_newpass", &q_u->nt_newpass, ps, depth))
7746 if(!samr_io_enc_hash("nt_oldhash", &q_u->nt_oldhash, ps, depth))
7749 if(!prs_uint32("lm_change", ps, depth, &q_u->lm_change))
7752 if(!samr_io_enc_passwd("lm_newpass", &q_u->lm_newpass, ps, depth))
7754 if(!samr_io_enc_hash("lm_oldhash", &q_u->lm_oldhash, ps, depth))
7757 if(!samr_io_enc_passwd("password3", &q_u->password3, ps, depth))
7763 /*******************************************************************
7764 inits a SAMR_R_CHGPASSWD_USER3 structure.
7765 ********************************************************************/
7767 void init_samr_r_chgpasswd_user3(SAMR_R_CHGPASSWD_USER3 *r_u, NTSTATUS status,
7768 SAMR_CHANGE_REJECT *reject, SAM_UNK_INFO_1 *info)
7770 DEBUG(5, ("init_samr_r_chgpasswd_user3\n"));
7772 r_u->status = status;
7776 r_u->ptr_reject = 0;
7782 if (reject && (reject->reject_reason != Undefined)) {
7783 r_u->reject = reject;
7784 r_u->ptr_reject = 1;
7788 /*******************************************************************
7789 Reads or writes an SAMR_CHANGE_REJECT structure.
7790 ********************************************************************/
7792 BOOL samr_io_change_reject(const char *desc, SAMR_CHANGE_REJECT *reject, prs_struct *ps, int depth)
7797 prs_debug(ps, depth, desc, "samr_io_change_reject");
7803 if(UNMARSHALLING(ps))
7804 ZERO_STRUCTP(reject);
7806 if (!prs_uint32("reject_reason", ps, depth, &reject->reject_reason))
7809 if (!prs_uint32("unknown1", ps, depth, &reject->unknown1))
7812 if (!prs_uint32("unknown2", ps, depth, &reject->unknown2))
7818 /*******************************************************************
7819 reads or writes a structure.
7820 ********************************************************************/
7822 BOOL samr_io_r_chgpasswd_user3(const char *desc, SAMR_R_CHGPASSWD_USER3 *r_u,
7823 prs_struct *ps, int depth)
7828 prs_debug(ps, depth, desc, "samr_io_r_chgpasswd_user3");
7834 if (!prs_uint32("ptr_info", ps, depth, &r_u->ptr_info))
7837 /* special case: Windows 2000 can return stub data here saying
7838 NT_STATUS_NOT_SUPPORTED */
7840 if ( NT_STATUS_EQUAL( NT_STATUS_NOT_SUPPORTED, NT_STATUS(r_u->ptr_info)) ) {
7841 r_u->status = NT_STATUS_NOT_SUPPORTED;
7845 if (r_u->ptr_info && r_u->info != NULL) {
7846 /* SAM_UNK_INFO_1 */
7847 if (!sam_io_unk_info1("info", r_u->info, ps, depth))
7851 if (!prs_uint32("ptr_reject", ps, depth, &r_u->ptr_reject))
7854 if (r_u->ptr_reject && r_u->reject != NULL) {
7855 /* SAMR_CHANGE_REJECT */
7856 if (!samr_io_change_reject("reject", r_u->reject, ps, depth))
7860 if (!prs_ntstatus("status", ps, depth, &r_u->status))
7866 /*******************************************************************
7867 reads or writes a structure.
7868 ********************************************************************/
7870 void init_samr_q_query_domain_info2(SAMR_Q_QUERY_DOMAIN_INFO2 *q_u,
7871 POLICY_HND *domain_pol, uint16 switch_value)
7873 DEBUG(5, ("init_samr_q_query_domain_info2\n"));
7875 q_u->domain_pol = *domain_pol;
7876 q_u->switch_value = switch_value;
7879 /*******************************************************************
7880 reads or writes a structure.
7881 ********************************************************************/
7883 BOOL samr_io_q_query_domain_info2(const char *desc, SAMR_Q_QUERY_DOMAIN_INFO2 *q_u,
7884 prs_struct *ps, int depth)
7889 prs_debug(ps, depth, desc, "samr_io_q_query_domain_info2");
7895 if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
7898 if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
7904 /*******************************************************************
7905 inits a SAMR_R_QUERY_DOMAIN_INFO structure.
7906 ********************************************************************/
7908 void init_samr_r_query_domain_info2(SAMR_R_QUERY_DOMAIN_INFO2 * r_u,
7909 uint16 switch_value, SAM_UNK_CTR * ctr,
7912 DEBUG(5, ("init_samr_r_query_domain_info2\n"));
7915 r_u->switch_value = 0;
7916 r_u->status = status; /* return status */
7918 if (NT_STATUS_IS_OK(status)) {
7919 r_u->switch_value = switch_value;
7925 /*******************************************************************
7926 reads or writes a structure.
7927 ********************************************************************/
7929 BOOL samr_io_r_query_domain_info2(const char *desc, SAMR_R_QUERY_DOMAIN_INFO2 * r_u,
7930 prs_struct *ps, int depth)
7935 prs_debug(ps, depth, desc, "samr_io_r_query_domain_info2");
7941 if(!prs_uint32("ptr_0 ", ps, depth, &r_u->ptr_0))
7944 if (r_u->ptr_0 != 0 && r_u->ctr != NULL) {
7945 if(!prs_uint16("switch_value", ps, depth, &r_u->switch_value))
7950 switch (r_u->switch_value) {
7952 if(!sam_io_unk_info13("unk_inf13", &r_u->ctr->info.inf13, ps, depth))
7956 if(!sam_io_unk_info12("unk_inf12", &r_u->ctr->info.inf12, ps, depth))
7960 if(!sam_io_unk_info9("unk_inf9",&r_u->ctr->info.inf9, ps,depth))
7964 if(!sam_io_unk_info8("unk_inf8",&r_u->ctr->info.inf8, ps,depth))
7968 if(!sam_io_unk_info7("unk_inf7",&r_u->ctr->info.inf7, ps,depth))
7972 if(!sam_io_unk_info6("unk_inf6",&r_u->ctr->info.inf6, ps,depth))
7976 if(!sam_io_unk_info5("unk_inf5",&r_u->ctr->info.inf5, ps,depth))
7980 if(!sam_io_unk_info4("unk_inf4",&r_u->ctr->info.inf4, ps,depth))
7984 if(!sam_io_unk_info3("unk_inf3",&r_u->ctr->info.inf3, ps,depth))
7988 if(!sam_io_unk_info2("unk_inf2",&r_u->ctr->info.inf2, ps,depth))
7992 if(!sam_io_unk_info1("unk_inf1",&r_u->ctr->info.inf1, ps,depth))
7996 DEBUG(0, ("samr_io_r_query_domain_info2: unknown switch level 0x%x\n",
7997 r_u->switch_value));
7998 r_u->status = NT_STATUS_INVALID_INFO_CLASS;
8006 if(!prs_ntstatus("status", ps, depth, &r_u->status))
8013 /*******************************************************************
8014 reads or writes a structure.
8015 ********************************************************************/
8017 void init_samr_q_set_domain_info(SAMR_Q_SET_DOMAIN_INFO *q_u,
8018 POLICY_HND *domain_pol, uint16 switch_value, SAM_UNK_CTR *ctr)
8020 DEBUG(5, ("init_samr_q_set_domain_info\n"));
8022 q_u->domain_pol = *domain_pol;
8023 q_u->switch_value0 = switch_value;
8025 q_u->switch_value = switch_value;
8030 /*******************************************************************
8031 reads or writes a structure.
8032 ********************************************************************/
8034 BOOL samr_io_q_set_domain_info(const char *desc, SAMR_Q_SET_DOMAIN_INFO *q_u,
8035 prs_struct *ps, int depth)
8040 prs_debug(ps, depth, desc, "samr_io_q_set_domain_info");
8046 if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
8049 if(!prs_uint16("switch_value0", ps, depth, &q_u->switch_value0))
8052 if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
8058 if (UNMARSHALLING(ps)) {
8059 if ((q_u->ctr = PRS_ALLOC_MEM(ps, SAM_UNK_CTR, 1)) == NULL)
8063 switch (q_u->switch_value) {
8066 if(!sam_io_unk_info12("unk_inf12", &q_u->ctr->info.inf12, ps, depth))
8070 if(!sam_io_unk_info7("unk_inf7",&q_u->ctr->info.inf7, ps,depth))
8074 if(!sam_io_unk_info6("unk_inf6",&q_u->ctr->info.inf6, ps,depth))
8078 if(!sam_io_unk_info5("unk_inf5",&q_u->ctr->info.inf5, ps,depth))
8082 if(!sam_io_unk_info3("unk_inf3",&q_u->ctr->info.inf3, ps,depth))
8086 if(!sam_io_unk_info2("unk_inf2",&q_u->ctr->info.inf2, ps,depth))
8090 if(!sam_io_unk_info1("unk_inf1",&q_u->ctr->info.inf1, ps,depth))
8094 DEBUG(0, ("samr_io_r_samr_unknown_2e: unknown switch level 0x%x\n",
8095 q_u->switch_value));
8102 /*******************************************************************
8103 inits a SAMR_R_QUERY_DOMAIN_INFO structure.
8104 ********************************************************************/
8106 void init_samr_r_set_domain_info(SAMR_R_SET_DOMAIN_INFO * r_u, NTSTATUS status)
8108 DEBUG(5, ("init_samr_r_set_domain_info\n"));
8110 r_u->status = status; /* return status */
8113 /*******************************************************************
8114 reads or writes a structure.
8115 ********************************************************************/
8117 BOOL samr_io_r_set_domain_info(const char *desc, SAMR_R_SET_DOMAIN_INFO * r_u,
8118 prs_struct *ps, int depth)
8123 prs_debug(ps, depth, desc, "samr_io_r_samr_unknown_2e");
8129 if(!prs_ntstatus("status", ps, depth, &r_u->status))