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(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
, 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(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(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(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(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(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(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
, 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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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
, 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(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(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
))
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(char *desc
, LSA_Q_ENUM_ACCOUNTS
*q_q
, prs_struct
*ps
, int depth
)
1538 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_accounts");
1541 if (!smb_io_pol_hnd("", &q_q
->pol
, ps
, depth
))
1544 if(!prs_uint32("enum_context ", ps
, depth
, &q_q
->enum_context
))
1546 if(!prs_uint32("pref_max_length", ps
, depth
, &q_q
->pref_max_length
))
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
;
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(char *desc
, LSA_R_ENUM_ACCOUNTS
*r_q
, prs_struct
*ps
, int depth
)
1580 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_accounts");
1586 if(!prs_uint32("enum_context", ps
, depth
, &r_q
->enum_context
))
1589 if (!lsa_io_sid_enum("sids", &r_q
->sids
, ps
, depth
))
1595 if(!prs_ntstatus("status", ps
, depth
, &r_q
->status
))
1602 /*******************************************************************
1603 Reads or writes an LSA_Q_UNK_GET_CONNUSER structure.
1604 ********************************************************************/
1606 BOOL
lsa_io_q_unk_get_connuser(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");
1614 if(!prs_uint32("ptr_srvname", ps
, depth
, &q_c
->ptr_srvname
))
1617 if(!smb_io_unistr2("uni2_srvname", &q_c
->uni2_srvname
, q_c
->ptr_srvname
, ps
, depth
)) /* server name to be looked up */
1623 if(!prs_uint32("unk1", ps
, depth
, &q_c
->unk1
))
1625 if(!prs_uint32("unk2", ps
, depth
, &q_c
->unk2
))
1627 if(!prs_uint32("unk3", ps
, depth
, &q_c
->unk3
))
1630 /* Don't bother to read or write at present... */
1634 /*******************************************************************
1635 Reads or writes an LSA_R_UNK_GET_CONNUSER structure.
1636 ********************************************************************/
1638 BOOL
lsa_io_r_unk_get_connuser(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");
1646 if(!prs_uint32("ptr_user_name", ps
, depth
, &r_c
->ptr_user_name
))
1648 if(!smb_io_unihdr("hdr_user_name", &r_c
->hdr_user_name
, ps
, depth
))
1650 if(!smb_io_unistr2("uni2_user_name", &r_c
->uni2_user_name
, r_c
->ptr_user_name
, ps
, depth
))
1656 if(!prs_uint32("unk1", ps
, depth
, &r_c
->unk1
))
1659 if(!prs_uint32("ptr_dom_name", ps
, depth
, &r_c
->ptr_dom_name
))
1661 if(!smb_io_unihdr("hdr_dom_name", &r_c
->hdr_dom_name
, ps
, depth
))
1663 if(!smb_io_unistr2("uni2_dom_name", &r_c
->uni2_dom_name
, r_c
->ptr_dom_name
, ps
, depth
))
1669 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
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(char *desc
, LSA_Q_OPENACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1689 prs_debug(ps
, depth
, desc
, "lsa_io_q_open_account");
1695 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1698 if(!smb_io_dom_sid2("sid", &r_c
->sid
, ps
, depth
)) /* domain SID */
1701 if(!prs_uint32("access", ps
, depth
, &r_c
->access
))
1707 /*******************************************************************
1708 Reads or writes an LSA_R_OPENACCOUNT structure.
1709 ********************************************************************/
1711 BOOL
lsa_io_r_open_account(char *desc
, LSA_R_OPENACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1713 prs_debug(ps
, depth
, desc
, "lsa_io_r_open_account");
1719 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1722 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
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(char *desc
, LSA_Q_ENUMPRIVSACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1741 prs_debug(ps
, depth
, desc
, "lsa_io_q_enum_privsaccount");
1747 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1753 /*******************************************************************
1754 Reads or writes an LUID structure.
1755 ********************************************************************/
1757 static BOOL
lsa_io_luid(char *desc
, LUID
*r_c
, prs_struct
*ps
, int depth
)
1759 prs_debug(ps
, depth
, desc
, "lsa_io_luid");
1765 if(!prs_uint32("low", ps
, depth
, &r_c
->low
))
1768 if(!prs_uint32("high", ps
, depth
, &r_c
->high
))
1774 /*******************************************************************
1775 Reads or writes an LUID_ATTR structure.
1776 ********************************************************************/
1778 static BOOL
lsa_io_luid_attr(char *desc
, LUID_ATTR
*r_c
, prs_struct
*ps
, int depth
)
1780 prs_debug(ps
, depth
, desc
, "lsa_io_luid_attr");
1786 if (!lsa_io_luid(desc
, &r_c
->luid
, ps
, depth
))
1789 if(!prs_uint32("attr", ps
, depth
, &r_c
->attr
))
1795 /*******************************************************************
1796 Reads or writes an PRIVILEGE_SET structure.
1797 ********************************************************************/
1799 static BOOL
lsa_io_privilege_set(char *desc
, PRIVILEGE_SET
*r_c
, prs_struct
*ps
, int depth
)
1803 prs_debug(ps
, depth
, desc
, "lsa_io_privilege_set");
1809 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
1811 if(!prs_uint32("control", ps
, depth
, &r_c
->control
))
1814 for (i
=0; i
<r_c
->count
; i
++) {
1815 if (!lsa_io_luid_attr(desc
, &r_c
->set
[i
], ps
, depth
))
1822 void init_lsa_r_enum_privsaccount(LSA_R_ENUMPRIVSACCOUNT
*r_u
, LUID_ATTR
*set
, uint32 count
, uint32 control
)
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(char *desc
, LSA_R_ENUMPRIVSACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1838 prs_debug(ps
, depth
, desc
, "lsa_io_r_enum_privsaccount");
1844 if(!prs_uint32("ptr", ps
, depth
, &r_c
->ptr
))
1848 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
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
)))
1859 if(!lsa_io_privilege_set(desc
, &r_c
->set
, ps
, depth
))
1863 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1871 /*******************************************************************
1872 Reads or writes an LSA_Q_GETSYSTEMACCOUNTstructure.
1873 ********************************************************************/
1875 BOOL
lsa_io_q_getsystemaccount(char *desc
, LSA_Q_GETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1877 prs_debug(ps
, depth
, desc
, "lsa_io_q_getsystemaccount");
1883 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1889 /*******************************************************************
1890 Reads or writes an LSA_R_GETSYSTEMACCOUNTstructure.
1891 ********************************************************************/
1893 BOOL
lsa_io_r_getsystemaccount(char *desc
, LSA_R_GETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1895 prs_debug(ps
, depth
, desc
, "lsa_io_r_getsystemaccount");
1901 if(!prs_uint32("access", ps
, depth
, &r_c
->access
))
1904 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1911 /*******************************************************************
1912 Reads or writes an LSA_Q_SETSYSTEMACCOUNT structure.
1913 ********************************************************************/
1915 BOOL
lsa_io_q_setsystemaccount(char *desc
, LSA_Q_SETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1917 prs_debug(ps
, depth
, desc
, "lsa_io_q_setsystemaccount");
1923 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1926 if(!prs_uint32("access", ps
, depth
, &r_c
->access
))
1932 /*******************************************************************
1933 Reads or writes an LSA_R_SETSYSTEMACCOUNT structure.
1934 ********************************************************************/
1936 BOOL
lsa_io_r_setsystemaccount(char *desc
, LSA_R_SETSYSTEMACCOUNT
*r_c
, prs_struct
*ps
, int depth
)
1938 prs_debug(ps
, depth
, desc
, "lsa_io_r_setsystemaccount");
1944 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
1951 void init_lsa_q_lookupprivvalue(LSA_Q_LOOKUPPRIVVALUE
*trn
, POLICY_HND
*hnd
, char *name
)
1953 int len_name
= strlen(name
);
1954 memcpy(&trn
->pol
, hnd
, sizeof(trn
->pol
));
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(char *desc
, LSA_Q_LOOKUPPRIVVALUE
*r_c
, prs_struct
*ps
, int depth
)
1969 prs_debug(ps
, depth
, desc
, "lsa_io_q_lookupprivvalue");
1975 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
1977 if(!smb_io_unihdr ("hdr_name", &r_c
->hdr_right
, ps
, depth
))
1979 if(!smb_io_unistr2("uni2_right", &r_c
->uni2_right
, r_c
->hdr_right
.buffer
, ps
, depth
))
1985 /*******************************************************************
1986 Reads or writes an LSA_R_LOOKUPPRIVVALUE structure.
1987 ********************************************************************/
1989 BOOL
lsa_io_r_lookupprivvalue(char *desc
, LSA_R_LOOKUPPRIVVALUE
*r_c
, prs_struct
*ps
, int depth
)
1991 prs_debug(ps
, depth
, desc
, "lsa_io_r_lookupprivvalue");
1997 if(!lsa_io_luid("luid", &r_c
->luid
, ps
, depth
))
2000 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2007 /*******************************************************************
2008 Reads or writes an LSA_Q_ADDPRIVS structure.
2009 ********************************************************************/
2011 BOOL
lsa_io_q_addprivs(char *desc
, LSA_Q_ADDPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2013 prs_debug(ps
, depth
, desc
, "lsa_io_q_addprivs");
2019 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
2022 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
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
)))
2030 if(!lsa_io_privilege_set(desc
, &r_c
->set
, ps
, depth
))
2036 /*******************************************************************
2037 Reads or writes an LSA_R_ADDPRIVS structure.
2038 ********************************************************************/
2040 BOOL
lsa_io_r_addprivs(char *desc
, LSA_R_ADDPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2042 prs_debug(ps
, depth
, desc
, "lsa_io_r_addprivs");
2048 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
2054 /*******************************************************************
2055 Reads or writes an LSA_Q_REMOVEPRIVS structure.
2056 ********************************************************************/
2058 BOOL
lsa_io_q_removeprivs(char *desc
, LSA_Q_REMOVEPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2060 prs_debug(ps
, depth
, desc
, "lsa_io_q_removeprivs");
2066 if(!smb_io_pol_hnd("pol", &r_c
->pol
, ps
, depth
))
2069 if(!prs_uint32("allrights", ps
, depth
, &r_c
->allrights
))
2072 if(!prs_uint32("ptr", ps
, depth
, &r_c
->ptr
))
2076 * JFM: I'm not sure at all if the count is inside the ptr
2077 * never seen one with ptr=0
2081 if(!prs_uint32("count", ps
, depth
, &r_c
->count
))
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
)))
2089 if(!lsa_io_privilege_set(desc
, &r_c
->set
, ps
, depth
))
2096 /*******************************************************************
2097 Reads or writes an LSA_R_REMOVEPRIVS structure.
2098 ********************************************************************/
2100 BOOL
lsa_io_r_removeprivs(char *desc
, LSA_R_REMOVEPRIVS
*r_c
, prs_struct
*ps
, int depth
)
2102 prs_debug(ps
, depth
, desc
, "lsa_io_r_removeprivs");
2108 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))
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(char *desc
, LSA_DNS_DOM_INFO
*info
,
2127 prs_struct
*ps
, int depth
)
2129 prs_debug(ps
, depth
, desc
, "lsa_io_dns_dom_info");
2134 if(!smb_io_unihdr("nb_name", &info
->hdr_nb_dom_name
, ps
, depth
))
2136 if(!smb_io_unihdr("dns_name", &info
->hdr_dns_dom_name
, ps
, depth
))
2138 if(!smb_io_unihdr("forest", &info
->hdr_forest_name
, ps
, depth
))
2143 if (!prs_uint8s(False
, "dom_guid", ps
, depth
, info
->dom_guid
.info
, GUID_SIZE
))
2148 if(!prs_uint32("dom_sid", ps
, depth
, &info
->ptr_dom_sid
))
2151 if(!smb_io_unistr2("nb_name", &info
->uni_nb_dom_name
,
2152 info
->hdr_nb_dom_name
.buffer
, ps
, depth
))
2154 if(!smb_io_unistr2("dns_name", &info
->uni_dns_dom_name
,
2155 info
->hdr_dns_dom_name
.buffer
, ps
, depth
))
2157 if(!smb_io_unistr2("forest", &info
->uni_forest_name
,
2158 info
->hdr_forest_name
.buffer
, ps
, depth
))
2161 if(!smb_io_dom_sid2("dom_sid", &info
->dom_sid
, ps
, depth
))
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(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");
2194 if(!smb_io_pol_hnd("pol", &q_c
->pol
, ps
, depth
))
2197 if(!prs_uint16("info_class", ps
, depth
, &q_c
->info_class
))
2203 /*******************************************************************
2204 Reads or writes an LSA_R_QUERY_DNSDOMINFO structure.
2205 ********************************************************************/
2207 BOOL
lsa_io_r_query_info2(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");
2216 if(!prs_uint32("ptr", ps
, depth
, &r_c
->ptr
))
2218 if(!prs_uint16("info_class", ps
, depth
, &r_c
->info_class
))
2220 switch(r_c
->info_class
) {
2222 if (!lsa_io_dns_dom_info("info12", &r_c
->info
.dns_dom_info
,
2227 DEBUG(0,("lsa_io_r_query_info2: unknown info class %d\n",
2234 if(!prs_ntstatus("status", ps
, depth
, &r_c
->status
))