At the prompting, start to add infrastructure to detect the presence of
[Samba/gebeck_regimport.git] / source3 / rpc_parse / parse_lsa.c
blob7c9f74da3708abb8efc9bc19e77e1e2b91145dba
1 /*
2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
4 * Copyright (C) Andrew Tridgell 1992-1997,
5 * Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
6 * Copyright (C) Paul Ashton 1997,
7 * Copyright (C) Andrew Bartlett 2002,
8 * Copyright (C) Jim McDonough 2002.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #include "includes.h"
27 #undef DBGC_CLASS
28 #define DBGC_CLASS DBGC_RPC_PARSE
30 static BOOL lsa_io_trans_names(const char *desc, LSA_TRANS_NAME_ENUM *trn, prs_struct *ps, int depth);
32 /*******************************************************************
33 Inits a LSA_TRANS_NAME structure.
34 ********************************************************************/
36 void init_lsa_trans_name(LSA_TRANS_NAME *trn, UNISTR2 *uni_name,
37 uint16 sid_name_use, const char *name, uint32 idx)
39 int len_name = strlen(name);
41 if(len_name == 0)
42 len_name = 1;
44 trn->sid_name_use = sid_name_use;
45 init_uni_hdr(&trn->hdr_name, len_name);
46 init_unistr2(uni_name, name, len_name);
47 trn->domain_idx = idx;
50 /*******************************************************************
51 Reads or writes a LSA_TRANS_NAME structure.
52 ********************************************************************/
54 static BOOL lsa_io_trans_name(const char *desc, LSA_TRANS_NAME *trn, prs_struct *ps,
55 int depth)
57 prs_debug(ps, depth, desc, "lsa_io_trans_name");
58 depth++;
60 if(!prs_align(ps))
61 return False;
63 if(!prs_uint16("sid_name_use", ps, depth, &trn->sid_name_use))
64 return False;
65 if(!prs_align(ps))
66 return False;
68 if(!smb_io_unihdr ("hdr_name", &trn->hdr_name, ps, depth))
69 return False;
70 if(!prs_uint32("domain_idx ", ps, depth, &trn->domain_idx))
71 return False;
73 return True;
76 /*******************************************************************
77 Reads or writes a DOM_R_REF structure.
78 ********************************************************************/
80 static BOOL lsa_io_dom_r_ref(const char *desc, DOM_R_REF *r_r, prs_struct *ps,
81 int depth)
83 int i;
85 prs_debug(ps, depth, desc, "lsa_io_dom_r_ref");
86 depth++;
88 if(!prs_align(ps))
89 return False;
91 if(!prs_uint32("num_ref_doms_1", ps, depth, &r_r->num_ref_doms_1)) /* num referenced domains? */
92 return False;
93 if(!prs_uint32("ptr_ref_dom ", ps, depth, &r_r->ptr_ref_dom)) /* undocumented buffer pointer. */
94 return False;
95 if(!prs_uint32("max_entries ", ps, depth, &r_r->max_entries)) /* 32 - max number of entries */
96 return False;
98 SMB_ASSERT_ARRAY(r_r->hdr_ref_dom, r_r->num_ref_doms_1);
100 if (r_r->ptr_ref_dom != 0) {
102 if(!prs_uint32("num_ref_doms_2", ps, depth, &r_r->num_ref_doms_2)) /* 4 - num referenced domains? */
103 return False;
105 SMB_ASSERT_ARRAY(r_r->ref_dom, r_r->num_ref_doms_2);
107 for (i = 0; i < r_r->num_ref_doms_1; i++) {
108 fstring t;
110 slprintf(t, sizeof(t) - 1, "dom_ref[%d] ", i);
111 if(!smb_io_unihdr(t, &r_r->hdr_ref_dom[i].hdr_dom_name, ps, depth))
112 return False;
114 slprintf(t, sizeof(t) - 1, "sid_ptr[%d] ", i);
115 if(!prs_uint32(t, ps, depth, &r_r->hdr_ref_dom[i].ptr_dom_sid))
116 return False;
119 for (i = 0; i < r_r->num_ref_doms_2; i++) {
120 fstring t;
122 if (r_r->hdr_ref_dom[i].hdr_dom_name.buffer != 0) {
123 slprintf(t, sizeof(t) - 1, "dom_ref[%d] ", i);
124 if(!smb_io_unistr2(t, &r_r->ref_dom[i].uni_dom_name, True, ps, depth)) /* domain name unicode string */
125 return False;
126 if(!prs_align(ps))
127 return False;
130 if (r_r->hdr_ref_dom[i].ptr_dom_sid != 0) {
131 slprintf(t, sizeof(t) - 1, "sid_ptr[%d] ", i);
132 if(!smb_io_dom_sid2(t, &r_r->ref_dom[i].ref_dom, ps, depth)) /* referenced domain SIDs */
133 return False;
138 return True;
141 /*******************************************************************
142 Inits an LSA_SEC_QOS structure.
143 ********************************************************************/
145 void init_lsa_sec_qos(LSA_SEC_QOS *qos, uint16 imp_lev, uint8 ctxt, uint8 eff)
147 DEBUG(5, ("init_lsa_sec_qos\n"));
149 qos->len = 0x0c; /* length of quality of service block, in bytes */
150 qos->sec_imp_level = imp_lev;
151 qos->sec_ctxt_mode = ctxt;
152 qos->effective_only = eff;
155 /*******************************************************************
156 Reads or writes an LSA_SEC_QOS structure.
157 ********************************************************************/
159 static BOOL lsa_io_sec_qos(const char *desc, LSA_SEC_QOS *qos, prs_struct *ps,
160 int depth)
162 uint32 start;
164 prs_debug(ps, depth, desc, "lsa_io_obj_qos");
165 depth++;
167 if(!prs_align(ps))
168 return False;
170 start = prs_offset(ps);
172 /* these pointers had _better_ be zero, because we don't know
173 what they point to!
175 if(!prs_uint32("len ", ps, depth, &qos->len)) /* 0x18 - length (in bytes) inc. the length field. */
176 return False;
177 if(!prs_uint16("sec_imp_level ", ps, depth, &qos->sec_imp_level ))
178 return False;
179 if(!prs_uint8 ("sec_ctxt_mode ", ps, depth, &qos->sec_ctxt_mode ))
180 return False;
181 if(!prs_uint8 ("effective_only", ps, depth, &qos->effective_only))
182 return False;
184 if (qos->len != prs_offset(ps) - start) {
185 DEBUG(3,("lsa_io_sec_qos: length %x does not match size %x\n",
186 qos->len, prs_offset(ps) - start));
189 return True;
192 /*******************************************************************
193 Inits an LSA_OBJ_ATTR structure.
194 ********************************************************************/
196 static void init_lsa_obj_attr(LSA_OBJ_ATTR *attr, uint32 attributes, LSA_SEC_QOS *qos)
198 DEBUG(5, ("init_lsa_obj_attr\n"));
200 attr->len = 0x18; /* length of object attribute block, in bytes */
201 attr->ptr_root_dir = 0;
202 attr->ptr_obj_name = 0;
203 attr->attributes = attributes;
204 attr->ptr_sec_desc = 0;
206 if (qos != NULL) {
207 attr->ptr_sec_qos = 1;
208 attr->sec_qos = qos;
209 } else {
210 attr->ptr_sec_qos = 0;
211 attr->sec_qos = NULL;
215 /*******************************************************************
216 Reads or writes an LSA_OBJ_ATTR structure.
217 ********************************************************************/
219 static BOOL lsa_io_obj_attr(const char *desc, LSA_OBJ_ATTR *attr, prs_struct *ps,
220 int depth)
222 uint32 start;
224 prs_debug(ps, depth, desc, "lsa_io_obj_attr");
225 depth++;
227 if(!prs_align(ps))
228 return False;
230 start = prs_offset(ps);
232 /* these pointers had _better_ be zero, because we don't know
233 what they point to!
235 if(!prs_uint32("len ", ps, depth, &attr->len)) /* 0x18 - length (in bytes) inc. the length field. */
236 return False;
237 if(!prs_uint32("ptr_root_dir", ps, depth, &attr->ptr_root_dir)) /* 0 - root directory (pointer) */
238 return False;
239 if(!prs_uint32("ptr_obj_name", ps, depth, &attr->ptr_obj_name)) /* 0 - object name (pointer) */
240 return False;
241 if(!prs_uint32("attributes ", ps, depth, &attr->attributes)) /* 0 - attributes (undocumented) */
242 return False;
243 if(!prs_uint32("ptr_sec_desc", ps, depth, &attr->ptr_sec_desc)) /* 0 - security descriptior (pointer) */
244 return False;
245 if(!prs_uint32("ptr_sec_qos ", ps, depth, &attr->ptr_sec_qos )) /* security quality of service (pointer) */
246 return False;
248 /* code commented out as it's not necessary true (tested with hyena). JFM, 11/22/2001 */
249 #if 0
250 if (attr->len != prs_offset(ps) - start) {
251 DEBUG(3,("lsa_io_obj_attr: length %x does not match size %x\n",
252 attr->len, prs_offset(ps) - start));
253 return False;
255 #endif
257 if (attr->ptr_sec_qos != 0) {
258 if (UNMARSHALLING(ps))
259 if (!(attr->sec_qos = (LSA_SEC_QOS *)prs_alloc_mem(ps,sizeof(LSA_SEC_QOS))))
260 return False;
262 if(!lsa_io_sec_qos("sec_qos", attr->sec_qos, ps, depth))
263 return False;
266 return True;
270 /*******************************************************************
271 Inits an LSA_Q_OPEN_POL structure.
272 ********************************************************************/
274 void init_q_open_pol(LSA_Q_OPEN_POL *r_q, uint16 system_name,
275 uint32 attributes, uint32 desired_access,
276 LSA_SEC_QOS *qos)
278 DEBUG(5, ("init_open_pol: attr:%d da:%d\n", attributes,
279 desired_access));
281 r_q->ptr = 1; /* undocumented pointer */
283 r_q->des_access = desired_access;
285 r_q->system_name = system_name;
286 init_lsa_obj_attr(&r_q->attr, attributes, qos);
289 /*******************************************************************
290 Reads or writes an LSA_Q_OPEN_POL structure.
291 ********************************************************************/
293 BOOL lsa_io_q_open_pol(const char *desc, LSA_Q_OPEN_POL *r_q, prs_struct *ps,
294 int depth)
296 prs_debug(ps, depth, desc, "lsa_io_q_open_pol");
297 depth++;
299 if(!prs_uint32("ptr ", ps, depth, &r_q->ptr))
300 return False;
301 if(!prs_uint16("system_name", ps, depth, &r_q->system_name))
302 return False;
303 if(!prs_align( ps ))
304 return False;
306 if(!lsa_io_obj_attr("", &r_q->attr, ps, depth))
307 return False;
309 if(!prs_uint32("des_access", ps, depth, &r_q->des_access))
310 return False;
312 return True;
315 /*******************************************************************
316 Reads or writes an LSA_R_OPEN_POL structure.
317 ********************************************************************/
319 BOOL lsa_io_r_open_pol(const char *desc, LSA_R_OPEN_POL *r_p, prs_struct *ps,
320 int depth)
322 prs_debug(ps, depth, desc, "lsa_io_r_open_pol");
323 depth++;
325 if(!smb_io_pol_hnd("", &r_p->pol, ps, depth))
326 return False;
328 if(!prs_ntstatus("status", ps, depth, &r_p->status))
329 return False;
331 return True;
334 /*******************************************************************
335 Inits an LSA_Q_OPEN_POL2 structure.
336 ********************************************************************/
338 void init_q_open_pol2(LSA_Q_OPEN_POL2 *r_q, const char *server_name,
339 uint32 attributes, uint32 desired_access,
340 LSA_SEC_QOS *qos)
342 DEBUG(5, ("init_q_open_pol2: attr:%d da:%d\n", attributes,
343 desired_access));
345 r_q->ptr = 1; /* undocumented pointer */
347 r_q->des_access = desired_access;
349 init_unistr2(&r_q->uni_server_name, server_name,
350 strlen(server_name) + 1);
352 init_lsa_obj_attr(&r_q->attr, attributes, qos);
355 /*******************************************************************
356 Reads or writes an LSA_Q_OPEN_POL2 structure.
357 ********************************************************************/
359 BOOL lsa_io_q_open_pol2(const char *desc, LSA_Q_OPEN_POL2 *r_q, prs_struct *ps,
360 int depth)
362 prs_debug(ps, depth, desc, "lsa_io_q_open_pol2");
363 depth++;
365 if(!prs_uint32("ptr ", ps, depth, &r_q->ptr))
366 return False;
368 if(!smb_io_unistr2 ("", &r_q->uni_server_name, r_q->ptr, ps, depth))
369 return False;
370 if(!lsa_io_obj_attr("", &r_q->attr, ps, depth))
371 return False;
373 if(!prs_uint32("des_access", ps, depth, &r_q->des_access))
374 return False;
376 return True;
379 /*******************************************************************
380 Reads or writes an LSA_R_OPEN_POL2 structure.
381 ********************************************************************/
383 BOOL lsa_io_r_open_pol2(const char *desc, LSA_R_OPEN_POL2 *r_p, prs_struct *ps,
384 int depth)
386 prs_debug(ps, depth, desc, "lsa_io_r_open_pol2");
387 depth++;
389 if(!smb_io_pol_hnd("", &r_p->pol, ps, depth))
390 return False;
392 if(!prs_ntstatus("status", ps, depth, &r_p->status))
393 return False;
395 return True;
398 /*******************************************************************
399 makes an LSA_Q_QUERY_SEC_OBJ structure.
400 ********************************************************************/
402 void init_q_query_sec_obj(LSA_Q_QUERY_SEC_OBJ *q_q, const POLICY_HND *hnd,
403 uint32 sec_info)
405 DEBUG(5, ("init_q_query_sec_obj\n"));
407 q_q->pol = *hnd;
408 q_q->sec_info = sec_info;
410 return;
413 /*******************************************************************
414 Reads or writes an LSA_Q_QUERY_SEC_OBJ structure.
415 ********************************************************************/
417 BOOL lsa_io_q_query_sec_obj(const char *desc, LSA_Q_QUERY_SEC_OBJ *q_q,
418 prs_struct *ps, int depth)
420 prs_debug(ps, depth, desc, "lsa_io_q_query_sec_obj");
421 depth++;
423 if (!smb_io_pol_hnd("", &q_q->pol, ps, depth))
424 return False;
426 if (!prs_uint32("sec_info", ps, depth, &q_q->sec_info))
427 return False;
429 return True;
432 /*******************************************************************
433 Reads or writes a LSA_R_QUERY_SEC_OBJ structure.
434 ********************************************************************/
436 BOOL lsa_io_r_query_sec_obj(const char *desc, LSA_R_QUERY_SEC_OBJ *r_u,
437 prs_struct *ps, int depth)
439 prs_debug(ps, depth, desc, "lsa_io_r_query_sec_obj");
440 depth++;
442 if (!prs_align(ps))
443 return False;
445 if (!prs_uint32("ptr", ps, depth, &r_u->ptr))
446 return False;
448 if (r_u->ptr != 0) {
449 if (!sec_io_desc_buf("sec", &r_u->buf, ps, depth))
450 return False;
453 if (!prs_ntstatus("status", ps, depth, &r_u->status))
454 return False;
456 return True;
459 /*******************************************************************
460 Inits an LSA_Q_QUERY_INFO structure.
461 ********************************************************************/
463 void init_q_query(LSA_Q_QUERY_INFO *q_q, POLICY_HND *hnd, uint16 info_class)
465 DEBUG(5, ("init_q_query\n"));
467 memcpy(&q_q->pol, hnd, sizeof(q_q->pol));
469 q_q->info_class = info_class;
472 /*******************************************************************
473 Reads or writes an LSA_Q_QUERY_INFO structure.
474 ********************************************************************/
476 BOOL lsa_io_q_query(const char *desc, LSA_Q_QUERY_INFO *q_q, prs_struct *ps,
477 int depth)
479 prs_debug(ps, depth, desc, "lsa_io_q_query");
480 depth++;
482 if(!smb_io_pol_hnd("", &q_q->pol, ps, depth))
483 return False;
485 if(!prs_uint16("info_class", ps, depth, &q_q->info_class))
486 return False;
488 return True;
491 /*******************************************************************
492 makes an LSA_Q_ENUM_TRUST_DOM structure.
493 ********************************************************************/
494 BOOL init_q_enum_trust_dom(LSA_Q_ENUM_TRUST_DOM * q_e, POLICY_HND *pol,
495 uint32 enum_context, uint32 preferred_len)
497 DEBUG(5, ("init_q_enum_trust_dom\n"));
499 q_e->pol = *pol;
500 q_e->enum_context = enum_context;
501 q_e->preferred_len = preferred_len;
503 return True;
506 /*******************************************************************
507 Reads or writes an LSA_Q_ENUM_TRUST_DOM structure.
508 ********************************************************************/
510 BOOL lsa_io_q_enum_trust_dom(const char *desc, LSA_Q_ENUM_TRUST_DOM *q_e,
511 prs_struct *ps, int depth)
513 prs_debug(ps, depth, desc, "lsa_io_q_enum_trust_dom");
514 depth++;
516 if(!smb_io_pol_hnd("", &q_e->pol, ps, depth))
517 return False;
519 if(!prs_uint32("enum_context ", ps, depth, &q_e->enum_context))
520 return False;
521 if(!prs_uint32("preferred_len", ps, depth, &q_e->preferred_len))
522 return False;
524 return True;
527 /*******************************************************************
528 Inits an LSA_R_ENUM_TRUST_DOM structure.
529 ********************************************************************/
531 void init_r_enum_trust_dom(TALLOC_CTX *ctx, LSA_R_ENUM_TRUST_DOM *r_e, uint32 enum_context,
532 uint32 req_num_domains, uint32 num_domains, TRUSTDOM **td)
534 int i;
536 DEBUG(5, ("init_r_enum_trust_dom\n"));
538 r_e->enum_context = enum_context;
539 r_e->num_domains = num_domains;
540 r_e->ptr_enum_domains = 0;
541 r_e->num_domains2 = num_domains;
543 if (num_domains != 0) {
546 * allocating empty arrays of unicode headers, strings
547 * and sids of enumerated trusted domains
549 if (!(r_e->hdr_domain_name = (UNIHDR2 *)talloc(ctx,sizeof(UNIHDR2) * num_domains))) {
550 r_e->status = NT_STATUS_NO_MEMORY;
551 return;
554 if (!(r_e->uni_domain_name = (UNISTR2 *)talloc(ctx,sizeof(UNISTR2) * num_domains))) {
555 r_e->status = NT_STATUS_NO_MEMORY;
556 return;
559 if (!(r_e->domain_sid = (DOM_SID2 *)talloc(ctx,sizeof(DOM_SID2) * num_domains))) {
560 r_e->status = NT_STATUS_NO_MEMORY;
561 return;
564 for (i = 0; i < num_domains; i++) {
566 /* don't know what actually is this for */
567 r_e->ptr_enum_domains = 1;
569 init_uni_hdr2(&r_e->hdr_domain_name[i], strlen_w((td[i])->name));
570 init_dom_sid2(&r_e->domain_sid[i], &(td[i])->sid);
572 init_unistr2_w(ctx, &r_e->uni_domain_name[i], (td[i])->name);
579 /*******************************************************************
580 Reads or writes an LSA_R_ENUM_TRUST_DOM structure.
581 ********************************************************************/
583 BOOL lsa_io_r_enum_trust_dom(const char *desc, LSA_R_ENUM_TRUST_DOM *r_e,
584 prs_struct *ps, int depth)
586 prs_debug(ps, depth, desc, "lsa_io_r_enum_trust_dom");
587 depth++;
589 if(!prs_uint32("enum_context ", ps, depth, &r_e->enum_context))
590 return False;
591 if(!prs_uint32("num_domains ", ps, depth, &r_e->num_domains))
592 return False;
593 if(!prs_uint32("ptr_enum_domains", ps, depth, &r_e->ptr_enum_domains))
594 return False;
596 if (r_e->ptr_enum_domains) {
597 int i, num_domains;
599 if(!prs_uint32("num_domains2", ps, depth, &r_e->num_domains2))
600 return False;
602 num_domains = r_e->num_domains2;
604 if (UNMARSHALLING(ps)) {
605 if (!(r_e->hdr_domain_name = (UNIHDR2 *)prs_alloc_mem(ps,sizeof(UNIHDR2) * num_domains)))
606 return False;
608 if (!(r_e->uni_domain_name = (UNISTR2 *)prs_alloc_mem(ps,sizeof(UNISTR2) * num_domains)))
609 return False;
611 if (!(r_e->domain_sid = (DOM_SID2 *)prs_alloc_mem(ps,sizeof(DOM_SID2) * num_domains)))
612 return False;
615 for (i = 0; i < num_domains; i++) {
616 if(!smb_io_unihdr2 ("", &r_e->hdr_domain_name[i], ps,
617 depth))
618 return False;
621 for (i = 0; i < num_domains; i++) {
622 if(!smb_io_unistr2 ("", &r_e->uni_domain_name[i],
623 r_e->hdr_domain_name[i].buffer,
624 ps, depth))
625 return False;
626 if(!smb_io_dom_sid2("", &r_e->domain_sid[i], ps,
627 depth))
628 return False;
632 if(!prs_ntstatus("status", ps, depth, &r_e->status))
633 return False;
635 return True;
638 /*******************************************************************
639 reads or writes a dom query structure.
640 ********************************************************************/
642 static BOOL lsa_io_dom_query(const char *desc, DOM_QUERY *d_q, prs_struct *ps, int depth)
644 if (d_q == NULL)
645 return False;
647 prs_debug(ps, depth, desc, "lsa_io_dom_query");
648 depth++;
650 if(!prs_align(ps))
651 return False;
653 if(!prs_uint16("uni_dom_max_len", ps, depth, &d_q->uni_dom_max_len)) /* domain name string length * 2 */
654 return False;
655 if(!prs_uint16("uni_dom_str_len", ps, depth, &d_q->uni_dom_str_len)) /* domain name string length * 2 */
656 return False;
658 if(!prs_uint32("buffer_dom_name", ps, depth, &d_q->buffer_dom_name)) /* undocumented domain name string buffer pointer */
659 return False;
660 if(!prs_uint32("buffer_dom_sid ", ps, depth, &d_q->buffer_dom_sid)) /* undocumented domain SID string buffer pointer */
661 return False;
663 if(!smb_io_unistr2("unistr2", &d_q->uni_domain_name, d_q->buffer_dom_name, ps, depth)) /* domain name (unicode string) */
664 return False;
666 if(!prs_align(ps))
667 return False;
669 if (d_q->buffer_dom_sid != 0) {
670 if(!smb_io_dom_sid2("", &d_q->dom_sid, ps, depth)) /* domain SID */
671 return False;
672 } else {
673 memset((char *)&d_q->dom_sid, '\0', sizeof(d_q->dom_sid));
676 return True;
679 /*******************************************************************
680 reads or writes a structure.
681 ********************************************************************/
683 static BOOL lsa_io_dom_query_2(const char *desc, DOM_QUERY_2 *d_q, prs_struct *ps, int depth)
685 uint32 ptr = 1;
687 if (d_q == NULL)
688 return False;
690 prs_debug(ps, depth, desc, "lsa_io_dom_query_2");
691 depth++;
693 if (!prs_align(ps))
694 return False;
696 if (!prs_uint32("auditing_enabled", ps, depth, &d_q->auditing_enabled))
697 return False;
698 if (!prs_uint32("ptr ", ps, depth, &ptr))
699 return False;
700 if (!prs_uint32("count1", ps, depth, &d_q->count1))
701 return False;
702 if (!prs_uint32("count2", ps, depth, &d_q->count2))
703 return False;
705 if (UNMARSHALLING(ps)) {
706 d_q->auditsettings = (uint32 *)talloc_zero(ps->mem_ctx, d_q->count2 * sizeof(uint32));
709 if (d_q->auditsettings == NULL) {
710 DEBUG(1, ("lsa_io_dom_query_2: NULL auditsettings!\n"));
711 return False;
714 if (!prs_uint32s(False, "auditsettings", ps, depth, d_q->auditsettings, d_q->count2))
715 return False;
717 return True;
720 /*******************************************************************
721 Reads or writes a dom query structure.
722 ********************************************************************/
724 static BOOL lsa_io_dom_query_3(const char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth)
726 return lsa_io_dom_query("", d_q, ps, depth);
729 /*******************************************************************
730 Reads or writes a dom query structure.
731 ********************************************************************/
733 static BOOL lsa_io_dom_query_5(const char *desc, DOM_QUERY_5 *d_q, prs_struct *ps, int depth)
735 return lsa_io_dom_query("", d_q, ps, depth);
738 /*******************************************************************
739 Reads or writes a dom query structure.
740 ********************************************************************/
742 static BOOL lsa_io_dom_query_6(const char *desc, DOM_QUERY_6 *d_q, prs_struct *ps, int depth)
744 if (d_q == NULL)
745 return False;
747 prs_debug(ps, depth, desc, "lsa_io_dom_query_6");
748 depth++;
750 if (!prs_uint16("server_role", ps, depth, &d_q->server_role))
751 return False;
753 return True;
756 /*******************************************************************
757 Reads or writes an LSA_R_QUERY_INFO structure.
758 ********************************************************************/
760 BOOL lsa_io_r_query(const char *desc, LSA_R_QUERY_INFO *r_q, prs_struct *ps,
761 int depth)
763 prs_debug(ps, depth, desc, "lsa_io_r_query");
764 depth++;
766 if(!prs_uint32("undoc_buffer", ps, depth, &r_q->undoc_buffer))
767 return False;
769 if (r_q->undoc_buffer != 0) {
770 if(!prs_uint16("info_class", ps, depth, &r_q->info_class))
771 return False;
773 if(!prs_align(ps))
774 return False;
776 switch (r_q->info_class) {
777 case 2:
778 if(!lsa_io_dom_query_2("", &r_q->dom.id2, ps, depth))
779 return False;
780 break;
781 case 3:
782 if(!lsa_io_dom_query_3("", &r_q->dom.id3, ps, depth))
783 return False;
784 break;
785 case 5:
786 if(!lsa_io_dom_query_5("", &r_q->dom.id5, ps, depth))
787 return False;
788 break;
789 case 6:
790 if(!lsa_io_dom_query_6("", &r_q->dom.id6, ps, depth))
791 return False;
792 break;
793 default:
794 /* PANIC! */
795 break;
799 if(!prs_align(ps))
800 return False;
802 if(!prs_ntstatus("status", ps, depth, &r_q->status))
803 return False;
805 return True;
808 /*******************************************************************
809 Inits a LSA_SID_ENUM structure.
810 ********************************************************************/
812 static void init_lsa_sid_enum(TALLOC_CTX *mem_ctx, LSA_SID_ENUM *sen,
813 int num_entries, DOM_SID *sids)
815 int i;
817 DEBUG(5, ("init_lsa_sid_enum\n"));
819 sen->num_entries = num_entries;
820 sen->ptr_sid_enum = (num_entries != 0);
821 sen->num_entries2 = num_entries;
823 /* Allocate memory for sids and sid pointers */
825 if (num_entries == 0) return;
827 if ((sen->ptr_sid = (uint32 *)talloc_zero(mem_ctx, num_entries *
828 sizeof(uint32))) == NULL) {
829 DEBUG(3, ("init_lsa_sid_enum(): out of memory for ptr_sid\n"));
830 return;
833 if ((sen->sid = (DOM_SID2 *)talloc_zero(mem_ctx, num_entries *
834 sizeof(DOM_SID2))) == NULL) {
835 DEBUG(3, ("init_lsa_sid_enum(): out of memory for sids\n"));
836 return;
839 /* Copy across SIDs and SID pointers */
841 for (i = 0; i < num_entries; i++) {
842 sen->ptr_sid[i] = 1;
843 init_dom_sid2(&sen->sid[i], &sids[i]);
847 /*******************************************************************
848 Reads or writes a LSA_SID_ENUM structure.
849 ********************************************************************/
851 static BOOL lsa_io_sid_enum(const char *desc, LSA_SID_ENUM *sen, prs_struct *ps,
852 int depth)
854 int i;
856 prs_debug(ps, depth, desc, "lsa_io_sid_enum");
857 depth++;
859 if(!prs_align(ps))
860 return False;
862 if(!prs_uint32("num_entries ", ps, depth, &sen->num_entries))
863 return False;
864 if(!prs_uint32("ptr_sid_enum", ps, depth, &sen->ptr_sid_enum))
865 return False;
868 if the ptr is NULL, leave here. checked from a real w2k trace.
869 JFM, 11/23/2001
872 if (sen->ptr_sid_enum==0)
873 return True;
875 if(!prs_uint32("num_entries2", ps, depth, &sen->num_entries2))
876 return False;
878 /* Mallocate memory if we're unpacking from the wire */
880 if (UNMARSHALLING(ps)) {
881 if ((sen->ptr_sid = (uint32 *)prs_alloc_mem( ps,
882 sen->num_entries * sizeof(uint32))) == NULL) {
883 DEBUG(3, ("init_lsa_sid_enum(): out of memory for "
884 "ptr_sid\n"));
885 return False;
888 if ((sen->sid = (DOM_SID2 *)prs_alloc_mem( ps,
889 sen->num_entries * sizeof(DOM_SID2))) == NULL) {
890 DEBUG(3, ("init_lsa_sid_enum(): out of memory for "
891 "sids\n"));
892 return False;
896 for (i = 0; i < sen->num_entries; i++) {
897 fstring temp;
899 slprintf(temp, sizeof(temp) - 1, "ptr_sid[%d]", i);
900 if(!prs_uint32(temp, ps, depth, &sen->ptr_sid[i])) {
901 return False;
905 for (i = 0; i < sen->num_entries; i++) {
906 fstring temp;
908 slprintf(temp, sizeof(temp) - 1, "sid[%d]", i);
909 if(!smb_io_dom_sid2(temp, &sen->sid[i], ps, depth)) {
910 return False;
914 return True;
917 /*******************************************************************
918 Inits an LSA_R_ENUM_TRUST_DOM structure.
919 ********************************************************************/
921 void init_q_lookup_sids(TALLOC_CTX *mem_ctx, LSA_Q_LOOKUP_SIDS *q_l,
922 POLICY_HND *hnd, int num_sids, DOM_SID *sids,
923 uint16 level)
925 DEBUG(5, ("init_r_enum_trust_dom\n"));
927 ZERO_STRUCTP(q_l);
929 memcpy(&q_l->pol, hnd, sizeof(q_l->pol));
930 init_lsa_sid_enum(mem_ctx, &q_l->sids, num_sids, sids);
932 q_l->level.value = level;
935 /*******************************************************************
936 Reads or writes a LSA_Q_LOOKUP_SIDS structure.
937 ********************************************************************/
939 BOOL lsa_io_q_lookup_sids(const char *desc, LSA_Q_LOOKUP_SIDS *q_s, prs_struct *ps,
940 int depth)
942 prs_debug(ps, depth, desc, "lsa_io_q_lookup_sids");
943 depth++;
945 if(!prs_align(ps))
946 return False;
948 if(!smb_io_pol_hnd("pol_hnd", &q_s->pol, ps, depth)) /* policy handle */
949 return False;
950 if(!lsa_io_sid_enum("sids ", &q_s->sids, ps, depth)) /* sids to be looked up */
951 return False;
952 if(!lsa_io_trans_names("names ", &q_s->names, ps, depth)) /* translated names */
953 return False;
954 if(!smb_io_lookup_level("switch ", &q_s->level, ps, depth)) /* lookup level */
955 return False;
957 if(!prs_uint32("mapped_count", ps, depth, &q_s->mapped_count))
958 return False;
960 return True;
963 /*******************************************************************
964 Reads or writes a structure.
965 ********************************************************************/
967 static BOOL lsa_io_trans_names(const char *desc, LSA_TRANS_NAME_ENUM *trn,
968 prs_struct *ps, int depth)
970 int i;
972 prs_debug(ps, depth, desc, "lsa_io_trans_names");
973 depth++;
975 if(!prs_align(ps))
976 return False;
978 if(!prs_uint32("num_entries ", ps, depth, &trn->num_entries))
979 return False;
980 if(!prs_uint32("ptr_trans_names", ps, depth, &trn->ptr_trans_names))
981 return False;
983 if (trn->ptr_trans_names != 0) {
984 if(!prs_uint32("num_entries2 ", ps, depth,
985 &trn->num_entries2))
986 return False;
988 if (UNMARSHALLING(ps)) {
989 if ((trn->name = (LSA_TRANS_NAME *)
990 prs_alloc_mem(ps, trn->num_entries *
991 sizeof(LSA_TRANS_NAME))) == NULL) {
992 return False;
995 if ((trn->uni_name = (UNISTR2 *)
996 prs_alloc_mem(ps, trn->num_entries *
997 sizeof(UNISTR2))) == NULL) {
998 return False;
1002 for (i = 0; i < trn->num_entries2; i++) {
1003 fstring t;
1004 slprintf(t, sizeof(t) - 1, "name[%d] ", i);
1006 if(!lsa_io_trans_name(t, &trn->name[i], ps, depth)) /* translated name */
1007 return False;
1010 for (i = 0; i < trn->num_entries2; i++) {
1011 fstring t;
1012 slprintf(t, sizeof(t) - 1, "name[%d] ", i);
1014 if(!smb_io_unistr2(t, &trn->uni_name[i], trn->name[i].hdr_name.buffer, ps, depth))
1015 return False;
1016 if(!prs_align(ps))
1017 return False;
1021 return True;
1024 /*******************************************************************
1025 Reads or writes a structure.
1026 ********************************************************************/
1028 BOOL lsa_io_r_lookup_sids(const char *desc, LSA_R_LOOKUP_SIDS *r_s,
1029 prs_struct *ps, int depth)
1031 prs_debug(ps, depth, desc, "lsa_io_r_lookup_sids");
1032 depth++;
1034 if(!prs_align(ps))
1035 return False;
1037 if(!prs_uint32("ptr_dom_ref", ps, depth, &r_s->ptr_dom_ref))
1038 return False;
1040 if (r_s->ptr_dom_ref != 0)
1041 if(!lsa_io_dom_r_ref ("dom_ref", r_s->dom_ref, ps, depth)) /* domain reference info */
1042 return False;
1044 if(!lsa_io_trans_names("names ", r_s->names, ps, depth)) /* translated names */
1045 return False;
1047 if(!prs_align(ps))
1048 return False;
1050 if(!prs_uint32("mapped_count", ps, depth, &r_s->mapped_count))
1051 return False;
1053 if(!prs_ntstatus("status ", ps, depth, &r_s->status))
1054 return False;
1056 return True;
1059 /*******************************************************************
1060 makes a structure.
1061 ********************************************************************/
1063 void init_q_lookup_names(TALLOC_CTX *mem_ctx, LSA_Q_LOOKUP_NAMES *q_l,
1064 POLICY_HND *hnd, int num_names, const char **names)
1066 int i;
1068 DEBUG(5, ("init_q_lookup_names\n"));
1070 ZERO_STRUCTP(q_l);
1072 q_l->pol = *hnd;
1073 q_l->num_entries = num_names;
1074 q_l->num_entries2 = num_names;
1075 q_l->lookup_level = 1;
1077 if ((q_l->uni_name = (UNISTR2 *)talloc_zero(
1078 mem_ctx, num_names * sizeof(UNISTR2))) == NULL) {
1079 DEBUG(3, ("init_q_lookup_names(): out of memory\n"));
1080 return;
1083 if ((q_l->hdr_name = (UNIHDR *)talloc_zero(
1084 mem_ctx, num_names * sizeof(UNIHDR))) == NULL) {
1085 DEBUG(3, ("init_q_lookup_names(): out of memory\n"));
1086 return;
1089 for (i = 0; i < num_names; i++) {
1090 int len;
1091 len = strlen(names[i]);
1093 init_uni_hdr(&q_l->hdr_name[i], len);
1094 init_unistr2(&q_l->uni_name[i], names[i], len);
1098 /*******************************************************************
1099 reads or writes a structure.
1100 ********************************************************************/
1102 BOOL lsa_io_q_lookup_names(const char *desc, LSA_Q_LOOKUP_NAMES *q_r,
1103 prs_struct *ps, int depth)
1105 int i;
1107 prs_debug(ps, depth, desc, "lsa_io_q_lookup_names");
1108 depth++;
1110 if(!prs_align(ps))
1111 return False;
1113 if(!smb_io_pol_hnd("", &q_r->pol, ps, depth)) /* policy handle */
1114 return False;
1116 if(!prs_align(ps))
1117 return False;
1118 if(!prs_uint32("num_entries ", ps, depth, &q_r->num_entries))
1119 return False;
1120 if(!prs_uint32("num_entries2 ", ps, depth, &q_r->num_entries2))
1121 return False;
1123 if (UNMARSHALLING(ps)) {
1124 if (q_r->num_entries) {
1125 if ((q_r->hdr_name = (UNIHDR *)prs_alloc_mem(ps,
1126 q_r->num_entries * sizeof(UNIHDR))) == NULL)
1127 return False;
1128 if ((q_r->uni_name = (UNISTR2 *)prs_alloc_mem(ps,
1129 q_r->num_entries * sizeof(UNISTR2))) == NULL)
1130 return False;
1134 for (i = 0; i < q_r->num_entries; i++) {
1135 if(!prs_align(ps))
1136 return False;
1137 if(!smb_io_unihdr("hdr_name", &q_r->hdr_name[i], ps, depth)) /* pointer names */
1138 return False;
1141 for (i = 0; i < q_r->num_entries; i++) {
1142 if(!prs_align(ps))
1143 return False;
1144 if(!smb_io_unistr2("dom_name", &q_r->uni_name[i], q_r->hdr_name[i].buffer, ps, depth)) /* names to be looked up */
1145 return False;
1148 if(!prs_align(ps))
1149 return False;
1150 if(!prs_uint32("num_trans_entries ", ps, depth, &q_r->num_trans_entries))
1151 return False;
1152 if(!prs_uint32("ptr_trans_sids ", ps, depth, &q_r->ptr_trans_sids))
1153 return False;
1154 if(!prs_uint32("lookup_level ", ps, depth, &q_r->lookup_level))
1155 return False;
1156 if(!prs_uint32("mapped_count ", ps, depth, &q_r->mapped_count))
1157 return False;
1159 return True;
1162 /*******************************************************************
1163 reads or writes a structure.
1164 ********************************************************************/
1166 BOOL lsa_io_r_lookup_names(const char *desc, LSA_R_LOOKUP_NAMES *r_r,
1167 prs_struct *ps, int depth)
1169 int i;
1171 prs_debug(ps, depth, desc, "lsa_io_r_lookup_names");
1172 depth++;
1174 if(!prs_align(ps))
1175 return False;
1177 if(!prs_uint32("ptr_dom_ref", ps, depth, &r_r->ptr_dom_ref))
1178 return False;
1180 if (r_r->ptr_dom_ref != 0)
1181 if(!lsa_io_dom_r_ref("", r_r->dom_ref, ps, depth))
1182 return False;
1184 if(!prs_uint32("num_entries", ps, depth, &r_r->num_entries))
1185 return False;
1186 if(!prs_uint32("ptr_entries", ps, depth, &r_r->ptr_entries))
1187 return False;
1189 if (r_r->ptr_entries != 0) {
1190 if(!prs_uint32("num_entries2", ps, depth, &r_r->num_entries2))
1191 return False;
1193 if (r_r->num_entries2 != r_r->num_entries) {
1194 /* RPC fault */
1195 return False;
1198 if (UNMARSHALLING(ps)) {
1199 if ((r_r->dom_rid = (DOM_RID2 *)prs_alloc_mem(ps, r_r->num_entries2 * sizeof(DOM_RID2)))
1200 == NULL) {
1201 DEBUG(3, ("lsa_io_r_lookup_names(): out of memory\n"));
1202 return False;
1206 for (i = 0; i < r_r->num_entries2; i++)
1207 if(!smb_io_dom_rid2("", &r_r->dom_rid[i], ps, depth)) /* domain RIDs being looked up */
1208 return False;
1211 if(!prs_uint32("mapped_count", ps, depth, &r_r->mapped_count))
1212 return False;
1214 if(!prs_ntstatus("status ", ps, depth, &r_r->status))
1215 return False;
1217 return True;
1221 /*******************************************************************
1222 Inits an LSA_Q_CLOSE structure.
1223 ********************************************************************/
1225 void init_lsa_q_close(LSA_Q_CLOSE *q_c, POLICY_HND *hnd)
1227 DEBUG(5, ("init_lsa_q_close\n"));
1229 memcpy(&q_c->pol, hnd, sizeof(q_c->pol));
1232 /*******************************************************************
1233 Reads or writes an LSA_Q_CLOSE structure.
1234 ********************************************************************/
1236 BOOL lsa_io_q_close(const char *desc, LSA_Q_CLOSE *q_c, prs_struct *ps, int depth)
1238 prs_debug(ps, depth, desc, "lsa_io_q_close");
1239 depth++;
1241 if(!smb_io_pol_hnd("", &q_c->pol, ps, depth))
1242 return False;
1244 return True;
1247 /*******************************************************************
1248 Reads or writes an LSA_R_CLOSE structure.
1249 ********************************************************************/
1251 BOOL lsa_io_r_close(const char *desc, LSA_R_CLOSE *r_c, prs_struct *ps, int depth)
1253 prs_debug(ps, depth, desc, "lsa_io_r_close");
1254 depth++;
1256 if(!smb_io_pol_hnd("", &r_c->pol, ps, depth))
1257 return False;
1259 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1260 return False;
1262 return True;
1265 /*******************************************************************
1266 Reads or writes an LSA_Q_OPEN_SECRET structure.
1267 ********************************************************************/
1269 BOOL lsa_io_q_open_secret(const char *desc, LSA_Q_OPEN_SECRET *q_c, prs_struct *ps, int depth)
1271 prs_debug(ps, depth, desc, "lsa_io_q_open_secret");
1272 depth++;
1274 /* Don't bother to read or write at present... */
1275 return True;
1278 /*******************************************************************
1279 Reads or writes an LSA_R_OPEN_SECRET structure.
1280 ********************************************************************/
1282 BOOL lsa_io_r_open_secret(const char *desc, LSA_R_OPEN_SECRET *r_c, prs_struct *ps, int depth)
1284 prs_debug(ps, depth, desc, "lsa_io_r_open_secret");
1285 depth++;
1287 if(!prs_align(ps))
1288 return False;
1290 if(!prs_uint32("dummy1", ps, depth, &r_c->dummy1))
1291 return False;
1292 if(!prs_uint32("dummy2", ps, depth, &r_c->dummy2))
1293 return False;
1294 if(!prs_uint32("dummy3", ps, depth, &r_c->dummy3))
1295 return False;
1296 if(!prs_uint32("dummy4", ps, depth, &r_c->dummy4))
1297 return False;
1298 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1299 return False;
1301 return True;
1304 /*******************************************************************
1305 Inits an LSA_Q_ENUM_PRIVS structure.
1306 ********************************************************************/
1308 void init_q_enum_privs(LSA_Q_ENUM_PRIVS *q_q, POLICY_HND *hnd, uint32 enum_context, uint32 pref_max_length)
1310 DEBUG(5, ("init_q_enum_privs\n"));
1312 memcpy(&q_q->pol, hnd, sizeof(q_q->pol));
1314 q_q->enum_context = enum_context;
1315 q_q->pref_max_length = pref_max_length;
1318 /*******************************************************************
1319 reads or writes a structure.
1320 ********************************************************************/
1321 BOOL lsa_io_q_enum_privs(const char *desc, LSA_Q_ENUM_PRIVS *q_q, prs_struct *ps, int depth)
1323 if (q_q == NULL)
1324 return False;
1326 prs_debug(ps, depth, desc, "lsa_io_q_enum_privs");
1327 depth++;
1329 if (!smb_io_pol_hnd("", &q_q->pol, ps, depth))
1330 return False;
1332 if(!prs_uint32("enum_context ", ps, depth, &q_q->enum_context))
1333 return False;
1334 if(!prs_uint32("pref_max_length", ps, depth, &q_q->pref_max_length))
1335 return False;
1337 return True;
1340 /*******************************************************************
1341 reads or writes a structure.
1342 ********************************************************************/
1343 static BOOL lsa_io_priv_entries(const char *desc, LSA_PRIV_ENTRY *entries, uint32 count, prs_struct *ps, int depth)
1345 uint32 i;
1347 if (entries == NULL)
1348 return False;
1350 prs_debug(ps, depth, desc, "lsa_io_priv_entries");
1351 depth++;
1353 if(!prs_align(ps))
1354 return False;
1356 for (i = 0; i < count; i++) {
1357 if (!smb_io_unihdr("", &entries[i].hdr_name, ps, depth))
1358 return False;
1359 if(!prs_uint32("luid_low ", ps, depth, &entries[i].luid_low))
1360 return False;
1361 if(!prs_uint32("luid_high", ps, depth, &entries[i].luid_high))
1362 return False;
1365 for (i = 0; i < count; i++)
1366 if (!smb_io_unistr2("", &entries[i].name, entries[i].hdr_name.buffer, ps, depth))
1367 return False;
1369 return True;
1372 /*******************************************************************
1373 Inits an LSA_R_ENUM_PRIVS structure.
1374 ********************************************************************/
1376 void init_lsa_r_enum_privs(LSA_R_ENUM_PRIVS *r_u, uint32 enum_context,
1377 uint32 count, LSA_PRIV_ENTRY *entries)
1379 DEBUG(5, ("init_lsa_r_enum_privs\n"));
1381 r_u->enum_context=enum_context;
1382 r_u->count=count;
1384 if (entries!=NULL) {
1385 r_u->ptr=1;
1386 r_u->count1=count;
1387 r_u->privs=entries;
1388 } else {
1389 r_u->ptr=0;
1390 r_u->count1=0;
1391 r_u->privs=NULL;
1395 /*******************************************************************
1396 reads or writes a structure.
1397 ********************************************************************/
1398 BOOL lsa_io_r_enum_privs(const char *desc, LSA_R_ENUM_PRIVS *r_q, prs_struct *ps, int depth)
1400 if (r_q == NULL)
1401 return False;
1403 prs_debug(ps, depth, desc, "lsa_io_r_enum_privs");
1404 depth++;
1406 if(!prs_align(ps))
1407 return False;
1409 if(!prs_uint32("enum_context", ps, depth, &r_q->enum_context))
1410 return False;
1411 if(!prs_uint32("count", ps, depth, &r_q->count))
1412 return False;
1413 if(!prs_uint32("ptr", ps, depth, &r_q->ptr))
1414 return False;
1416 if (r_q->ptr) {
1417 if(!prs_uint32("count1", ps, depth, &r_q->count1))
1418 return False;
1420 if (UNMARSHALLING(ps))
1421 if (!(r_q->privs = (LSA_PRIV_ENTRY *)prs_alloc_mem(ps, sizeof(LSA_PRIV_ENTRY) * r_q->count1)))
1422 return False;
1424 if (!lsa_io_priv_entries("", r_q->privs, r_q->count1, ps, depth))
1425 return False;
1428 if(!prs_align(ps))
1429 return False;
1431 if(!prs_ntstatus("status", ps, depth, &r_q->status))
1432 return False;
1434 return True;
1437 void init_lsa_priv_get_dispname(LSA_Q_PRIV_GET_DISPNAME *trn, POLICY_HND *hnd, const char *name, uint16 lang_id, uint16 lang_id_sys)
1439 int len_name = strlen(name);
1441 if(len_name == 0)
1442 len_name = 1;
1444 memcpy(&trn->pol, hnd, sizeof(trn->pol));
1446 init_uni_hdr(&trn->hdr_name, len_name);
1447 init_unistr2(&trn->name, name, len_name);
1448 trn->lang_id = lang_id;
1449 trn->lang_id_sys = lang_id_sys;
1452 /*******************************************************************
1453 reads or writes a structure.
1454 ********************************************************************/
1455 BOOL lsa_io_q_priv_get_dispname(const char *desc, LSA_Q_PRIV_GET_DISPNAME *q_q, prs_struct *ps, int depth)
1457 if (q_q == NULL)
1458 return False;
1460 prs_debug(ps, depth, desc, "lsa_io_q_priv_get_dispname");
1461 depth++;
1463 if(!prs_align(ps))
1464 return False;
1466 if (!smb_io_pol_hnd("", &q_q->pol, ps, depth))
1467 return False;
1469 if (!smb_io_unihdr("hdr_name", &q_q->hdr_name, ps, depth))
1470 return False;
1472 if (!smb_io_unistr2("name", &q_q->name, q_q->hdr_name.buffer, ps, depth))
1473 return False;
1475 if(!prs_uint16("lang_id ", ps, depth, &q_q->lang_id))
1476 return False;
1477 if(!prs_uint16("lang_id_sys", ps, depth, &q_q->lang_id_sys))
1478 return False;
1480 return True;
1483 /*******************************************************************
1484 reads or writes a structure.
1485 ********************************************************************/
1486 BOOL lsa_io_r_priv_get_dispname(const char *desc, LSA_R_PRIV_GET_DISPNAME *r_q, prs_struct *ps, int depth)
1488 if (r_q == NULL)
1489 return False;
1491 prs_debug(ps, depth, desc, "lsa_io_r_priv_get_dispname");
1492 depth++;
1494 if (!prs_align(ps))
1495 return False;
1497 if (!prs_uint32("ptr_info", ps, depth, &r_q->ptr_info))
1498 return False;
1500 if (r_q->ptr_info){
1501 if (!smb_io_unihdr("hdr_name", &r_q->hdr_desc, ps, depth))
1502 return False;
1504 if (!smb_io_unistr2("desc", &r_q->desc, r_q->hdr_desc.buffer, ps, depth))
1505 return False;
1508 if(!prs_align(ps))
1509 return False;
1511 if(!prs_uint16("lang_id", ps, depth, &r_q->lang_id))
1512 return False;
1514 if(!prs_align(ps))
1515 return False;
1516 if(!prs_ntstatus("status", ps, depth, &r_q->status))
1517 return False;
1519 return True;
1522 void init_lsa_q_enum_accounts(LSA_Q_ENUM_ACCOUNTS *trn, POLICY_HND *hnd, uint32 enum_context, uint32 pref_max_length)
1524 memcpy(&trn->pol, hnd, sizeof(trn->pol));
1526 trn->enum_context = enum_context;
1527 trn->pref_max_length = pref_max_length;
1530 /*******************************************************************
1531 reads or writes a structure.
1532 ********************************************************************/
1533 BOOL lsa_io_q_enum_accounts(const char *desc, LSA_Q_ENUM_ACCOUNTS *q_q, prs_struct *ps, int depth)
1535 if (q_q == NULL)
1536 return False;
1538 prs_debug(ps, depth, desc, "lsa_io_q_enum_accounts");
1539 depth++;
1541 if (!smb_io_pol_hnd("", &q_q->pol, ps, depth))
1542 return False;
1544 if(!prs_uint32("enum_context ", ps, depth, &q_q->enum_context))
1545 return False;
1546 if(!prs_uint32("pref_max_length", ps, depth, &q_q->pref_max_length))
1547 return False;
1549 return True;
1552 /*******************************************************************
1553 Inits an LSA_R_ENUM_PRIVS structure.
1554 ********************************************************************/
1556 void init_lsa_r_enum_accounts(LSA_R_ENUM_ACCOUNTS *r_u, uint32 enum_context)
1558 DEBUG(5, ("init_lsa_r_enum_accounts\n"));
1560 r_u->enum_context=enum_context;
1561 if (r_u->enum_context!=0) {
1562 r_u->sids.num_entries=enum_context;
1563 r_u->sids.ptr_sid_enum=1;
1564 r_u->sids.num_entries2=enum_context;
1565 } else {
1566 r_u->sids.num_entries=0;
1567 r_u->sids.ptr_sid_enum=0;
1568 r_u->sids.num_entries2=0;
1572 /*******************************************************************
1573 reads or writes a structure.
1574 ********************************************************************/
1575 BOOL lsa_io_r_enum_accounts(const char *desc, LSA_R_ENUM_ACCOUNTS *r_q, prs_struct *ps, int depth)
1577 if (r_q == NULL)
1578 return False;
1580 prs_debug(ps, depth, desc, "lsa_io_r_enum_accounts");
1581 depth++;
1583 if (!prs_align(ps))
1584 return False;
1586 if(!prs_uint32("enum_context", ps, depth, &r_q->enum_context))
1587 return False;
1589 if (!lsa_io_sid_enum("sids", &r_q->sids, ps, depth))
1590 return False;
1592 if (!prs_align(ps))
1593 return False;
1595 if(!prs_ntstatus("status", ps, depth, &r_q->status))
1596 return False;
1598 return True;
1602 /*******************************************************************
1603 Reads or writes an LSA_Q_UNK_GET_CONNUSER structure.
1604 ********************************************************************/
1606 BOOL lsa_io_q_unk_get_connuser(const char *desc, LSA_Q_UNK_GET_CONNUSER *q_c, prs_struct *ps, int depth)
1608 prs_debug(ps, depth, desc, "lsa_io_q_unk_get_connuser");
1609 depth++;
1611 if(!prs_align(ps))
1612 return False;
1614 if(!prs_uint32("ptr_srvname", ps, depth, &q_c->ptr_srvname))
1615 return False;
1617 if(!smb_io_unistr2("uni2_srvname", &q_c->uni2_srvname, q_c->ptr_srvname, ps, depth)) /* server name to be looked up */
1618 return False;
1620 if (!prs_align(ps))
1621 return False;
1623 if(!prs_uint32("unk1", ps, depth, &q_c->unk1))
1624 return False;
1625 if(!prs_uint32("unk2", ps, depth, &q_c->unk2))
1626 return False;
1627 if(!prs_uint32("unk3", ps, depth, &q_c->unk3))
1628 return False;
1630 /* Don't bother to read or write at present... */
1631 return True;
1634 /*******************************************************************
1635 Reads or writes an LSA_R_UNK_GET_CONNUSER structure.
1636 ********************************************************************/
1638 BOOL lsa_io_r_unk_get_connuser(const char *desc, LSA_R_UNK_GET_CONNUSER *r_c, prs_struct *ps, int depth)
1640 prs_debug(ps, depth, desc, "lsa_io_r_unk_get_connuser");
1641 depth++;
1643 if(!prs_align(ps))
1644 return False;
1646 if(!prs_uint32("ptr_user_name", ps, depth, &r_c->ptr_user_name))
1647 return False;
1648 if(!smb_io_unihdr("hdr_user_name", &r_c->hdr_user_name, ps, depth))
1649 return False;
1650 if(!smb_io_unistr2("uni2_user_name", &r_c->uni2_user_name, r_c->ptr_user_name, ps, depth))
1651 return False;
1653 if (!prs_align(ps))
1654 return False;
1656 if(!prs_uint32("unk1", ps, depth, &r_c->unk1))
1657 return False;
1659 if(!prs_uint32("ptr_dom_name", ps, depth, &r_c->ptr_dom_name))
1660 return False;
1661 if(!smb_io_unihdr("hdr_dom_name", &r_c->hdr_dom_name, ps, depth))
1662 return False;
1663 if(!smb_io_unistr2("uni2_dom_name", &r_c->uni2_dom_name, r_c->ptr_dom_name, ps, depth))
1664 return False;
1666 if (!prs_align(ps))
1667 return False;
1669 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1670 return False;
1672 return True;
1675 void init_lsa_q_open_account(LSA_Q_OPENACCOUNT *trn, POLICY_HND *hnd, DOM_SID *sid, uint32 desired_access)
1677 memcpy(&trn->pol, hnd, sizeof(trn->pol));
1679 init_dom_sid2(&trn->sid, sid);
1680 trn->access = desired_access;
1683 /*******************************************************************
1684 Reads or writes an LSA_Q_OPENACCOUNT structure.
1685 ********************************************************************/
1687 BOOL lsa_io_q_open_account(const char *desc, LSA_Q_OPENACCOUNT *r_c, prs_struct *ps, int depth)
1689 prs_debug(ps, depth, desc, "lsa_io_q_open_account");
1690 depth++;
1692 if(!prs_align(ps))
1693 return False;
1695 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
1696 return False;
1698 if(!smb_io_dom_sid2("sid", &r_c->sid, ps, depth)) /* domain SID */
1699 return False;
1701 if(!prs_uint32("access", ps, depth, &r_c->access))
1702 return False;
1704 return True;
1707 /*******************************************************************
1708 Reads or writes an LSA_R_OPENACCOUNT structure.
1709 ********************************************************************/
1711 BOOL lsa_io_r_open_account(const char *desc, LSA_R_OPENACCOUNT *r_c, prs_struct *ps, int depth)
1713 prs_debug(ps, depth, desc, "lsa_io_r_open_account");
1714 depth++;
1716 if(!prs_align(ps))
1717 return False;
1719 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
1720 return False;
1722 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1723 return False;
1725 return True;
1729 void init_lsa_q_enum_privsaccount(LSA_Q_ENUMPRIVSACCOUNT *trn, POLICY_HND *hnd)
1731 memcpy(&trn->pol, hnd, sizeof(trn->pol));
1735 /*******************************************************************
1736 Reads or writes an LSA_Q_ENUMPRIVSACCOUNT structure.
1737 ********************************************************************/
1739 BOOL lsa_io_q_enum_privsaccount(const char *desc, LSA_Q_ENUMPRIVSACCOUNT *r_c, prs_struct *ps, int depth)
1741 prs_debug(ps, depth, desc, "lsa_io_q_enum_privsaccount");
1742 depth++;
1744 if(!prs_align(ps))
1745 return False;
1747 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
1748 return False;
1750 return True;
1753 /*******************************************************************
1754 Reads or writes an LUID structure.
1755 ********************************************************************/
1757 static BOOL lsa_io_luid(const char *desc, LUID *r_c, prs_struct *ps, int depth)
1759 prs_debug(ps, depth, desc, "lsa_io_luid");
1760 depth++;
1762 if(!prs_align(ps))
1763 return False;
1765 if(!prs_uint32("low", ps, depth, &r_c->low))
1766 return False;
1768 if(!prs_uint32("high", ps, depth, &r_c->high))
1769 return False;
1771 return True;
1774 /*******************************************************************
1775 Reads or writes an LUID_ATTR structure.
1776 ********************************************************************/
1778 static BOOL lsa_io_luid_attr(const char *desc, LUID_ATTR *r_c, prs_struct *ps, int depth)
1780 prs_debug(ps, depth, desc, "lsa_io_luid_attr");
1781 depth++;
1783 if(!prs_align(ps))
1784 return False;
1786 if (!lsa_io_luid(desc, &r_c->luid, ps, depth))
1787 return False;
1789 if(!prs_uint32("attr", ps, depth, &r_c->attr))
1790 return False;
1792 return True;
1795 /*******************************************************************
1796 Reads or writes an PRIVILEGE_SET structure.
1797 ********************************************************************/
1799 static BOOL lsa_io_privilege_set(const char *desc, PRIVILEGE_SET *r_c, prs_struct *ps, int depth)
1801 uint32 i;
1803 prs_debug(ps, depth, desc, "lsa_io_privilege_set");
1804 depth++;
1806 if(!prs_align(ps))
1807 return False;
1809 if(!prs_uint32("count", ps, depth, &r_c->count))
1810 return False;
1811 if(!prs_uint32("control", ps, depth, &r_c->control))
1812 return False;
1814 for (i=0; i<r_c->count; i++) {
1815 if (!lsa_io_luid_attr(desc, &r_c->set[i], ps, depth))
1816 return False;
1819 return True;
1822 void init_lsa_r_enum_privsaccount(LSA_R_ENUMPRIVSACCOUNT *r_u, LUID_ATTR *set, uint32 count, uint32 control)
1824 r_u->ptr=1;
1825 r_u->count=count;
1826 r_u->set.set=set;
1827 r_u->set.count=count;
1828 r_u->set.control=control;
1829 DEBUG(10,("init_lsa_r_enum_privsaccount: %d %d privileges\n", r_u->count, r_u->set.count));
1832 /*******************************************************************
1833 Reads or writes an LSA_R_ENUMPRIVSACCOUNT structure.
1834 ********************************************************************/
1836 BOOL lsa_io_r_enum_privsaccount(const char *desc, LSA_R_ENUMPRIVSACCOUNT *r_c, prs_struct *ps, int depth)
1838 prs_debug(ps, depth, desc, "lsa_io_r_enum_privsaccount");
1839 depth++;
1841 if(!prs_align(ps))
1842 return False;
1844 if(!prs_uint32("ptr", ps, depth, &r_c->ptr))
1845 return False;
1847 if (r_c->ptr!=0) {
1848 if(!prs_uint32("count", ps, depth, &r_c->count))
1849 return False;
1851 /* malloc memory if unmarshalling here */
1853 if (UNMARSHALLING(ps) && r_c->count!=0) {
1854 if (!(r_c->set.set = (LUID_ATTR *)prs_alloc_mem(ps,sizeof(LUID_ATTR) * r_c->count)))
1855 return False;
1859 if(!lsa_io_privilege_set(desc, &r_c->set, ps, depth))
1860 return False;
1863 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1864 return False;
1866 return True;
1871 /*******************************************************************
1872 Reads or writes an LSA_Q_GETSYSTEMACCOUNTstructure.
1873 ********************************************************************/
1875 BOOL lsa_io_q_getsystemaccount(const char *desc, LSA_Q_GETSYSTEMACCOUNT *r_c, prs_struct *ps, int depth)
1877 prs_debug(ps, depth, desc, "lsa_io_q_getsystemaccount");
1878 depth++;
1880 if(!prs_align(ps))
1881 return False;
1883 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
1884 return False;
1886 return True;
1889 /*******************************************************************
1890 Reads or writes an LSA_R_GETSYSTEMACCOUNTstructure.
1891 ********************************************************************/
1893 BOOL lsa_io_r_getsystemaccount(const char *desc, LSA_R_GETSYSTEMACCOUNT *r_c, prs_struct *ps, int depth)
1895 prs_debug(ps, depth, desc, "lsa_io_r_getsystemaccount");
1896 depth++;
1898 if(!prs_align(ps))
1899 return False;
1901 if(!prs_uint32("access", ps, depth, &r_c->access))
1902 return False;
1904 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1905 return False;
1907 return True;
1911 /*******************************************************************
1912 Reads or writes an LSA_Q_SETSYSTEMACCOUNT structure.
1913 ********************************************************************/
1915 BOOL lsa_io_q_setsystemaccount(const char *desc, LSA_Q_SETSYSTEMACCOUNT *r_c, prs_struct *ps, int depth)
1917 prs_debug(ps, depth, desc, "lsa_io_q_setsystemaccount");
1918 depth++;
1920 if(!prs_align(ps))
1921 return False;
1923 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
1924 return False;
1926 if(!prs_uint32("access", ps, depth, &r_c->access))
1927 return False;
1929 return True;
1932 /*******************************************************************
1933 Reads or writes an LSA_R_SETSYSTEMACCOUNT structure.
1934 ********************************************************************/
1936 BOOL lsa_io_r_setsystemaccount(const char *desc, LSA_R_SETSYSTEMACCOUNT *r_c, prs_struct *ps, int depth)
1938 prs_debug(ps, depth, desc, "lsa_io_r_setsystemaccount");
1939 depth++;
1941 if(!prs_align(ps))
1942 return False;
1944 if(!prs_ntstatus("status", ps, depth, &r_c->status))
1945 return False;
1947 return True;
1951 void init_lsa_q_lookupprivvalue(LSA_Q_LOOKUPPRIVVALUE *trn, POLICY_HND *hnd, const char *name)
1953 int len_name = strlen(name);
1954 memcpy(&trn->pol, hnd, sizeof(trn->pol));
1956 if(len_name == 0)
1957 len_name = 1;
1959 init_uni_hdr(&trn->hdr_right, len_name);
1960 init_unistr2(&trn->uni2_right, name, len_name);
1963 /*******************************************************************
1964 Reads or writes an LSA_Q_LOOKUPPRIVVALUE structure.
1965 ********************************************************************/
1967 BOOL lsa_io_q_lookupprivvalue(const char *desc, LSA_Q_LOOKUPPRIVVALUE *r_c, prs_struct *ps, int depth)
1969 prs_debug(ps, depth, desc, "lsa_io_q_lookupprivvalue");
1970 depth++;
1972 if(!prs_align(ps))
1973 return False;
1975 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
1976 return False;
1977 if(!smb_io_unihdr ("hdr_name", &r_c->hdr_right, ps, depth))
1978 return False;
1979 if(!smb_io_unistr2("uni2_right", &r_c->uni2_right, r_c->hdr_right.buffer, ps, depth))
1980 return False;
1982 return True;
1985 /*******************************************************************
1986 Reads or writes an LSA_R_LOOKUPPRIVVALUE structure.
1987 ********************************************************************/
1989 BOOL lsa_io_r_lookupprivvalue(const char *desc, LSA_R_LOOKUPPRIVVALUE *r_c, prs_struct *ps, int depth)
1991 prs_debug(ps, depth, desc, "lsa_io_r_lookupprivvalue");
1992 depth++;
1994 if(!prs_align(ps))
1995 return False;
1997 if(!lsa_io_luid("luid", &r_c->luid, ps, depth))
1998 return False;
2000 if(!prs_ntstatus("status", ps, depth, &r_c->status))
2001 return False;
2003 return True;
2007 /*******************************************************************
2008 Reads or writes an LSA_Q_ADDPRIVS structure.
2009 ********************************************************************/
2011 BOOL lsa_io_q_addprivs(const char *desc, LSA_Q_ADDPRIVS *r_c, prs_struct *ps, int depth)
2013 prs_debug(ps, depth, desc, "lsa_io_q_addprivs");
2014 depth++;
2016 if(!prs_align(ps))
2017 return False;
2019 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
2020 return False;
2022 if(!prs_uint32("count", ps, depth, &r_c->count))
2023 return False;
2025 if (UNMARSHALLING(ps) && r_c->count!=0) {
2026 if (!(r_c->set.set = (LUID_ATTR *)prs_alloc_mem(ps,sizeof(LUID_ATTR) * r_c->count)))
2027 return False;
2030 if(!lsa_io_privilege_set(desc, &r_c->set, ps, depth))
2031 return False;
2033 return True;
2036 /*******************************************************************
2037 Reads or writes an LSA_R_ADDPRIVS structure.
2038 ********************************************************************/
2040 BOOL lsa_io_r_addprivs(const char *desc, LSA_R_ADDPRIVS *r_c, prs_struct *ps, int depth)
2042 prs_debug(ps, depth, desc, "lsa_io_r_addprivs");
2043 depth++;
2045 if(!prs_align(ps))
2046 return False;
2048 if(!prs_ntstatus("status", ps, depth, &r_c->status))
2049 return False;
2051 return True;
2054 /*******************************************************************
2055 Reads or writes an LSA_Q_REMOVEPRIVS structure.
2056 ********************************************************************/
2058 BOOL lsa_io_q_removeprivs(const char *desc, LSA_Q_REMOVEPRIVS *r_c, prs_struct *ps, int depth)
2060 prs_debug(ps, depth, desc, "lsa_io_q_removeprivs");
2061 depth++;
2063 if(!prs_align(ps))
2064 return False;
2066 if(!smb_io_pol_hnd("pol", &r_c->pol, ps, depth))
2067 return False;
2069 if(!prs_uint32("allrights", ps, depth, &r_c->allrights))
2070 return False;
2072 if(!prs_uint32("ptr", ps, depth, &r_c->ptr))
2073 return False;
2076 * JFM: I'm not sure at all if the count is inside the ptr
2077 * never seen one with ptr=0
2080 if (r_c->ptr!=0) {
2081 if(!prs_uint32("count", ps, depth, &r_c->count))
2082 return False;
2084 if (UNMARSHALLING(ps) && r_c->count!=0) {
2085 if (!(r_c->set.set = (LUID_ATTR *)prs_alloc_mem(ps,sizeof(LUID_ATTR) * r_c->count)))
2086 return False;
2089 if(!lsa_io_privilege_set(desc, &r_c->set, ps, depth))
2090 return False;
2093 return True;
2096 /*******************************************************************
2097 Reads or writes an LSA_R_REMOVEPRIVS structure.
2098 ********************************************************************/
2100 BOOL lsa_io_r_removeprivs(const char *desc, LSA_R_REMOVEPRIVS *r_c, prs_struct *ps, int depth)
2102 prs_debug(ps, depth, desc, "lsa_io_r_removeprivs");
2103 depth++;
2105 if(!prs_align(ps))
2106 return False;
2108 if(!prs_ntstatus("status", ps, depth, &r_c->status))
2109 return False;
2111 return True;
2114 BOOL policy_handle_is_valid(const POLICY_HND *hnd)
2116 POLICY_HND zero_pol;
2118 ZERO_STRUCT(zero_pol);
2119 return ((memcmp(&zero_pol, hnd, sizeof(POLICY_HND)) == 0) ? False : True );
2122 /*******************************************************************
2123 Reads or writes an LSA_DNS_DOM_INFO structure.
2124 ********************************************************************/
2126 BOOL lsa_io_dns_dom_info(const char *desc, LSA_DNS_DOM_INFO *info,
2127 prs_struct *ps, int depth)
2129 prs_debug(ps, depth, desc, "lsa_io_dns_dom_info");
2130 depth++;
2132 if(!prs_align(ps))
2133 return False;
2134 if(!smb_io_unihdr("nb_name", &info->hdr_nb_dom_name, ps, depth))
2135 return False;
2136 if(!smb_io_unihdr("dns_name", &info->hdr_dns_dom_name, ps, depth))
2137 return False;
2138 if(!smb_io_unihdr("forest", &info->hdr_forest_name, ps, depth))
2139 return False;
2141 if(!prs_align(ps))
2142 return False;
2143 if (!prs_uint8s(False, "dom_guid", ps, depth, info->dom_guid.info, GUID_SIZE))
2144 return False;
2146 if(!prs_align(ps))
2147 return False;
2148 if(!prs_uint32("dom_sid", ps, depth, &info->ptr_dom_sid))
2149 return False;
2151 if(!smb_io_unistr2("nb_name", &info->uni_nb_dom_name,
2152 info->hdr_nb_dom_name.buffer, ps, depth))
2153 return False;
2154 if(!smb_io_unistr2("dns_name", &info->uni_dns_dom_name,
2155 info->hdr_dns_dom_name.buffer, ps, depth))
2156 return False;
2157 if(!smb_io_unistr2("forest", &info->uni_forest_name,
2158 info->hdr_forest_name.buffer, ps, depth))
2159 return False;
2161 if(!smb_io_dom_sid2("dom_sid", &info->dom_sid, ps, depth))
2162 return False;
2164 return True;
2168 /*******************************************************************
2169 Inits an LSA_Q_QUERY_INFO2 structure.
2170 ********************************************************************/
2172 void init_q_query2(LSA_Q_QUERY_INFO2 *q_q, POLICY_HND *hnd, uint16 info_class)
2174 DEBUG(5, ("init_q_query2\n"));
2176 memcpy(&q_q->pol, hnd, sizeof(q_q->pol));
2178 q_q->info_class = info_class;
2181 /*******************************************************************
2182 Reads or writes an LSA_Q_QUERY_DNSDOMINFO structure.
2183 ********************************************************************/
2185 BOOL lsa_io_q_query_info2(const char *desc, LSA_Q_QUERY_INFO2 *q_c,
2186 prs_struct *ps, int depth)
2188 prs_debug(ps, depth, desc, "lsa_io_q_query_info2");
2189 depth++;
2191 if(!prs_align(ps))
2192 return False;
2194 if(!smb_io_pol_hnd("pol", &q_c->pol, ps, depth))
2195 return False;
2197 if(!prs_uint16("info_class", ps, depth, &q_c->info_class))
2198 return False;
2200 return True;
2203 /*******************************************************************
2204 Reads or writes an LSA_R_QUERY_DNSDOMINFO structure.
2205 ********************************************************************/
2207 BOOL lsa_io_r_query_info2(const char *desc, LSA_R_QUERY_INFO2 *r_c,
2208 prs_struct *ps, int depth)
2210 prs_debug(ps, depth, desc, "lsa_io_r_query_info2");
2211 depth++;
2213 if(!prs_align(ps))
2214 return False;
2216 if(!prs_uint32("ptr", ps, depth, &r_c->ptr))
2217 return False;
2218 if(!prs_uint16("info_class", ps, depth, &r_c->info_class))
2219 return False;
2220 switch(r_c->info_class) {
2221 case 0x000c:
2222 if (!lsa_io_dns_dom_info("info12", &r_c->info.dns_dom_info,
2223 ps, depth))
2224 return False;
2225 break;
2226 default:
2227 DEBUG(0,("lsa_io_r_query_info2: unknown info class %d\n",
2228 r_c->info_class));
2229 return False;
2232 if(!prs_align(ps))
2233 return False;
2234 if(!prs_ntstatus("status", ps, depth, &r_c->status))
2235 return False;
2237 return True;
2241 /*******************************************************************
2242 Inits an LSA_Q_ENUM_ACCT_RIGHTS structure.
2243 ********************************************************************/
2244 void init_q_enum_acct_rights(LSA_Q_ENUM_ACCT_RIGHTS *q_q,
2245 POLICY_HND *hnd,
2246 uint32 count,
2247 DOM_SID *sid)
2249 DEBUG(5, ("init_q_enum_acct_rights\n"));
2251 q_q->pol = *hnd;
2252 q_q->count = count;
2253 q_q->sid = *sid;
2256 /*******************************************************************
2257 reads or writes a LSA_Q_ENUM_ACCT_RIGHTS structure.
2258 ********************************************************************/
2259 BOOL lsa_io_q_enum_acct_rights(const char *desc, LSA_Q_ENUM_ACCT_RIGHTS *q_q, prs_struct *ps, int depth)
2261 if (q_q == NULL)
2262 return False;
2264 prs_debug(ps, depth, desc, "lsa_io_q_enum_acct_rights");
2265 depth++;
2267 if (!smb_io_pol_hnd("", &q_q->pol, ps, depth))
2268 return False;
2270 if(!prs_uint32("count ", ps, depth, &q_q->count))
2271 return False;
2273 if(!smb_io_dom_sid("sid", &q_q->sid, ps, depth))
2274 return False;
2276 return True;
2280 /*******************************************************************
2281 reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
2282 ********************************************************************/
2283 BOOL lsa_io_r_enum_acct_rights(const char *desc, LSA_R_ENUM_ACCT_RIGHTS *r_c, prs_struct *ps, int depth)
2285 prs_debug(ps, depth, desc, "lsa_io_r_enum_acct_rights");
2286 depth++;
2288 if(!prs_uint32("count ", ps, depth, &r_c->count))
2289 return False;
2291 if(!smb_io_unistr_array("rights", &r_c->rights, ps, depth))
2292 return False;
2294 if(!prs_ntstatus("status", ps, depth, &r_c->status))
2295 return False;
2297 return True;