1998-03-12 00:11:04 +03:00
/*
* Unix SMB / Netbios implementation .
* Version 1.9 .
* RPC Pipe client / server routines
1999-12-13 16:27:58 +03:00
* Copyright ( C ) Andrew Tridgell 1992 - 1997 ,
* Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1997 ,
* Copyright ( C ) Paul Ashton 1997.
1998-03-12 00:11:04 +03:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
1999-12-13 16:27:58 +03:00
static BOOL lsa_io_trans_names ( char * desc , LSA_TRANS_NAME_ENUM * trn , prs_struct * ps , int depth ) ;
1998-03-12 00:11:04 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits a LSA_TRANS_NAME structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
void init_lsa_trans_name ( LSA_TRANS_NAME * trn , UNISTR2 * uni_name ,
2001-01-12 01:54:12 +03:00
uint16 sid_name_use , char * name , uint32 idx )
1998-03-12 00:11:04 +03:00
{
2001-01-15 21:36:50 +03:00
int len_name = strlen ( name ) ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( len_name = = 0 )
len_name = 1 ;
1998-03-12 00:11:04 +03:00
trn - > sid_name_use = sid_name_use ;
1999-12-13 16:27:58 +03:00
init_uni_hdr ( & trn - > hdr_name , len_name ) ;
init_unistr2 ( uni_name , name , len_name ) ;
1998-03-12 00:11:04 +03:00
trn - > domain_idx = idx ;
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes a LSA_TRANS_NAME structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
static BOOL lsa_io_trans_name ( char * desc , LSA_TRANS_NAME * trn , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_trans_name " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-12 00:11:04 +03:00
2000-09-21 02:07:56 +04:00
if ( ! prs_uint16 ( " sid_name_use " , ps , depth , & trn - > sid_name_use ) )
1999-12-13 16:27:58 +03:00
return False ;
2000-09-21 02:07:56 +04:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_unihdr ( " hdr_name " , & trn - > hdr_name , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " domain_idx " , ps , depth , & trn - > domain_idx ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes a DOM_R_REF structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
static BOOL lsa_io_dom_r_ref ( char * desc , DOM_R_REF * r_r , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
2000-09-21 02:07:56 +04:00
int i ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
prs_debug ( ps , depth , desc , " lsa_io_dom_r_ref " ) ;
1998-03-12 00:11:04 +03:00
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_ref_doms_1 " , ps , depth , & r_r - > num_ref_doms_1 ) ) /* num referenced domains? */
return False ;
if ( ! prs_uint32 ( " ptr_ref_dom " , ps , depth , & r_r - > ptr_ref_dom ) ) /* undocumented buffer pointer. */
return False ;
if ( ! prs_uint32 ( " max_entries " , ps , depth , & r_r - > max_entries ) ) /* 32 - max number of entries */
return False ;
1998-03-12 00:11:04 +03:00
- lib/unix_sec_ctxt.c
attempt at taking lib/uid.c and getting a unix security context
change module that is independent of "cnums" and "snums".
a security context is needed for pipes, not just IPC$ or other
services.
- group database API
added add_group/alias_member, del_group/alias_member,
del_group/alias_entry functions. del_builtin_entry() is
deliberately set to NULL to cause an exception, you cannot
delete builtin aliases.
- parse_lsa.c srv_lsa.c
fixed lookup_names code, it was a load of trash and didn't do
anything.
- cmd_samr.c rpcclient.c srv_samr.c
added "deletegroup", "deletealias", "delaliasmem", "delgroupmem",
"addgroupmem", "addaliasmem", "createalias", "creategroup", to
both client and server code.
server code calls into unix stubs right now, which don't actually
do anything. the only instance where they are expected to do
anything is in appliance mode NOT even in the ldap code or anything.
client code modified to call samr_lookup_names() for group code
(because we can) and lsa_lookup_names() for alias code (because
we have to).
- srv_lookup.c
oops, lookup on unsplit name, we got lookup on DOMAIN, DOMAIN\name
instead of DOMAIN, name.
(This used to be commit b8175702ef61b8b37b078f38e81452c00a5e2986)
1998-12-07 20:23:48 +03:00
SMB_ASSERT_ARRAY ( r_r - > hdr_ref_dom , r_r - > num_ref_doms_1 ) ;
1998-08-22 06:54:21 +04:00
1999-12-13 16:27:58 +03:00
if ( r_r - > ptr_ref_dom ! = 0 ) {
2000-09-21 02:07:56 +04:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_ref_doms_2 " , ps , depth , & r_r - > num_ref_doms_2 ) ) /* 4 - num referenced domains? */
return False ;
1998-12-20 03:37:24 +03:00
SMB_ASSERT_ARRAY ( r_r - > ref_dom , r_r - > num_ref_doms_2 ) ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < r_r - > num_ref_doms_1 ; i + + ) {
1998-12-20 03:37:24 +03:00
fstring t ;
1998-09-30 23:09:57 +04:00
slprintf ( t , sizeof ( t ) - 1 , " dom_ref[%d] " , i ) ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_unihdr ( t , & r_r - > hdr_ref_dom [ i ] . hdr_dom_name , ps , depth ) )
return False ;
1998-12-20 03:37:24 +03:00
slprintf ( t , sizeof ( t ) - 1 , " sid_ptr[%d] " , i ) ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( t , ps , depth , & r_r - > hdr_ref_dom [ i ] . ptr_dom_sid ) )
return False ;
1998-09-30 23:09:57 +04:00
}
2000-09-21 02:07:56 +04:00
for ( i = 0 ; i < r_r - > num_ref_doms_2 ; i + + ) {
1998-12-20 03:37:24 +03:00
fstring t ;
1999-12-13 16:27:58 +03:00
if ( r_r - > hdr_ref_dom [ i ] . hdr_dom_name . buffer ! = 0 ) {
1998-12-20 03:37:24 +03:00
slprintf ( t , sizeof ( t ) - 1 , " dom_ref[%d] " , i ) ;
2000-09-21 02:07:56 +04:00
if ( ! smb_io_unistr2 ( t , & r_r - > ref_dom [ i ] . uni_dom_name , True , ps , depth ) ) /* domain name unicode string */
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-12-20 03:37:24 +03:00
}
1999-12-13 16:27:58 +03:00
if ( r_r - > hdr_ref_dom [ i ] . ptr_dom_sid ! = 0 ) {
1998-12-20 03:37:24 +03:00
slprintf ( t , sizeof ( t ) - 1 , " sid_ptr[%d] " , i ) ;
2000-09-21 02:07:56 +04:00
if ( ! smb_io_dom_sid2 ( t , & r_r - > ref_dom [ i ] . ref_dom , ps , depth ) ) /* referenced domain SIDs */
1999-12-13 16:27:58 +03:00
return False ;
1998-12-20 03:37:24 +03:00
}
1998-09-30 23:09:57 +04:00
}
}
1999-10-15 22:46:22 +04:00
return True ;
1998-09-30 23:09:57 +04:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_SEC_QOS structure .
1998-09-30 23:09:57 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-12-18 02:03:23 +03:00
void init_lsa_sec_qos ( LSA_SEC_QOS * qos , uint16 imp_lev , uint8 ctxt , uint8 eff )
1998-09-30 23:09:57 +04:00
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_lsa_sec_qos \n " ) ) ;
1998-09-30 23:09:57 +04:00
qos - > len = 0x0c ; /* length of quality of service block, in bytes */
qos - > sec_imp_level = imp_lev ;
qos - > sec_ctxt_mode = ctxt ;
qos - > effective_only = eff ;
}
1998-08-22 06:54:21 +04:00
1998-09-30 23:09:57 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_SEC_QOS structure .
1998-09-30 23:09:57 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
static BOOL lsa_io_sec_qos ( char * desc , LSA_SEC_QOS * qos , prs_struct * ps ,
int depth )
1998-09-30 23:09:57 +04:00
{
1999-12-13 16:27:58 +03:00
uint32 start ;
1998-09-30 23:09:57 +04:00
prs_debug ( ps , depth , desc , " lsa_io_obj_qos " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
start = prs_offset ( ps ) ;
1998-09-30 23:09:57 +04:00
/* these pointers had _better_ be zero, because we don't know
what they point to !
*/
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " len " , ps , depth , & qos - > len ) ) /* 0x18 - length (in bytes) inc. the length field. */
return False ;
if ( ! prs_uint16 ( " sec_imp_level " , ps , depth , & qos - > sec_imp_level ) )
return False ;
if ( ! prs_uint8 ( " sec_ctxt_mode " , ps , depth , & qos - > sec_ctxt_mode ) )
return False ;
if ( ! prs_uint8 ( " effective_only " , ps , depth , & qos - > effective_only ) )
return False ;
if ( qos - > len ! = prs_offset ( ps ) - start ) {
1998-09-30 23:09:57 +04:00
DEBUG ( 3 , ( " lsa_io_sec_qos: length %x does not match size %x \n " ,
1999-12-13 16:27:58 +03:00
qos - > len , prs_offset ( ps ) - start ) ) ;
1998-03-12 00:11:04 +03:00
}
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
1998-09-26 01:01:52 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_OBJ_ATTR structure .
1998-09-26 01:01:52 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
void init_lsa_obj_attr ( LSA_OBJ_ATTR * attr , uint32 attributes , LSA_SEC_QOS * qos )
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_lsa_obj_attr \n " ) ) ;
1998-09-26 01:01:52 +04:00
attr - > len = 0x18 ; /* length of object attribute block, in bytes */
attr - > ptr_root_dir = 0 ;
attr - > ptr_obj_name = 0 ;
attr - > attributes = attributes ;
attr - > ptr_sec_desc = 0 ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
if ( qos ! = NULL ) {
1998-09-30 23:09:57 +04:00
attr - > ptr_sec_qos = 1 ;
attr - > sec_qos = qos ;
1999-12-13 16:27:58 +03:00
} else {
1998-09-30 23:09:57 +04:00
attr - > ptr_sec_qos = 0 ;
attr - > sec_qos = NULL ;
}
1998-09-26 01:01:52 +04:00
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_OBJ_ATTR structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
static BOOL lsa_io_obj_attr ( char * desc , LSA_OBJ_ATTR * attr , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
1999-12-13 16:27:58 +03:00
uint32 start ;
1998-03-12 00:11:04 +03:00
prs_debug ( ps , depth , desc , " lsa_io_obj_attr " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
start = prs_offset ( ps ) ;
1998-03-12 00:11:04 +03:00
/* these pointers had _better_ be zero, because we don't know
what they point to !
*/
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " len " , ps , depth , & attr - > len ) ) /* 0x18 - length (in bytes) inc. the length field. */
return False ;
if ( ! prs_uint32 ( " ptr_root_dir " , ps , depth , & attr - > ptr_root_dir ) ) /* 0 - root directory (pointer) */
return False ;
if ( ! prs_uint32 ( " ptr_obj_name " , ps , depth , & attr - > ptr_obj_name ) ) /* 0 - object name (pointer) */
return False ;
if ( ! prs_uint32 ( " attributes " , ps , depth , & attr - > attributes ) ) /* 0 - attributes (undocumented) */
return False ;
if ( ! prs_uint32 ( " ptr_sec_desc " , ps , depth , & attr - > ptr_sec_desc ) ) /* 0 - security descriptior (pointer) */
return False ;
if ( ! prs_uint32 ( " ptr_sec_qos " , ps , depth , & attr - > ptr_sec_qos ) ) /* security quality of service (pointer) */
return False ;
2001-11-22 19:12:43 +03:00
/* code commented out as it's not necessary true (tested with hyena). JFM, 11/22/2001 */
#if 0
1999-12-13 16:27:58 +03:00
if ( attr - > len ! = prs_offset ( ps ) - start ) {
1998-08-14 21:38:29 +04:00
DEBUG ( 3 , ( " lsa_io_obj_attr: length %x does not match size %x \n " ,
1999-12-13 16:27:58 +03:00
attr - > len , prs_offset ( ps ) - start ) ) ;
2000-09-21 02:07:56 +04:00
return False ;
1998-03-12 00:11:04 +03:00
}
2001-11-22 19:12:43 +03:00
# endif
1998-09-30 23:09:57 +04:00
2001-12-18 02:03:23 +03:00
if ( attr - > ptr_sec_qos ! = 0 ) {
if ( UNMARSHALLING ( ps ) )
if ( ! ( attr - > sec_qos = ( LSA_SEC_QOS * ) prs_alloc_mem ( ps , sizeof ( LSA_SEC_QOS ) ) ) )
return False ;
1999-12-13 16:27:58 +03:00
if ( ! lsa_io_sec_qos ( " sec_qos " , attr - > sec_qos , ps , depth ) )
return False ;
1998-09-30 23:09:57 +04:00
}
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
1998-10-15 09:47:29 +04:00
1998-09-26 01:01:52 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_Q_OPEN_POL structure .
1998-09-26 01:01:52 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
void init_q_open_pol ( LSA_Q_OPEN_POL * r_q , uint16 system_name ,
2001-01-12 01:54:12 +03:00
uint32 attributes , uint32 desired_access ,
LSA_SEC_QOS * qos )
1998-09-26 01:01:52 +04:00
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_open_pol: attr:%d da:%d \n " , attributes ,
desired_access ) ) ;
1998-09-26 01:01:52 +04:00
r_q - > ptr = 1 ; /* undocumented pointer */
2001-12-18 02:03:23 +03:00
r_q - > des_access = desired_access ;
1998-09-26 01:01:52 +04:00
1998-10-15 09:47:29 +04:00
r_q - > system_name = system_name ;
1999-12-13 16:27:58 +03:00
init_lsa_obj_attr ( & r_q - > attr , attributes , qos ) ;
1998-09-26 01:01:52 +04:00
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_Q_OPEN_POL structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_open_pol ( char * desc , LSA_Q_OPEN_POL * r_q , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_pol " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & r_q - > ptr ) )
return False ;
if ( ! prs_uint16 ( " system_name " , ps , depth , & r_q - > system_name ) )
return False ;
2000-12-12 05:45:11 +03:00
if ( ! prs_align ( ps ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! lsa_io_obj_attr ( " " , & r_q - > attr , ps , depth ) )
return False ;
1998-03-12 00:11:04 +03:00
2001-12-18 02:03:23 +03:00
if ( ! prs_uint32 ( " des_access " , ps , depth , & r_q - > des_access ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_R_OPEN_POL structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_open_pol ( char * desc , LSA_R_OPEN_POL * r_p , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_pol " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_pol_hnd ( " " , & r_p - > pol , ps , depth ) )
return False ;
1998-10-15 09:47:29 +04:00
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_p - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-10-15 09:47:29 +04:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_Q_OPEN_POL2 structure .
1998-10-15 09:47:29 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
void init_q_open_pol2 ( LSA_Q_OPEN_POL2 * r_q , char * server_name ,
2001-01-12 01:54:12 +03:00
uint32 attributes , uint32 desired_access ,
1998-10-15 09:47:29 +04:00
LSA_SEC_QOS * qos )
{
2000-12-12 05:45:11 +03:00
DEBUG ( 5 , ( " init_q_open_pol2: attr:%d da:%d \n " , attributes ,
2000-12-08 06:34:00 +03:00
desired_access ) ) ;
1998-10-15 09:47:29 +04:00
r_q - > ptr = 1 ; /* undocumented pointer */
2001-12-18 02:03:23 +03:00
r_q - > des_access = desired_access ;
1998-10-15 09:47:29 +04:00
2001-01-12 01:54:12 +03:00
init_unistr2 ( & r_q - > uni_server_name , server_name ,
strlen ( server_name ) + 1 ) ;
1999-12-13 16:27:58 +03:00
init_lsa_obj_attr ( & r_q - > attr , attributes , qos ) ;
1998-10-15 09:47:29 +04:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_Q_OPEN_POL2 structure .
1998-10-15 09:47:29 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_open_pol2 ( char * desc , LSA_Q_OPEN_POL2 * r_q , prs_struct * ps ,
int depth )
1998-10-15 09:47:29 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_pol2 " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & r_q - > ptr ) )
return False ;
1998-10-15 09:47:29 +04:00
1999-12-13 16:27:58 +03:00
if ( ! smb_io_unistr2 ( " " , & r_q - > uni_server_name , r_q - > ptr , ps , depth ) )
return False ;
if ( ! lsa_io_obj_attr ( " " , & r_q - > attr , ps , depth ) )
return False ;
1998-10-15 09:47:29 +04:00
2001-12-18 02:03:23 +03:00
if ( ! prs_uint32 ( " des_access " , ps , depth , & r_q - > des_access ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-10-15 09:47:29 +04:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_R_OPEN_POL2 structure .
1998-10-15 09:47:29 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_open_pol2 ( char * desc , LSA_R_OPEN_POL2 * r_p , prs_struct * ps ,
int depth )
1998-10-15 09:47:29 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_pol2 " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_pol_hnd ( " " , & r_p - > pol , ps , depth ) )
return False ;
1998-03-12 00:11:04 +03:00
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_p - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
2000-09-21 02:07:56 +04:00
/*******************************************************************
makes an LSA_Q_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-12 01:54:12 +03:00
void init_q_query_sec_obj ( LSA_Q_QUERY_SEC_OBJ * q_q , const POLICY_HND * hnd ,
uint32 sec_info )
2000-09-21 02:07:56 +04:00
{
DEBUG ( 5 , ( " init_q_query_sec_obj \n " ) ) ;
q_q - > pol = * hnd ;
q_q - > sec_info = sec_info ;
return ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_query_sec_obj ( char * desc , LSA_Q_QUERY_SEC_OBJ * q_q ,
prs_struct * ps , int depth )
2000-09-21 02:07:56 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_sec_obj " ) ;
depth + + ;
if ( ! smb_io_pol_hnd ( " " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " sec_info " , ps , depth , & q_q - > sec_info ) )
return False ;
2001-01-12 01:54:12 +03:00
return True ;
2000-09-21 02:07:56 +04:00
}
/*******************************************************************
Reads or writes a LSA_R_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_query_sec_obj ( char * desc , LSA_R_QUERY_SEC_OBJ * r_u ,
prs_struct * ps , int depth )
2000-09-21 02:07:56 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_query_sec_obj " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr " , ps , depth , & r_u - > ptr ) )
return False ;
if ( r_u - > ptr ! = 0 ) {
if ( ! sec_io_desc_buf ( " sec " , & r_u - > buf , ps , depth ) )
return False ;
2001-01-12 01:54:12 +03:00
}
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_u - > status ) )
2000-09-21 02:07:56 +04:00
return False ;
2001-01-12 01:54:12 +03:00
return True ;
2000-09-21 02:07:56 +04:00
}
1998-09-26 01:01:52 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_Q_QUERY_INFO structure .
1998-09-26 01:01:52 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
void init_q_query ( LSA_Q_QUERY_INFO * q_q , POLICY_HND * hnd , uint16 info_class )
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_q_query \n " ) ) ;
1998-09-26 01:01:52 +04:00
1999-12-13 16:27:58 +03:00
memcpy ( & q_q - > pol , hnd , sizeof ( q_q - > pol ) ) ;
1998-09-26 01:01:52 +04:00
q_q - > info_class = info_class ;
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_Q_QUERY_INFO structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-03-18 08:16:59 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_query ( char * desc , LSA_Q_QUERY_INFO * q_q , prs_struct * ps ,
int depth )
1999-03-18 08:16:59 +03:00
{
1999-12-13 16:27:58 +03:00
prs_debug ( ps , depth , desc , " lsa_io_q_query " ) ;
1999-03-18 08:16:59 +03:00
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_pol_hnd ( " " , & q_q - > pol , ps , depth ) )
return False ;
1999-03-18 08:16:59 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & q_q - > info_class ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1999-03-18 08:16:59 +03:00
}
2001-01-12 01:54:12 +03:00
/*******************************************************************
makes an LSA_Q_ENUM_TRUST_DOM structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL init_q_enum_trust_dom ( LSA_Q_ENUM_TRUST_DOM * q_e , POLICY_HND * pol ,
uint32 enum_context , uint32 preferred_len )
{
DEBUG ( 5 , ( " init_q_enum_trust_dom \n " ) ) ;
q_e - > pol = * pol ;
q_e - > enum_context = enum_context ;
q_e - > preferred_len = preferred_len ;
return True ;
}
1999-11-02 01:25:38 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_Q_ENUM_TRUST_DOM structure .
1999-11-02 01:25:38 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_enum_trust_dom ( char * desc , LSA_Q_ENUM_TRUST_DOM * q_e ,
prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_enum_trust_dom " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_pol_hnd ( " " , & q_e - > pol , ps , depth ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & q_e - > enum_context ) )
return False ;
if ( ! prs_uint32 ( " preferred_len " , ps , depth , & q_e - > preferred_len ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
2001-01-12 02:49:51 +03:00
/*******************************************************************
Inits an LSA_R_ENUM_TRUST_DOM structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-08-24 11:32:51 +04:00
void init_r_enum_trust_dom ( TALLOC_CTX * ctx , LSA_R_ENUM_TRUST_DOM * r_e , uint32 enum_context ,
2001-01-12 02:49:51 +03:00
char * domain_name , DOM_SID * domain_sid ,
2001-08-27 23:46:22 +04:00
NTSTATUS status )
2001-01-12 02:49:51 +03:00
{
DEBUG ( 5 , ( " init_r_enum_trust_dom \n " ) ) ;
r_e - > enum_context = enum_context ;
2001-09-04 11:13:01 +04:00
if ( NT_STATUS_IS_OK ( status ) ) {
2001-01-12 02:49:51 +03:00
int len_domain_name = strlen ( domain_name ) + 1 ;
r_e - > num_domains = 1 ;
r_e - > ptr_enum_domains = 1 ;
r_e - > num_domains2 = 1 ;
2001-08-24 11:32:51 +04:00
if ( ! ( r_e - > hdr_domain_name = ( UNIHDR2 * ) talloc ( ctx , sizeof ( UNIHDR2 ) ) ) )
return ;
2001-01-12 02:49:51 +03:00
2001-08-24 11:32:51 +04:00
if ( ! ( r_e - > uni_domain_name = ( UNISTR2 * ) talloc ( ctx , sizeof ( UNISTR2 ) ) ) )
return ;
2001-01-12 02:49:51 +03:00
2001-08-24 11:32:51 +04:00
if ( ! ( r_e - > domain_sid = ( DOM_SID2 * ) talloc ( ctx , sizeof ( DOM_SID2 ) ) ) )
return ;
2001-01-12 02:49:51 +03:00
init_uni_hdr2 ( & r_e - > hdr_domain_name [ 0 ] , len_domain_name ) ;
init_unistr2 ( & r_e - > uni_domain_name [ 0 ] , domain_name ,
len_domain_name ) ;
init_dom_sid2 ( & r_e - > domain_sid [ 0 ] , domain_sid ) ;
} else {
r_e - > num_domains = 0 ;
r_e - > ptr_enum_domains = 0 ;
}
r_e - > status = status ;
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_R_ENUM_TRUST_DOM structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_enum_trust_dom ( char * desc , LSA_R_ENUM_TRUST_DOM * r_e ,
prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_trust_dom " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & r_e - > enum_context ) )
return False ;
if ( ! prs_uint32 ( " num_domains " , ps , depth , & r_e - > num_domains ) )
return False ;
if ( ! prs_uint32 ( " ptr_enum_domains " , ps , depth , & r_e - > ptr_enum_domains ) )
return False ;
1999-11-02 01:25:38 +03:00
2001-01-12 01:54:12 +03:00
if ( r_e - > ptr_enum_domains ) {
int i , num_domains ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_domains2 " , ps , depth , & r_e - > num_domains2 ) )
return False ;
2001-01-12 01:54:12 +03:00
num_domains = r_e - > num_domains2 ;
2001-03-11 03:32:10 +03:00
if ( UNMARSHALLING ( ps ) ) {
if ( ! ( r_e - > hdr_domain_name = ( UNIHDR2 * ) prs_alloc_mem ( ps , sizeof ( UNIHDR2 ) * num_domains ) ) )
return False ;
2001-01-12 01:54:12 +03:00
2001-03-11 03:32:10 +03:00
if ( ! ( r_e - > uni_domain_name = ( UNISTR2 * ) prs_alloc_mem ( ps , sizeof ( UNISTR2 ) * num_domains ) ) )
return False ;
2001-01-12 01:54:12 +03:00
2001-03-11 03:32:10 +03:00
if ( ! ( r_e - > domain_sid = ( DOM_SID2 * ) prs_alloc_mem ( ps , sizeof ( DOM_SID2 ) * num_domains ) ) )
return False ;
}
2001-01-12 01:54:12 +03:00
for ( i = 0 ; i < num_domains ; i + + ) {
if ( ! smb_io_unihdr2 ( " " , & r_e - > hdr_domain_name [ i ] , ps ,
depth ) )
return False ;
}
for ( i = 0 ; i < num_domains ; i + + ) {
if ( ! smb_io_unistr2 ( " " , & r_e - > uni_domain_name [ i ] ,
r_e - > hdr_domain_name [ i ] . buffer ,
ps , depth ) )
return False ;
if ( ! smb_io_dom_sid2 ( " " , & r_e - > domain_sid [ i ] , ps ,
depth ) )
return False ;
}
1998-03-12 00:11:04 +03:00
}
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_e - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
2001-01-25 05:35:50 +03:00
/*******************************************************************
reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query ( char * desc , DOM_QUERY * d_q , prs_struct * ps , int depth )
{
if ( d_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_dom_query " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint16 ( " uni_dom_max_len " , ps , depth , & d_q - > uni_dom_max_len ) ) /* domain name string length * 2 */
return False ;
if ( ! prs_uint16 ( " uni_dom_str_len " , ps , depth , & d_q - > uni_dom_str_len ) ) /* domain name string length * 2 */
return False ;
if ( ! prs_uint32 ( " buffer_dom_name " , ps , depth , & d_q - > buffer_dom_name ) ) /* undocumented domain name string buffer pointer */
return False ;
if ( ! prs_uint32 ( " buffer_dom_sid " , ps , depth , & d_q - > buffer_dom_sid ) ) /* undocumented domain SID string buffer pointer */
return False ;
if ( ! smb_io_unistr2 ( " unistr2 " , & d_q - > uni_domain_name , d_q - > buffer_dom_name , ps , depth ) ) /* domain name (unicode string) */
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( d_q - > buffer_dom_sid ! = 0 ) {
if ( ! smb_io_dom_sid2 ( " " , & d_q - > dom_sid , ps , depth ) ) /* domain SID */
return False ;
} else {
memset ( ( char * ) & d_q - > dom_sid , ' \0 ' , sizeof ( d_q - > dom_sid ) ) ;
}
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_2 ( char * desc , DOM_QUERY_2 * d_q , prs_struct * ps , int depth )
{
uint32 ptr = 1 ;
if ( d_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_dom_query_2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " auditing_enabled " , ps , depth , & d_q - > auditing_enabled ) )
return False ;
if ( ! prs_uint32 ( " ptr " , ps , depth , & ptr ) )
return False ;
if ( ! prs_uint32 ( " count1 " , ps , depth , & d_q - > count1 ) )
return False ;
if ( ! prs_uint32 ( " count2 " , ps , depth , & d_q - > count2 ) )
return False ;
if ( UNMARSHALLING ( ps ) ) {
2001-02-27 22:22:02 +03:00
d_q - > auditsettings = ( uint32 * ) talloc_zero ( ps - > mem_ctx , d_q - > count2 * sizeof ( uint32 ) ) ;
2001-01-25 05:35:50 +03:00
}
if ( d_q - > auditsettings = = NULL ) {
DEBUG ( 1 , ( " lsa_io_dom_query_2: NULL auditsettings! \n " ) ) ;
return False ;
}
if ( ! prs_uint32s ( False , " auditsettings " , ps , depth , d_q - > auditsettings , d_q - > count2 ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_3 ( char * desc , DOM_QUERY_3 * d_q , prs_struct * ps , int depth )
{
return lsa_io_dom_query ( " " , d_q , ps , depth ) ;
}
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_dom_query_5 ( char * desc , DOM_QUERY_5 * d_q , prs_struct * ps , int depth )
{
return lsa_io_dom_query ( " " , d_q , ps , depth ) ;
}
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_6 ( char * desc , DOM_QUERY_6 * d_q , prs_struct * ps , int depth )
{
if ( d_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_dom_query_6 " ) ;
depth + + ;
if ( ! prs_uint16 ( " server_role " , ps , depth , & d_q - > server_role ) )
return False ;
return True ;
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
2001-05-08 08:00:01 +04:00
Reads or writes an LSA_R_QUERY_INFO structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_query ( char * desc , LSA_R_QUERY_INFO * r_q , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_query " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " undoc_buffer " , ps , depth , & r_q - > undoc_buffer ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( r_q - > undoc_buffer ! = 0 ) {
if ( ! prs_uint16 ( " info_class " , ps , depth , & r_q - > info_class ) )
return False ;
1998-03-12 00:11:04 +03:00
2001-01-25 05:35:50 +03:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 16:27:58 +03:00
switch ( r_q - > info_class ) {
2001-01-25 05:35:50 +03:00
case 2 :
if ( ! lsa_io_dom_query_2 ( " " , & r_q - > dom . id2 , ps , depth ) )
return False ;
break ;
1999-12-13 16:27:58 +03:00
case 3 :
2001-01-25 05:35:50 +03:00
if ( ! lsa_io_dom_query_3 ( " " , & r_q - > dom . id3 , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
break ;
case 5 :
2001-01-25 05:35:50 +03:00
if ( ! lsa_io_dom_query_5 ( " " , & r_q - > dom . id5 , ps , depth ) )
return False ;
break ;
case 6 :
if ( ! lsa_io_dom_query_6 ( " " , & r_q - > dom . id6 , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
break ;
default :
/* PANIC! */
break ;
1998-03-12 00:11:04 +03:00
}
}
2001-01-25 05:35:50 +03:00
if ( ! prs_align ( ps ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_q - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
1998-09-30 23:09:57 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits a LSA_SID_ENUM structure .
1998-09-30 23:09:57 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2000-12-12 05:45:11 +03:00
void init_lsa_sid_enum ( TALLOC_CTX * mem_ctx , LSA_SID_ENUM * sen ,
2000-12-13 14:53:37 +03:00
int num_entries , DOM_SID * sids )
1998-09-30 23:09:57 +04:00
{
2000-12-13 14:53:37 +03:00
int i ;
1998-09-30 23:09:57 +04:00
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_lsa_sid_enum \n " ) ) ;
1998-09-30 23:09:57 +04:00
sen - > num_entries = num_entries ;
2000-12-12 05:45:11 +03:00
sen - > ptr_sid_enum = ( num_entries ! = 0 ) ;
1998-09-30 23:09:57 +04:00
sen - > num_entries2 = num_entries ;
2000-12-12 05:45:11 +03:00
/* Allocate memory for sids and sid pointers */
if ( num_entries = = 0 ) return ;
2001-02-27 22:22:02 +03:00
if ( ( sen - > ptr_sid = ( uint32 * ) talloc_zero ( mem_ctx , num_entries *
2000-12-12 05:45:11 +03:00
sizeof ( uint32 ) ) ) = = NULL ) {
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for ptr_sid \n " ) ) ;
return ;
}
2001-02-27 22:22:02 +03:00
if ( ( sen - > sid = ( DOM_SID2 * ) talloc_zero ( mem_ctx , num_entries *
2000-12-12 05:45:11 +03:00
sizeof ( DOM_SID2 ) ) ) = = NULL ) {
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for sids \n " ) ) ;
return ;
}
/* Copy across SIDs and SID pointers */
1998-09-30 23:09:57 +04:00
2000-12-13 14:53:37 +03:00
for ( i = 0 ; i < num_entries ; i + + ) {
sen - > ptr_sid [ i ] = 1 ;
init_dom_sid2 ( & sen - > sid [ i ] , & sids [ i ] ) ;
1998-09-30 23:09:57 +04:00
}
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes a LSA_SID_ENUM structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
static BOOL lsa_io_sid_enum ( char * desc , LSA_SID_ENUM * sen , prs_struct * ps ,
int depth )
1998-03-12 00:11:04 +03:00
{
1999-12-13 16:27:58 +03:00
int i ;
1998-03-12 00:11:04 +03:00
prs_debug ( ps , depth , desc , " lsa_io_sid_enum " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_entries " , ps , depth , & sen - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_sid_enum " , ps , depth , & sen - > ptr_sid_enum ) )
return False ;
2001-11-23 18:11:22 +03:00
/*
if the ptr is NULL , leave here . checked from a real w2k trace .
JFM , 11 / 23 / 2001
*/
if ( sen - > ptr_sid_enum = = 0 )
return True ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & sen - > num_entries2 ) )
return False ;
1998-03-12 00:11:04 +03:00
2000-12-12 05:45:11 +03:00
/* Mallocate memory if we're unpacking from the wire */
if ( UNMARSHALLING ( ps ) ) {
2000-12-15 04:02:11 +03:00
if ( ( sen - > ptr_sid = ( uint32 * ) prs_alloc_mem ( ps ,
2000-12-12 05:45:11 +03:00
sen - > num_entries * sizeof ( uint32 ) ) ) = = NULL ) {
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for "
" ptr_sid \n " ) ) ;
return False ;
}
2000-12-15 04:02:11 +03:00
if ( ( sen - > sid = ( DOM_SID2 * ) prs_alloc_mem ( ps ,
2000-12-12 05:45:11 +03:00
sen - > num_entries * sizeof ( DOM_SID2 ) ) ) = = NULL ) {
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for "
" sids \n " ) ) ;
return False ;
}
}
1998-08-22 06:54:21 +04:00
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < sen - > num_entries ; i + + ) {
1998-03-12 00:11:04 +03:00
fstring temp ;
2000-12-12 05:45:11 +03:00
1998-05-12 04:55:32 +04:00
slprintf ( temp , sizeof ( temp ) - 1 , " ptr_sid[%d] " , i ) ;
2000-12-12 05:45:11 +03:00
if ( ! prs_uint32 ( temp , ps , depth , & sen - > ptr_sid [ i ] ) ) {
1999-12-13 16:27:58 +03:00
return False ;
2000-12-12 05:45:11 +03:00
}
1998-03-12 00:11:04 +03:00
}
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < sen - > num_entries ; i + + ) {
1998-03-12 00:11:04 +03:00
fstring temp ;
2000-12-12 05:45:11 +03:00
1998-05-12 04:55:32 +04:00
slprintf ( temp , sizeof ( temp ) - 1 , " sid[%d] " , i ) ;
2000-12-12 05:45:11 +03:00
if ( ! smb_io_dom_sid2 ( temp , & sen - > sid [ i ] , ps , depth ) ) {
1999-12-13 16:27:58 +03:00
return False ;
2000-12-12 05:45:11 +03:00
}
1998-03-12 00:11:04 +03:00
}
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
1998-12-02 01:18:48 +03:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_R_ENUM_TRUST_DOM structure .
1998-12-02 01:18:48 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2000-12-12 05:45:11 +03:00
void init_q_lookup_sids ( TALLOC_CTX * mem_ctx , LSA_Q_LOOKUP_SIDS * q_l ,
2000-12-13 14:53:37 +03:00
POLICY_HND * hnd , int num_sids , DOM_SID * sids ,
2000-12-12 05:45:11 +03:00
uint16 level )
1998-12-02 01:18:48 +03:00
{
2000-12-12 05:45:11 +03:00
DEBUG ( 5 , ( " init_r_enum_trust_dom \n " ) ) ;
1998-12-02 01:18:48 +03:00
2000-12-12 05:45:11 +03:00
ZERO_STRUCTP ( q_l ) ;
1998-12-02 01:18:48 +03:00
2000-12-12 05:45:11 +03:00
memcpy ( & q_l - > pol , hnd , sizeof ( q_l - > pol ) ) ;
init_lsa_sid_enum ( mem_ctx , & q_l - > sids , num_sids , sids ) ;
1999-12-13 16:27:58 +03:00
q_l - > level . value = level ;
}
1998-12-02 01:18:48 +03:00
1999-12-13 16:27:58 +03:00
/*******************************************************************
Reads or writes a LSA_Q_LOOKUP_SIDS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1998-12-02 01:18:48 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_lookup_sids ( char * desc , LSA_Q_LOOKUP_SIDS * q_s , prs_struct * ps ,
int depth )
1999-12-13 16:27:58 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_sids " ) ;
depth + + ;
1998-12-02 01:18:48 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol_hnd " , & q_s - > pol , ps , depth ) ) /* policy handle */
return False ;
if ( ! lsa_io_sid_enum ( " sids " , & q_s - > sids , ps , depth ) ) /* sids to be looked up */
return False ;
if ( ! lsa_io_trans_names ( " names " , & q_s - > names , ps , depth ) ) /* translated names */
return False ;
if ( ! smb_io_lookup_level ( " switch " , & q_s - > level , ps , depth ) ) /* lookup level */
return False ;
1998-12-02 01:18:48 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_s - > mapped_count ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-12-02 01:18:48 +03:00
}
1998-09-30 23:09:57 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes a structure .
1998-09-30 23:09:57 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
static BOOL lsa_io_trans_names ( char * desc , LSA_TRANS_NAME_ENUM * trn ,
prs_struct * ps , int depth )
1998-09-30 23:09:57 +04:00
{
1999-12-13 16:27:58 +03:00
int i ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
prs_debug ( ps , depth , desc , " lsa_io_trans_names " ) ;
depth + + ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " num_entries " , ps , depth , & trn - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_trans_names " , ps , depth , & trn - > ptr_trans_names ) )
return False ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
if ( trn - > ptr_trans_names ! = 0 ) {
2000-12-12 05:45:11 +03:00
if ( ! prs_uint32 ( " num_entries2 " , ps , depth ,
& trn - > num_entries2 ) )
1999-12-13 16:27:58 +03:00
return False ;
2000-12-12 05:45:11 +03:00
if ( UNMARSHALLING ( ps ) ) {
if ( ( trn - > name = ( LSA_TRANS_NAME * )
2000-12-15 04:02:11 +03:00
prs_alloc_mem ( ps , trn - > num_entries *
2000-12-12 05:45:11 +03:00
sizeof ( LSA_TRANS_NAME ) ) ) = = NULL ) {
return False ;
}
if ( ( trn - > uni_name = ( UNISTR2 * )
2000-12-15 04:02:11 +03:00
prs_alloc_mem ( ps , trn - > num_entries *
2000-12-12 05:45:11 +03:00
sizeof ( UNISTR2 ) ) ) = = NULL ) {
return False ;
}
}
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < trn - > num_entries2 ; i + + ) {
fstring t ;
slprintf ( t , sizeof ( t ) - 1 , " name[%d] " , i ) ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! lsa_io_trans_name ( t , & trn - > name [ i ] , ps , depth ) ) /* translated name */
return False ;
}
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < trn - > num_entries2 ; i + + ) {
fstring t ;
slprintf ( t , sizeof ( t ) - 1 , " name[%d] " , i ) ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! smb_io_unistr2 ( t , & trn - > uni_name [ i ] , trn - > name [ i ] . hdr_name . buffer , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
}
}
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes a structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_lookup_sids ( char * desc , LSA_R_LOOKUP_SIDS * r_s ,
prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_sids " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & r_s - > ptr_dom_ref ) )
return False ;
1999-03-25 00:09:34 +03:00
if ( r_s - > ptr_dom_ref ! = 0 )
1999-12-13 16:27:58 +03:00
if ( ! lsa_io_dom_r_ref ( " dom_ref " , r_s - > dom_ref , ps , depth ) ) /* domain reference info */
return False ;
if ( ! lsa_io_trans_names ( " names " , r_s - > names , ps , depth ) ) /* translated names */
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
1998-09-30 23:09:57 +04:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & r_s - > mapped_count ) )
return False ;
1998-03-12 00:11:04 +03:00
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_s - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
1998-11-25 22:57:04 +03:00
/*******************************************************************
makes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2000-12-13 14:53:37 +03:00
void init_q_lookup_names ( TALLOC_CTX * mem_ctx , LSA_Q_LOOKUP_NAMES * q_l ,
2002-01-26 14:48:42 +03:00
POLICY_HND * hnd , int num_names , const char * * names )
1998-11-25 22:57:04 +03:00
{
1999-12-13 16:27:58 +03:00
int i ;
1998-11-25 22:57:04 +03:00
2000-12-12 05:45:11 +03:00
DEBUG ( 5 , ( " init_q_lookup_names \n " ) ) ;
2000-12-13 14:53:37 +03:00
ZERO_STRUCTP ( q_l ) ;
1998-11-25 22:57:04 +03:00
2000-12-13 14:53:37 +03:00
q_l - > pol = * hnd ;
1999-12-13 16:27:58 +03:00
q_l - > num_entries = num_names ;
q_l - > num_entries2 = num_names ;
2000-12-13 14:53:37 +03:00
q_l - > lookup_level = 1 ;
1998-11-25 22:57:04 +03:00
2001-02-27 22:22:02 +03:00
if ( ( q_l - > uni_name = ( UNISTR2 * ) talloc_zero (
2000-12-13 14:53:37 +03:00
mem_ctx , num_names * sizeof ( UNISTR2 ) ) ) = = NULL ) {
DEBUG ( 3 , ( " init_q_lookup_names(): out of memory \n " ) ) ;
return ;
}
2001-02-27 22:22:02 +03:00
if ( ( q_l - > hdr_name = ( UNIHDR * ) talloc_zero (
2000-12-13 14:53:37 +03:00
mem_ctx , num_names * sizeof ( UNIHDR ) ) ) = = NULL ) {
DEBUG ( 3 , ( " init_q_lookup_names(): out of memory \n " ) ) ;
return ;
}
1998-12-05 00:48:06 +03:00
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < num_names ; i + + ) {
2002-01-20 04:24:59 +03:00
int len ;
2002-01-26 14:48:42 +03:00
len = strlen ( names [ i ] ) ;
2000-12-13 14:53:37 +03:00
1999-12-13 16:27:58 +03:00
init_uni_hdr ( & q_l - > hdr_name [ i ] , len ) ;
2002-01-26 14:48:42 +03:00
init_unistr2 ( & q_l - > uni_name [ i ] , names [ i ] , len ) ;
1998-11-25 22:57:04 +03:00
}
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_q_lookup_names ( char * desc , LSA_Q_LOOKUP_NAMES * q_r ,
prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
1999-12-13 16:27:58 +03:00
int i ;
1998-03-12 00:11:04 +03:00
1998-11-25 22:57:04 +03:00
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_names " ) ;
1998-03-12 00:11:04 +03:00
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & q_r - > pol , ps , depth ) ) /* policy handle */
return False ;
1998-03-12 00:11:04 +03:00
2000-12-15 04:02:11 +03:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_entries " , ps , depth , & q_r - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & q_r - > num_entries2 ) )
return False ;
1998-03-12 00:11:04 +03:00
2000-12-15 04:02:11 +03:00
if ( UNMARSHALLING ( ps ) ) {
if ( q_r - > num_entries ) {
if ( ( q_r - > hdr_name = ( UNIHDR * ) prs_alloc_mem ( ps ,
q_r - > num_entries * sizeof ( UNIHDR ) ) ) = = NULL )
return False ;
if ( ( q_r - > uni_name = ( UNISTR2 * ) prs_alloc_mem ( ps ,
q_r - > num_entries * sizeof ( UNISTR2 ) ) ) = = NULL )
return False ;
}
}
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
2000-12-15 04:02:11 +03:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_unihdr ( " hdr_name " , & q_r - > hdr_name [ i ] , ps , depth ) ) /* pointer names */
return False ;
1998-03-12 00:11:04 +03:00
}
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
2000-12-15 04:02:11 +03:00
if ( ! smb_io_unistr2 ( " dom_name " , & q_r - > uni_name [ i ] , q_r - > hdr_name [ i ] . buffer , ps , depth ) ) /* names to be looked up */
return False ;
1998-11-25 22:57:04 +03:00
}
2000-12-15 04:02:11 +03:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_trans_entries " , ps , depth , & q_r - > num_trans_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_trans_sids " , ps , depth , & q_r - > ptr_trans_sids ) )
return False ;
if ( ! prs_uint32 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_r - > mapped_count ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2001-01-12 01:54:12 +03:00
BOOL lsa_io_r_lookup_names ( char * desc , LSA_R_LOOKUP_NAMES * r_r ,
prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
1999-12-13 16:27:58 +03:00
int i ;
1998-03-12 00:11:04 +03:00
1998-11-25 22:57:04 +03:00
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_names " ) ;
1998-03-12 00:11:04 +03:00
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & r_r - > ptr_dom_ref ) )
return False ;
1999-03-24 15:18:28 +03:00
if ( r_r - > ptr_dom_ref ! = 0 )
1999-12-13 16:27:58 +03:00
if ( ! lsa_io_dom_r_ref ( " " , r_r - > dom_ref , ps , depth ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " num_entries " , ps , depth , & r_r - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_entries " , ps , depth , & r_r - > ptr_entries ) )
return False ;
1998-03-12 00:11:04 +03:00
1999-12-13 16:27:58 +03:00
if ( r_r - > ptr_entries ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & r_r - > num_entries2 ) )
return False ;
1999-03-24 15:18:28 +03:00
1999-12-13 16:27:58 +03:00
if ( r_r - > num_entries2 ! = r_r - > num_entries ) {
1999-03-24 15:18:28 +03:00
/* RPC fault */
1999-10-15 22:46:22 +04:00
return False ;
1999-03-24 15:18:28 +03:00
}
2000-12-15 04:02:11 +03:00
if ( UNMARSHALLING ( ps ) ) {
if ( ( r_r - > dom_rid = ( DOM_RID2 * ) prs_alloc_mem ( ps , r_r - > num_entries2 * sizeof ( DOM_RID2 ) ) )
= = NULL ) {
DEBUG ( 3 , ( " lsa_io_r_lookup_names(): out of memory \n " ) ) ;
return False ;
}
2000-12-13 14:53:37 +03:00
}
1999-03-24 15:18:28 +03:00
for ( i = 0 ; i < r_r - > num_entries2 ; i + + )
1999-12-13 16:27:58 +03:00
if ( ! smb_io_dom_rid2 ( " " , & r_r - > dom_rid [ i ] , ps , depth ) ) /* domain RIDs being looked up */
return False ;
1998-03-12 00:11:04 +03:00
}
1999-12-13 16:27:58 +03:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & r_r - > mapped_count ) )
return False ;
1998-03-12 00:11:04 +03:00
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_r - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-03-12 00:11:04 +03:00
}
1998-09-26 01:01:52 +04:00
/*******************************************************************
1999-12-13 16:27:58 +03:00
Inits an LSA_Q_CLOSE structure .
1998-09-26 01:01:52 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
void init_lsa_q_close ( LSA_Q_CLOSE * q_c , POLICY_HND * hnd )
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_lsa_q_close \n " ) ) ;
1998-09-26 01:01:52 +04:00
1999-12-13 16:27:58 +03:00
memcpy ( & q_c - > pol , hnd , sizeof ( q_c - > pol ) ) ;
1998-09-26 01:01:52 +04:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_Q_CLOSE structure .
1998-09-26 01:01:52 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
BOOL lsa_io_q_close ( char * desc , LSA_Q_CLOSE * q_c , prs_struct * ps , int depth )
1998-09-26 01:01:52 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_close " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_pol_hnd ( " " , & q_c - > pol , ps , depth ) )
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-09-26 01:01:52 +04:00
}
/*******************************************************************
1999-12-13 16:27:58 +03:00
Reads or writes an LSA_R_CLOSE structure .
1998-09-26 01:01:52 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
1999-10-15 22:46:22 +04:00
BOOL lsa_io_r_close ( char * desc , LSA_R_CLOSE * r_c , prs_struct * ps , int depth )
1998-09-26 01:01:52 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_close " ) ;
depth + + ;
1999-12-13 16:27:58 +03:00
if ( ! smb_io_pol_hnd ( " " , & r_c - > pol , ps , depth ) )
return False ;
1998-09-26 01:01:52 +04:00
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-10-15 22:46:22 +04:00
return True ;
1998-09-26 01:01:52 +04:00
}
2001-02-26 11:10:51 +03:00
/*******************************************************************
Reads or writes an LSA_Q_OPEN_SECRET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_open_secret ( char * desc , LSA_Q_OPEN_SECRET * q_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_secret " ) ;
depth + + ;
/* Don't bother to read or write at present... */
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPEN_SECRET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_open_secret ( char * desc , LSA_R_OPEN_SECRET * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_secret " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " dummy1 " , ps , depth , & r_c - > dummy1 ) )
return False ;
if ( ! prs_uint32 ( " dummy2 " , ps , depth , & r_c - > dummy2 ) )
return False ;
if ( ! prs_uint32 ( " dummy3 " , ps , depth , & r_c - > dummy3 ) )
return False ;
if ( ! prs_uint32 ( " dummy4 " , ps , depth , & r_c - > dummy4 ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
2001-02-26 11:10:51 +03:00
return False ;
return True ;
}
2001-06-30 03:12:55 +04:00
2001-11-22 19:12:43 +03:00
/*******************************************************************
Inits an LSA_Q_ENUM_PRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_q_enum_privs ( LSA_Q_ENUM_PRIVS * q_q , POLICY_HND * hnd , uint32 enum_context , uint32 pref_max_length )
{
DEBUG ( 5 , ( " init_q_enum_privs \n " ) ) ;
memcpy ( & q_q - > pol , hnd , sizeof ( q_q - > pol ) ) ;
q_q - > enum_context = enum_context ;
q_q - > pref_max_length = pref_max_length ;
}
2001-07-09 22:32:54 +04:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_enum_privs ( char * desc , LSA_Q_ENUM_PRIVS * q_q , prs_struct * ps , int depth )
{
if ( q_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_privs " ) ;
depth + + ;
if ( ! smb_io_pol_hnd ( " " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " enum_context " , ps , depth , & q_q - > enum_context ) )
return False ;
if ( ! prs_uint32 ( " pref_max_length " , ps , depth , & q_q - > pref_max_length ) )
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_priv_entries ( char * desc , LSA_PRIV_ENTRY * entries , uint32 count , prs_struct * ps , int depth )
{
uint32 i ;
if ( entries = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_priv_entries " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
for ( i = 0 ; i < count ; i + + ) {
if ( ! smb_io_unihdr ( " " , & entries [ i ] . hdr_name , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " luid_low " , ps , depth , & entries [ i ] . luid_low ) )
return False ;
if ( ! prs_uint32 ( " luid_high " , ps , depth , & entries [ i ] . luid_high ) )
return False ;
}
for ( i = 0 ; i < count ; i + + )
if ( ! smb_io_unistr2 ( " " , & entries [ i ] . name , entries [ i ] . hdr_name . buffer , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
Inits an LSA_R_ENUM_PRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_lsa_r_enum_privs ( LSA_R_ENUM_PRIVS * r_u , uint32 enum_context ,
uint32 count , LSA_PRIV_ENTRY * entries )
{
DEBUG ( 5 , ( " init_lsa_r_enum_privs \n " ) ) ;
r_u - > enum_context = enum_context ;
r_u - > count = count ;
if ( entries ! = NULL ) {
r_u - > ptr = 1 ;
r_u - > count1 = count ;
r_u - > privs = entries ;
} else {
r_u - > ptr = 0 ;
r_u - > count1 = 0 ;
r_u - > privs = NULL ;
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_enum_privs ( char * desc , LSA_R_ENUM_PRIVS * r_q , prs_struct * ps , int depth )
{
if ( r_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_enum_privs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " enum_context " , ps , depth , & r_q - > enum_context ) )
return False ;
if ( ! prs_uint32 ( " count " , ps , depth , & r_q - > count ) )
return False ;
if ( ! prs_uint32 ( " ptr " , ps , depth , & r_q - > ptr ) )
return False ;
if ( r_q - > ptr ) {
if ( ! prs_uint32 ( " count1 " , ps , depth , & r_q - > count1 ) )
return False ;
2001-11-22 19:12:43 +03:00
if ( UNMARSHALLING ( ps ) )
if ( ! ( r_q - > privs = ( LSA_PRIV_ENTRY * ) prs_alloc_mem ( ps , sizeof ( LSA_PRIV_ENTRY ) * r_q - > count1 ) ) )
return False ;
2001-07-09 22:32:54 +04:00
if ( ! lsa_io_priv_entries ( " " , r_q - > privs , r_q - > count1 , ps , depth ) )
return False ;
}
if ( ! prs_align ( ps ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_q - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2001-11-22 19:54:48 +03:00
void init_lsa_priv_get_dispname ( LSA_Q_PRIV_GET_DISPNAME * trn , POLICY_HND * hnd , char * name , uint16 lang_id , uint16 lang_id_sys )
{
int len_name = strlen ( name ) ;
if ( len_name = = 0 )
len_name = 1 ;
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
init_uni_hdr ( & trn - > hdr_name , len_name ) ;
init_unistr2 ( & trn - > name , name , len_name ) ;
trn - > lang_id = lang_id ;
trn - > lang_id_sys = lang_id_sys ;
}
2001-07-09 22:32:54 +04:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_priv_get_dispname ( char * desc , LSA_Q_PRIV_GET_DISPNAME * q_q , prs_struct * ps , int depth )
{
if ( q_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_priv_get_dispname " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_name " , & q_q - > hdr_name , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " name " , & q_q - > name , q_q - > hdr_name . buffer , ps , depth ) )
return False ;
if ( ! prs_uint16 ( " lang_id " , ps , depth , & q_q - > lang_id ) )
return False ;
if ( ! prs_uint16 ( " lang_id_sys " , ps , depth , & q_q - > lang_id_sys ) )
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_priv_get_dispname ( char * desc , LSA_R_PRIV_GET_DISPNAME * r_q , prs_struct * ps , int depth )
{
if ( r_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_priv_get_dispname " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_info " , ps , depth , & r_q - > ptr_info ) )
return False ;
if ( r_q - > ptr_info ) {
if ( ! smb_io_unihdr ( " hdr_name " , & r_q - > hdr_desc , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " desc " , & r_q - > desc , r_q - > hdr_desc . buffer , ps , depth ) )
return False ;
}
/*
if ( ! prs_align ( ps ) )
return False ;
*/
if ( ! prs_uint16 ( " lang_id " , ps , depth , & r_q - > lang_id ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_q - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2001-11-23 02:50:16 +03:00
void init_lsa_q_enum_accounts ( LSA_Q_ENUM_ACCOUNTS * trn , POLICY_HND * hnd , uint32 enum_context , uint32 pref_max_length )
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
trn - > enum_context = enum_context ;
trn - > pref_max_length = pref_max_length ;
}
2001-07-09 22:32:54 +04:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_enum_accounts ( char * desc , LSA_Q_ENUM_ACCOUNTS * q_q , prs_struct * ps , int depth )
{
if ( q_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_accounts " ) ;
depth + + ;
if ( ! smb_io_pol_hnd ( " " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " enum_context " , ps , depth , & q_q - > enum_context ) )
return False ;
if ( ! prs_uint32 ( " pref_max_length " , ps , depth , & q_q - > pref_max_length ) )
return False ;
return True ;
}
/*******************************************************************
Inits an LSA_R_ENUM_PRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_lsa_r_enum_accounts ( LSA_R_ENUM_ACCOUNTS * r_u , uint32 enum_context )
{
DEBUG ( 5 , ( " init_lsa_r_enum_accounts \n " ) ) ;
r_u - > enum_context = enum_context ;
if ( r_u - > enum_context ! = 0 ) {
r_u - > sids . num_entries = enum_context ;
r_u - > sids . ptr_sid_enum = 1 ;
r_u - > sids . num_entries2 = enum_context ;
} else {
r_u - > sids . num_entries = 0 ;
r_u - > sids . ptr_sid_enum = 0 ;
r_u - > sids . num_entries2 = 0 ;
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_enum_accounts ( char * desc , LSA_R_ENUM_ACCOUNTS * r_q , prs_struct * ps , int depth )
{
if ( r_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_enum_accounts " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " enum_context " , ps , depth , & r_q - > enum_context ) )
return False ;
if ( ! lsa_io_sid_enum ( " sids " , & r_q - > sids , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_q - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2001-06-30 03:12:55 +04:00
/*******************************************************************
Reads or writes an LSA_Q_UNK_GET_CONNUSER structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_unk_get_connuser ( char * desc , LSA_Q_UNK_GET_CONNUSER * q_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_unk_get_connuser " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_srvname " , ps , depth , & q_c - > ptr_srvname ) )
return False ;
if ( ! smb_io_unistr2 ( " uni2_srvname " , & q_c - > uni2_srvname , q_c - > ptr_srvname , ps , depth ) ) /* server name to be looked up */
return False ;
2001-12-18 02:03:23 +03:00
if ( ! prs_align ( ps ) )
return False ;
2001-06-30 03:12:55 +04:00
if ( ! prs_uint32 ( " unk1 " , ps , depth , & q_c - > unk1 ) )
return False ;
if ( ! prs_uint32 ( " unk2 " , ps , depth , & q_c - > unk2 ) )
return False ;
if ( ! prs_uint32 ( " unk3 " , ps , depth , & q_c - > unk3 ) )
return False ;
/* Don't bother to read or write at present... */
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_UNK_GET_CONNUSER structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_unk_get_connuser ( char * desc , LSA_R_UNK_GET_CONNUSER * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_unk_get_connuser " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_user_name " , ps , depth , & r_c - > ptr_user_name ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_user_name " , & r_c - > hdr_user_name , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " uni2_user_name " , & r_c - > uni2_user_name , r_c - > ptr_user_name , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " unk1 " , ps , depth , & r_c - > unk1 ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_name " , ps , depth , & r_c - > ptr_dom_name ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_dom_name " , & r_c - > hdr_dom_name , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " uni2_dom_name " , & r_c - > uni2_dom_name , r_c - > ptr_dom_name , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
2001-06-30 03:12:55 +04:00
return False ;
return True ;
}
2001-07-09 22:32:54 +04:00
2001-11-25 05:08:43 +03:00
void init_lsa_q_open_account ( LSA_Q_OPENACCOUNT * trn , POLICY_HND * hnd , DOM_SID * sid , uint32 desired_access )
2001-11-24 03:13:41 +03:00
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
init_dom_sid2 ( & trn - > sid , sid ) ;
2001-11-25 05:08:43 +03:00
trn - > access = desired_access ;
2001-11-24 03:13:41 +03:00
}
2001-07-09 22:32:54 +04:00
/*******************************************************************
Reads or writes an LSA_Q_OPENACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_open_account ( char * desc , LSA_Q_OPENACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
2001-11-24 03:13:41 +03:00
if ( ! smb_io_dom_sid2 ( " sid " , & r_c - > sid , ps , depth ) ) /* domain SID */
2001-07-09 22:32:54 +04:00
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & r_c - > access ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPENACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_open_account ( char * desc , LSA_R_OPENACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2001-11-24 03:13:41 +03:00
void init_lsa_q_enum_privsaccount ( LSA_Q_ENUMPRIVSACCOUNT * trn , POLICY_HND * hnd )
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
}
2001-07-09 22:32:54 +04:00
/*******************************************************************
Reads or writes an LSA_Q_ENUMPRIVSACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_enum_privsaccount ( char * desc , LSA_Q_ENUMPRIVSACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_enum_privsaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LUID structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_luid ( char * desc , LUID * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_luid " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " low " , ps , depth , & r_c - > low ) )
return False ;
if ( ! prs_uint32 ( " high " , ps , depth , & r_c - > high ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LUID_ATTR structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_luid_attr ( char * desc , LUID_ATTR * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_luid_attr " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! lsa_io_luid ( desc , & r_c - > luid , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " attr " , ps , depth , & r_c - > attr ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an PRIVILEGE_SET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_privilege_set ( char * desc , PRIVILEGE_SET * r_c , prs_struct * ps , int depth )
{
uint32 i ;
prs_debug ( ps , depth , desc , " lsa_io_privilege_set " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " count " , ps , depth , & r_c - > count ) )
return False ;
if ( ! prs_uint32 ( " control " , ps , depth , & r_c - > control ) )
return False ;
for ( i = 0 ; i < r_c - > count ; i + + ) {
if ( ! lsa_io_luid_attr ( desc , & r_c - > set [ i ] , ps , depth ) )
return False ;
}
return True ;
}
void init_lsa_r_enum_privsaccount ( LSA_R_ENUMPRIVSACCOUNT * r_u , LUID_ATTR * set , uint32 count , uint32 control )
{
r_u - > ptr = 1 ;
r_u - > count = count ;
r_u - > set . set = set ;
r_u - > set . count = count ;
r_u - > set . control = control ;
2001-11-29 19:05:05 +03:00
DEBUG ( 10 , ( " init_lsa_r_enum_privsaccount: %d %d privileges \n " , r_u - > count , r_u - > set . count ) ) ;
2001-07-09 22:32:54 +04:00
}
/*******************************************************************
Reads or writes an LSA_R_ENUMPRIVSACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_enum_privsaccount ( char * desc , LSA_R_ENUMPRIVSACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_privsaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr " , ps , depth , & r_c - > ptr ) )
return False ;
if ( r_c - > ptr ! = 0 ) {
if ( ! prs_uint32 ( " count " , ps , depth , & r_c - > count ) )
return False ;
/* malloc memory if unmarshalling here */
2001-11-24 03:13:41 +03:00
if ( UNMARSHALLING ( ps ) & & r_c - > count ! = 0 ) {
if ( ! ( r_c - > set . set = ( LUID_ATTR * ) prs_alloc_mem ( ps , sizeof ( LUID_ATTR ) * r_c - > count ) ) )
return False ;
}
2001-07-09 22:32:54 +04:00
if ( ! lsa_io_privilege_set ( desc , & r_c - > set , ps , depth ) )
return False ;
}
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_GETSYSTEMACCOUNTstructure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_getsystemaccount ( char * desc , LSA_Q_GETSYSTEMACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_getsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_GETSYSTEMACCOUNTstructure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_getsystemaccount ( char * desc , LSA_R_GETSYSTEMACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_getsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & r_c - > access ) )
return False ;
2001-09-04 11:13:01 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2001-11-24 03:13:41 +03:00
2001-11-29 19:05:05 +03:00
/*******************************************************************
Reads or writes an LSA_Q_SETSYSTEMACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_setsystemaccount ( char * desc , LSA_Q_SETSYSTEMACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_setsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & r_c - > access ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_SETSYSTEMACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_setsystemaccount ( char * desc , LSA_R_SETSYSTEMACCOUNT * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_setsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
return False ;
return True ;
}
2001-11-24 03:13:41 +03:00
void init_lsa_q_lookupprivvalue ( LSA_Q_LOOKUPPRIVVALUE * trn , POLICY_HND * hnd , char * name )
{
int len_name = strlen ( name ) ;
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
if ( len_name = = 0 )
len_name = 1 ;
init_uni_hdr ( & trn - > hdr_right , len_name ) ;
init_unistr2 ( & trn - > uni2_right , name , len_name ) ;
}
/*******************************************************************
Reads or writes an LSA_Q_LOOKUPPRIVVALUE structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_lookupprivvalue ( char * desc , LSA_Q_LOOKUPPRIVVALUE * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_lookupprivvalue " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_name " , & r_c - > hdr_right , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " uni2_right " , & r_c - > uni2_right , r_c - > hdr_right . buffer , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_LOOKUPPRIVVALUE structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_lookupprivvalue ( char * desc , LSA_R_LOOKUPPRIVVALUE * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_lookupprivvalue " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! lsa_io_luid ( " luid " , & r_c - > luid , ps , depth ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
return False ;
return True ;
}
2001-11-29 19:05:05 +03:00
/*******************************************************************
Reads or writes an LSA_Q_ADDPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_addprivs ( char * desc , LSA_Q_ADDPRIVS * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_addprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " count " , ps , depth , & r_c - > count ) )
return False ;
if ( UNMARSHALLING ( ps ) & & r_c - > count ! = 0 ) {
if ( ! ( r_c - > set . set = ( LUID_ATTR * ) prs_alloc_mem ( ps , sizeof ( LUID_ATTR ) * r_c - > count ) ) )
return False ;
}
if ( ! lsa_io_privilege_set ( desc , & r_c - > set , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_ADDPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_addprivs ( char * desc , LSA_R_ADDPRIVS * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_addprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_REMOVEPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_removeprivs ( char * desc , LSA_Q_REMOVEPRIVS * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_removeprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & r_c - > pol , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " allrights " , ps , depth , & r_c - > allrights ) )
return False ;
if ( ! prs_uint32 ( " ptr " , ps , depth , & r_c - > ptr ) )
return False ;
/*
* JFM : I ' m not sure at all if the count is inside the ptr
* never seen one with ptr = 0
*/
if ( r_c - > ptr ! = 0 ) {
if ( ! prs_uint32 ( " count " , ps , depth , & r_c - > count ) )
return False ;
if ( UNMARSHALLING ( ps ) & & r_c - > count ! = 0 ) {
if ( ! ( r_c - > set . set = ( LUID_ATTR * ) prs_alloc_mem ( ps , sizeof ( LUID_ATTR ) * r_c - > count ) ) )
return False ;
}
if ( ! lsa_io_privilege_set ( desc , & r_c - > set , ps , depth ) )
return False ;
}
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_REMOVEPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_removeprivs ( char * desc , LSA_R_REMOVEPRIVS * r_c , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_removeprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_c - > status ) )
return False ;
return True ;
}