1998-03-12 00:11:04 +03:00
/*
2002-01-30 09:08:46 +03:00
* Unix SMB / CIFS implementation .
1998-03-12 00:11:04 +03:00
* 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 ,
2002-08-17 21:00:51 +04:00
* Copyright ( C ) Paul Ashton 1997 ,
* Copyright ( C ) Andrew Bartlett 2002 ,
2003-08-01 19:30:44 +04:00
* Copyright ( C ) Jim McDonough < jmcd @ us . ibm . com > 2002.
2005-04-07 02:27:55 +04:00
* Copyright ( C ) Gerald ) Jerry ) Carter 2005
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"
2002-07-15 14:35:28 +04:00
# undef DBGC_CLASS
# define DBGC_CLASS DBGC_RPC_PARSE
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_trans_names ( const char * desc , LSA_TRANS_NAME_ENUM * trn , prs_struct * ps , int depth ) ;
2006-02-11 02:52:53 +03:00
static BOOL lsa_io_trans_names2 ( const char * desc , LSA_TRANS_NAME_ENUM2 * trn , prs_struct * ps , int depth ) ;
1999-12-13 16:27:58 +03:00
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 ,
2003-01-03 11:28:12 +03:00
uint16 sid_name_use , const char * name , uint32 idx )
1998-03-12 00:11:04 +03:00
{
trn - > sid_name_use = sid_name_use ;
2003-09-26 01:26:16 +04:00
init_unistr2 ( uni_name , name , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & trn - > hdr_name , uni_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
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_trans_name ( const char * desc , LSA_TRANS_NAME * trn , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
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
}
2006-02-11 02:52:53 +03:00
/*******************************************************************
Inits a LSA_TRANS_NAME2 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_lsa_trans_name2 ( LSA_TRANS_NAME2 * trn , UNISTR2 * uni_name ,
uint16 sid_name_use , const char * name , uint32 idx )
{
trn - > sid_name_use = sid_name_use ;
init_unistr2 ( uni_name , name , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & trn - > hdr_name , uni_name ) ;
trn - > domain_idx = idx ;
trn - > unknown = 0 ;
}
/*******************************************************************
Reads or writes a LSA_TRANS_NAME2 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_trans_name2 ( const char * desc , LSA_TRANS_NAME2 * trn , prs_struct * ps ,
int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_trans_name2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint16 ( " sid_name_use " , ps , depth , & trn - > sid_name_use ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
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 ;
if ( ! prs_uint32 ( " unknown " , ps , depth , & trn - > unknown ) )
return False ;
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
2005-05-31 17:46:45 +04:00
static BOOL lsa_io_dom_r_ref ( const char * desc , DOM_R_REF * dom , prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
2003-03-18 02:04:03 +03:00
unsigned 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
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " num_ref_doms_1 " , ps , depth , & dom - > num_ref_doms_1 ) ) /* num referenced domains? */
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_ref_dom " , ps , depth , & dom - > ptr_ref_dom ) ) /* undocumented buffer pointer. */
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " max_entries " , ps , depth , & dom - > max_entries ) ) /* 32 - max number of entries */
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2005-05-31 17:46:45 +04:00
SMB_ASSERT_ARRAY ( dom - > hdr_ref_dom , dom - > num_ref_doms_1 ) ;
1998-08-22 06:54:21 +04:00
2005-05-31 17:46:45 +04:00
if ( dom - > ptr_ref_dom ! = 0 ) {
2000-09-21 02:07:56 +04:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " num_ref_doms_2 " , ps , depth , & dom - > num_ref_doms_2 ) ) /* 4 - num referenced domains? */
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
SMB_ASSERT_ARRAY ( dom - > ref_dom , dom - > num_ref_doms_2 ) ;
1998-09-30 23:09:57 +04:00
2005-05-31 17:46:45 +04:00
for ( i = 0 ; i < dom - > 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 ) ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unihdr ( t , & dom - > hdr_ref_dom [ i ] . hdr_dom_name , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-12-20 03:37:24 +03:00
slprintf ( t , sizeof ( t ) - 1 , " sid_ptr[%d] " , i ) ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( t , ps , depth , & dom - > hdr_ref_dom [ i ] . ptr_dom_sid ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-09-30 23:09:57 +04:00
}
2005-05-31 17:46:45 +04:00
for ( i = 0 ; i < dom - > num_ref_doms_2 ; i + + ) {
1998-12-20 03:37:24 +03:00
fstring t ;
2005-05-31 17:46:45 +04:00
if ( dom - > 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 ) ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( t , & dom - > ref_dom [ i ] . uni_dom_name , True , ps , depth ) ) /* domain name unicode string */
2000-09-21 02:07:56 +04:00
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-12-20 03:37:24 +03:00
}
2005-05-31 17:46:45 +04:00
if ( dom - > 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 ) ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_dom_sid2 ( t , & dom - > 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
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_sec_qos ( const char * desc , LSA_SEC_QOS * qos , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
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
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2002-07-15 14:35:28 +04:00
static void init_lsa_obj_attr ( LSA_OBJ_ATTR * attr , uint32 attributes , LSA_SEC_QOS * qos )
1999-12-13 16:27:58 +03:00
{
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
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_obj_attr ( const char * desc , LSA_OBJ_ATTR * attr , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
int depth )
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
/* 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-12-18 02:03:23 +03:00
if ( attr - > ptr_sec_qos ! = 0 ) {
if ( UNMARSHALLING ( ps ) )
2004-12-07 21:25:53 +03:00
if ( ! ( attr - > sec_qos = PRS_ALLOC_MEM ( ps , LSA_SEC_QOS , 1 ) ) )
2001-12-18 02:03:23 +03:00
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
2005-05-31 17:46:45 +04:00
void init_q_open_pol ( LSA_Q_OPEN_POL * in , 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
2005-05-31 17:46:45 +04:00
in - > ptr = 1 ; /* undocumented pointer */
1998-09-26 01:01:52 +04:00
2005-05-31 17:46:45 +04:00
in - > des_access = desired_access ;
1998-09-26 01:01:52 +04:00
2005-05-31 17:46:45 +04:00
in - > system_name = system_name ;
init_lsa_obj_attr ( & in - > 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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_open_pol ( const char * desc , LSA_Q_OPEN_POL * in , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_pol " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & in - > ptr ) )
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint16 ( " system_name " , ps , depth , & in - > system_name ) )
1999-12-13 16:27:58 +03:00
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
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_obj_attr ( " " , & in - > attr , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " des_access " , ps , depth , & in - > des_access ) )
2001-12-18 02:03:23 +03:00
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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_open_pol ( const char * desc , LSA_R_OPEN_POL * out , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
int depth )
1998-03-12 00:11:04 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_pol " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & out - > pol , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-10-15 09:47:29 +04:00
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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
2005-05-31 17:46:45 +04:00
void init_q_open_pol2 ( LSA_Q_OPEN_POL2 * in , const 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
2005-05-31 17:46:45 +04:00
in - > ptr = 1 ; /* undocumented pointer */
1998-10-15 09:47:29 +04:00
2005-05-31 17:46:45 +04:00
in - > des_access = desired_access ;
1998-10-15 09:47:29 +04:00
2005-05-31 17:46:45 +04:00
init_unistr2 ( & in - > uni_server_name , server_name , UNI_STR_TERMINATE ) ;
2001-01-12 01:54:12 +03:00
2005-05-31 17:46:45 +04:00
init_lsa_obj_attr ( & in - > 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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_open_pol2 ( const char * desc , LSA_Q_OPEN_POL2 * in , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
int depth )
1998-10-15 09:47:29 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_pol2 " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & in - > ptr ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-10-15 09:47:29 +04:00
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( " " , & in - > uni_server_name , in - > ptr , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_obj_attr ( " " , & in - > attr , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-10-15 09:47:29 +04:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " des_access " , ps , depth , & in - > des_access ) )
2001-12-18 02:03:23 +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
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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_open_pol2 ( const char * desc , LSA_R_OPEN_POL2 * out , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
int depth )
1998-10-15 09:47:29 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_pol2 " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & out - > pol , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_q_query_sec_obj ( LSA_Q_QUERY_SEC_OBJ * in , const POLICY_HND * hnd ,
2001-01-12 01:54:12 +03:00
uint32 sec_info )
2000-09-21 02:07:56 +04:00
{
DEBUG ( 5 , ( " init_q_query_sec_obj \n " ) ) ;
2005-05-31 17:46:45 +04:00
in - > pol = * hnd ;
in - > sec_info = sec_info ;
2000-09-21 02:07:56 +04:00
return ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_query_sec_obj ( const char * desc , LSA_Q_QUERY_SEC_OBJ * in ,
2001-01-12 01:54:12 +03:00
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 + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2000-09-21 02:07:56 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " sec_info " , ps , depth , & in - > sec_info ) )
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
}
/*******************************************************************
Reads or writes a LSA_R_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_query_sec_obj ( const char * desc , LSA_R_QUERY_SEC_OBJ * out , 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 ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2000-09-21 02:07:56 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( out - > ptr ! = 0 ) {
if ( ! sec_io_desc_buf ( " sec " , & out - > buf , ps , depth ) )
2000-09-21 02:07:56 +04:00
return False ;
2001-01-12 01:54:12 +03:00
}
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_q_query ( LSA_Q_QUERY_INFO * in , POLICY_HND * hnd , uint16 info_class )
1999-12-13 16:27:58 +03:00
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_q_query \n " ) ) ;
1998-09-26 01:01:52 +04:00
2005-05-31 17:46:45 +04:00
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
1998-09-26 01:01:52 +04:00
2005-05-31 17:46:45 +04:00
in - > info_class = info_class ;
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_QUERY_INFO structure .
1998-03-12 00:11:04 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-03-18 08:16:59 +03:00
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_query ( const char * desc , LSA_Q_QUERY_INFO * in , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
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 + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-03-18 08:16:59 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & in - > info_class ) )
1999-12-13 16:27:58 +03:00
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
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2003-01-03 11:28:12 +03:00
BOOL lsa_io_q_enum_trust_dom ( const char * desc , LSA_Q_ENUM_TRUST_DOM * q_e ,
2001-01-12 01:54:12 +03:00
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-02-04 01:19:41 +03:00
void init_r_enum_trust_dom ( TALLOC_CTX * ctx , LSA_R_ENUM_TRUST_DOM * out ,
uint32 enum_context , uint32 num_domains ,
struct trustdom_info * * td )
2001-01-12 02:49:51 +03:00
{
2003-03-18 02:04:03 +03:00
unsigned int i ;
2002-07-15 14:35:28 +04:00
2001-01-12 02:49:51 +03:00
DEBUG ( 5 , ( " init_r_enum_trust_dom \n " ) ) ;
2005-05-31 17:46:45 +04:00
out - > enum_context = enum_context ;
out - > count = num_domains ;
2005-04-07 02:27:55 +04:00
if ( num_domains ! = 0 ) {
2002-07-15 14:35:28 +04:00
2005-04-07 02:27:55 +04:00
/* allocate container memory */
2002-07-15 14:35:28 +04:00
2005-05-31 17:46:45 +04:00
out - > domlist = TALLOC_P ( ctx , DOMAIN_LIST ) ;
2006-03-10 12:07:03 +03:00
if ( ! out - > domlist ) {
out - > status = NT_STATUS_NO_MEMORY ;
return ;
}
2007-04-30 01:13:13 +04:00
if ( out - > count ) {
out - > domlist - > domains = TALLOC_ARRAY ( ctx , DOMAIN_INFO ,
2006-02-04 01:19:41 +03:00
out - > count ) ;
2007-04-30 01:13:13 +04:00
if ( ! out - > domlist - > domains ) {
out - > status = NT_STATUS_NO_MEMORY ;
return ;
}
} else {
out - > domlist - > domains = NULL ;
2002-07-15 14:35:28 +04:00
}
2007-04-30 01:13:13 +04:00
2005-05-31 17:46:45 +04:00
out - > domlist - > count = out - > count ;
2005-04-07 02:27:55 +04:00
/* initialize the list of domains and their sid */
for ( i = 0 ; i < num_domains ; i + + ) {
2006-02-04 01:19:41 +03:00
smb_ucs2_t * name ;
if ( ! ( out - > domlist - > domains [ i ] . sid =
TALLOC_P ( ctx , DOM_SID2 ) ) ) {
2005-05-31 17:46:45 +04:00
out - > status = NT_STATUS_NO_MEMORY ;
2005-04-07 02:27:55 +04:00
return ;
}
2002-07-15 14:35:28 +04:00
2006-02-04 01:19:41 +03:00
init_dom_sid2 ( out - > domlist - > domains [ i ] . sid ,
& ( td [ i ] ) - > sid ) ;
2006-05-25 19:40:40 +04:00
if ( push_ucs2_talloc ( ctx , & name , ( td [ i ] ) - > name ) = = ( size_t ) - 1 ) {
2006-02-04 01:19:41 +03:00
out - > status = NT_STATUS_NO_MEMORY ;
return ;
}
init_unistr4_w ( ctx , & out - > domlist - > domains [ i ] . name ,
name ) ;
2005-04-07 02:27:55 +04:00
}
2002-07-15 14:35:28 +04:00
}
2001-01-12 02:49:51 +03:00
}
1998-03-12 00:11:04 +03:00
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 16:27:58 +03:00
2005-04-07 02:27:55 +04:00
BOOL lsa_io_domain_list ( const char * desc , prs_struct * ps , int depth , DOMAIN_LIST * domlist )
1998-03-12 00:11:04 +03:00
{
2005-04-07 02:27:55 +04:00
int i ;
prs_debug ( ps , depth , desc , " lsa_io_domain_list " ) ;
1998-03-12 00:11:04 +03:00
depth + + ;
2005-04-07 02:27:55 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & domlist - > count ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-11-02 01:25:38 +03:00
2005-04-07 02:27:55 +04:00
if ( domlist - > count = = 0 )
return True ;
if ( UNMARSHALLING ( ps ) ) {
if ( ! ( domlist - > domains = PRS_ALLOC_MEM ( ps , DOMAIN_INFO , domlist - > count ) ) )
return False ;
}
/* headers */
for ( i = 0 ; i < domlist - > count ; i + + ) {
if ( ! prs_unistr4_hdr ( " name_header " , ps , depth , & domlist - > domains [ i ] . name ) )
return False ;
if ( ! smb_io_dom_sid2_p ( " sid_header " , ps , depth , & domlist - > domains [ i ] . sid ) )
return False ;
}
2001-01-12 01:54:12 +03:00
2005-04-07 02:27:55 +04:00
/* data */
for ( i = 0 ; i < domlist - > count ; i + + ) {
if ( ! prs_unistr4_str ( " name " , ps , depth , & domlist - > domains [ i ] . name ) )
1999-12-13 16:27:58 +03:00
return False ;
2005-04-07 02:27:55 +04:00
if ( ! smb_io_dom_sid2 ( " sid " , domlist - > domains [ i ] . sid , ps , depth ) )
return False ;
}
return True ;
}
2001-01-12 01:54:12 +03:00
2005-04-07 02:27:55 +04:00
/*******************************************************************
Reads or writes an LSA_R_ENUM_TRUST_DOM structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-12 01:54:12 +03:00
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_enum_trust_dom ( const char * desc , LSA_R_ENUM_TRUST_DOM * out ,
2005-04-07 02:27:55 +04:00
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_trust_dom " ) ;
depth + + ;
2001-01-12 01:54:12 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & out - > enum_context ) )
2005-04-07 02:27:55 +04:00
return False ;
2001-01-12 01:54:12 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2005-04-07 02:27:55 +04:00
return False ;
2001-01-12 01:54:12 +03:00
2006-07-11 22:01:26 +04:00
if ( ! prs_pointer ( " trusted_domains " , ps , depth , ( void * ) & out - > domlist , sizeof ( DOMAIN_LIST ) , ( PRS_POINTER_CAST ) lsa_io_domain_list ) )
2005-04-07 02:27:55 +04:00
return False ;
2001-01-12 01:54:12 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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
}
2006-04-11 19:47:24 +04:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_1 ( const char * desc , DOM_QUERY_1 * d_q , prs_struct * ps , int depth )
{
if ( d_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_dom_query_1 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " percent_full " , ps , depth , & d_q - > percent_full ) )
return False ;
if ( ! prs_uint32 ( " log_size " , ps , depth , & d_q - > log_size ) )
return False ;
if ( ! smb_io_nttime ( " retention_time " , ps , depth , & d_q - > retention_time ) )
return False ;
if ( ! prs_uint8 ( " shutdown_in_progress " , ps , depth , & d_q - > shutdown_in_progress ) )
return False ;
if ( ! smb_io_nttime ( " time_to_shutdown " , ps , depth , & d_q - > time_to_shutdown ) )
return False ;
if ( ! prs_uint32 ( " next_audit_record " , ps , depth , & d_q - > next_audit_record ) )
return False ;
if ( ! prs_uint32 ( " unknown " , ps , depth , & d_q - > unknown ) )
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_2 ( const char * desc , DOM_QUERY_2 * d_q , prs_struct * ps , int depth )
{
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 , & d_q - > ptr ) )
return False ;
if ( ! prs_uint32 ( " count1 " , ps , depth , & d_q - > count1 ) )
return False ;
if ( d_q - > ptr ) {
if ( ! prs_uint32 ( " count2 " , ps , depth , & d_q - > count2 ) )
return False ;
if ( d_q - > count1 ! = d_q - > count2 )
return False ;
if ( UNMARSHALLING ( ps ) ) {
2007-04-30 04:48:20 +04:00
if ( d_q - > count2 ) {
d_q - > auditsettings = TALLOC_ZERO_ARRAY ( ps - > mem_ctx , uint32 , d_q - > count2 ) ;
if ( ! d_q - > auditsettings ) {
return False ;
}
} else {
d_q - > auditsettings = NULL ;
2006-06-20 01:47:46 +04:00
}
2006-04-11 19:47:24 +04:00
}
if ( ! prs_uint32s ( False , " auditsettings " , ps , depth , d_q - > auditsettings , d_q - > count2 ) )
return False ;
}
return True ;
}
2001-01-25 05:35:50 +03:00
/*******************************************************************
reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-04-11 19:47:24 +04:00
static BOOL lsa_io_dom_query_3 ( const char * desc , DOM_QUERY_3 * d_q , prs_struct * ps , int depth )
2001-01-25 05:35:50 +03:00
{
if ( d_q = = NULL )
return False ;
2006-04-11 19:47:24 +04:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_3 " ) ;
2001-01-25 05:35:50 +03:00
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 ;
}
/*******************************************************************
2006-04-11 19:47:24 +04:00
Reads or writes a dom query structure .
2001-01-25 05:35:50 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-04-11 19:47:24 +04:00
static BOOL lsa_io_dom_query_5 ( const char * desc , DOM_QUERY_5 * d_q , prs_struct * ps , int depth )
2001-01-25 05:35:50 +03:00
{
2006-04-11 19:47:24 +04:00
return lsa_io_dom_query_3 ( " " , d_q , ps , depth ) ;
}
2001-01-25 05:35:50 +03:00
2006-04-11 19:47:24 +04:00
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_6 ( const char * desc , DOM_QUERY_6 * d_q , prs_struct * ps , int depth )
{
2001-01-25 05:35:50 +03:00
if ( d_q = = NULL )
return False ;
2006-04-11 19:47:24 +04:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_6 " ) ;
2001-01-25 05:35:50 +03:00
depth + + ;
2006-04-11 19:47:24 +04:00
if ( ! prs_uint16 ( " server_role " , ps , depth , & d_q - > server_role ) )
2001-01-25 05:35:50 +03:00
return False ;
2006-04-11 19:47:24 +04:00
return True ;
}
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_10 ( const char * desc , DOM_QUERY_10 * d_q , prs_struct * ps , int depth )
{
if ( d_q = = NULL )
2001-01-25 05:35:50 +03:00
return False ;
2006-04-11 19:47:24 +04:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_10 " ) ;
depth + + ;
if ( ! prs_uint8 ( " shutdown_on_full " , ps , depth , & d_q - > shutdown_on_full ) )
2001-01-25 05:35:50 +03:00
return False ;
2006-04-11 19:47:24 +04:00
return True ;
}
2001-01-25 05:35:50 +03:00
2006-04-11 19:47:24 +04:00
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dom_query_11 ( const char * desc , DOM_QUERY_11 * d_q , prs_struct * ps , int depth )
{
if ( d_q = = NULL )
2001-01-25 05:35:50 +03:00
return False ;
2006-04-11 19:47:24 +04:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_11 " ) ;
depth + + ;
if ( ! prs_uint16 ( " unknown " , ps , depth , & d_q - > unknown ) )
return False ;
if ( ! prs_uint8 ( " shutdown_on_full " , ps , depth , & d_q - > shutdown_on_full ) )
return False ;
if ( ! prs_uint8 ( " log_is_full " , ps , depth , & d_q - > log_is_full ) )
2001-01-25 05:35:50 +03:00
return False ;
2006-04-11 19:47:24 +04:00
return True ;
2001-01-25 05:35:50 +03:00
}
/*******************************************************************
2006-04-11 19:47:24 +04:00
Reads or writes an LSA_DNS_DOM_INFO structure .
2001-01-25 05:35:50 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-04-11 19:47:24 +04:00
BOOL lsa_io_dom_query_12 ( const char * desc , DOM_QUERY_12 * info , prs_struct * ps , int depth )
2001-01-25 05:35:50 +03:00
{
2006-04-11 19:47:24 +04:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_12 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_unihdr ( " nb_name " , & info - > hdr_nb_dom_name , ps , depth ) )
return False ;
if ( ! smb_io_unihdr ( " dns_name " , & info - > hdr_dns_dom_name , ps , depth ) )
return False ;
if ( ! smb_io_unihdr ( " forest " , & info - > hdr_forest_name , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_uuid ( " dom_guid " , & info - > dom_guid , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " dom_sid " , ps , depth , & info - > ptr_dom_sid ) )
return False ;
if ( ! smb_io_unistr2 ( " nb_name " , & info - > uni_nb_dom_name ,
info - > hdr_nb_dom_name . buffer , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " dns_name " , & info - > uni_dns_dom_name ,
info - > hdr_dns_dom_name . buffer , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " forest " , & info - > uni_forest_name ,
info - > hdr_forest_name . buffer , ps , depth ) )
return False ;
if ( ! smb_io_dom_sid2 ( " dom_sid " , & info - > dom_sid , ps , depth ) )
return False ;
return True ;
2001-01-25 05:35:50 +03:00
}
/*******************************************************************
2006-04-11 19:47:24 +04:00
Inits an LSA_Q_QUERY_INFO structure .
2001-01-25 05:35:50 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-04-11 19:47:24 +04:00
void init_q_set ( LSA_Q_SET_INFO * in , POLICY_HND * hnd , uint16 info_class , LSA_INFO_CTR ctr )
2001-01-25 05:35:50 +03:00
{
2006-04-11 19:47:24 +04:00
DEBUG ( 5 , ( " init_q_set \n " ) ) ;
in - > info_class = info_class ;
in - > pol = * hnd ;
in - > ctr = ctr ;
in - > ctr . info_class = info_class ;
2001-01-25 05:35:50 +03:00
}
/*******************************************************************
2006-04-11 19:47:24 +04:00
reads or writes a structure .
2001-01-25 05:35:50 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-04-11 19:47:24 +04:00
static BOOL lsa_io_query_info_ctr2 ( const char * desc , prs_struct * ps , int depth , LSA_INFO_CTR2 * ctr )
2001-01-25 05:35:50 +03:00
{
2006-04-11 19:47:24 +04:00
prs_debug ( ps , depth , desc , " lsa_io_query_info_ctr2 " ) ;
depth + + ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & ctr - > info_class ) )
2001-01-25 05:35:50 +03:00
return False ;
2006-04-11 19:47:24 +04:00
switch ( ctr - > info_class ) {
case 1 :
if ( ! lsa_io_dom_query_1 ( " " , & ctr - > info . id1 , ps , depth ) )
return False ;
break ;
case 2 :
if ( ! lsa_io_dom_query_2 ( " " , & ctr - > info . id2 , ps , depth ) )
return False ;
break ;
case 3 :
if ( ! lsa_io_dom_query_3 ( " " , & ctr - > info . id3 , ps , depth ) )
return False ;
break ;
case 5 :
if ( ! lsa_io_dom_query_5 ( " " , & ctr - > info . id5 , ps , depth ) )
return False ;
break ;
case 6 :
if ( ! lsa_io_dom_query_6 ( " " , & ctr - > info . id6 , ps , depth ) )
return False ;
break ;
case 10 :
if ( ! lsa_io_dom_query_10 ( " " , & ctr - > info . id10 , ps , depth ) )
return False ;
break ;
case 11 :
if ( ! lsa_io_dom_query_11 ( " " , & ctr - > info . id11 , ps , depth ) )
return False ;
break ;
case 12 :
if ( ! lsa_io_dom_query_12 ( " " , & ctr - > info . id12 , ps , depth ) )
return False ;
break ;
default :
DEBUG ( 0 , ( " invalid info_class: %d \n " , ctr - > info_class ) ) ;
return False ;
break ;
}
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_query_info_ctr ( const char * desc , prs_struct * ps , int depth , LSA_INFO_CTR * ctr )
{
prs_debug ( ps , depth , desc , " lsa_io_query_info_ctr " ) ;
2001-01-25 05:35:50 +03:00
depth + + ;
2006-04-11 19:47:24 +04:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & ctr - > info_class ) )
2001-01-25 05:35:50 +03:00
return False ;
2006-07-19 19:05:06 +04:00
if ( ! prs_align ( ps ) )
return False ;
2006-04-11 19:47:24 +04:00
switch ( ctr - > info_class ) {
case 1 :
if ( ! lsa_io_dom_query_1 ( " " , & ctr - > info . id1 , ps , depth ) )
return False ;
break ;
case 2 :
if ( ! lsa_io_dom_query_2 ( " " , & ctr - > info . id2 , ps , depth ) )
return False ;
break ;
case 3 :
if ( ! lsa_io_dom_query_3 ( " " , & ctr - > info . id3 , ps , depth ) )
return False ;
break ;
case 5 :
if ( ! lsa_io_dom_query_5 ( " " , & ctr - > info . id5 , ps , depth ) )
return False ;
break ;
case 6 :
if ( ! lsa_io_dom_query_6 ( " " , & ctr - > info . id6 , ps , depth ) )
return False ;
break ;
case 10 :
if ( ! lsa_io_dom_query_10 ( " " , & ctr - > info . id10 , ps , depth ) )
return False ;
break ;
case 11 :
if ( ! lsa_io_dom_query_11 ( " " , & ctr - > info . id11 , ps , depth ) )
return False ;
break ;
default :
DEBUG ( 0 , ( " invalid info_class: %d \n " , ctr - > info_class ) ) ;
return False ;
break ;
}
2001-01-25 05:35:50 +03:00
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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_query ( const char * desc , LSA_R_QUERY_INFO * out , prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
2006-04-11 19:47:24 +04:00
1998-03-12 00:11:04 +03:00
prs_debug ( ps , depth , desc , " lsa_io_r_query " ) ;
depth + + ;
2006-04-11 19:47:24 +04:00
if ( ! prs_align ( ps ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2006-04-11 19:47:24 +04:00
if ( ! prs_uint32 ( " dom_ptr " , ps , depth , & out - > dom_ptr ) )
return False ;
1998-03-12 00:11:04 +03:00
2006-04-11 19:47:24 +04:00
if ( out - > dom_ptr ) {
2001-01-25 05:35:50 +03:00
2006-04-11 19:47:24 +04:00
if ( ! lsa_io_query_info_ctr ( " " , ps , depth , & out - > ctr ) )
return False ;
1998-03-12 00:11:04 +03:00
}
2001-01-25 05:35:50 +03:00
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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
}
2006-04-11 19:47:24 +04:00
/*******************************************************************
Reads or writes an LSA_Q_SET_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_set ( const char * desc , LSA_Q_SET_INFO * in , prs_struct * ps ,
int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_set " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
return False ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & in - > info_class ) )
return False ;
if ( ! lsa_io_query_info_ctr ( " " , ps , depth , & in - > ctr ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_SET_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_set ( const char * desc , LSA_R_SET_INFO * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_set " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
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
2002-07-15 14:35:28 +04:00
static void init_lsa_sid_enum ( TALLOC_CTX * mem_ctx , LSA_SID_ENUM * sen ,
2004-01-05 05:04:37 +03:00
int num_entries , const 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 */
2007-04-30 04:48:20 +04:00
if ( num_entries ) {
if ( ( sen - > ptr_sid = TALLOC_ZERO_ARRAY ( mem_ctx , uint32 , num_entries ) ) = = NULL ) {
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for ptr_sid \n " ) ) ;
return ;
}
2000-12-12 05:45:11 +03:00
2007-04-30 04:48:20 +04:00
if ( ( sen - > sid = TALLOC_ZERO_ARRAY ( mem_ctx , DOM_SID2 , num_entries ) ) = = NULL ) {
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for sids \n " ) ) ;
return ;
}
2000-12-12 05:45:11 +03:00
}
/* 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
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_sid_enum ( const char * desc , LSA_SID_ENUM * sen , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
int depth )
1998-03-12 00:11:04 +03:00
{
2003-03-18 02:04:03 +03:00
unsigned 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 */
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & sen - > num_entries ) {
2004-12-07 21:25:53 +03:00
if ( ( sen - > ptr_sid = PRS_ALLOC_MEM ( ps , uint32 , sen - > num_entries ) ) = = NULL ) {
2000-12-12 05:45:11 +03:00
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for "
" ptr_sid \n " ) ) ;
return False ;
}
2004-12-07 21:25:53 +03:00
if ( ( sen - > sid = PRS_ALLOC_MEM ( ps , DOM_SID2 , sen - > num_entries ) ) = = NULL ) {
2000-12-12 05:45:11 +03:00
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 ,
2004-01-05 05:04:37 +03:00
POLICY_HND * hnd , int num_sids , const DOM_SID * sids ,
2000-12-12 05:45:11 +03:00
uint16 level )
1998-12-02 01:18:48 +03:00
{
2003-06-03 11:21:09 +04:00
DEBUG ( 5 , ( " init_q_lookup_sids \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 ) ;
2005-03-24 02:26:33 +03:00
q_l - > level = level ;
1999-12-13 16:27:58 +03:00
}
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
2003-01-03 11:28:12 +03:00
BOOL lsa_io_q_lookup_sids ( const char * desc , LSA_Q_LOOKUP_SIDS * q_s , prs_struct * ps ,
2001-01-12 01:54:12 +03:00
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 ;
2005-03-24 02:26:33 +03:00
if ( ! prs_uint16 ( " level " , ps , depth , & q_s - > level ) ) /* lookup level */
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 16:27:58 +03:00
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
}
2006-02-11 02:52:53 +03:00
/*******************************************************************
Reads or writes a LSA_Q_LOOKUP_SIDS2 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_lookup_sids2 ( const char * desc , LSA_Q_LOOKUP_SIDS2 * q_s , prs_struct * ps ,
int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_sids2 " ) ;
depth + + ;
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_names2 ( " names " , & q_s - > names , ps , depth ) ) /* translated names */
return False ;
if ( ! prs_uint16 ( " level " , ps , depth , & q_s - > level ) ) /* lookup level */
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_s - > mapped_count ) )
return False ;
if ( ! prs_uint32 ( " unknown1 " , ps , depth , & q_s - > unknown1 ) )
return False ;
if ( ! prs_uint32 ( " unknown2 " , ps , depth , & q_s - > unknown2 ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes a LSA_Q_LOOKUP_SIDS3 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_lookup_sids3 ( const char * desc , LSA_Q_LOOKUP_SIDS3 * q_s , prs_struct * ps ,
int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_sids3 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! lsa_io_sid_enum ( " sids " , & q_s - > sids , ps , depth ) ) /* sids to be looked up */
return False ;
if ( ! lsa_io_trans_names2 ( " names " , & q_s - > names , ps , depth ) ) /* translated names */
return False ;
if ( ! prs_uint16 ( " level " , ps , depth , & q_s - > level ) ) /* lookup level */
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_s - > mapped_count ) )
return False ;
if ( ! prs_uint32 ( " unknown1 " , ps , depth , & q_s - > unknown1 ) )
return False ;
if ( ! prs_uint32 ( " unknown2 " , ps , depth , & q_s - > unknown2 ) )
return False ;
return True ;
}
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
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_trans_names ( const char * desc , LSA_TRANS_NAME_ENUM * trn ,
1999-12-13 16:27:58 +03:00
prs_struct * ps , int depth )
1998-09-30 23:09:57 +04:00
{
2003-03-18 02:04:03 +03:00
unsigned 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
2007-05-14 18:23:51 +04:00
if ( trn - > num_entries2 ! = trn - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & trn - > num_entries2 ) {
2007-05-14 18:23:51 +04:00
if ( ( trn - > name = PRS_ALLOC_MEM ( ps , LSA_TRANS_NAME , trn - > num_entries2 ) ) = = NULL ) {
2000-12-12 05:45:11 +03:00
return False ;
}
2007-05-14 18:23:51 +04:00
if ( ( trn - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , trn - > num_entries2 ) ) = = NULL ) {
2000-12-12 05:45:11 +03:00
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
}
2006-02-11 02:52:53 +03:00
/*******************************************************************
Reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_trans_names2 ( const char * desc , LSA_TRANS_NAME_ENUM2 * trn ,
prs_struct * ps , int depth )
{
unsigned int i ;
prs_debug ( ps , depth , desc , " lsa_io_trans_names2 " ) ;
depth + + ;
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 ;
if ( trn - > ptr_trans_names ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth ,
& trn - > num_entries2 ) )
return False ;
2007-05-14 18:23:51 +04:00
if ( trn - > num_entries2 ! = trn - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & trn - > num_entries2 ) {
2007-05-14 18:23:51 +04:00
if ( ( trn - > name = PRS_ALLOC_MEM ( ps , LSA_TRANS_NAME2 , trn - > num_entries2 ) ) = = NULL ) {
2006-02-11 02:52:53 +03:00
return False ;
}
2007-05-14 18:23:51 +04:00
if ( ( trn - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , trn - > num_entries2 ) ) = = NULL ) {
2006-02-11 02:52:53 +03:00
return False ;
}
}
for ( i = 0 ; i < trn - > num_entries2 ; i + + ) {
fstring t ;
slprintf ( t , sizeof ( t ) - 1 , " name[%d] " , i ) ;
if ( ! lsa_io_trans_name2 ( t , & trn - > name [ i ] , ps , depth ) ) /* translated name */
return False ;
}
for ( i = 0 ; i < trn - > num_entries2 ; i + + ) {
fstring t ;
slprintf ( t , sizeof ( t ) - 1 , " name[%d] " , i ) ;
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 ;
}
}
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
2003-01-03 11:28:12 +03:00
BOOL lsa_io_r_lookup_sids ( const char * desc , LSA_R_LOOKUP_SIDS * r_s ,
2001-01-12 01:54:12 +03:00
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
}
2006-02-11 02:52:53 +03:00
/*******************************************************************
Reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_lookup_sids2 ( const char * desc , LSA_R_LOOKUP_SIDS2 * r_s ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_sids2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & r_s - > ptr_dom_ref ) )
return False ;
if ( r_s - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " dom_ref " , r_s - > dom_ref , ps , depth ) ) /* domain reference info */
return False ;
if ( ! lsa_io_trans_names2 ( " names " , r_s - > names , ps , depth ) ) /* translated names */
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & r_s - > mapped_count ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_s - > status ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_lookup_sids3 ( const char * desc , LSA_R_LOOKUP_SIDS3 * r_s ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_sids3 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & r_s - > ptr_dom_ref ) )
return False ;
if ( r_s - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " dom_ref " , r_s - > dom_ref , ps , depth ) ) /* domain reference info */
return False ;
if ( ! lsa_io_trans_names2 ( " names " , r_s - > names , ps , depth ) ) /* translated names */
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & r_s - > mapped_count ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_s - > status ) )
return False ;
return True ;
}
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
{
2003-03-18 02:04:03 +03:00
unsigned 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
2007-04-30 04:48:20 +04:00
if ( num_names ) {
if ( ( q_l - > uni_name = TALLOC_ZERO_ARRAY ( mem_ctx , UNISTR2 , num_names ) ) = = NULL ) {
DEBUG ( 3 , ( " init_q_lookup_names(): out of memory \n " ) ) ;
return ;
}
2000-12-13 14:53:37 +03:00
2007-04-30 04:48:20 +04:00
if ( ( q_l - > hdr_name = TALLOC_ZERO_ARRAY ( mem_ctx , UNIHDR , num_names ) ) = = NULL ) {
DEBUG ( 3 , ( " init_q_lookup_names(): out of memory \n " ) ) ;
return ;
}
} else {
q_l - > uni_name = NULL ;
q_l - > hdr_name = NULL ;
2000-12-13 14:53:37 +03:00
}
1998-12-05 00:48:06 +03:00
1999-12-13 16:27:58 +03:00
for ( i = 0 ; i < num_names ; i + + ) {
2003-09-26 01:26:16 +04:00
init_unistr2 ( & q_l - > uni_name [ i ] , names [ i ] , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & q_l - > hdr_name [ i ] , & q_l - > uni_name [ i ] ) ;
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
2003-01-03 11:28:12 +03:00
BOOL lsa_io_q_lookup_names ( const char * desc , LSA_Q_LOOKUP_NAMES * q_r ,
2001-01-12 01:54:12 +03:00
prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
2003-03-18 02:04:03 +03:00
unsigned 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 ) {
2004-12-07 21:25:53 +03:00
if ( ( q_r - > hdr_name = PRS_ALLOC_MEM ( ps , UNIHDR , q_r - > num_entries ) ) = = NULL )
2000-12-15 04:02:11 +03:00
return False ;
2004-12-07 21:25:53 +03:00
if ( ( q_r - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , q_r - > num_entries ) ) = = NULL )
2000-12-15 04:02:11 +03:00
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 ;
2006-02-11 08:36:27 +03:00
if ( ! prs_uint16 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 16:27:58 +03:00
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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_lookup_names ( const char * desc , LSA_R_LOOKUP_NAMES * out , prs_struct * ps , int depth )
1998-03-12 00:11:04 +03:00
{
2003-03-18 02:04:03 +03:00
unsigned 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 ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & out - > ptr_dom_ref ) )
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( out - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " " , out - > dom_ref , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " num_entries " , ps , depth , & out - > num_entries ) )
1999-12-13 16:27:58 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_entries " , ps , depth , & out - > ptr_entries ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2005-05-31 17:46:45 +04:00
if ( out - > ptr_entries ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & out - > num_entries2 ) )
1999-12-13 16:27:58 +03:00
return False ;
1999-03-24 15:18:28 +03:00
2005-05-31 17:46:45 +04:00
if ( out - > num_entries2 ! = out - > 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
}
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 05:46:41 +03:00
if ( ( out - > dom_rid = PRS_ALLOC_MEM ( ps , DOM_RID , out - > num_entries2 ) )
2000-12-15 04:02:11 +03:00
= = NULL ) {
DEBUG ( 3 , ( " lsa_io_r_lookup_names(): out of memory \n " ) ) ;
return False ;
}
2000-12-13 14:53:37 +03:00
}
2006-02-11 05:46:41 +03:00
for ( i = 0 ; i < out - > num_entries2 ; i + + )
if ( ! smb_io_dom_rid ( " " , & out - > dom_rid [ i ] , ps , depth ) ) /* domain RIDs being looked up */
return False ;
}
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & out - > mapped_count ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_lookup_names2 ( const char * desc , LSA_Q_LOOKUP_NAMES2 * q_r ,
prs_struct * ps , int depth )
{
unsigned int i ;
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_names2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & q_r - > pol , ps , depth ) ) /* policy handle */
return False ;
if ( ! prs_align ( ps ) )
return False ;
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 ;
if ( UNMARSHALLING ( ps ) ) {
if ( q_r - > num_entries ) {
if ( ( q_r - > hdr_name = PRS_ALLOC_MEM ( ps , UNIHDR , q_r - > num_entries ) ) = = NULL )
return False ;
if ( ( q_r - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , q_r - > num_entries ) ) = = NULL )
return False ;
}
}
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_name " , & q_r - > hdr_name [ i ] , ps , depth ) ) /* pointer names */
return False ;
}
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
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 ;
}
if ( ! prs_align ( ps ) )
return False ;
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 ;
2006-02-11 08:36:27 +03:00
if ( ! prs_uint16 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_align ( ps ) )
2006-02-11 05:46:41 +03:00
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_r - > mapped_count ) )
return False ;
if ( ! prs_uint32 ( " unknown1 " , ps , depth , & q_r - > unknown1 ) )
return False ;
if ( ! prs_uint32 ( " unknown2 " , ps , depth , & q_r - > unknown2 ) )
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_lookup_names2 ( const char * desc , LSA_R_LOOKUP_NAMES2 * out , prs_struct * ps , int depth )
{
unsigned int i ;
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_names2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & out - > ptr_dom_ref ) )
return False ;
if ( out - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " " , out - > dom_ref , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " num_entries " , ps , depth , & out - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_entries " , ps , depth , & out - > ptr_entries ) )
return False ;
if ( out - > ptr_entries ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & out - > num_entries2 ) )
return False ;
if ( out - > num_entries2 ! = out - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 05:46:41 +03:00
if ( ( out - > dom_rid = PRS_ALLOC_MEM ( ps , DOM_RID2 , out - > num_entries2 ) )
= = NULL ) {
DEBUG ( 3 , ( " lsa_io_r_lookup_names2(): out of memory \n " ) ) ;
return False ;
}
}
2005-05-31 17:46:45 +04:00
for ( i = 0 ; i < out - > num_entries2 ; i + + )
if ( ! smb_io_dom_rid2 ( " " , & out - > dom_rid [ i ] , ps , depth ) ) /* domain RIDs being looked up */
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
}
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & out - > mapped_count ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-03-12 00:11:04 +03:00
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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
}
2006-02-11 08:36:27 +03:00
/*******************************************************************
Internal lsa data type io .
Following pass must read DOM_SID2 types .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL smb_io_lsa_translated_sids3 ( const char * desc , LSA_TRANSLATED_SID3 * q_r ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " smb_io_lsa_translated_sids3 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint8 ( " sid_type " , ps , depth , & q_r - > sid_type ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
/* Second pass will read/write these. */
if ( ! smb_io_dom_sid2_p ( " sid_header " , ps , depth , & q_r - > sid2 ) )
return False ;
if ( ! prs_uint32 ( " sid_idx " , ps , depth , & q_r - > sid_idx ) )
return False ;
if ( ! prs_uint32 ( " unknown " , ps , depth , & q_r - > unknown ) )
return False ;
return True ;
}
/*******************************************************************
Identical to lsa_io_q_lookup_names2 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_lookup_names3 ( const char * desc , LSA_Q_LOOKUP_NAMES3 * q_r ,
prs_struct * ps , int depth )
{
unsigned int i ;
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_names3 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & q_r - > pol , ps , depth ) ) /* policy handle */
return False ;
if ( ! prs_align ( ps ) )
return False ;
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 ;
if ( UNMARSHALLING ( ps ) ) {
if ( q_r - > num_entries ) {
if ( ( q_r - > hdr_name = PRS_ALLOC_MEM ( ps , UNIHDR , q_r - > num_entries ) ) = = NULL )
return False ;
if ( ( q_r - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , q_r - > num_entries ) ) = = NULL )
return False ;
}
}
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_name " , & q_r - > hdr_name [ i ] , ps , depth ) ) /* pointer names */
return False ;
}
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
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 ;
}
if ( ! prs_align ( ps ) )
return False ;
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_uint16 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_r - > mapped_count ) )
return False ;
if ( ! prs_uint32 ( " unknown1 " , ps , depth , & q_r - > unknown1 ) )
return False ;
if ( ! prs_uint32 ( " unknown2 " , ps , depth , & q_r - > unknown2 ) )
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_lookup_names3 ( const char * desc , LSA_R_LOOKUP_NAMES3 * out , prs_struct * ps , int depth )
{
unsigned int i ;
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_names3 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & out - > ptr_dom_ref ) )
return False ;
if ( out - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " " , out - > dom_ref , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " num_entries " , ps , depth , & out - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_entries " , ps , depth , & out - > ptr_entries ) )
return False ;
if ( out - > ptr_entries ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & out - > num_entries2 ) )
return False ;
if ( out - > num_entries2 ! = out - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 08:36:27 +03:00
if ( ( out - > trans_sids = PRS_ALLOC_MEM ( ps , LSA_TRANSLATED_SID3 , out - > num_entries2 ) )
= = NULL ) {
DEBUG ( 3 , ( " lsa_io_r_lookup_names3(): out of memory \n " ) ) ;
return False ;
}
}
1998-09-26 01:01:52 +04:00
2006-02-11 08:36:27 +03:00
for ( i = 0 ; i < out - > num_entries2 ; i + + ) {
if ( ! smb_io_lsa_translated_sids3 ( " " , & out - > trans_sids [ i ] , ps , depth ) ) {
return False ;
}
}
/* Now process the DOM_SID2 entries. */
for ( i = 0 ; i < out - > num_entries2 ; i + + ) {
if ( out - > trans_sids [ i ] . sid2 ) {
if ( ! smb_io_dom_sid2 ( " sid2 " , out - > trans_sids [ i ] . sid2 , ps , depth ) ) {
return False ;
}
}
}
}
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & out - > mapped_count ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_lookup_names4 ( const char * desc , LSA_Q_LOOKUP_NAMES4 * q_r ,
prs_struct * ps , int depth )
{
unsigned int i ;
2006-02-16 04:06:21 +03:00
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_names4 " ) ;
2006-02-11 08:36:27 +03:00
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
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 ;
if ( UNMARSHALLING ( ps ) ) {
if ( q_r - > num_entries ) {
if ( ( q_r - > hdr_name = PRS_ALLOC_MEM ( ps , UNIHDR , q_r - > num_entries ) ) = = NULL )
return False ;
if ( ( q_r - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , q_r - > num_entries ) ) = = NULL )
return False ;
}
}
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_unihdr ( " hdr_name " , & q_r - > hdr_name [ i ] , ps , depth ) ) /* pointer names */
return False ;
}
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
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 ;
}
if ( ! prs_align ( ps ) )
return False ;
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_uint16 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_r - > mapped_count ) )
return False ;
if ( ! prs_uint32 ( " unknown1 " , ps , depth , & q_r - > unknown1 ) )
return False ;
if ( ! prs_uint32 ( " unknown2 " , ps , depth , & q_r - > unknown2 ) )
return False ;
return True ;
}
/*******************************************************************
Identical to lsa_io_r_lookup_names3 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_lookup_names4 ( const char * desc , LSA_R_LOOKUP_NAMES4 * out , prs_struct * ps , int depth )
{
unsigned int i ;
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_names4 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & out - > ptr_dom_ref ) )
return False ;
if ( out - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " " , out - > dom_ref , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " num_entries " , ps , depth , & out - > num_entries ) )
return False ;
if ( ! prs_uint32 ( " ptr_entries " , ps , depth , & out - > ptr_entries ) )
return False ;
if ( out - > ptr_entries ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & out - > num_entries2 ) )
return False ;
if ( out - > num_entries2 ! = out - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 08:36:27 +03:00
if ( ( out - > trans_sids = PRS_ALLOC_MEM ( ps , LSA_TRANSLATED_SID3 , out - > num_entries2 ) )
= = NULL ) {
DEBUG ( 3 , ( " lsa_io_r_lookup_names4(): out of memory \n " ) ) ;
return False ;
}
}
for ( i = 0 ; i < out - > num_entries2 ; i + + ) {
if ( ! smb_io_lsa_translated_sids3 ( " " , & out - > trans_sids [ i ] , ps , depth ) ) {
return False ;
}
}
/* Now process the DOM_SID2 entries. */
for ( i = 0 ; i < out - > num_entries2 ; i + + ) {
if ( out - > trans_sids [ i ] . sid2 ) {
if ( ! smb_io_dom_sid2 ( " sid2 " , out - > trans_sids [ i ] . sid2 , ps , depth ) ) {
return False ;
}
}
}
}
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & out - > mapped_count ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
2006-02-11 05:46:41 +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
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_lsa_q_close ( LSA_Q_CLOSE * in , POLICY_HND * hnd )
1999-12-13 16:27:58 +03:00
{
2000-12-08 06:34:00 +03:00
DEBUG ( 5 , ( " init_lsa_q_close \n " ) ) ;
1998-09-26 01:01:52 +04:00
2005-05-31 17:46:45 +04:00
memcpy ( & in - > pol , hnd , sizeof ( in - > 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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_close ( const char * desc , LSA_Q_CLOSE * in , prs_struct * ps , int depth )
1998-09-26 01:01:52 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_close " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
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
}
/*******************************************************************
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
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_close ( const char * desc , LSA_R_CLOSE * out , prs_struct * ps , int depth )
1998-09-26 01:01:52 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_close " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & out - > pol , ps , depth ) )
1999-12-13 16:27:58 +03:00
return False ;
1998-09-26 01:01:52 +04:00
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_open_secret ( const char * desc , LSA_Q_OPEN_SECRET * in , prs_struct * ps , int depth )
2001-02-26 11:10:51 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_secret " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > handle , ps , depth ) )
return False ;
if ( ! prs_unistr4 ( " secretname " , ps , depth , & in - > secretname ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & in - > access ) )
return False ;
2001-02-26 11:10:51 +03:00
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPEN_SECRET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_open_secret ( const char * desc , LSA_R_OPEN_SECRET * out , prs_struct * ps , int depth )
2001-02-26 11:10:51 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_secret " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & out - > handle , ps , depth ) )
2001-02-26 11:10:51 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_q_enum_privs ( LSA_Q_ENUM_PRIVS * in , POLICY_HND * hnd , uint32 enum_context , uint32 pref_max_length )
2001-11-22 19:12:43 +03:00
{
DEBUG ( 5 , ( " init_q_enum_privs \n " ) ) ;
2005-05-31 17:46:45 +04:00
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
2001-11-22 19:12:43 +03:00
2005-05-31 17:46:45 +04:00
in - > enum_context = enum_context ;
in - > pref_max_length = pref_max_length ;
2001-11-22 19:12:43 +03:00
}
2001-07-09 22:32:54 +04:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_enum_privs ( const char * desc , LSA_Q_ENUM_PRIVS * in , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2005-05-31 17:46:45 +04:00
if ( in = = NULL )
2001-07-09 22:32:54 +04:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_privs " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & in - > enum_context ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " pref_max_length " , ps , depth , & in - > pref_max_length ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2003-01-03 11:28:12 +03:00
static BOOL lsa_io_priv_entries ( const char * desc , LSA_PRIV_ENTRY * entries , uint32 count , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_lsa_r_enum_privs ( LSA_R_ENUM_PRIVS * out , uint32 enum_context ,
2001-07-09 22:32:54 +04:00
uint32 count , LSA_PRIV_ENTRY * entries )
{
DEBUG ( 5 , ( " init_lsa_r_enum_privs \n " ) ) ;
2005-05-31 17:46:45 +04:00
out - > enum_context = enum_context ;
out - > count = count ;
2001-07-09 22:32:54 +04:00
if ( entries ! = NULL ) {
2005-05-31 17:46:45 +04:00
out - > ptr = 1 ;
out - > count1 = count ;
out - > privs = entries ;
2001-07-09 22:32:54 +04:00
} else {
2005-05-31 17:46:45 +04:00
out - > ptr = 0 ;
out - > count1 = 0 ;
out - > privs = NULL ;
2001-07-09 22:32:54 +04:00
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_enum_privs ( const char * desc , LSA_R_ENUM_PRIVS * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2005-05-31 17:46:45 +04:00
if ( out = = NULL )
2001-07-09 22:32:54 +04:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_enum_privs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & out - > enum_context ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( out - > ptr ) {
if ( ! prs_uint32 ( " count1 " , ps , depth , & out - > count1 ) )
2001-07-09 22:32:54 +04:00
return False ;
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & out - > count1 )
2005-05-31 17:46:45 +04:00
if ( ! ( out - > privs = PRS_ALLOC_MEM ( ps , LSA_PRIV_ENTRY , out - > count1 ) ) )
2001-11-22 19:12:43 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_priv_entries ( " " , out - > privs , out - > count1 , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
}
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2003-01-03 11:28:12 +03:00
void init_lsa_priv_get_dispname ( LSA_Q_PRIV_GET_DISPNAME * trn , POLICY_HND * hnd , const char * name , uint16 lang_id , uint16 lang_id_sys )
2001-11-22 19:54:48 +03:00
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
2003-09-26 01:26:16 +04:00
init_unistr2 ( & trn - > name , name , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & trn - > hdr_name , & trn - > name ) ;
2001-11-22 19:54:48 +03:00
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_priv_get_dispname ( const char * desc , LSA_Q_PRIV_GET_DISPNAME * in , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2005-05-31 17:46:45 +04:00
if ( in = = NULL )
2001-07-09 22:32:54 +04:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_priv_get_dispname " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unihdr ( " hdr_name " , & in - > hdr_name , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( " name " , & in - > name , in - > hdr_name . buffer , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint16 ( " lang_id " , ps , depth , & in - > lang_id ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint16 ( " lang_id_sys " , ps , depth , & in - > lang_id_sys ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_priv_get_dispname ( const char * desc , LSA_R_PRIV_GET_DISPNAME * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2005-05-31 17:46:45 +04:00
if ( out = = NULL )
2001-07-09 22:32:54 +04:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_priv_get_dispname " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_info " , ps , depth , & out - > ptr_info ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( out - > ptr_info ) {
if ( ! smb_io_unihdr ( " hdr_name " , & out - > hdr_desc , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( " desc " , & out - > desc , out - > hdr_desc . buffer , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
}
/*
if ( ! prs_align ( ps ) )
return False ;
*/
2005-05-31 17:46:45 +04:00
if ( ! prs_uint16 ( " lang_id " , ps , depth , & out - > lang_id ) )
2001-07-09 22:32:54 +04:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2003-01-29 00:09:56 +03:00
/*
initialise a LSA_Q_ENUM_ACCOUNTS structure
*/
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_enum_accounts ( const char * desc , LSA_Q_ENUM_ACCOUNTS * in , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2005-05-31 17:46:45 +04:00
if ( in = = NULL )
2001-07-09 22:32:54 +04:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_accounts " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & in - > enum_context ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " pref_max_length " , ps , depth , & in - > pref_max_length ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
2003-01-29 00:09:56 +03:00
2001-07-09 22:32:54 +04:00
/*******************************************************************
Inits an LSA_R_ENUM_PRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_lsa_r_enum_accounts ( LSA_R_ENUM_ACCOUNTS * out , uint32 enum_context )
2001-07-09 22:32:54 +04:00
{
DEBUG ( 5 , ( " init_lsa_r_enum_accounts \n " ) ) ;
2005-05-31 17:46:45 +04:00
out - > enum_context = enum_context ;
if ( out - > enum_context ! = 0 ) {
out - > sids . num_entries = enum_context ;
out - > sids . ptr_sid_enum = 1 ;
out - > sids . num_entries2 = enum_context ;
2001-07-09 22:32:54 +04:00
} else {
2005-05-31 17:46:45 +04:00
out - > sids . num_entries = 0 ;
out - > sids . ptr_sid_enum = 0 ;
out - > sids . num_entries2 = 0 ;
2001-07-09 22:32:54 +04:00
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_enum_accounts ( const char * desc , LSA_R_ENUM_ACCOUNTS * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2005-05-31 17:46:45 +04:00
if ( out = = NULL )
2001-07-09 22:32:54 +04:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_enum_accounts " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & out - > enum_context ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_sid_enum ( " sids " , & out - > sids , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_unk_get_connuser ( const char * desc , LSA_Q_UNK_GET_CONNUSER * in , prs_struct * ps , int depth )
2001-06-30 03:12:55 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_unk_get_connuser " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_srvname " , ps , depth , & in - > ptr_srvname ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( " uni2_srvname " , & in - > uni2_srvname , in - > ptr_srvname , ps , depth ) ) /* server name to be looked up */
2001-06-30 03:12:55 +04:00
return False ;
2001-12-18 02:03:23 +03:00
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " unk1 " , ps , depth , & in - > unk1 ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " unk2 " , ps , depth , & in - > unk2 ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " unk3 " , ps , depth , & in - > unk3 ) )
2001-06-30 03:12:55 +04:00
return False ;
/* Don't bother to read or write at present... */
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_UNK_GET_CONNUSER structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_unk_get_connuser ( const char * desc , LSA_R_UNK_GET_CONNUSER * out , prs_struct * ps , int depth )
2001-06-30 03:12:55 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_unk_get_connuser " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_user_name " , ps , depth , & out - > ptr_user_name ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unihdr ( " hdr_user_name " , & out - > hdr_user_name , ps , depth ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( " uni2_user_name " , & out - > uni2_user_name , out - > ptr_user_name , ps , depth ) )
2001-06-30 03:12:55 +04:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " unk1 " , ps , depth , & out - > unk1 ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr_dom_name " , ps , depth , & out - > ptr_dom_name ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unihdr ( " hdr_dom_name " , & out - > hdr_dom_name , ps , depth ) )
2001-06-30 03:12:55 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_unistr2 ( " uni2_dom_name " , & out - > uni2_dom_name , out - > ptr_dom_name , ps , depth ) )
2001-06-30 03:12:55 +04:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-06-30 03:12:55 +04:00
return False ;
return True ;
}
2001-07-09 22:32:54 +04:00
2005-01-13 21:20:37 +03:00
void init_lsa_q_create_account ( LSA_Q_CREATEACCOUNT * trn , POLICY_HND * hnd , DOM_SID * sid , uint32 desired_access )
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
init_dom_sid2 ( & trn - > sid , sid ) ;
trn - > access = desired_access ;
}
/*******************************************************************
Reads or writes an LSA_Q_CREATEACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_create_account ( const char * desc , LSA_Q_CREATEACCOUNT * out , prs_struct * ps , int depth )
2005-01-13 21:20:37 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_create_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2005-01-13 21:20:37 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_dom_sid2 ( " sid " , & out - > sid , ps , depth ) ) /* domain SID */
2005-01-13 21:20:37 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2005-01-13 21:20:37 +03:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_CREATEACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_create_account ( const char * desc , LSA_R_CREATEACCOUNT * out , prs_struct * ps , int depth )
2005-01-13 21:20:37 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2005-01-13 21:20:37 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2005-01-13 21:20:37 +03:00
return False ;
return True ;
}
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_open_account ( const char * desc , LSA_Q_OPENACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_dom_sid2 ( " sid " , & out - > sid , ps , depth ) ) /* domain SID */
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPENACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_open_account ( const char * desc , LSA_R_OPENACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_enum_privsaccount ( const char * desc , LSA_Q_ENUMPRIVSACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_enum_privsaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LUID structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
static BOOL lsa_io_luid ( const char * desc , LUID * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_luid " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " low " , ps , depth , & out - > low ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " high " , ps , depth , & out - > high ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LUID_ATTR structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
static BOOL lsa_io_luid_attr ( const char * desc , LUID_ATTR * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_luid_attr " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_luid ( desc , & out - > luid , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " attr " , ps , depth , & out - > attr ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an PRIVILEGE_SET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
static BOOL lsa_io_privilege_set ( const char * desc , PRIVILEGE_SET * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
2007-05-14 18:23:51 +04:00
uint32 i , dummy ;
2001-07-09 22:32:54 +04:00
prs_debug ( ps , depth , desc , " lsa_io_privilege_set " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2007-05-14 18:23:51 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & dummy ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " control " , ps , depth , & out - > control ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
for ( i = 0 ; i < out - > count ; i + + ) {
if ( ! lsa_io_luid_attr ( desc , & out - > set [ i ] , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
}
return True ;
}
2005-05-31 17:46:45 +04:00
NTSTATUS init_lsa_r_enum_privsaccount ( TALLOC_CTX * mem_ctx , LSA_R_ENUMPRIVSACCOUNT * out , LUID_ATTR * set , uint32 count , uint32 control )
2001-07-09 22:32:54 +04:00
{
2003-10-07 09:06:58 +04:00
NTSTATUS ret = NT_STATUS_OK ;
2003-10-06 05:38:46 +04:00
2005-05-31 17:46:45 +04:00
out - > ptr = 1 ;
out - > count = count ;
2003-10-06 05:38:46 +04:00
2005-05-31 17:46:45 +04:00
if ( ! NT_STATUS_IS_OK ( ret = privilege_set_init_by_ctx ( mem_ctx , & ( out - > set ) ) ) )
2003-10-06 05:38:46 +04:00
return ret ;
2005-05-31 17:46:45 +04:00
out - > set . count = count ;
2005-01-13 21:20:37 +03:00
2005-05-31 17:46:45 +04:00
if ( ! NT_STATUS_IS_OK ( ret = dup_luid_attr ( out - > set . mem_ctx , & ( out - > set . set ) , set , count ) ) )
2003-10-06 05:38:46 +04:00
return ret ;
2005-05-31 17:46:45 +04:00
DEBUG ( 10 , ( " init_lsa_r_enum_privsaccount: %d privileges \n " , out - > count ) ) ;
2003-10-07 09:06:58 +04:00
return ret ;
2001-07-09 22:32:54 +04:00
}
/*******************************************************************
Reads or writes an LSA_R_ENUMPRIVSACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_enum_privsaccount ( const char * desc , LSA_R_ENUMPRIVSACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_privsaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( out - > ptr ! = 0 ) {
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-07-09 22:32:54 +04:00
return False ;
/* malloc memory if unmarshalling here */
2001-11-24 03:13:41 +03:00
2005-05-31 17:46:45 +04:00
if ( UNMARSHALLING ( ps ) & & out - > count ! = 0 ) {
if ( ! NT_STATUS_IS_OK ( privilege_set_init_by_ctx ( ps - > mem_ctx , & ( out - > set ) ) ) )
2003-10-06 05:38:46 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! ( out - > set . set = PRS_ALLOC_MEM ( ps , LUID_ATTR , out - > count ) ) )
2001-11-24 03:13:41 +03:00
return False ;
}
2001-07-09 22:32:54 +04:00
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_privilege_set ( desc , & out - > set , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
}
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_GETSYSTEMACCOUNTstructure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_getsystemaccount ( const char * desc , LSA_Q_GETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_getsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 22:32:54 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_GETSYSTEMACCOUNTstructure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_getsystemaccount ( const char * desc , LSA_R_GETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 22:32:54 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_getsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2001-07-09 22:32:54 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > 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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_setsystemaccount ( const char * desc , LSA_Q_SETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-11-29 19:05:05 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_setsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-29 19:05:05 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2001-11-29 19:05:05 +03:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_SETSYSTEMACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_setsystemaccount ( const char * desc , LSA_R_SETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-11-29 19:05:05 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_setsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-29 19:05:05 +03:00
return False ;
return True ;
}
2006-09-19 20:15:54 +04:00
void init_lsa_string ( LSA_STRING * uni , const char * string )
2001-11-24 03:13:41 +03:00
{
2005-03-10 21:50:47 +03:00
init_unistr2 ( & uni - > unistring , string , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & uni - > hdr , & uni - > unistring ) ;
}
void init_lsa_q_lookup_priv_value ( LSA_Q_LOOKUP_PRIV_VALUE * q_u , POLICY_HND * hnd , const char * name )
{
memcpy ( & q_u - > pol , hnd , sizeof ( q_u - > pol ) ) ;
init_lsa_string ( & q_u - > privname , name ) ;
}
BOOL smb_io_lsa_string ( const char * desc , LSA_STRING * string , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " smb_io_lsa_string " ) ;
depth + + ;
if ( ! smb_io_unihdr ( " hdr " , & string - > hdr , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " unistring " , & string - > unistring , string - > hdr . buffer , ps , depth ) )
return False ;
return True ;
2001-11-24 03:13:41 +03:00
}
/*******************************************************************
2005-03-10 21:50:47 +03:00
Reads or writes an LSA_Q_LOOKUP_PRIV_VALUE structure .
2001-11-24 03:13:41 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_lookup_priv_value ( const char * desc , LSA_Q_LOOKUP_PRIV_VALUE * out , prs_struct * ps , int depth )
2001-11-24 03:13:41 +03:00
{
2005-03-10 21:50:47 +03:00
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_priv_value " ) ;
2001-11-24 03:13:41 +03:00
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-24 03:13:41 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_lsa_string ( " privname " , & out - > privname , ps , depth ) )
2001-11-24 03:13:41 +03:00
return False ;
return True ;
}
/*******************************************************************
2005-03-10 21:50:47 +03:00
Reads or writes an LSA_R_LOOKUP_PRIV_VALUE structure .
2001-11-24 03:13:41 +03:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_lookup_priv_value ( const char * desc , LSA_R_LOOKUP_PRIV_VALUE * out , prs_struct * ps , int depth )
2001-11-24 03:13:41 +03:00
{
2005-03-10 21:50:47 +03:00
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_priv_value " ) ;
2001-11-24 03:13:41 +03:00
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_luid ( " luid " , & out - > luid , ps , depth ) )
2001-11-24 03:13:41 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-24 03:13:41 +03:00
return False ;
return True ;
}
2001-11-29 19:05:05 +03:00
/*******************************************************************
Reads or writes an LSA_Q_ADDPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_addprivs ( const char * desc , LSA_Q_ADDPRIVS * out , prs_struct * ps , int depth )
2001-11-29 19:05:05 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_addprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-29 19:05:05 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-11-29 19:05:05 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( UNMARSHALLING ( ps ) & & out - > count ! = 0 ) {
if ( ! NT_STATUS_IS_OK ( privilege_set_init_by_ctx ( ps - > mem_ctx , & ( out - > set ) ) ) )
2003-10-06 05:38:46 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! ( out - > set . set = PRS_ALLOC_MEM ( ps , LUID_ATTR , out - > count ) ) )
2001-11-29 19:05:05 +03:00
return False ;
}
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_privilege_set ( desc , & out - > set , ps , depth ) )
2001-11-29 19:05:05 +03:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_ADDPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_addprivs ( const char * desc , LSA_R_ADDPRIVS * out , prs_struct * ps , int depth )
2001-11-29 19:05:05 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_addprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-29 19:05:05 +03:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_REMOVEPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_removeprivs ( const char * desc , LSA_Q_REMOVEPRIVS * out , prs_struct * ps , int depth )
2001-11-29 19:05:05 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_removeprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-29 19:05:05 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " allrights " , ps , depth , & out - > allrights ) )
2001-11-29 19:05:05 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2001-11-29 19:05:05 +03:00
return False ;
/*
* JFM : I ' m not sure at all if the count is inside the ptr
* never seen one with ptr = 0
*/
2005-05-31 17:46:45 +04:00
if ( out - > ptr ! = 0 ) {
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-11-29 19:05:05 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( UNMARSHALLING ( ps ) & & out - > count ! = 0 ) {
if ( ! NT_STATUS_IS_OK ( privilege_set_init_by_ctx ( ps - > mem_ctx , & ( out - > set ) ) ) )
2003-10-06 05:38:46 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! ( out - > set . set = PRS_ALLOC_MEM ( ps , LUID_ATTR , out - > count ) ) )
2001-11-29 19:05:05 +03:00
return False ;
}
2005-05-31 17:46:45 +04:00
if ( ! lsa_io_privilege_set ( desc , & out - > set , ps , depth ) )
2001-11-29 19:05:05 +03:00
return False ;
}
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_REMOVEPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_removeprivs ( const char * desc , LSA_R_REMOVEPRIVS * out , prs_struct * ps , int depth )
2001-11-29 19:05:05 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_removeprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-29 19:05:05 +03:00
return False ;
return True ;
}
2002-04-04 06:39:57 +04:00
BOOL policy_handle_is_valid ( const POLICY_HND * hnd )
{
POLICY_HND zero_pol ;
2001-11-29 19:05:05 +03:00
2002-04-04 06:39:57 +04:00
ZERO_STRUCT ( zero_pol ) ;
return ( ( memcmp ( & zero_pol , hnd , sizeof ( POLICY_HND ) ) = = 0 ) ? False : True ) ;
}
2002-08-17 21:00:51 +04:00
/*******************************************************************
Inits an LSA_Q_QUERY_INFO2 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_q_query2 ( LSA_Q_QUERY_INFO2 * in , POLICY_HND * hnd , uint16 info_class )
2002-08-17 21:00:51 +04:00
{
DEBUG ( 5 , ( " init_q_query2 \n " ) ) ;
2005-05-31 17:46:45 +04:00
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
2002-08-17 21:00:51 +04:00
2005-05-31 17:46:45 +04:00
in - > info_class = info_class ;
2002-08-17 21:00:51 +04:00
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_DNSDOMINFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_query_info2 ( const char * desc , LSA_Q_QUERY_INFO2 * in , prs_struct * ps , int depth )
2002-08-17 21:00:51 +04:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_info2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " pol " , & in - > pol , ps , depth ) )
2002-08-17 21:00:51 +04:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & in - > info_class ) )
2002-08-17 21:00:51 +04:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_QUERY_DNSDOMINFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_query_info2 ( const char * desc , LSA_R_QUERY_INFO2 * out ,
2002-08-17 21:00:51 +04:00
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_query_info2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2006-04-11 19:47:24 +04:00
if ( ! prs_uint32 ( " dom_ptr " , ps , depth , & out - > dom_ptr ) )
2002-08-17 21:00:51 +04:00
return False ;
2006-04-11 19:47:24 +04:00
if ( out - > dom_ptr ) {
if ( ! lsa_io_query_info_ctr2 ( " " , ps , depth , & out - > ctr ) )
2002-08-17 21:00:51 +04:00
return False ;
}
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2002-08-17 21:00:51 +04:00
return False ;
return True ;
}
2003-01-15 20:22:48 +03:00
/*******************************************************************
Inits an LSA_Q_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_q_enum_acct_rights ( LSA_Q_ENUM_ACCT_RIGHTS * in ,
2003-01-15 20:22:48 +03:00
POLICY_HND * hnd ,
uint32 count ,
DOM_SID * sid )
{
DEBUG ( 5 , ( " init_q_enum_acct_rights \n " ) ) ;
2005-05-31 17:46:45 +04:00
in - > pol = * hnd ;
init_dom_sid2 ( & in - > sid , sid ) ;
2003-01-15 20:22:48 +03:00
}
2005-01-15 06:54:03 +03:00
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
NTSTATUS init_r_enum_acct_rights ( LSA_R_ENUM_ACCT_RIGHTS * out , PRIVILEGE_SET * privileges )
2005-01-15 06:54:03 +03:00
{
uint32 i ;
char * privname ;
const char * * privname_array = NULL ;
int num_priv = 0 ;
for ( i = 0 ; i < privileges - > count ; i + + ) {
privname = luid_to_privilege_name ( & privileges - > set [ i ] . luid ) ;
if ( privname ) {
if ( ! add_string_to_array ( get_talloc_ctx ( ) , privname , & privname_array , & num_priv ) )
return NT_STATUS_NO_MEMORY ;
}
}
if ( num_priv ) {
2005-05-31 17:46:45 +04:00
out - > rights = TALLOC_P ( get_talloc_ctx ( ) , UNISTR4_ARRAY ) ;
2006-03-30 03:03:34 +04:00
if ( ! out - > rights ) {
return NT_STATUS_NO_MEMORY ;
}
2005-03-26 09:52:56 +03:00
2005-05-31 17:46:45 +04:00
if ( ! init_unistr4_array ( out - > rights , num_priv , privname_array ) )
2005-01-15 06:54:03 +03:00
return NT_STATUS_NO_MEMORY ;
2005-05-31 17:46:45 +04:00
out - > count = num_priv ;
2005-01-15 06:54:03 +03:00
}
return NT_STATUS_OK ;
}
2003-01-15 20:22:48 +03:00
/*******************************************************************
reads or writes a LSA_Q_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_enum_acct_rights ( const char * desc , LSA_Q_ENUM_ACCT_RIGHTS * in , prs_struct * ps , int depth )
2003-01-15 20:22:48 +03:00
{
2003-01-29 00:09:56 +03:00
2005-05-31 17:46:45 +04:00
if ( in = = NULL )
2003-01-15 20:22:48 +03:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_acct_rights " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2003-01-15 20:22:48 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_dom_sid2 ( " sid " , & in - > sid , ps , depth ) )
2003-01-15 20:22:48 +03:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_enum_acct_rights ( const char * desc , LSA_R_ENUM_ACCT_RIGHTS * out , prs_struct * ps , int depth )
2003-01-15 20:22:48 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_acct_rights " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2003-01-15 20:22:48 +03:00
return False ;
2006-07-11 22:01:26 +04:00
if ( ! prs_pointer ( " rights " , ps , depth , ( void * ) & out - > rights , sizeof ( UNISTR4_ARRAY ) , ( PRS_POINTER_CAST ) prs_unistr4_array ) )
2003-01-29 00:09:56 +03:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2003-01-15 20:22:48 +03:00
return False ;
2003-01-29 00:09:56 +03:00
return True ;
}
/*******************************************************************
Inits an LSA_Q_ADD_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
void init_q_add_acct_rights ( LSA_Q_ADD_ACCT_RIGHTS * in , POLICY_HND * hnd ,
2005-03-26 09:52:56 +03:00
DOM_SID * sid , uint32 count , const char * * rights )
2003-01-29 00:09:56 +03:00
{
DEBUG ( 5 , ( " init_q_add_acct_rights \n " ) ) ;
2005-05-31 17:46:45 +04:00
in - > pol = * hnd ;
init_dom_sid2 ( & in - > sid , sid ) ;
2005-03-26 09:52:56 +03:00
2005-05-31 17:46:45 +04:00
in - > rights = TALLOC_P ( get_talloc_ctx ( ) , UNISTR4_ARRAY ) ;
2006-03-30 03:03:34 +04:00
if ( ! in - > rights ) {
smb_panic ( " init_q_add_acct_rights: talloc fail \n " ) ;
return ;
}
2005-05-31 17:46:45 +04:00
init_unistr4_array ( in - > rights , count , rights ) ;
2005-03-26 09:52:56 +03:00
2005-05-31 17:46:45 +04:00
in - > count = count ;
2003-01-29 00:09:56 +03:00
}
/*******************************************************************
reads or writes a LSA_Q_ADD_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_add_acct_rights ( const char * desc , LSA_Q_ADD_ACCT_RIGHTS * in , prs_struct * ps , int depth )
2003-01-29 00:09:56 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_add_acct_rights " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2003-01-29 00:09:56 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_dom_sid2 ( " sid " , & in - > sid , ps , depth ) )
2003-01-29 00:09:56 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & in - > count ) )
2003-01-29 00:09:56 +03:00
return False ;
2006-07-11 22:01:26 +04:00
if ( ! prs_pointer ( " rights " , ps , depth , ( void * ) & in - > rights , sizeof ( UNISTR4_ARRAY ) , ( PRS_POINTER_CAST ) prs_unistr4_array ) )
2003-01-29 00:09:56 +03:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_add_acct_rights ( const char * desc , LSA_R_ADD_ACCT_RIGHTS * out , prs_struct * ps , int depth )
2003-01-29 00:09:56 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_add_acct_rights " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2003-01-15 20:22:48 +03:00
return False ;
return True ;
}
2003-01-29 05:24:12 +03:00
/*******************************************************************
Inits an LSA_Q_REMOVE_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-03-30 03:03:34 +04:00
2005-05-31 17:46:45 +04:00
void init_q_remove_acct_rights ( LSA_Q_REMOVE_ACCT_RIGHTS * in ,
2003-01-29 05:24:12 +03:00
POLICY_HND * hnd ,
DOM_SID * sid ,
uint32 removeall ,
uint32 count ,
const char * * rights )
{
DEBUG ( 5 , ( " init_q_remove_acct_rights \n " ) ) ;
2005-05-31 17:46:45 +04:00
in - > pol = * hnd ;
2005-03-26 09:52:56 +03:00
2005-05-31 17:46:45 +04:00
init_dom_sid2 ( & in - > sid , sid ) ;
2005-03-26 09:52:56 +03:00
2005-05-31 17:46:45 +04:00
in - > removeall = removeall ;
in - > count = count ;
2005-03-26 09:52:56 +03:00
2005-05-31 17:46:45 +04:00
in - > rights = TALLOC_P ( get_talloc_ctx ( ) , UNISTR4_ARRAY ) ;
2006-03-30 03:03:34 +04:00
if ( ! in - > rights ) {
smb_panic ( " init_q_remove_acct_rights: talloc fail \n " ) ;
return ;
}
2005-05-31 17:46:45 +04:00
init_unistr4_array ( in - > rights , count , rights ) ;
2003-01-29 05:24:12 +03:00
}
/*******************************************************************
reads or writes a LSA_Q_REMOVE_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-03-30 03:03:34 +04:00
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_remove_acct_rights ( const char * desc , LSA_Q_REMOVE_ACCT_RIGHTS * in , prs_struct * ps , int depth )
2003-01-29 05:24:12 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_remove_acct_rights " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2003-01-29 05:24:12 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! smb_io_dom_sid2 ( " sid " , & in - > sid , ps , depth ) )
2003-01-29 05:24:12 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " removeall " , ps , depth , & in - > removeall ) )
2003-01-29 05:24:12 +03:00
return False ;
2005-05-31 17:46:45 +04:00
if ( ! prs_uint32 ( " count " , ps , depth , & in - > count ) )
2003-01-29 05:24:12 +03:00
return False ;
2006-07-11 22:01:26 +04:00
if ( ! prs_pointer ( " rights " , ps , depth , ( void * ) & in - > rights , sizeof ( UNISTR4_ARRAY ) , ( PRS_POINTER_CAST ) prs_unistr4_array ) )
2003-01-29 05:24:12 +03:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_r_remove_acct_rights ( const char * desc , LSA_R_REMOVE_ACCT_RIGHTS * out , prs_struct * ps , int depth )
2003-01-29 05:24:12 +03:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_remove_acct_rights " ) ;
depth + + ;
2005-05-31 17:46:45 +04:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
2005-06-08 17:59:03 +04:00
Inits an LSA_Q_OPEN_TRUSTED_DOMAIN structure .
2005-05-31 17:46:45 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-08 17:59:03 +04:00
void init_lsa_q_open_trusted_domain ( LSA_Q_OPEN_TRUSTED_DOMAIN * q , POLICY_HND * hnd , DOM_SID * sid , uint32 desired_access )
{
memcpy ( & q - > pol , hnd , sizeof ( q - > pol ) ) ;
init_dom_sid2 ( & q - > sid , sid ) ;
q - > access_mask = desired_access ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#if 0 /* jerry, I think this not correct - gd */
2005-05-31 17:46:45 +04:00
BOOL lsa_io_q_open_trusted_domain ( const char * desc , LSA_Q_OPEN_TRUSTED_DOMAIN * in , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_trusted_domain " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > handle , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " count " , ps , depth , & in - > count ) )
return False ;
if ( ! smb_io_dom_sid ( " sid " , & in - > sid , ps , depth ) )
return False ;
return True ;
}
2005-06-08 17:59:03 +04:00
# endif
2006-02-04 01:19:41 +03:00
/*******************************************************************
Inits an LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_lsa_q_open_trusted_domain_by_name ( LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME * q ,
POLICY_HND * hnd ,
const char * name ,
uint32 desired_access )
{
memcpy ( & q - > pol , hnd , sizeof ( q - > pol ) ) ;
init_lsa_string ( & q - > name , name ) ;
q - > access_mask = desired_access ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*******************************************************************
Reads or writes an LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_open_trusted_domain_by_name ( const char * desc , LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME * q_o , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_trusted_domain_by_name " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & q_o - > pol , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_lsa_string ( " name " , & q_o - > name , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & q_o - > access_mask ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_open_trusted_domain_by_name ( const char * desc , LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_trusted_domain_by_name " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " handle " , & out - > handle , ps , depth ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
2005-06-08 17:59:03 +04:00
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_open_trusted_domain ( const char * desc , LSA_Q_OPEN_TRUSTED_DOMAIN * q_o , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_trusted_domain " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & q_o - > pol , ps , depth ) )
return False ;
if ( ! smb_io_dom_sid2 ( " sid " , & q_o - > sid , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & q_o - > access_mask ) )
return False ;
return True ;
}
2005-05-31 17:46:45 +04:00
/*******************************************************************
2005-06-08 17:59:03 +04:00
Reads or writes an LSA_R_OPEN_TRUSTED_DOMAIN structure .
2005-05-31 17:46:45 +04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_open_trusted_domain ( const char * desc , LSA_R_OPEN_TRUSTED_DOMAIN * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_trusted_domain " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-06-08 17:59:03 +04:00
if ( ! smb_io_pol_hnd ( " handle " , & out - > handle , ps , depth ) )
2005-05-31 17:46:45 +04:00
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_create_trusted_domain ( const char * desc , LSA_Q_CREATE_TRUSTED_DOMAIN * in , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_create_trusted_domain " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > handle , ps , depth ) )
return False ;
if ( ! prs_unistr4 ( " secretname " , ps , depth , & in - > secretname ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & in - > access ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_create_trusted_domain ( const char * desc , LSA_R_CREATE_TRUSTED_DOMAIN * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_create_trusted_domain " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & out - > handle , ps , depth ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_create_secret ( const char * desc , LSA_Q_CREATE_SECRET * in , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_create_secret " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > handle , ps , depth ) )
return False ;
if ( ! prs_unistr4 ( " secretname " , ps , depth , & in - > secretname ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " access " , ps , depth , & in - > access ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_create_secret ( const char * desc , LSA_R_CREATE_SECRET * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_create_secret " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & out - > handle , ps , depth ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_data_blob ( const char * desc , prs_struct * ps , int depth , LSA_DATA_BLOB * blob )
{
prs_debug ( ps , depth , desc , " lsa_io_data_blob " ) ;
depth + + ;
if ( ! prs_uint32 ( " size " , ps , depth , & blob - > size ) )
return False ;
if ( ! prs_uint32 ( " size " , ps , depth , & blob - > size ) )
return False ;
if ( ! prs_io_unistr2_p ( desc , ps , depth , & blob - > data ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_set_secret ( const char * desc , LSA_Q_SET_SECRET * in , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_set_secret " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > handle , ps , depth ) )
return False ;
if ( ! prs_pointer ( " old_value " , ps , depth , ( void * ) & in - > old_value , sizeof ( LSA_DATA_BLOB ) , ( PRS_POINTER_CAST ) lsa_io_data_blob ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_pointer ( " old_value " , ps , depth , ( void * ) & in - > old_value , sizeof ( LSA_DATA_BLOB ) , ( PRS_POINTER_CAST ) lsa_io_data_blob ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_set_secret ( const char * desc , LSA_R_SET_SECRET * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_set_secret " ) ;
depth + + ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_delete_object ( const char * desc , LSA_Q_DELETE_OBJECT * in , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_delete_object " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & in - > handle , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_delete_object ( const char * desc , LSA_R_DELETE_OBJECT * out , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_delete_object " ) ;
depth + + ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2003-01-29 05:24:12 +03:00
return False ;
return True ;
}
2005-06-08 17:59:03 +04:00
/*******************************************************************
Inits an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_q_query_trusted_domain_info ( LSA_Q_QUERY_TRUSTED_DOMAIN_INFO * q ,
POLICY_HND * hnd , uint16 info_class )
{
DEBUG ( 5 , ( " init_q_query_trusted_domain_info \n " ) ) ;
q - > pol = * hnd ;
q - > info_class = info_class ;
}
/*******************************************************************
Inits an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_q_query_trusted_domain_info_by_name ( LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME * q ,
POLICY_HND * hnd , uint16 info_class ,
const char * dom_name )
{
DEBUG ( 5 , ( " init_q_query_trusted_domain_info_by_name \n " ) ) ;
q - > pol = * hnd ;
init_lsa_string ( & q - > domain_name , dom_name ) ;
q - > info_class = info_class ;
}
/*******************************************************************
Inits an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_q_query_trusted_domain_info_by_sid ( LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID * q ,
POLICY_HND * hnd , uint16 info_class ,
DOM_SID * dom_sid )
{
DEBUG ( 5 , ( " init_q_query_trusted_domain_info_by_sid \n " ) ) ;
q - > pol = * hnd ;
init_dom_sid2 ( & q - > dom_sid , dom_sid ) ;
q - > info_class = info_class ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_query_trusted_domain_info ( const char * desc ,
LSA_Q_QUERY_TRUSTED_DOMAIN_INFO * q_q ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_trusted_domain_info " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & q_q - > info_class ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_query_trusted_domain_info_by_sid ( const char * desc ,
LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID * q_q ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_trusted_domain_info_by_sid " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_dom_sid2 ( " dom_sid " , & q_q - > dom_sid , ps , depth ) )
return False ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & q_q - > info_class ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_query_trusted_domain_info_by_name ( const char * desc ,
LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME * q_q ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_trusted_domain_info_by_name " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & q_q - > pol , ps , depth ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_lsa_string ( " domain_name " , & q_q - > domain_name , ps , depth ) )
return False ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & q_q - > info_class ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL smb_io_lsa_data_buf_hdr ( const char * desc , LSA_DATA_BUF_HDR * buf_hdr ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " smb_io_lsa_data_buf_hdr " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " length " , ps , depth , & buf_hdr - > length ) )
return False ;
if ( ! prs_uint32 ( " size " , ps , depth , & buf_hdr - > size ) )
return False ;
if ( ! prs_uint32 ( " data_ptr " , ps , depth , & buf_hdr - > data_ptr ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL smb_io_lsa_data_buf ( const char * desc , LSA_DATA_BUF * buf ,
prs_struct * ps , int depth , int length , int size )
{
prs_debug ( ps , depth , desc , " smb_io_lsa_data_buf " ) ;
depth + + ;
2007-05-23 00:20:01 +04:00
if ( UNMARSHALLING ( ps ) & & length ) {
2005-06-08 17:59:03 +04:00
if ( ! ( buf - > data = PRS_ALLOC_MEM ( ps , uint8 , length ) ) )
return False ;
}
if ( ! prs_uint32 ( " size " , ps , depth , & buf - > size ) )
return False ;
if ( ! prs_uint32 ( " offset " , ps , depth , & buf - > offset ) )
return False ;
if ( ! prs_uint32 ( " length " , ps , depth , & buf - > length ) )
return False ;
2007-05-23 00:20:01 +04:00
if ( ! prs_uint8s ( False , " data " , ps , depth , buf - > data , length ) )
2005-06-08 17:59:03 +04:00
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_trustdom_query_1 ( const char * desc , TRUSTED_DOMAIN_INFO_NAME * name ,
prs_struct * ps , int depth )
{
if ( ! smb_io_lsa_string ( " netbios_name " , & name - > netbios_name , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_trustdom_query_3 ( const char * desc , TRUSTED_DOMAIN_INFO_POSIX_OFFSET * posix ,
prs_struct * ps , int depth )
{
if ( ! prs_uint32 ( " posix_offset " , ps , depth , & posix - > posix_offset ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_trustdom_query_4 ( const char * desc , TRUSTED_DOMAIN_INFO_PASSWORD * password ,
prs_struct * ps , int depth )
{
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " ptr_password " , ps , depth , & password - > ptr_password ) )
return False ;
if ( ! prs_uint32 ( " ptr_old_password " , ps , depth , & password - > ptr_old_password ) )
return False ;
if ( & password - > ptr_password ) {
if ( ! smb_io_lsa_data_buf_hdr ( " password_hdr " , & password - > password_hdr , ps , depth ) )
return False ;
if ( ! smb_io_lsa_data_buf ( " password " , & password - > password , ps , depth ,
password - > password_hdr . length , password - > password_hdr . size ) )
return False ;
}
if ( & password - > ptr_old_password ) {
if ( ! smb_io_lsa_data_buf_hdr ( " old_password_hdr " , & password - > old_password_hdr , ps , depth ) )
return False ;
if ( ! smb_io_lsa_data_buf ( " old_password " , & password - > old_password , ps , depth ,
password - > old_password_hdr . length , password - > old_password_hdr . size ) )
return False ;
}
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-11-22 17:38:49 +03:00
static BOOL lsa_io_trustdom_query_6 ( const char * desc , TRUSTED_DOMAIN_INFO_EX * info_ex ,
prs_struct * ps , int depth )
{
uint32 dom_sid_ptr ;
if ( ! smb_io_unihdr ( " domain_name_hdr " , & info_ex - > domain_name . hdr , ps , depth ) )
return False ;
if ( ! smb_io_unihdr ( " netbios_name_hdr " , & info_ex - > netbios_name . hdr , ps , depth ) )
return False ;
if ( ! prs_uint32 ( " dom_sid_ptr " , ps , depth , & dom_sid_ptr ) )
return False ;
if ( ! prs_uint32 ( " trust_direction " , ps , depth , & info_ex - > trust_direction ) )
return False ;
if ( ! prs_uint32 ( " trust_type " , ps , depth , & info_ex - > trust_type ) )
return False ;
if ( ! prs_uint32 ( " trust_attributes " , ps , depth , & info_ex - > trust_attributes ) )
return False ;
if ( ! smb_io_unistr2 ( " domain_name_unistring " , & info_ex - > domain_name . unistring , info_ex - > domain_name . hdr . buffer , ps , depth ) )
return False ;
if ( ! smb_io_unistr2 ( " netbios_name_unistring " , & info_ex - > netbios_name . unistring , info_ex - > netbios_name . hdr . buffer , ps , depth ) )
return False ;
if ( ! smb_io_dom_sid2 ( " sid " , & info_ex - > sid , ps , depth ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-08 17:59:03 +04:00
static BOOL lsa_io_trustdom_query ( const char * desc , prs_struct * ps , int depth , LSA_TRUSTED_DOMAIN_INFO * info )
{
prs_debug ( ps , depth , desc , " lsa_io_trustdom_query " ) ;
depth + + ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & info - > info_class ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
switch ( info - > info_class ) {
case 1 :
if ( ! lsa_io_trustdom_query_1 ( " name " , & info - > name , ps , depth ) )
return False ;
break ;
case 3 :
if ( ! lsa_io_trustdom_query_3 ( " posix_offset " , & info - > posix_offset , ps , depth ) )
return False ;
break ;
case 4 :
if ( ! lsa_io_trustdom_query_4 ( " password " , & info - > password , ps , depth ) )
return False ;
break ;
2005-11-22 17:38:49 +03:00
case 6 :
if ( ! lsa_io_trustdom_query_6 ( " info_ex " , & info - > info_ex , ps , depth ) )
return False ;
break ;
2005-06-08 17:59:03 +04:00
default :
DEBUG ( 0 , ( " unsupported info-level: %d \n " , info - > info_class ) ) ;
return False ;
}
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_QUERY_TRUSTED_DOMAIN_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_r_query_trusted_domain_info ( const char * desc ,
LSA_R_QUERY_TRUSTED_DOMAIN_INFO * r_q ,
prs_struct * ps , int depth )
{
if ( r_q = = NULL )
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_query_trusted_domain_info " ) ;
depth + + ;
2006-07-11 22:01:26 +04:00
if ( ! prs_pointer ( " trustdom " , ps , depth , ( void * ) & r_q - > info ,
2005-06-08 17:59:03 +04:00
sizeof ( LSA_TRUSTED_DOMAIN_INFO ) ,
( PRS_POINTER_CAST ) lsa_io_trustdom_query ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & r_q - > status ) )
return False ;
return True ;
}
2006-02-04 01:19:41 +03:00
/*******************************************************************
Inits an LSA_Q_QUERY_DOM_INFO_POLICY structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void init_q_query_dom_info ( LSA_Q_QUERY_DOM_INFO_POLICY * in , POLICY_HND * hnd , uint16 info_class )
{
DEBUG ( 5 , ( " init_q_query_dom_info \n " ) ) ;
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
in - > info_class = info_class ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_DOM_INFO_POLICY structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
BOOL lsa_io_q_query_dom_info ( const char * desc , LSA_Q_QUERY_DOM_INFO_POLICY * in , prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_dom_info " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " pol " , & in - > pol , ps , depth ) )
return False ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & in - > info_class ) )
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_QUERY_DOM_INFO_POLICY structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL lsa_io_dominfo_query_3 ( const char * desc , LSA_DOM_INFO_POLICY_KERBEROS * krb_policy ,
prs_struct * ps , int depth )
{
if ( ! prs_align_uint64 ( ps ) )
return False ;
if ( ! prs_align ( ps ) )
return False ;
if ( ! prs_uint32 ( " enforce_restrictions " , ps , depth , & krb_policy - > enforce_restrictions ) )
return False ;
if ( ! prs_align_uint64 ( ps ) )
return False ;
if ( ! smb_io_nttime ( " service_tkt_lifetime " , ps , depth , & krb_policy - > service_tkt_lifetime ) )
return False ;
if ( ! prs_align_uint64 ( ps ) )
return False ;
if ( ! smb_io_nttime ( " user_tkt_lifetime " , ps , depth , & krb_policy - > user_tkt_lifetime ) )
return False ;
if ( ! prs_align_uint64 ( ps ) )
return False ;
if ( ! smb_io_nttime ( " user_tkt_renewaltime " , ps , depth , & krb_policy - > user_tkt_renewaltime ) )
return False ;
if ( ! prs_align_uint64 ( ps ) )
return False ;
if ( ! smb_io_nttime ( " clock_skew " , ps , depth , & krb_policy - > clock_skew ) )
return False ;
if ( ! prs_align_uint64 ( ps ) )
return False ;
if ( ! smb_io_nttime ( " unknown6 " , ps , depth , & krb_policy - > unknown6 ) )
return False ;
return True ;
}
static BOOL lsa_io_dom_info_query ( const char * desc , prs_struct * ps , int depth , LSA_DOM_INFO_UNION * info )
{
prs_debug ( ps , depth , desc , " lsa_io_dom_info_query " ) ;
depth + + ;
if ( ! prs_align_uint16 ( ps ) )
return False ;
if ( ! prs_uint16 ( " info_class " , ps , depth , & info - > info_class ) )
return False ;
switch ( info - > info_class ) {
case 3 :
if ( ! lsa_io_dominfo_query_3 ( " krb_policy " , & info - > krb_policy , ps , depth ) )
return False ;
break ;
default :
DEBUG ( 0 , ( " unsupported info-level: %d \n " , info - > info_class ) ) ;
return False ;
break ;
}
return True ;
}
BOOL lsa_io_r_query_dom_info ( const char * desc , LSA_R_QUERY_DOM_INFO_POLICY * out ,
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_query_dom_info " ) ;
depth + + ;
2006-07-11 22:01:26 +04:00
if ( ! prs_pointer ( " dominfo " , ps , depth , ( void * ) & out - > info ,
2006-02-04 01:19:41 +03:00
sizeof ( LSA_DOM_INFO_UNION ) ,
( PRS_POINTER_CAST ) lsa_io_dom_info_query ) )
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}