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.
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.
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
);
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
,
57 prs_debug(ps
, depth
, desc
, "lsa_io_trans_name");
63 if(!prs_uint16("sid_name_use", ps
, depth
, &trn
->sid_name_use
))
68 if(!smb_io_unihdr ("hdr_name", &trn
->hdr_name
, ps
, depth
))
70 if(!prs_uint32("domain_idx ", ps
, depth
, &trn
->domain_idx
))
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
,
85 prs_debug(ps
, depth
, desc
, "lsa_io_dom_r_ref");
91 if(!prs_uint32("num_ref_doms_1", ps
, depth
, &r_r
->num_ref_doms_1
)) /* num referenced domains? */
93 if(!prs_uint32("ptr_ref_dom ", ps
, depth
, &r_r
->ptr_ref_dom
)) /* undocumented buffer pointer. */
95 if(!prs_uint32("max_entries ", ps
, depth
, &r_r
->max_entries
)) /* 32 - max number of entries */
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? */
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
++) {
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
))
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
))
119 for (i
= 0; i
< r_r
->num_ref_doms_2
; i
++) {
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 */
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 */
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
,
164 prs_debug(ps
, depth
, desc
, "lsa_io_obj_qos");
170 start
= prs_offset(ps
);
172 /* these pointers had _better_ be zero, because we don't know
175 if(!prs_uint32("len ", ps
, depth
, &qos
->len
)) /* 0x18 - length (in bytes) inc. the length field. */
177 if(!prs_uint16("sec_imp_level ", ps
, depth
, &qos
->sec_imp_level
))
179 if(!prs_uint8 ("sec_ctxt_mode ", ps
, depth
, &qos
->sec_ctxt_mode
))
181 if(!prs_uint8 ("effective_only", ps
, depth
, &qos
->effective_only
))
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
));
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;
207 attr
->ptr_sec_qos
= 1;
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
,
224 prs_debug(ps
, depth
, desc
, "lsa_io_obj_attr");
230 start
= prs_offset(ps
);
232 /* these pointers had _better_ be zero, because we don't know
235 if(!prs_uint32("len ", ps
, depth
, &attr
->len
)) /* 0x18 - length (in bytes) inc. the length field. */
237 if(!prs_uint32("ptr_root_dir", ps
, depth
, &attr
->ptr_root_dir
)) /* 0 - root directory (pointer) */
239 if(!prs_uint32("ptr_obj_name", ps
, depth
, &attr
->ptr_obj_name
)) /* 0 - object name (pointer) */
241 if(!prs_uint32("attributes ", ps
, depth
, &attr
->attributes
)) /* 0 - attributes (undocumented) */
243 if(!prs_uint32("ptr_sec_desc", ps
, depth
, &attr
->ptr_sec_desc
)) /* 0 - security descriptior (pointer) */
245 if(!prs_uint32("ptr_sec_qos ", ps
, depth
, &attr
->ptr_sec_qos
)) /* security quality of service (pointer) */
248 /* code commented out as it's not necessary true (tested with hyena). JFM, 11/22/2001 */
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
));
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
))))
262 if(!lsa_io_sec_qos("sec_qos", attr
->sec_qos
, ps
, depth
))
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
,
278 DEBUG(5, ("init_open_pol: attr:%d da:%d\n", attributes
,
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
,
296 prs_debug(ps
, depth
, desc
, "lsa_io_q_open_pol");
299 if(!prs_uint32("ptr ", ps
, depth
, &r_q
->ptr
))
301 if(!prs_uint16("system_name", ps
, depth
, &r_q
->system_name
))
306 if(!lsa_io_obj_attr("", &r_q
->attr
, ps
, depth
))
309 if(!prs_uint32("des_access", ps
, depth
, &r_q
->des_access
))
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
,
322 prs_debug(ps
, depth
, desc
, "lsa_io_r_open_pol");
325 if(!smb_io_pol_hnd("", &r_p
->pol
, ps
, depth
))
328 if(!prs_ntstatus("status", ps
, depth
, &r_p
->status
))
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
,
342 DEBUG(5, ("init_q_open_pol2: attr:%d da:%d\n", attributes
,
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
,
362 prs_debug(ps
, depth
, desc
, "lsa_io_q_open_pol2");
365 if(!prs_uint32("ptr ", ps
, depth
, &r_q
->ptr
))
368 if(!smb_io_unistr2 ("", &r_q
->uni_server_name
, r_q
->ptr
, ps
, depth
))
370 if(!lsa_io_obj_attr("", &r_q
->attr
, ps
, depth
))
373 if(!prs_uint32("des_access", ps
, depth
, &r_q
->des_access
))
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
,
386 prs_debug(ps
, depth
, desc
, "lsa_io_r_open_pol2");
389 if(!smb_io_pol_hnd("", &r_p
->pol
, ps
, depth
))
392 if(!prs_ntstatus("status", ps
, depth
, &r_p
->status
))
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
,
405 DEBUG(5, ("init_q_query_sec_obj\n"));
408 q_q
->sec_info
= sec_info
;
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");
423 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
426 if (!prs_uint32("sec_info", ps
, depth
, &q_q
->sec_info
))
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");
445 if (!prs_uint32("ptr", ps
, depth
, &r_u
->ptr
))
449 if (!sec_io_desc_buf("sec", &r_u
->buf
, ps
, depth
))
453 if (!prs_ntstatus("status", ps
, depth
, &r_u
->status
))
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
,
479 prs_debug(ps
, depth
, desc
, "lsa_io_q_query");
482 if(!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
485 if(!prs_uint16("info_class", ps
, depth
, &q_q
->info_class
))
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"));
500 q_e
->enum_context
= enum_context
;
501 q_e
->preferred_len
= preferred_len
;
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");
516 if(!smb_io_pol_hnd("", &q_e
->pol
, ps
, depth
))
519 if(!prs_uint32("enum_context ", ps
, depth
, &q_e
->enum_context
))
521 if(!prs_uint32("preferred_len", ps
, depth
, &q_e
->preferred_len
))
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
)
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
;
554 if (!(r_e
->uni_domain_name
= (UNISTR2
*)talloc(ctx
,sizeof(UNISTR2
) * num_domains
))) {
555 r_e
->status
= NT_STATUS_NO_MEMORY
;
559 if (!(r_e
->domain_sid
= (DOM_SID2
*)talloc(ctx
,sizeof(DOM_SID2
) * num_domains
))) {
560 r_e
->status
= NT_STATUS_NO_MEMORY
;
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");
589 if(!prs_uint32("enum_context ", ps
, depth
, &r_e
->enum_context
))
591 if(!prs_uint32("num_domains ", ps
, depth
, &r_e
->num_domains
))
593 if(!prs_uint32("ptr_enum_domains", ps
, depth
, &r_e
->ptr_enum_domains
))
596 if (r_e
->ptr_enum_domains
) {
599 if(!prs_uint32("num_domains2", ps
, depth
, &r_e
->num_domains2
))
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
)))
608 if (!(r_e
->uni_domain_name
= (UNISTR2
*)prs_alloc_mem(ps
,sizeof(UNISTR2
) * num_domains
)))
611 if (!(r_e
->domain_sid
= (DOM_SID2
*)prs_alloc_mem(ps
,sizeof(DOM_SID2
) * num_domains
)))
615 for (i
= 0; i
< num_domains
; i
++) {
616 if(!smb_io_unihdr2 ("", &r_e
->hdr_domain_name
[i
], ps
,
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
,
626 if(!smb_io_dom_sid2("", &r_e
->domain_sid
[i
], ps
,
632 if(!prs_ntstatus("status", ps
, depth
, &r_e
->status
))
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
)
647 prs_debug(ps
, depth
, desc
, "lsa_io_dom_query");
653 if(!prs_uint16("uni_dom_max_len", ps
, depth
, &d_q
->uni_dom_max_len
)) /* domain name string length * 2 */
655 if(!prs_uint16("uni_dom_str_len", ps
, depth
, &d_q
->uni_dom_str_len
)) /* domain name string length * 2 */
658 if(!prs_uint32("buffer_dom_name", ps
, depth
, &d_q
->buffer_dom_name
)) /* undocumented domain name string buffer pointer */
660 if(!prs_uint32("buffer_dom_sid ", ps
, depth
, &d_q
->buffer_dom_sid
)) /* undocumented domain SID string buffer pointer */
663 if(!smb_io_unistr2("unistr2", &d_q
->uni_domain_name
, d_q
->buffer_dom_name
, ps
, depth
)) /* domain name (unicode string) */
669 if (d_q
->buffer_dom_sid
!= 0) {
670 if(!smb_io_dom_sid2("", &d_q
->dom_sid
, ps
, depth
)) /* domain SID */
673 memset((char *)&d_q
->dom_sid
, '\0', sizeof(d_q
->dom_sid
));
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
)
690 prs_debug(ps
, depth
, desc
, "lsa_io_dom_query_2");
696 if (!prs_uint32("auditing_enabled", ps
, depth
, &d_q
->auditing_enabled
))
698 if (!prs_uint32("ptr ", ps
, depth
, &ptr
))
700 if (!prs_uint32("count1", ps
, depth
, &d_q
->count1
))
702 if (!prs_uint32("count2", ps
, depth
, &d_q
->count2
))
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"));
714 if (!prs_uint32s(False
, "auditsettings", ps
, depth
, d_q
->auditsettings
, d_q
->count2
))
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
)
747 prs_debug(ps
, depth
, desc
, "lsa_io_dom_query_6");
750 if (!prs_uint16("server_role", ps
, depth
, &d_q
->server_role
))
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
,
763 prs_debug(ps
, depth
, desc
, "lsa_io_r_query");
766 if(!prs_uint32("undoc_buffer", ps
, depth
, &r_q
->undoc_buffer
))
769 if (r_q
->undoc_buffer
!= 0) {
770 if(!prs_uint16("info_class", ps
, depth
, &r_q
->info_class
))
776 switch (r_q
->info_class
) {
778 if(!lsa_io_dom_query_2("", &r_q
->dom
.id2
, ps
, depth
))
782 if(!lsa_io_dom_query_3("", &r_q
->dom
.id3
, ps
, depth
))
786 if(!lsa_io_dom_query_5("", &r_q
->dom
.id5
, ps
, depth
))
790 if(!lsa_io_dom_query_6("", &r_q
->dom
.id6
, ps
, depth
))
802 if(!prs_ntstatus("status", ps
, depth
, &r_q
->status
))
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
)
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"));
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"));
839 /* Copy across SIDs and SID pointers */
841 for (i
= 0; i
< num_entries
; i
++) {
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
,
856 prs_debug(ps
, depth
, desc
, "lsa_io_sid_enum");
862 if(!prs_uint32("num_entries ", ps
, depth
, &sen
->num_entries
))
864 if(!prs_uint32("ptr_sid_enum", ps
, depth
, &sen
->ptr_sid_enum
))
868 if the ptr is NULL, leave here. checked from a real w2k trace.
872 if (sen
->ptr_sid_enum
==0)
875 if(!prs_uint32("num_entries2", ps
, depth
, &sen
->num_entries2
))
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 "
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 "
896 for (i
= 0; i
< sen
->num_entries
; i
++) {
899 slprintf(temp
, sizeof(temp
) - 1, "ptr_sid[%d]", i
);
900 if(!prs_uint32(temp
, ps
, depth
, &sen
->ptr_sid
[i
])) {
905 for (i
= 0; i
< sen
->num_entries
; i
++) {
908 slprintf(temp
, sizeof(temp
) - 1, "sid[%d]", i
);
909 if(!smb_io_dom_sid2(temp
, &sen
->sid
[i
], ps
, depth
)) {
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
,
925 DEBUG(5, ("init_r_enum_trust_dom\n"));
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
,
942 prs_debug(ps
, depth
, desc
, "lsa_io_q_lookup_sids");
948 if(!smb_io_pol_hnd("pol_hnd", &q_s
->pol
, ps
, depth
)) /* policy handle */
950 if(!lsa_io_sid_enum("sids ", &q_s
->sids
, ps
, depth
)) /* sids to be looked up */
952 if(!lsa_io_trans_names("names ", &q_s
->names
, ps
, depth
)) /* translated names */
954 if(!smb_io_lookup_level("switch ", &q_s
->level
, ps
, depth
)) /* lookup level */
957 if(!prs_uint32("mapped_count", ps
, depth
, &q_s
->mapped_count
))
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
)
972 prs_debug(ps
, depth
, desc
, "lsa_io_trans_names");
978 if(!prs_uint32("num_entries ", ps
, depth
, &trn
->num_entries
))
980 if(!prs_uint32("ptr_trans_names", ps
, depth
, &trn
->ptr_trans_names
))
983 if (trn
->ptr_trans_names
!= 0) {
984 if(!prs_uint32("num_entries2 ", ps
, depth
,
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
) {
995 if ((trn
->uni_name
= (UNISTR2
*)
996 prs_alloc_mem(ps
, trn
->num_entries
*
997 sizeof(UNISTR2
))) == NULL
) {
1002 for (i
= 0; i
< trn
->num_entries2
; i
++) {
1004 slprintf(t
, sizeof(t
) - 1, "name[%d] ", i
);
1006 if(!lsa_io_trans_name(t
, &trn
->name
[i
], ps
, depth
)) /* translated name */
1010 for (i
= 0; i
< trn
->num_entries2
; i
++) {
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
))
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");
1037 if(!prs_uint32("ptr_dom_ref", ps
, depth
, &r_s
->ptr_dom_ref
))
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 */
1044 if(!lsa_io_trans_names("names ", r_s
->names
, ps
, depth
)) /* translated names */
1050 if(!prs_uint32("mapped_count", ps
, depth
, &r_s
->mapped_count
))
1053 if(!prs_ntstatus("status ", ps
, depth
, &r_s
->status
))
1059 /*******************************************************************
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
)
1068 DEBUG(5, ("init_q_lookup_names\n"));
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"));
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"));
1089 for (i
= 0; i
< num_names
; i
++) {
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
)
1107 prs_debug(ps
, depth
, desc
, "lsa_io_q_lookup_names");
1113 if(!smb_io_pol_hnd("", &q_r
->pol
, ps
, depth
)) /* policy handle */
1118 if(!prs_uint32("num_entries ", ps
, depth
, &q_r
->num_entries
))
1120 if(!prs_uint32("num_entries2 ", ps
, depth
, &q_r
->num_entries2
))
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
)
1128 if ((q_r
->uni_name
= (UNISTR2
*)prs_alloc_mem(ps
,
1129 q_r
->num_entries
* sizeof(UNISTR2
))) == NULL
)
1134 for (i
= 0; i
< q_r
->num_entries
; i
++) {
1137 if(!smb_io_unihdr("hdr_name", &q_r
->hdr_name
[i
], ps
, depth
)) /* pointer names */
1141 for (i
= 0; i
< q_r
->num_entries
; i
++) {
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 */
1150 if(!prs_uint32("num_trans_entries ", ps
, depth
, &q_r
->num_trans_entries
))
1152 if(!prs_uint32("ptr_trans_sids ", ps
, depth
, &q_r
->ptr_trans_sids
))
1154 if(!prs_uint32("lookup_level ", ps
, depth
, &q_r
->lookup_level
))
1156 if(!prs_uint32("mapped_count ", ps
, depth
, &q_r
->mapped_count
))
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
)
1171 prs_debug(ps
, depth
, desc
, "lsa_io_r_lookup_names");
1177 if(!prs_uint32("ptr_dom_ref", ps
, depth
, &r_r
->ptr_dom_ref
))
1180 if (r_r
->ptr_dom_ref
!= 0)
1181 if(!lsa_io_dom_r_ref("", r_r
->dom_ref
, ps
, depth
))
1184 if(!prs_uint32("num_entries", ps
, depth
, &r_r
->num_entries
))
1186 if(!prs_uint32("ptr_entries", ps
, depth
, &r_r
->ptr_entries
))
1189 if (r_r
->ptr_entries
!= 0) {
1190 if(!prs_uint32("num_entries2", ps
, depth
, &r_r
->num_entries2
))
1193 if (r_r
->num_entries2
!= r_r
->num_entries
) {
1198 if (UNMARSHALLING(ps
)) {
1199 if ((r_r
->dom_rid
= (DOM_RID2
*)prs_alloc_mem(ps
, r_r
->num_entries2
* sizeof(DOM_RID2
)))
1201 DEBUG(3, ("lsa_io_r_lookup_names(): out of memory\n"));
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 */
1211 if(!prs_uint32("mapped_count", ps
, depth
, &r_r
->mapped_count
))
1214 if(!prs_ntstatus("status ", ps
, depth
, &r_r
->status
))
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");
1241 if(!smb_io_pol_hnd("", &q_c
->pol
, ps
, depth
))
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");
1256 if(!smb_io_pol_hnd("", &r_c
->pol
, ps
, depth
))
1259 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
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");
1274 /* Don't bother to read or write at present... */
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");
1290 if(!prs_uint32("dummy1", ps
, depth
, &r_c
->dummy1
))
1292 if(!prs_uint32("dummy2", ps
, depth
, &r_c
->dummy2
))
1294 if(!prs_uint32("dummy3", ps
, depth
, &r_c
->dummy3
))
1296 if(!prs_uint32("dummy4", ps
, depth
, &r_c
->dummy4
))
1298 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
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
)
1326 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_privs");
1329 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
1332 if(!prs_uint32("enum_context ", ps
, depth
, &q_q
->enum_context
))
1334 if(!prs_uint32("pref_max_length", ps
, depth
, &q_q
->pref_max_length
))
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
)
1347 if (entries
== NULL
)
1350 prs_debug(ps
, depth
, desc
, "lsa_io_priv_entries");
1356 for (i
= 0; i
< count
; i
++) {
1357 if (!smb_io_unihdr("", &entries
[i
].hdr_name
, ps
, depth
))
1359 if(!prs_uint32("luid_low ", ps
, depth
, &entries
[i
].luid_low
))
1361 if(!prs_uint32("luid_high", ps
, depth
, &entries
[i
].luid_high
))
1365 for (i
= 0; i
< count
; i
++)
1366 if (!smb_io_unistr2("", &entries
[i
].name
, entries
[i
].hdr_name
.buffer
, ps
, depth
))
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
;
1384 if (entries
!=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
)
1403 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_privs");
1409 if(!prs_uint32("enum_context", ps
, depth
, &r_q
->enum_context
))
1411 if(!prs_uint32("count", ps
, depth
, &r_q
->count
))
1413 if(!prs_uint32("ptr", ps
, depth
, &r_q
->ptr
))
1417 if(!prs_uint32("count1", ps
, depth
, &r_q
->count1
))
1420 if (UNMARSHALLING(ps
))
1421 if (!(r_q
->privs
= (LSA_PRIV_ENTRY
*)prs_alloc_mem(ps
, sizeof(LSA_PRIV_ENTRY
) * r_q
->count1
)))
1424 if (!lsa_io_priv_entries("", r_q
->privs
, r_q
->count1
, ps
, depth
))
1431 if(!prs_ntstatus("status", ps
, depth
, &r_q
->status
))
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
);
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
)
1460 prs_debug(ps
, depth
, desc
, "lsa_io_q_priv_get_dispname");
1466 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
1469 if (!smb_io_unihdr("hdr_name", &q_q
->hdr_name
, ps
, depth
))
1472 if (!smb_io_unistr2("name", &q_q
->name
, q_q
->hdr_name
.buffer
, ps
, depth
))
1475 if(!prs_uint16("lang_id ", ps
, depth
, &q_q
->lang_id
))
1477 if(!prs_uint16("lang_id_sys", ps
, depth
, &q_q
->lang_id_sys
))
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
)
1491 prs_debug(ps
, depth
, desc
, "lsa_io_r_priv_get_dispname");
1497 if (!prs_uint32("ptr_info", ps
, depth
, &r_q
->ptr_info
))
1501 if (!smb_io_unihdr("hdr_name", &r_q
->hdr_desc
, ps
, depth
))
1504 if (!smb_io_unistr2("desc", &r_q
->desc
, r_q
->hdr_desc
.buffer
, ps
, depth
))
1511 if(!prs_uint16("lang_id", ps
, depth
, &r_q
->lang_id
))
1516 if(!prs_ntstatus("status", ps
, depth
, &r_q
->status
))
1523 initialise a LSA_Q_ENUM_ACCOUNTS structure
1525 void init_lsa_q_enum_accounts(LSA_Q_ENUM_ACCOUNTS
*trn
, POLICY_HND
*hnd
, uint32 enum_context
, uint32 pref_max_length
)
1527 memcpy(&trn
->pol
, hnd
, sizeof(trn
->pol
));
1529 trn
->enum_context
= enum_context
;
1530 trn
->pref_max_length
= pref_max_length
;
1533 /*******************************************************************
1534 reads or writes a structure.
1535 ********************************************************************/
1536 BOOL
lsa_io_q_enum_accounts(const char *desc
, LSA_Q_ENUM_ACCOUNTS
*q_q
, prs_struct
*ps
, int depth
)
1541 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_accounts");
1544 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
1547 if(!prs_uint32("enum_context ", ps
, depth
, &q_q
->enum_context
))
1549 if(!prs_uint32("pref_max_length", ps
, depth
, &q_q
->pref_max_length
))
1556 /*******************************************************************
1557 Inits an LSA_R_ENUM_PRIVS structure.
1558 ********************************************************************/
1560 void init_lsa_r_enum_accounts(LSA_R_ENUM_ACCOUNTS
*r_u
, uint32 enum_context
)
1562 DEBUG(5, ("init_lsa_r_enum_accounts\n"));
1564 r_u
->enum_context
=enum_context
;
1565 if (r_u
->enum_context
!=0) {
1566 r_u
->sids
.num_entries
=enum_context
;
1567 r_u
->sids
.ptr_sid_enum
=1;
1568 r_u
->sids
.num_entries2
=enum_context
;
1570 r_u
->sids
.num_entries
=0;
1571 r_u
->sids
.ptr_sid_enum
=0;
1572 r_u
->sids
.num_entries2
=0;
1576 /*******************************************************************
1577 reads or writes a structure.
1578 ********************************************************************/
1579 BOOL
lsa_io_r_enum_accounts(const char *desc
, LSA_R_ENUM_ACCOUNTS
*r_q
, prs_struct
*ps
, int depth
)
1584 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_accounts");
1590 if(!prs_uint32("enum_context", ps
, depth
, &r_q
->enum_context
))
1593 if (!lsa_io_sid_enum("sids", &r_q
->sids
, ps
, depth
))
1599 if(!prs_ntstatus("status", ps
, depth
, &r_q
->status
))
1606 /*******************************************************************
1607 Reads or writes an LSA_Q_UNK_GET_CONNUSER structure.
1608 ********************************************************************/
1610 BOOL
lsa_io_q_unk_get_connuser(const char *desc
, LSA_Q_UNK_GET_CONNUSER
*q_c
, prs_struct
*ps
, int depth
)
1612 prs_debug(ps
, depth
, desc
, "lsa_io_q_unk_get_connuser");
1618 if(!prs_uint32("ptr_srvname", ps
, depth
, &q_c
->ptr_srvname
))
1621 if(!smb_io_unistr2("uni2_srvname", &q_c
->uni2_srvname
, q_c
->ptr_srvname
, ps
, depth
)) /* server name to be looked up */
1627 if(!prs_uint32("unk1", ps
, depth
, &q_c
->unk1
))
1629 if(!prs_uint32("unk2", ps
, depth
, &q_c
->unk2
))
1631 if(!prs_uint32("unk3", ps
, depth
, &q_c
->unk3
))
1634 /* Don't bother to read or write at present... */
1638 /*******************************************************************
1639 Reads or writes an LSA_R_UNK_GET_CONNUSER structure.
1640 ********************************************************************/
1642 BOOL
lsa_io_r_unk_get_connuser(const char *desc
, LSA_R_UNK_GET_CONNUSER
*r_c
, prs_struct
*ps
, int depth
)
1644 prs_debug(ps
, depth
, desc
, "lsa_io_r_unk_get_connuser");
1650 if(!prs_uint32("ptr_user_name", ps
, depth
, &r_c
->ptr_user_name
))
1652 if(!smb_io_unihdr("hdr_user_name", &r_c
->hdr_user_name
, ps
, depth
))
1654 if(!smb_io_unistr2("uni2_user_name", &r_c
->uni2_user_name
, r_c
->ptr_user_name
, ps
, depth
))
1660 if(!prs_uint32("unk1", ps
, depth
, &r_c
->unk1
))
1663 if(!prs_uint32("ptr_dom_name", ps
, depth
, &r_c
->ptr_dom_name
))
1665 if(!smb_io_unihdr("hdr_dom_name", &r_c
->hdr_dom_name
, ps
, depth
))
1667 if(!smb_io_unistr2("uni2_dom_name", &r_c
->uni2_dom_name
, r_c
->ptr_dom_name
, ps
, depth
))
1673 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1679 void init_lsa_q_open_account(LSA_Q_OPENACCOUNT
*trn
, POLICY_HND
*hnd
, DOM_SID
*sid
, uint32 desired_access
)
1681 memcpy(&trn
->pol
, hnd
, sizeof(trn
->pol
));
1683 init_dom_sid2(&trn
->sid
, sid
);
1684 trn
->access
= desired_access
;
1687 /*******************************************************************
1688 Reads or writes an LSA_Q_OPENACCOUNT structure.
1689 ********************************************************************/
1691 BOOL
lsa_io_q_open_account(const char *desc
, LSA_Q_OPENACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1693 prs_debug(ps
, depth
, desc
, "lsa_io_q_open_account");
1699 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1702 if(!smb_io_dom_sid2("sid", &r_c
->sid
, ps
, depth
)) /* domain SID */
1705 if(!prs_uint32("access", ps
, depth
, &r_c
->access
))
1711 /*******************************************************************
1712 Reads or writes an LSA_R_OPENACCOUNT structure.
1713 ********************************************************************/
1715 BOOL
lsa_io_r_open_account(const char *desc
, LSA_R_OPENACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1717 prs_debug(ps
, depth
, desc
, "lsa_io_r_open_account");
1723 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1726 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1733 void init_lsa_q_enum_privsaccount(LSA_Q_ENUMPRIVSACCOUNT
*trn
, POLICY_HND
*hnd
)
1735 memcpy(&trn
->pol
, hnd
, sizeof(trn
->pol
));
1739 /*******************************************************************
1740 Reads or writes an LSA_Q_ENUMPRIVSACCOUNT structure.
1741 ********************************************************************/
1743 BOOL
lsa_io_q_enum_privsaccount(const char *desc
, LSA_Q_ENUMPRIVSACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1745 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_privsaccount");
1751 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1757 /*******************************************************************
1758 Reads or writes an LUID structure.
1759 ********************************************************************/
1761 static BOOL
lsa_io_luid(const char *desc
, LUID
*r_c
, prs_struct
*ps
, int depth
)
1763 prs_debug(ps
, depth
, desc
, "lsa_io_luid");
1769 if(!prs_uint32("low", ps
, depth
, &r_c
->low
))
1772 if(!prs_uint32("high", ps
, depth
, &r_c
->high
))
1778 /*******************************************************************
1779 Reads or writes an LUID_ATTR structure.
1780 ********************************************************************/
1782 static BOOL
lsa_io_luid_attr(const char *desc
, LUID_ATTR
*r_c
, prs_struct
*ps
, int depth
)
1784 prs_debug(ps
, depth
, desc
, "lsa_io_luid_attr");
1790 if (!lsa_io_luid(desc
, &r_c
->luid
, ps
, depth
))
1793 if(!prs_uint32("attr", ps
, depth
, &r_c
->attr
))
1799 /*******************************************************************
1800 Reads or writes an PRIVILEGE_SET structure.
1801 ********************************************************************/
1803 static BOOL
lsa_io_privilege_set(const char *desc
, PRIVILEGE_SET
*r_c
, prs_struct
*ps
, int depth
)
1807 prs_debug(ps
, depth
, desc
, "lsa_io_privilege_set");
1813 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
1815 if(!prs_uint32("control", ps
, depth
, &r_c
->control
))
1818 for (i
=0; i
<r_c
->count
; i
++) {
1819 if (!lsa_io_luid_attr(desc
, &r_c
->set
[i
], ps
, depth
))
1826 void init_lsa_r_enum_privsaccount(LSA_R_ENUMPRIVSACCOUNT
*r_u
, LUID_ATTR
*set
, uint32 count
, uint32 control
)
1831 r_u
->set
.count
=count
;
1832 r_u
->set
.control
=control
;
1833 DEBUG(10,("init_lsa_r_enum_privsaccount: %d %d privileges\n", r_u
->count
, r_u
->set
.count
));
1836 /*******************************************************************
1837 Reads or writes an LSA_R_ENUMPRIVSACCOUNT structure.
1838 ********************************************************************/
1840 BOOL
lsa_io_r_enum_privsaccount(const char *desc
, LSA_R_ENUMPRIVSACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1842 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_privsaccount");
1848 if(!prs_uint32("ptr", ps
, depth
, &r_c
->ptr
))
1852 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
1855 /* malloc memory if unmarshalling here */
1857 if (UNMARSHALLING(ps
) && r_c
->count
!=0) {
1858 if (!(r_c
->set
.set
= (LUID_ATTR
*)prs_alloc_mem(ps
,sizeof(LUID_ATTR
) * r_c
->count
)))
1863 if(!lsa_io_privilege_set(desc
, &r_c
->set
, ps
, depth
))
1867 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1875 /*******************************************************************
1876 Reads or writes an LSA_Q_GETSYSTEMACCOUNTstructure.
1877 ********************************************************************/
1879 BOOL
lsa_io_q_getsystemaccount(const char *desc
, LSA_Q_GETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1881 prs_debug(ps
, depth
, desc
, "lsa_io_q_getsystemaccount");
1887 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1893 /*******************************************************************
1894 Reads or writes an LSA_R_GETSYSTEMACCOUNTstructure.
1895 ********************************************************************/
1897 BOOL
lsa_io_r_getsystemaccount(const char *desc
, LSA_R_GETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1899 prs_debug(ps
, depth
, desc
, "lsa_io_r_getsystemaccount");
1905 if(!prs_uint32("access", ps
, depth
, &r_c
->access
))
1908 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1915 /*******************************************************************
1916 Reads or writes an LSA_Q_SETSYSTEMACCOUNT structure.
1917 ********************************************************************/
1919 BOOL
lsa_io_q_setsystemaccount(const char *desc
, LSA_Q_SETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1921 prs_debug(ps
, depth
, desc
, "lsa_io_q_setsystemaccount");
1927 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1930 if(!prs_uint32("access", ps
, depth
, &r_c
->access
))
1936 /*******************************************************************
1937 Reads or writes an LSA_R_SETSYSTEMACCOUNT structure.
1938 ********************************************************************/
1940 BOOL
lsa_io_r_setsystemaccount(const char *desc
, LSA_R_SETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1942 prs_debug(ps
, depth
, desc
, "lsa_io_r_setsystemaccount");
1948 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1955 void init_lsa_q_lookupprivvalue(LSA_Q_LOOKUPPRIVVALUE
*trn
, POLICY_HND
*hnd
, const char *name
)
1957 int len_name
= strlen(name
);
1958 memcpy(&trn
->pol
, hnd
, sizeof(trn
->pol
));
1963 init_uni_hdr(&trn
->hdr_right
, len_name
);
1964 init_unistr2(&trn
->uni2_right
, name
, len_name
);
1967 /*******************************************************************
1968 Reads or writes an LSA_Q_LOOKUPPRIVVALUE structure.
1969 ********************************************************************/
1971 BOOL
lsa_io_q_lookupprivvalue(const char *desc
, LSA_Q_LOOKUPPRIVVALUE
*r_c
, prs_struct
*ps
, int depth
)
1973 prs_debug(ps
, depth
, desc
, "lsa_io_q_lookupprivvalue");
1979 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1981 if(!smb_io_unihdr ("hdr_name", &r_c
->hdr_right
, ps
, depth
))
1983 if(!smb_io_unistr2("uni2_right", &r_c
->uni2_right
, r_c
->hdr_right
.buffer
, ps
, depth
))
1989 /*******************************************************************
1990 Reads or writes an LSA_R_LOOKUPPRIVVALUE structure.
1991 ********************************************************************/
1993 BOOL
lsa_io_r_lookupprivvalue(const char *desc
, LSA_R_LOOKUPPRIVVALUE
*r_c
, prs_struct
*ps
, int depth
)
1995 prs_debug(ps
, depth
, desc
, "lsa_io_r_lookupprivvalue");
2001 if(!lsa_io_luid("luid", &r_c
->luid
, ps
, depth
))
2004 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2011 /*******************************************************************
2012 Reads or writes an LSA_Q_ADDPRIVS structure.
2013 ********************************************************************/
2015 BOOL
lsa_io_q_addprivs(const char *desc
, LSA_Q_ADDPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2017 prs_debug(ps
, depth
, desc
, "lsa_io_q_addprivs");
2023 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
2026 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
2029 if (UNMARSHALLING(ps
) && r_c
->count
!=0) {
2030 if (!(r_c
->set
.set
= (LUID_ATTR
*)prs_alloc_mem(ps
,sizeof(LUID_ATTR
) * r_c
->count
)))
2034 if(!lsa_io_privilege_set(desc
, &r_c
->set
, ps
, depth
))
2040 /*******************************************************************
2041 Reads or writes an LSA_R_ADDPRIVS structure.
2042 ********************************************************************/
2044 BOOL
lsa_io_r_addprivs(const char *desc
, LSA_R_ADDPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2046 prs_debug(ps
, depth
, desc
, "lsa_io_r_addprivs");
2052 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2058 /*******************************************************************
2059 Reads or writes an LSA_Q_REMOVEPRIVS structure.
2060 ********************************************************************/
2062 BOOL
lsa_io_q_removeprivs(const char *desc
, LSA_Q_REMOVEPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2064 prs_debug(ps
, depth
, desc
, "lsa_io_q_removeprivs");
2070 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
2073 if(!prs_uint32("allrights", ps
, depth
, &r_c
->allrights
))
2076 if(!prs_uint32("ptr", ps
, depth
, &r_c
->ptr
))
2080 * JFM: I'm not sure at all if the count is inside the ptr
2081 * never seen one with ptr=0
2085 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
2088 if (UNMARSHALLING(ps
) && r_c
->count
!=0) {
2089 if (!(r_c
->set
.set
= (LUID_ATTR
*)prs_alloc_mem(ps
,sizeof(LUID_ATTR
) * r_c
->count
)))
2093 if(!lsa_io_privilege_set(desc
, &r_c
->set
, ps
, depth
))
2100 /*******************************************************************
2101 Reads or writes an LSA_R_REMOVEPRIVS structure.
2102 ********************************************************************/
2104 BOOL
lsa_io_r_removeprivs(const char *desc
, LSA_R_REMOVEPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2106 prs_debug(ps
, depth
, desc
, "lsa_io_r_removeprivs");
2112 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2118 BOOL
policy_handle_is_valid(const POLICY_HND
*hnd
)
2120 POLICY_HND zero_pol
;
2122 ZERO_STRUCT(zero_pol
);
2123 return ((memcmp(&zero_pol
, hnd
, sizeof(POLICY_HND
)) == 0) ? False
: True
);
2126 /*******************************************************************
2127 Reads or writes an LSA_DNS_DOM_INFO structure.
2128 ********************************************************************/
2130 BOOL
lsa_io_dns_dom_info(const char *desc
, LSA_DNS_DOM_INFO
*info
,
2131 prs_struct
*ps
, int depth
)
2133 prs_debug(ps
, depth
, desc
, "lsa_io_dns_dom_info");
2138 if(!smb_io_unihdr("nb_name", &info
->hdr_nb_dom_name
, ps
, depth
))
2140 if(!smb_io_unihdr("dns_name", &info
->hdr_dns_dom_name
, ps
, depth
))
2142 if(!smb_io_unihdr("forest", &info
->hdr_forest_name
, ps
, depth
))
2147 if (!prs_uint8s(False
, "dom_guid", ps
, depth
, info
->dom_guid
.info
, GUID_SIZE
))
2152 if(!prs_uint32("dom_sid", ps
, depth
, &info
->ptr_dom_sid
))
2155 if(!smb_io_unistr2("nb_name", &info
->uni_nb_dom_name
,
2156 info
->hdr_nb_dom_name
.buffer
, ps
, depth
))
2158 if(!smb_io_unistr2("dns_name", &info
->uni_dns_dom_name
,
2159 info
->hdr_dns_dom_name
.buffer
, ps
, depth
))
2161 if(!smb_io_unistr2("forest", &info
->uni_forest_name
,
2162 info
->hdr_forest_name
.buffer
, ps
, depth
))
2165 if(!smb_io_dom_sid2("dom_sid", &info
->dom_sid
, ps
, depth
))
2172 /*******************************************************************
2173 Inits an LSA_Q_QUERY_INFO2 structure.
2174 ********************************************************************/
2176 void init_q_query2(LSA_Q_QUERY_INFO2
*q_q
, POLICY_HND
*hnd
, uint16 info_class
)
2178 DEBUG(5, ("init_q_query2\n"));
2180 memcpy(&q_q
->pol
, hnd
, sizeof(q_q
->pol
));
2182 q_q
->info_class
= info_class
;
2185 /*******************************************************************
2186 Reads or writes an LSA_Q_QUERY_DNSDOMINFO structure.
2187 ********************************************************************/
2189 BOOL
lsa_io_q_query_info2(const char *desc
, LSA_Q_QUERY_INFO2
*q_c
,
2190 prs_struct
*ps
, int depth
)
2192 prs_debug(ps
, depth
, desc
, "lsa_io_q_query_info2");
2198 if(!smb_io_pol_hnd("pol", &q_c
->pol
, ps
, depth
))
2201 if(!prs_uint16("info_class", ps
, depth
, &q_c
->info_class
))
2207 /*******************************************************************
2208 Reads or writes an LSA_R_QUERY_DNSDOMINFO structure.
2209 ********************************************************************/
2211 BOOL
lsa_io_r_query_info2(const char *desc
, LSA_R_QUERY_INFO2
*r_c
,
2212 prs_struct
*ps
, int depth
)
2214 prs_debug(ps
, depth
, desc
, "lsa_io_r_query_info2");
2220 if(!prs_uint32("ptr", ps
, depth
, &r_c
->ptr
))
2222 if(!prs_uint16("info_class", ps
, depth
, &r_c
->info_class
))
2224 switch(r_c
->info_class
) {
2226 if (!lsa_io_dns_dom_info("info12", &r_c
->info
.dns_dom_info
,
2231 DEBUG(0,("lsa_io_r_query_info2: unknown info class %d\n",
2238 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2245 /*******************************************************************
2246 Inits an LSA_Q_ENUM_ACCT_RIGHTS structure.
2247 ********************************************************************/
2248 void init_q_enum_acct_rights(LSA_Q_ENUM_ACCT_RIGHTS
*q_q
,
2253 DEBUG(5, ("init_q_enum_acct_rights\n"));
2256 init_dom_sid2(&q_q
->sid
, sid
);
2259 /*******************************************************************
2260 reads or writes a LSA_Q_ENUM_ACCT_RIGHTS structure.
2261 ********************************************************************/
2262 BOOL
lsa_io_q_enum_acct_rights(const char *desc
, LSA_Q_ENUM_ACCT_RIGHTS
*q_q
, prs_struct
*ps
, int depth
)
2268 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_acct_rights");
2271 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
2274 if(!smb_io_dom_sid2("sid", &q_q
->sid
, ps
, depth
))
2281 /*******************************************************************
2282 reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
2283 ********************************************************************/
2284 BOOL
lsa_io_r_enum_acct_rights(const char *desc
, LSA_R_ENUM_ACCT_RIGHTS
*r_c
, prs_struct
*ps
, int depth
)
2286 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_acct_rights");
2289 if(!prs_uint32("count ", ps
, depth
, &r_c
->count
))
2292 if(!smb_io_unistr2_array("rights", &r_c
->rights
, ps
, depth
))
2298 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2304 /*******************************************************************
2305 Inits an LSA_R_ENUM_ACCT_RIGHTS structure.
2306 ********************************************************************/
2307 void init_r_enum_acct_rights(LSA_R_ENUM_ACCT_RIGHTS
*q_r
,
2309 const char **rights
)
2311 DEBUG(5, ("init_r_enum_acct_rights\n"));
2314 init_unistr2_array(&q_r
->rights
, count
, rights
);
2318 /*******************************************************************
2319 Inits an LSA_Q_ADD_ACCT_RIGHTS structure.
2320 ********************************************************************/
2321 void init_q_add_acct_rights(LSA_Q_ADD_ACCT_RIGHTS
*q_q
,
2325 const char **rights
)
2327 DEBUG(5, ("init_q_add_acct_rights\n"));
2330 init_dom_sid2(&q_q
->sid
, sid
);
2331 init_unistr2_array(&q_q
->rights
, count
, rights
);
2335 /*******************************************************************
2336 reads or writes a LSA_Q_ADD_ACCT_RIGHTS structure.
2337 ********************************************************************/
2338 BOOL
lsa_io_q_add_acct_rights(const char *desc
, LSA_Q_ADD_ACCT_RIGHTS
*q_q
, prs_struct
*ps
, int depth
)
2340 prs_debug(ps
, depth
, desc
, "lsa_io_q_add_acct_rights");
2343 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
2346 if(!smb_io_dom_sid2("sid", &q_q
->sid
, ps
, depth
))
2349 if(!prs_uint32("count", ps
, depth
, &q_q
->rights
.count
))
2352 if(!smb_io_unistr2_array("rights", &q_q
->rights
, ps
, depth
))
2358 /*******************************************************************
2359 reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
2360 ********************************************************************/
2361 BOOL
lsa_io_r_add_acct_rights(const char *desc
, LSA_R_ADD_ACCT_RIGHTS
*r_c
, prs_struct
*ps
, int depth
)
2363 prs_debug(ps
, depth
, desc
, "lsa_io_r_add_acct_rights");
2366 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2372 /*******************************************************************
2373 Inits an LSA_R_ADD_ACCT_RIGHTS structure.
2374 ********************************************************************/
2375 void init_r_add_acct_rights(LSA_R_ADD_ACCT_RIGHTS
*q_r
)
2377 DEBUG(5, ("init_r_add_acct_rights\n"));
2378 /* oh what a silly function! */
2382 /*******************************************************************
2383 Inits an LSA_Q_REMOVE_ACCT_RIGHTS structure.
2384 ********************************************************************/
2385 void init_q_remove_acct_rights(LSA_Q_REMOVE_ACCT_RIGHTS
*q_q
,
2390 const char **rights
)
2392 DEBUG(5, ("init_q_remove_acct_rights\n"));
2395 init_dom_sid2(&q_q
->sid
, sid
);
2396 q_q
->removeall
= removeall
;
2397 init_unistr2_array(&q_q
->rights
, count
, rights
);
2401 /*******************************************************************
2402 reads or writes a LSA_Q_REMOVE_ACCT_RIGHTS structure.
2403 ********************************************************************/
2404 BOOL
lsa_io_q_remove_acct_rights(const char *desc
, LSA_Q_REMOVE_ACCT_RIGHTS
*q_q
, prs_struct
*ps
, int depth
)
2406 prs_debug(ps
, depth
, desc
, "lsa_io_q_remove_acct_rights");
2409 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
2412 if(!smb_io_dom_sid2("sid", &q_q
->sid
, ps
, depth
))
2415 if(!prs_uint32("removeall", ps
, depth
, &q_q
->removeall
))
2418 if(!prs_uint32("count", ps
, depth
, &q_q
->rights
.count
))
2421 if(!smb_io_unistr2_array("rights", &q_q
->rights
, ps
, depth
))
2427 /*******************************************************************
2428 reads or writes a LSA_R_REMOVE_ACCT_RIGHTS structure.
2429 ********************************************************************/
2430 BOOL
lsa_io_r_remove_acct_rights(const char *desc
, LSA_R_REMOVE_ACCT_RIGHTS
*r_c
, prs_struct
*ps
, int depth
)
2432 prs_debug(ps
, depth
, desc
, "lsa_io_r_remove_acct_rights");
2435 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2441 /*******************************************************************
2442 Inits an LSA_R_REMOVE_ACCT_RIGHTS structure.
2443 ********************************************************************/
2444 void init_r_remove_acct_rights(LSA_R_REMOVE_ACCT_RIGHTS
*q_r
)
2446 DEBUG(5, ("init_r_remove_acct_rights\n"));
2449 /*******************************************************************
2450 Inits an LSA_Q_ENUM_ACCT_WITH_RIGHT structure.
2451 ********************************************************************/
2452 void init_q_enum_acct_with_right(LSA_Q_ENUM_ACCT_WITH_RIGHT
*q_q
,
2456 DEBUG(5, ("init_q_enum_acct_with_right\n"));
2459 init_unistr2(&q_q
->right
, right
, strlen(right
));
2460 init_str_hdr(&q_q
->right_hdr
,
2461 q_q
->right
.uni_max_len
*2,
2462 q_q
->right
.uni_max_len
*2, right
?1:0);
2466 /*******************************************************************
2467 reads or writes a LSA_Q_ENUM_ACCT_WITH_RIGHT structure.
2468 ********************************************************************/
2469 BOOL
lsa_io_q_enum_acct_with_right(const char *desc
, LSA_Q_ENUM_ACCT_WITH_RIGHT
*q_q
, prs_struct
*ps
, int depth
)
2471 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_acct_with_right");
2474 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
2477 if (!prs_uint32("ref_id ", ps
, depth
, &q_q
->right_hdr
.buffer
))
2480 if (UNMARSHALLING(ps
) && q_q
->right_hdr
.buffer
== 0) {
2484 if (!smb_io_strhdr("", &q_q
->right_hdr
, ps
, depth
))
2487 if (!smb_io_unistr2("", &q_q
->right
, q_q
->right_hdr
.buffer
, ps
, depth
))
2494 /*******************************************************************
2495 reads or writes a LSA_R_ENUM_ACCT_WITH_RIGHT structure.
2496 ********************************************************************/
2497 BOOL
lsa_io_r_enum_acct_with_right(const char *desc
, LSA_R_ENUM_ACCT_WITH_RIGHT
*r_c
, prs_struct
*ps
, int depth
)
2499 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_acct_with_right");
2502 if (!prs_uint32("count ", ps
, depth
, &r_c
->count
))
2505 if (!smb_io_sid_array("sids ", &r_c
->sids
, ps
, depth
))
2508 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2514 /*******************************************************************
2515 Inits an LSA_R_ENUM_ACCT_WITH_RIGHT structure.
2516 ********************************************************************/
2517 void init_r_enum_acct_with_right(LSA_R_ENUM_ACCT_WITH_RIGHT
*r_c
,
2521 DEBUG(5, ("init_r_enum_acct_with_right\n"));
2524 init_sid_array(&r_c
->sids
, count
, sids
);