1998-03-11 21:11:04 +00:00
/*
2002-01-30 06:08:46 +00:00
* Unix SMB / CIFS implementation .
1998-03-11 21:11:04 +00:00
* RPC Pipe client / server routines
1999-12-13 13:27:58 +00:00
* Copyright ( C ) Andrew Tridgell 1992 - 1997 ,
* Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1997 ,
2002-08-17 17:00:51 +00:00
* Copyright ( C ) Paul Ashton 1997 ,
* Copyright ( C ) Andrew Bartlett 2002 ,
2003-08-01 15:30:44 +00:00
* Copyright ( C ) Jim McDonough < jmcd @ us . ibm . com > 2002.
2005-04-06 22:27:55 +00:00
* Copyright ( C ) Gerald ) Jerry ) Carter 2005
1998-03-11 21:11:04 +00: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
2007-07-09 19:25:36 +00:00
* the Free Software Foundation ; either version 3 of the License , or
1998-03-11 21:11:04 +00:00
* ( 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
2007-07-10 05:23:25 +00:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
1998-03-11 21:11:04 +00:00
*/
# include "includes.h"
2002-07-15 10:35:28 +00:00
# undef DBGC_CLASS
# define DBGC_CLASS DBGC_RPC_PARSE
2007-10-18 17:40:25 -07:00
static bool lsa_io_trans_names ( const char * desc , LSA_TRANS_NAME_ENUM * trn , prs_struct * ps , int depth ) ;
static bool lsa_io_trans_names2 ( const char * desc , LSA_TRANS_NAME_ENUM2 * trn , prs_struct * ps , int depth ) ;
1999-12-13 13:27:58 +00:00
1998-03-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits a LSA_TRANS_NAME structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
void init_lsa_trans_name ( LSA_TRANS_NAME * trn , UNISTR2 * uni_name ,
2003-01-03 08:28:12 +00:00
uint16 sid_name_use , const char * name , uint32 idx )
1998-03-11 21:11:04 +00:00
{
trn - > sid_name_use = sid_name_use ;
2003-09-25 21:26:16 +00:00
init_unistr2 ( uni_name , name , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & trn - > hdr_name , uni_name ) ;
1998-03-11 21:11:04 +00:00
trn - > domain_idx = idx ;
}
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes a LSA_TRANS_NAME structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
static bool lsa_io_trans_name ( const char * desc , LSA_TRANS_NAME * trn , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-03-11 21:11:04 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_trans_name " ) ;
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-11 21:11:04 +00:00
2000-09-20 22:07:56 +00:00
if ( ! prs_uint16 ( " sid_name_use " , ps , depth , & trn - > sid_name_use ) )
1999-12-13 13:27:58 +00:00
return False ;
2000-09-20 22:07:56 +00:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 13:27:58 +00: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 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2006-02-10 23:52:53 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_trans_name2 ( const char * desc , LSA_TRANS_NAME2 * trn , prs_struct * ps ,
2006-02-10 23:52:53 +00:00
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-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes a DOM_R_REF structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_r_ref ( const char * desc , DOM_R_REF * dom , prs_struct * ps , int depth )
1998-03-11 21:11:04 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00:00
prs_debug ( ps , depth , desc , " lsa_io_dom_r_ref " ) ;
1998-03-11 21:11:04 +00:00
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " num_ref_doms_1 " , ps , depth , & dom - > num_ref_doms_1 ) ) /* num referenced domains? */
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_ref_dom " , ps , depth , & dom - > ptr_ref_dom ) ) /* undocumented buffer pointer. */
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " max_entries " , ps , depth , & dom - > max_entries ) ) /* 32 - max number of entries */
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
SMB_ASSERT_ARRAY ( dom - > hdr_ref_dom , dom - > num_ref_doms_1 ) ;
1998-08-22 02:54:21 +00:00
2005-05-31 13:46:45 +00:00
if ( dom - > ptr_ref_dom ! = 0 ) {
2000-09-20 22:07:56 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " num_ref_doms_2 " , ps , depth , & dom - > num_ref_doms_2 ) ) /* 4 - num referenced domains? */
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
SMB_ASSERT_ARRAY ( dom - > ref_dom , dom - > num_ref_doms_2 ) ;
1998-09-30 19:09:57 +00:00
2005-05-31 13:46:45 +00:00
for ( i = 0 ; i < dom - > num_ref_doms_1 ; i + + ) {
1998-12-20 00:37:24 +00:00
fstring t ;
1998-09-30 19:09:57 +00:00
slprintf ( t , sizeof ( t ) - 1 , " dom_ref[%d] " , i ) ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unihdr ( t , & dom - > hdr_ref_dom [ i ] . hdr_dom_name , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-12-20 00:37:24 +00:00
slprintf ( t , sizeof ( t ) - 1 , " sid_ptr[%d] " , i ) ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( t , ps , depth , & dom - > hdr_ref_dom [ i ] . ptr_dom_sid ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-09-30 19:09:57 +00:00
}
2005-05-31 13:46:45 +00:00
for ( i = 0 ; i < dom - > num_ref_doms_2 ; i + + ) {
1998-12-20 00:37:24 +00:00
fstring t ;
2005-05-31 13:46:45 +00:00
if ( dom - > hdr_ref_dom [ i ] . hdr_dom_name . buffer ! = 0 ) {
1998-12-20 00:37:24 +00:00
slprintf ( t , sizeof ( t ) - 1 , " dom_ref[%d] " , i ) ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( t , & dom - > ref_dom [ i ] . uni_dom_name , True , ps , depth ) ) /* domain name unicode string */
2000-09-20 22:07:56 +00:00
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-12-20 00:37:24 +00:00
}
2005-05-31 13:46:45 +00:00
if ( dom - > hdr_ref_dom [ i ] . ptr_dom_sid ! = 0 ) {
1998-12-20 00:37:24 +00:00
slprintf ( t , sizeof ( t ) - 1 , " sid_ptr[%d] " , i ) ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_dom_sid2 ( t , & dom - > ref_dom [ i ] . ref_dom , ps , depth ) ) /* referenced domain SIDs */
1999-12-13 13:27:58 +00:00
return False ;
1998-12-20 00:37:24 +00:00
}
1998-09-30 19:09:57 +00:00
}
}
1999-10-15 18:46:22 +00:00
return True ;
1998-09-30 19:09:57 +00:00
}
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits an LSA_SEC_QOS structure .
1998-09-30 19:09:57 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2001-12-17 23:03:23 +00:00
void init_lsa_sec_qos ( LSA_SEC_QOS * qos , uint16 imp_lev , uint8 ctxt , uint8 eff )
1998-09-30 19:09:57 +00:00
{
2000-12-08 03:34:00 +00:00
DEBUG ( 5 , ( " init_lsa_sec_qos \n " ) ) ;
1998-09-30 19:09:57 +00: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 02:54:21 +00:00
1998-09-30 19:09:57 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_SEC_QOS structure .
1998-09-30 19:09:57 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
static bool lsa_io_sec_qos ( const char * desc , LSA_SEC_QOS * qos , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-09-30 19:09:57 +00:00
{
1999-12-13 13:27:58 +00:00
uint32 start ;
1998-09-30 19:09:57 +00:00
prs_debug ( ps , depth , desc , " lsa_io_obj_qos " ) ;
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-09-30 19:09:57 +00:00
1999-12-13 13:27:58 +00:00
start = prs_offset ( ps ) ;
1998-09-30 19:09:57 +00:00
/* these pointers had _better_ be zero, because we don't know
what they point to !
*/
1999-12-13 13:27:58 +00: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 19:09:57 +00:00
DEBUG ( 3 , ( " lsa_io_sec_qos: length %x does not match size %x \n " ,
1999-12-13 13:27:58 +00:00
qos - > len , prs_offset ( ps ) - start ) ) ;
1998-03-11 21:11:04 +00:00
}
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
1998-09-25 21:01:52 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits an LSA_OBJ_ATTR structure .
1998-09-25 21:01:52 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2002-07-15 10:35:28 +00:00
static void init_lsa_obj_attr ( LSA_OBJ_ATTR * attr , uint32 attributes , LSA_SEC_QOS * qos )
1999-12-13 13:27:58 +00:00
{
2000-12-08 03:34:00 +00:00
DEBUG ( 5 , ( " init_lsa_obj_attr \n " ) ) ;
1998-09-25 21:01:52 +00: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 19:09:57 +00:00
1999-12-13 13:27:58 +00:00
if ( qos ! = NULL ) {
1998-09-30 19:09:57 +00:00
attr - > ptr_sec_qos = 1 ;
attr - > sec_qos = qos ;
1999-12-13 13:27:58 +00:00
} else {
1998-09-30 19:09:57 +00:00
attr - > ptr_sec_qos = 0 ;
attr - > sec_qos = NULL ;
}
1998-09-25 21:01:52 +00:00
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_OBJ_ATTR structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
static bool lsa_io_obj_attr ( const char * desc , LSA_OBJ_ATTR * attr , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-03-11 21:11:04 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_obj_attr " ) ;
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-11 21:11:04 +00:00
/* these pointers had _better_ be zero, because we don't know
what they point to !
*/
1999-12-13 13:27:58 +00: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-17 23:03:23 +00:00
if ( attr - > ptr_sec_qos ! = 0 ) {
if ( UNMARSHALLING ( ps ) )
2004-12-07 18:25:53 +00:00
if ( ! ( attr - > sec_qos = PRS_ALLOC_MEM ( ps , LSA_SEC_QOS , 1 ) ) )
2001-12-17 23:03:23 +00:00
return False ;
1999-12-13 13:27:58 +00:00
if ( ! lsa_io_sec_qos ( " sec_qos " , attr - > sec_qos , ps , depth ) )
return False ;
1998-09-30 19:09:57 +00:00
}
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
1998-10-15 05:47:29 +00:00
1998-09-25 21:01:52 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits an LSA_Q_OPEN_POL structure .
1998-09-25 21:01:52 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2005-05-31 13:46:45 +00:00
void init_q_open_pol ( LSA_Q_OPEN_POL * in , uint16 system_name ,
2001-01-11 22:54:12 +00:00
uint32 attributes , uint32 desired_access ,
LSA_SEC_QOS * qos )
1998-09-25 21:01:52 +00:00
{
2000-12-08 03:34:00 +00:00
DEBUG ( 5 , ( " init_open_pol: attr:%d da:%d \n " , attributes ,
desired_access ) ) ;
1998-09-25 21:01:52 +00:00
2005-05-31 13:46:45 +00:00
in - > ptr = 1 ; /* undocumented pointer */
1998-09-25 21:01:52 +00:00
2005-05-31 13:46:45 +00:00
in - > des_access = desired_access ;
1998-09-25 21:01:52 +00:00
2005-05-31 13:46:45 +00:00
in - > system_name = system_name ;
init_lsa_obj_attr ( & in - > attr , attributes , qos ) ;
1998-09-25 21:01:52 +00:00
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_Q_OPEN_POL structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_q_open_pol ( const char * desc , LSA_Q_OPEN_POL * in , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-03-11 21:11:04 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_pol " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & in - > ptr ) )
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint16 ( " system_name " , ps , depth , & in - > system_name ) )
1999-12-13 13:27:58 +00:00
return False ;
2000-12-12 02:45:11 +00:00
if ( ! prs_align ( ps ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_obj_attr ( " " , & in - > attr , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " des_access " , ps , depth , & in - > des_access ) )
2001-12-17 23:03:23 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_R_OPEN_POL structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_r_open_pol ( const char * desc , LSA_R_OPEN_POL * out , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-03-11 21:11:04 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_pol " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & out - > pol , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-10-15 05:47:29 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-10-15 05:47:29 +00:00
}
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits an LSA_Q_OPEN_POL2 structure .
1998-10-15 05:47:29 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2005-05-31 13:46:45 +00:00
void init_q_open_pol2 ( LSA_Q_OPEN_POL2 * in , const char * server_name ,
2001-01-11 22:54:12 +00:00
uint32 attributes , uint32 desired_access ,
1998-10-15 05:47:29 +00:00
LSA_SEC_QOS * qos )
{
2000-12-12 02:45:11 +00:00
DEBUG ( 5 , ( " init_q_open_pol2: attr:%d da:%d \n " , attributes ,
2000-12-08 03:34:00 +00:00
desired_access ) ) ;
1998-10-15 05:47:29 +00:00
2005-05-31 13:46:45 +00:00
in - > ptr = 1 ; /* undocumented pointer */
1998-10-15 05:47:29 +00:00
2005-05-31 13:46:45 +00:00
in - > des_access = desired_access ;
1998-10-15 05:47:29 +00:00
2005-05-31 13:46:45 +00:00
init_unistr2 ( & in - > uni_server_name , server_name , UNI_STR_TERMINATE ) ;
2001-01-11 22:54:12 +00:00
2005-05-31 13:46:45 +00:00
init_lsa_obj_attr ( & in - > attr , attributes , qos ) ;
1998-10-15 05:47:29 +00:00
}
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_Q_OPEN_POL2 structure .
1998-10-15 05:47:29 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_q_open_pol2 ( const char * desc , LSA_Q_OPEN_POL2 * in , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-10-15 05:47:29 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_pol2 " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & in - > ptr ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-10-15 05:47:29 +00:00
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( " " , & in - > uni_server_name , in - > ptr , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_obj_attr ( " " , & in - > attr , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-10-15 05:47:29 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " des_access " , ps , depth , & in - > des_access ) )
2001-12-17 23:03:23 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-10-15 05:47:29 +00:00
}
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_R_OPEN_POL2 structure .
1998-10-15 05:47:29 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_r_open_pol2 ( const char * desc , LSA_R_OPEN_POL2 * out , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-10-15 05:47:29 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_pol2 " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & out - > pol , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2000-09-20 22:07:56 +00:00
/*******************************************************************
makes an LSA_Q_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_q_query_sec_obj ( LSA_Q_QUERY_SEC_OBJ * in , const POLICY_HND * hnd ,
2001-01-11 22:54:12 +00:00
uint32 sec_info )
2000-09-20 22:07:56 +00:00
{
DEBUG ( 5 , ( " init_q_query_sec_obj \n " ) ) ;
2005-05-31 13:46:45 +00:00
in - > pol = * hnd ;
in - > sec_info = sec_info ;
2000-09-20 22:07:56 +00:00
return ;
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_query_sec_obj ( const char * desc , LSA_Q_QUERY_SEC_OBJ * in ,
2001-01-11 22:54:12 +00:00
prs_struct * ps , int depth )
2000-09-20 22:07:56 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_sec_obj " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2000-09-20 22:07:56 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " sec_info " , ps , depth , & in - > sec_info ) )
2000-09-20 22:07:56 +00:00
return False ;
2001-01-11 22:54:12 +00:00
return True ;
2000-09-20 22:07:56 +00:00
}
/*******************************************************************
Reads or writes a LSA_R_QUERY_SEC_OBJ structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_query_sec_obj ( const char * desc , LSA_R_QUERY_SEC_OBJ * out , prs_struct * ps , int depth )
2000-09-20 22:07:56 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_query_sec_obj " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2000-09-20 22:07:56 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( out - > ptr ! = 0 ) {
if ( ! sec_io_desc_buf ( " sec " , & out - > buf , ps , depth ) )
2000-09-20 22:07:56 +00:00
return False ;
2001-01-11 22:54:12 +00:00
}
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2000-09-20 22:07:56 +00:00
return False ;
2001-01-11 22:54:12 +00:00
return True ;
2000-09-20 22:07:56 +00:00
}
1998-09-25 21:01:52 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits an LSA_Q_QUERY_INFO structure .
1998-09-25 21:01:52 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_q_query ( LSA_Q_QUERY_INFO * in , POLICY_HND * hnd , uint16 info_class )
1999-12-13 13:27:58 +00:00
{
2000-12-08 03:34:00 +00:00
DEBUG ( 5 , ( " init_q_query \n " ) ) ;
1998-09-25 21:01:52 +00:00
2005-05-31 13:46:45 +00:00
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
1998-09-25 21:01:52 +00:00
2005-05-31 13:46:45 +00:00
in - > info_class = info_class ;
1998-09-25 21:01:52 +00:00
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_Q_QUERY_INFO structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-03-18 05:16:59 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_q_query ( const char * desc , LSA_Q_QUERY_INFO * in , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1999-03-18 05:16:59 +00:00
{
1999-12-13 13:27:58 +00:00
prs_debug ( ps , depth , desc , " lsa_io_q_query " ) ;
1999-03-18 05:16:59 +00:00
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-03-18 05:16:59 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & in - > info_class ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1999-03-18 05:16:59 +00:00
}
2001-01-11 22:54:12 +00:00
/*******************************************************************
makes an LSA_Q_ENUM_TRUST_DOM structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool init_q_enum_trust_dom ( LSA_Q_ENUM_TRUST_DOM * q_e , POLICY_HND * pol ,
2001-01-11 22:54:12 +00:00
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-01 22:25:38 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes an LSA_Q_ENUM_TRUST_DOM structure .
1999-11-01 22:25:38 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_enum_trust_dom ( const char * desc , LSA_Q_ENUM_TRUST_DOM * q_e ,
2001-01-11 22:54:12 +00:00
prs_struct * ps , int depth )
1998-03-11 21:11:04 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_enum_trust_dom " ) ;
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! smb_io_pol_hnd ( " " , & q_e - > pol , ps , depth ) )
return False ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00: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 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2001-01-11 23:49:51 +00:00
/*******************************************************************
Inits an LSA_R_ENUM_TRUST_DOM structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-02-03 22:19:41 +00: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-11 23:49:51 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
2002-07-15 10:35:28 +00:00
2001-01-11 23:49:51 +00:00
DEBUG ( 5 , ( " init_r_enum_trust_dom \n " ) ) ;
2005-05-31 13:46:45 +00:00
out - > enum_context = enum_context ;
out - > count = num_domains ;
2005-04-06 22:27:55 +00:00
if ( num_domains ! = 0 ) {
2002-07-15 10:35:28 +00:00
2005-04-06 22:27:55 +00:00
/* allocate container memory */
2002-07-15 10:35:28 +00:00
2005-05-31 13:46:45 +00:00
out - > domlist = TALLOC_P ( ctx , DOMAIN_LIST ) ;
2006-03-10 09:07:03 +00:00
if ( ! out - > domlist ) {
out - > status = NT_STATUS_NO_MEMORY ;
return ;
}
2007-04-29 21:13:13 +00:00
if ( out - > count ) {
out - > domlist - > domains = TALLOC_ARRAY ( ctx , DOMAIN_INFO ,
2006-02-03 22:19:41 +00:00
out - > count ) ;
2007-04-29 21:13:13 +00:00
if ( ! out - > domlist - > domains ) {
out - > status = NT_STATUS_NO_MEMORY ;
return ;
}
} else {
out - > domlist - > domains = NULL ;
2002-07-15 10:35:28 +00:00
}
2007-04-29 21:13:13 +00:00
2005-05-31 13:46:45 +00:00
out - > domlist - > count = out - > count ;
2005-04-06 22:27:55 +00:00
/* initialize the list of domains and their sid */
for ( i = 0 ; i < num_domains ; i + + ) {
2006-02-03 22:19:41 +00:00
smb_ucs2_t * name ;
if ( ! ( out - > domlist - > domains [ i ] . sid =
TALLOC_P ( ctx , DOM_SID2 ) ) ) {
2005-05-31 13:46:45 +00:00
out - > status = NT_STATUS_NO_MEMORY ;
2005-04-06 22:27:55 +00:00
return ;
}
2002-07-15 10:35:28 +00:00
2006-02-03 22:19:41 +00:00
init_dom_sid2 ( out - > domlist - > domains [ i ] . sid ,
& ( td [ i ] ) - > sid ) ;
2006-05-25 15:40:40 +00:00
if ( push_ucs2_talloc ( ctx , & name , ( td [ i ] ) - > name ) = = ( size_t ) - 1 ) {
2006-02-03 22:19:41 +00:00
out - > status = NT_STATUS_NO_MEMORY ;
return ;
}
init_unistr4_w ( ctx , & out - > domlist - > domains [ i ] . name ,
name ) ;
2005-04-06 22:27:55 +00:00
}
2002-07-15 10:35:28 +00:00
}
2001-01-11 23:49:51 +00:00
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_domain_list ( const char * desc , prs_struct * ps , int depth , DOMAIN_LIST * domlist )
1998-03-11 21:11:04 +00:00
{
2005-04-06 22:27:55 +00:00
int i ;
prs_debug ( ps , depth , desc , " lsa_io_domain_list " ) ;
1998-03-11 21:11:04 +00:00
depth + + ;
2005-04-06 22:27:55 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & domlist - > count ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-11-01 22:25:38 +00:00
2005-04-06 22:27:55 +00: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-11 22:54:12 +00:00
2005-04-06 22:27:55 +00:00
/* data */
for ( i = 0 ; i < domlist - > count ; i + + ) {
if ( ! prs_unistr4_str ( " name " , ps , depth , & domlist - > domains [ i ] . name ) )
1999-12-13 13:27:58 +00:00
return False ;
2005-04-06 22:27:55 +00:00
if ( ! smb_io_dom_sid2 ( " sid " , domlist - > domains [ i ] . sid , ps , depth ) )
return False ;
}
return True ;
}
2001-01-11 22:54:12 +00:00
2005-04-06 22:27:55 +00:00
/*******************************************************************
Reads or writes an LSA_R_ENUM_TRUST_DOM structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-11 22:54:12 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_r_enum_trust_dom ( const char * desc , LSA_R_ENUM_TRUST_DOM * out ,
2005-04-06 22:27:55 +00:00
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_trust_dom " ) ;
depth + + ;
2001-01-11 22:54:12 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & out - > enum_context ) )
2005-04-06 22:27:55 +00:00
return False ;
2001-01-11 22:54:12 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2005-04-06 22:27:55 +00:00
return False ;
2001-01-11 22:54:12 +00:00
2006-07-11 18:01:26 +00:00
if ( ! prs_pointer ( " trusted_domains " , ps , depth , ( void * ) & out - > domlist , sizeof ( DOMAIN_LIST ) , ( PRS_POINTER_CAST ) lsa_io_domain_list ) )
2005-04-06 22:27:55 +00:00
return False ;
2001-01-11 22:54:12 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2006-04-11 15:47:24 +00:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_1 ( const char * desc , DOM_QUERY_1 * d_q , prs_struct * ps , int depth )
2006-04-11 15:47:24 +00:00
{
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_2 ( const char * desc , DOM_QUERY_2 * d_q , prs_struct * ps , int depth )
2006-04-11 15:47:24 +00:00
{
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 00:48:20 +00: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-19 21:47:46 +00:00
}
2006-04-11 15:47:24 +00:00
}
if ( ! prs_uint32s ( False , " auditsettings " , ps , depth , d_q - > auditsettings , d_q - > count2 ) )
return False ;
}
return True ;
}
2001-01-25 02:35:50 +00:00
/*******************************************************************
reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_3 ( const char * desc , DOM_QUERY_3 * d_q , prs_struct * ps , int depth )
2001-01-25 02:35:50 +00:00
{
if ( d_q = = NULL )
return False ;
2006-04-11 15:47:24 +00:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_3 " ) ;
2001-01-25 02:35:50 +00: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 15:47:24 +00:00
Reads or writes a dom query structure .
2001-01-25 02:35:50 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_5 ( const char * desc , DOM_QUERY_5 * d_q , prs_struct * ps , int depth )
2001-01-25 02:35:50 +00:00
{
2006-04-11 15:47:24 +00:00
return lsa_io_dom_query_3 ( " " , d_q , ps , depth ) ;
}
2001-01-25 02:35:50 +00:00
2006-04-11 15:47:24 +00:00
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_6 ( const char * desc , DOM_QUERY_6 * d_q , prs_struct * ps , int depth )
2006-04-11 15:47:24 +00:00
{
2001-01-25 02:35:50 +00:00
if ( d_q = = NULL )
return False ;
2006-04-11 15:47:24 +00:00
prs_debug ( ps , depth , desc , " lsa_io_dom_query_6 " ) ;
2001-01-25 02:35:50 +00:00
depth + + ;
2006-04-11 15:47:24 +00:00
if ( ! prs_uint16 ( " server_role " , ps , depth , & d_q - > server_role ) )
2001-01-25 02:35:50 +00:00
return False ;
2006-04-11 15:47:24 +00:00
return True ;
}
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_10 ( const char * desc , DOM_QUERY_10 * d_q , prs_struct * ps , int depth )
2006-04-11 15:47:24 +00:00
{
if ( d_q = = NULL )
2001-01-25 02:35:50 +00:00
return False ;
2006-04-11 15:47:24 +00: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 02:35:50 +00:00
return False ;
2006-04-11 15:47:24 +00:00
return True ;
}
2001-01-25 02:35:50 +00:00
2006-04-11 15:47:24 +00:00
/*******************************************************************
Reads or writes a dom query structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_query_11 ( const char * desc , DOM_QUERY_11 * d_q , prs_struct * ps , int depth )
2006-04-11 15:47:24 +00:00
{
if ( d_q = = NULL )
2001-01-25 02:35:50 +00:00
return False ;
2006-04-11 15:47:24 +00: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 02:35:50 +00:00
return False ;
2006-04-11 15:47:24 +00:00
return True ;
2001-01-25 02:35:50 +00:00
}
/*******************************************************************
2006-04-11 15:47:24 +00:00
Reads or writes an LSA_DNS_DOM_INFO structure .
2001-01-25 02:35:50 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_dom_query_12 ( const char * desc , DOM_QUERY_12 * info , prs_struct * ps , int depth )
2001-01-25 02:35:50 +00:00
{
2006-04-11 15:47:24 +00: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 02:35:50 +00:00
}
/*******************************************************************
2006-04-11 15:47:24 +00:00
reads or writes a structure .
2001-01-25 02:35:50 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_query_info_ctr2 ( const char * desc , prs_struct * ps , int depth , LSA_INFO_CTR2 * ctr )
2001-01-25 02:35:50 +00:00
{
2006-04-11 15:47:24 +00: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 02:35:50 +00:00
return False ;
2006-04-11 15:47:24 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_query_info_ctr ( const char * desc , prs_struct * ps , int depth , LSA_INFO_CTR * ctr )
2006-04-11 15:47:24 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_query_info_ctr " ) ;
2001-01-25 02:35:50 +00:00
depth + + ;
2006-04-11 15:47:24 +00:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & ctr - > info_class ) )
2001-01-25 02:35:50 +00:00
return False ;
2006-07-19 15:05:06 +00:00
if ( ! prs_align ( ps ) )
return False ;
2006-04-11 15:47:24 +00: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 02:35:50 +00:00
return True ;
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
2001-05-08 04:00:01 +00:00
Reads or writes an LSA_R_QUERY_INFO structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_r_query ( const char * desc , LSA_R_QUERY_INFO * out , prs_struct * ps , int depth )
1998-03-11 21:11:04 +00:00
{
2006-04-11 15:47:24 +00:00
1998-03-11 21:11:04 +00:00
prs_debug ( ps , depth , desc , " lsa_io_r_query " ) ;
depth + + ;
2006-04-11 15:47:24 +00:00
if ( ! prs_align ( ps ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2006-04-11 15:47:24 +00:00
if ( ! prs_uint32 ( " dom_ptr " , ps , depth , & out - > dom_ptr ) )
return False ;
1998-03-11 21:11:04 +00:00
2006-04-11 15:47:24 +00:00
if ( out - > dom_ptr ) {
2001-01-25 02:35:50 +00:00
2006-04-11 15:47:24 +00:00
if ( ! lsa_io_query_info_ctr ( " " , ps , depth , & out - > ctr ) )
return False ;
1998-03-11 21:11:04 +00:00
}
2001-01-25 02:35:50 +00:00
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
1998-09-30 19:09:57 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits a LSA_SID_ENUM structure .
1998-09-30 19:09:57 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2002-07-15 10:35:28 +00:00
static void init_lsa_sid_enum ( TALLOC_CTX * mem_ctx , LSA_SID_ENUM * sen ,
2004-01-05 02:04:37 +00:00
int num_entries , const DOM_SID * sids )
1998-09-30 19:09:57 +00:00
{
2000-12-13 11:53:37 +00:00
int i ;
1998-09-30 19:09:57 +00:00
2000-12-08 03:34:00 +00:00
DEBUG ( 5 , ( " init_lsa_sid_enum \n " ) ) ;
1998-09-30 19:09:57 +00:00
sen - > num_entries = num_entries ;
2000-12-12 02:45:11 +00:00
sen - > ptr_sid_enum = ( num_entries ! = 0 ) ;
1998-09-30 19:09:57 +00:00
sen - > num_entries2 = num_entries ;
2000-12-12 02:45:11 +00:00
/* Allocate memory for sids and sid pointers */
2007-04-30 00:48:20 +00: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 02:45:11 +00:00
2007-04-30 00:48:20 +00: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 02:45:11 +00:00
}
/* Copy across SIDs and SID pointers */
1998-09-30 19:09:57 +00:00
2000-12-13 11:53:37 +00:00
for ( i = 0 ; i < num_entries ; i + + ) {
sen - > ptr_sid [ i ] = 1 ;
init_dom_sid2 ( & sen - > sid [ i ] , & sids [ i ] ) ;
1998-09-30 19:09:57 +00:00
}
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes a LSA_SID_ENUM structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
static bool lsa_io_sid_enum ( const char * desc , LSA_SID_ENUM * sen , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1998-03-11 21:11:04 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
1998-03-11 21:11:04 +00:00
prs_debug ( ps , depth , desc , " lsa_io_sid_enum " ) ;
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00: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 15:11:22 +00: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 13:27:58 +00:00
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & sen - > num_entries2 ) )
return False ;
1998-03-11 21:11:04 +00:00
2000-12-12 02:45:11 +00:00
/* Mallocate memory if we're unpacking from the wire */
2007-05-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & sen - > num_entries ) {
2004-12-07 18:25:53 +00:00
if ( ( sen - > ptr_sid = PRS_ALLOC_MEM ( ps , uint32 , sen - > num_entries ) ) = = NULL ) {
2000-12-12 02:45:11 +00:00
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for "
" ptr_sid \n " ) ) ;
return False ;
}
2004-12-07 18:25:53 +00:00
if ( ( sen - > sid = PRS_ALLOC_MEM ( ps , DOM_SID2 , sen - > num_entries ) ) = = NULL ) {
2000-12-12 02:45:11 +00:00
DEBUG ( 3 , ( " init_lsa_sid_enum(): out of memory for "
" sids \n " ) ) ;
return False ;
}
}
1998-08-22 02:54:21 +00:00
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < sen - > num_entries ; i + + ) {
1998-03-11 21:11:04 +00:00
fstring temp ;
2000-12-12 02:45:11 +00:00
1998-05-12 00:55:32 +00:00
slprintf ( temp , sizeof ( temp ) - 1 , " ptr_sid[%d] " , i ) ;
2000-12-12 02:45:11 +00:00
if ( ! prs_uint32 ( temp , ps , depth , & sen - > ptr_sid [ i ] ) ) {
1999-12-13 13:27:58 +00:00
return False ;
2000-12-12 02:45:11 +00:00
}
1998-03-11 21:11:04 +00:00
}
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < sen - > num_entries ; i + + ) {
1998-03-11 21:11:04 +00:00
fstring temp ;
2000-12-12 02:45:11 +00:00
1998-05-12 00:55:32 +00:00
slprintf ( temp , sizeof ( temp ) - 1 , " sid[%d] " , i ) ;
2000-12-12 02:45:11 +00:00
if ( ! smb_io_dom_sid2 ( temp , & sen - > sid [ i ] , ps , depth ) ) {
1999-12-13 13:27:58 +00:00
return False ;
2000-12-12 02:45:11 +00:00
}
1998-03-11 21:11:04 +00:00
}
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
1998-12-01 22:18:48 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Inits an LSA_R_ENUM_TRUST_DOM structure .
1998-12-01 22:18:48 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2000-12-12 02:45:11 +00:00
void init_q_lookup_sids ( TALLOC_CTX * mem_ctx , LSA_Q_LOOKUP_SIDS * q_l ,
2004-01-05 02:04:37 +00:00
POLICY_HND * hnd , int num_sids , const DOM_SID * sids ,
2000-12-12 02:45:11 +00:00
uint16 level )
1998-12-01 22:18:48 +00:00
{
2003-06-03 07:21:09 +00:00
DEBUG ( 5 , ( " init_q_lookup_sids \n " ) ) ;
1998-12-01 22:18:48 +00:00
2000-12-12 02:45:11 +00:00
ZERO_STRUCTP ( q_l ) ;
1998-12-01 22:18:48 +00:00
2000-12-12 02:45:11 +00:00
memcpy ( & q_l - > pol , hnd , sizeof ( q_l - > pol ) ) ;
init_lsa_sid_enum ( mem_ctx , & q_l - > sids , num_sids , sids ) ;
2005-03-23 23:26:33 +00:00
q_l - > level = level ;
1999-12-13 13:27:58 +00:00
}
1998-12-01 22:18:48 +00:00
1999-12-13 13:27:58 +00:00
/*******************************************************************
Reads or writes a LSA_Q_LOOKUP_SIDS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1998-12-01 22:18:48 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_sids ( const char * desc , LSA_Q_LOOKUP_SIDS * q_s , prs_struct * ps ,
2001-01-11 22:54:12 +00:00
int depth )
1999-12-13 13:27:58 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_sids " ) ;
depth + + ;
1998-12-01 22:18:48 +00:00
1999-12-13 13:27:58 +00: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-23 23:26:33 +00:00
if ( ! prs_uint16 ( " level " , ps , depth , & q_s - > level ) ) /* lookup level */
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-12-01 22:18:48 +00:00
1999-12-13 13:27:58 +00:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_s - > mapped_count ) )
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-12-01 22:18:48 +00:00
}
2006-02-10 23:52:53 +00:00
/*******************************************************************
Reads or writes a LSA_Q_LOOKUP_SIDS2 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_sids2 ( const char * desc , LSA_Q_LOOKUP_SIDS2 * q_s , prs_struct * ps ,
2006-02-10 23:52:53 +00:00
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_sids3 ( const char * desc , LSA_Q_LOOKUP_SIDS3 * q_s , prs_struct * ps ,
2006-02-10 23:52:53 +00:00
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 19:09:57 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes a structure .
1998-09-30 19:09:57 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
static bool lsa_io_trans_names ( const char * desc , LSA_TRANS_NAME_ENUM * trn ,
1999-12-13 13:27:58 +00:00
prs_struct * ps , int depth )
1998-09-30 19:09:57 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
1998-09-30 19:09:57 +00:00
1999-12-13 13:27:58 +00:00
prs_debug ( ps , depth , desc , " lsa_io_trans_names " ) ;
depth + + ;
1998-09-30 19:09:57 +00:00
1999-12-13 13:27:58 +00: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 19:09:57 +00:00
1999-12-13 13:27:58 +00:00
if ( trn - > ptr_trans_names ! = 0 ) {
2000-12-12 02:45:11 +00:00
if ( ! prs_uint32 ( " num_entries2 " , ps , depth ,
& trn - > num_entries2 ) )
1999-12-13 13:27:58 +00:00
return False ;
2000-12-12 02:45:11 +00:00
2007-05-14 14:23:51 +00:00
if ( trn - > num_entries2 ! = trn - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & trn - > num_entries2 ) {
2007-05-14 14:23:51 +00:00
if ( ( trn - > name = PRS_ALLOC_MEM ( ps , LSA_TRANS_NAME , trn - > num_entries2 ) ) = = NULL ) {
2000-12-12 02:45:11 +00:00
return False ;
}
2007-05-14 14:23:51 +00:00
if ( ( trn - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , trn - > num_entries2 ) ) = = NULL ) {
2000-12-12 02:45:11 +00:00
return False ;
}
}
1998-09-30 19:09:57 +00:00
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < trn - > num_entries2 ; i + + ) {
fstring t ;
slprintf ( t , sizeof ( t ) - 1 , " name[%d] " , i ) ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00:00
if ( ! lsa_io_trans_name ( t , & trn - > name [ i ] , ps , depth ) ) /* translated name */
return False ;
}
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < trn - > num_entries2 ; i + + ) {
fstring t ;
slprintf ( t , sizeof ( t ) - 1 , " name[%d] " , i ) ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00: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 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2006-02-10 23:52:53 +00:00
/*******************************************************************
Reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_trans_names2 ( const char * desc , LSA_TRANS_NAME_ENUM2 * trn ,
2006-02-10 23:52:53 +00:00
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 14:23:51 +00:00
if ( trn - > num_entries2 ! = trn - > num_entries ) {
/* RPC fault */
return False ;
}
2007-05-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & trn - > num_entries2 ) {
2007-05-14 14:23:51 +00:00
if ( ( trn - > name = PRS_ALLOC_MEM ( ps , LSA_TRANS_NAME2 , trn - > num_entries2 ) ) = = NULL ) {
2006-02-10 23:52:53 +00:00
return False ;
}
2007-05-14 14:23:51 +00:00
if ( ( trn - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , trn - > num_entries2 ) ) = = NULL ) {
2006-02-10 23:52:53 +00: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-11 21:11:04 +00:00
/*******************************************************************
1999-12-13 13:27:58 +00:00
Reads or writes a structure .
1998-03-11 21:11:04 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_sids ( const char * desc , LSA_R_LOOKUP_SIDS * r_s ,
2001-01-11 22:54:12 +00:00
prs_struct * ps , int depth )
1998-03-11 21:11:04 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_sids " ) ;
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00:00
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & r_s - > ptr_dom_ref ) )
return False ;
1999-03-24 21:09:34 +00:00
if ( r_s - > ptr_dom_ref ! = 0 )
1999-12-13 13:27:58 +00:00
if ( ! lsa_io_dom_r_ref ( " dom_ref " , r_s - > dom_ref , ps , depth ) ) /* domain reference info */
return False ;
2007-06-09 00:13:07 +00:00
if ( ! lsa_io_trans_names ( " names " , & r_s - > names , ps , depth ) ) /* translated names */
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
1998-09-30 19:09:57 +00:00
1999-12-13 13:27:58 +00:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & r_s - > mapped_count ) )
return False ;
1998-03-11 21:11:04 +00:00
2001-09-04 07:13:01 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & r_s - > status ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2006-02-10 23:52:53 +00:00
/*******************************************************************
Reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_sids2 ( const char * desc , LSA_R_LOOKUP_SIDS2 * r_s ,
2006-02-10 23:52:53 +00:00
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 ;
2007-06-09 00:13:07 +00:00
if ( ! lsa_io_trans_names2 ( " names " , & r_s - > names , ps , depth ) ) /* translated names */
2006-02-10 23:52:53 +00:00
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_sids3 ( const char * desc , LSA_R_LOOKUP_SIDS3 * r_s ,
2006-02-10 23:52:53 +00:00
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 ;
2007-06-09 00:13:07 +00:00
if ( ! lsa_io_trans_names2 ( " names " , & r_s - > names , ps , depth ) ) /* translated names */
2006-02-10 23:52:53 +00:00
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 19:57:04 +00:00
/*******************************************************************
makes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2000-12-13 11:53:37 +00:00
void init_q_lookup_names ( TALLOC_CTX * mem_ctx , LSA_Q_LOOKUP_NAMES * q_l ,
2007-06-27 11:42:17 +00:00
POLICY_HND * hnd , int num_names , const char * * names ,
int level )
1998-11-25 19:57:04 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
1998-11-25 19:57:04 +00:00
2000-12-12 02:45:11 +00:00
DEBUG ( 5 , ( " init_q_lookup_names \n " ) ) ;
2000-12-13 11:53:37 +00:00
ZERO_STRUCTP ( q_l ) ;
1998-11-25 19:57:04 +00:00
2000-12-13 11:53:37 +00:00
q_l - > pol = * hnd ;
1999-12-13 13:27:58 +00:00
q_l - > num_entries = num_names ;
q_l - > num_entries2 = num_names ;
2007-06-27 11:42:17 +00:00
q_l - > lookup_level = level ;
1998-11-25 19:57:04 +00:00
2007-04-30 00:48:20 +00: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 11:53:37 +00:00
2007-04-30 00:48:20 +00: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 11:53:37 +00:00
}
1998-12-04 21:48:06 +00:00
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < num_names ; i + + ) {
2003-09-25 21:26:16 +00: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 19:57:04 +00:00
}
}
1998-03-11 21:11:04 +00:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_names ( const char * desc , LSA_Q_LOOKUP_NAMES * q_r ,
2001-01-11 22:54:12 +00:00
prs_struct * ps , int depth )
1998-03-11 21:11:04 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
1998-03-11 21:11:04 +00:00
1998-11-25 19:57:04 +00:00
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_names " ) ;
1998-03-11 21:11:04 +00:00
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
if ( ! smb_io_pol_hnd ( " " , & q_r - > pol , ps , depth ) ) /* policy handle */
return False ;
1998-03-11 21:11:04 +00:00
2000-12-15 01:02:11 +00:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 13:27:58 +00: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-11 21:11:04 +00:00
2000-12-15 01:02:11 +00:00
if ( UNMARSHALLING ( ps ) ) {
if ( q_r - > num_entries ) {
2004-12-07 18:25:53 +00:00
if ( ( q_r - > hdr_name = PRS_ALLOC_MEM ( ps , UNIHDR , q_r - > num_entries ) ) = = NULL )
2000-12-15 01:02:11 +00:00
return False ;
2004-12-07 18:25:53 +00:00
if ( ( q_r - > uni_name = PRS_ALLOC_MEM ( ps , UNISTR2 , q_r - > num_entries ) ) = = NULL )
2000-12-15 01:02:11 +00:00
return False ;
}
}
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
2000-12-15 01:02:11 +00:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 13:27:58 +00:00
if ( ! smb_io_unihdr ( " hdr_name " , & q_r - > hdr_name [ i ] , ps , depth ) ) /* pointer names */
return False ;
1998-03-11 21:11:04 +00:00
}
1999-12-13 13:27:58 +00:00
for ( i = 0 ; i < q_r - > num_entries ; i + + ) {
if ( ! prs_align ( ps ) )
return False ;
2000-12-15 01:02:11 +00: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 19:57:04 +00:00
}
2000-12-15 01:02:11 +00:00
if ( ! prs_align ( ps ) )
return False ;
1999-12-13 13:27:58 +00: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 05:36:27 +00:00
if ( ! prs_uint16 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_align ( ps ) )
1999-12-13 13:27:58 +00:00
return False ;
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & q_r - > mapped_count ) )
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1999-12-13 13:27:58 +00:00
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_names ( const char * desc , LSA_R_LOOKUP_NAMES * out , prs_struct * ps , int depth )
1998-03-11 21:11:04 +00:00
{
2003-03-17 23:04:03 +00:00
unsigned int i ;
1998-03-11 21:11:04 +00:00
1998-11-25 19:57:04 +00:00
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_names " ) ;
1998-03-11 21:11:04 +00:00
depth + + ;
1999-12-13 13:27:58 +00:00
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_dom_ref " , ps , depth , & out - > ptr_dom_ref ) )
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( out - > ptr_dom_ref ! = 0 )
if ( ! lsa_io_dom_r_ref ( " " , out - > dom_ref , ps , depth ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " num_entries " , ps , depth , & out - > num_entries ) )
1999-12-13 13:27:58 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_entries " , ps , depth , & out - > ptr_entries ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( out - > ptr_entries ! = 0 ) {
if ( ! prs_uint32 ( " num_entries2 " , ps , depth , & out - > num_entries2 ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-03-24 12:18:28 +00:00
2005-05-31 13:46:45 +00:00
if ( out - > num_entries2 ! = out - > num_entries ) {
1999-03-24 12:18:28 +00:00
/* RPC fault */
1999-10-15 18:46:22 +00:00
return False ;
1999-03-24 12:18:28 +00:00
}
2007-05-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 02:46:41 +00:00
if ( ( out - > dom_rid = PRS_ALLOC_MEM ( ps , DOM_RID , out - > num_entries2 ) )
2000-12-15 01:02:11 +00:00
= = NULL ) {
DEBUG ( 3 , ( " lsa_io_r_lookup_names(): out of memory \n " ) ) ;
return False ;
}
2000-12-13 11:53:37 +00:00
}
2006-02-11 02:46:41 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_names2 ( const char * desc , LSA_Q_LOOKUP_NAMES2 * q_r ,
2006-02-11 02:46:41 +00:00
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 05:36:27 +00:00
if ( ! prs_uint16 ( " lookup_level " , ps , depth , & q_r - > lookup_level ) )
return False ;
if ( ! prs_align ( ps ) )
2006-02-11 02:46:41 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_names2 ( const char * desc , LSA_R_LOOKUP_NAMES2 * out , prs_struct * ps , int depth )
2006-02-11 02:46:41 +00:00
{
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-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 02:46:41 +00: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 13:46:45 +00: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 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
}
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " mapped_count " , ps , depth , & out - > mapped_count ) )
1999-12-13 13:27:58 +00:00
return False ;
1998-03-11 21:11:04 +00:00
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
1999-12-13 13:27:58 +00:00
return False ;
1999-10-15 18:46:22 +00:00
return True ;
1998-03-11 21:11:04 +00:00
}
2006-02-11 05:36:27 +00:00
/*******************************************************************
Internal lsa data type io .
Following pass must read DOM_SID2 types .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool smb_io_lsa_translated_sids3 ( const char * desc , LSA_TRANSLATED_SID3 * q_r ,
2006-02-11 05:36:27 +00:00
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_names3 ( const char * desc , LSA_Q_LOOKUP_NAMES3 * q_r ,
2006-02-11 05:36:27 +00:00
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_names3 ( const char * desc , LSA_R_LOOKUP_NAMES3 * out , prs_struct * ps , int depth )
2006-02-11 05:36:27 +00:00
{
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-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 05:36:27 +00: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-25 21:01:52 +00:00
2006-02-11 05:36:27 +00: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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_lookup_names4 ( const char * desc , LSA_Q_LOOKUP_NAMES4 * q_r ,
2006-02-11 05:36:27 +00:00
prs_struct * ps , int depth )
{
unsigned int i ;
2006-02-16 01:06:21 +00:00
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_names4 " ) ;
2006-02-11 05:36:27 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_lookup_names4 ( const char * desc , LSA_R_LOOKUP_NAMES4 * out , prs_struct * ps , int depth )
2006-02-11 05:36:27 +00:00
{
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-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & out - > num_entries2 ) {
2006-02-11 05:36:27 +00: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 02:46:41 +00:00
2001-02-26 08:10:51 +00:00
/*******************************************************************
Reads or writes an LSA_Q_OPEN_SECRET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_open_secret ( const char * desc , LSA_Q_OPEN_SECRET * in , prs_struct * ps , int depth )
2001-02-26 08:10:51 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_secret " ) ;
depth + + ;
2005-05-31 13:46:45 +00: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 08:10:51 +00:00
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPEN_SECRET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_open_secret ( const char * desc , LSA_R_OPEN_SECRET * out , prs_struct * ps , int depth )
2001-02-26 08:10:51 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_secret " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & out - > handle , ps , depth ) )
2001-02-26 08:10:51 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-02-26 08:10:51 +00:00
return False ;
return True ;
}
2001-06-29 23:12:55 +00:00
2001-11-22 16:12:43 +00:00
/*******************************************************************
Inits an LSA_Q_ENUM_PRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_q_enum_privs ( LSA_Q_ENUM_PRIVS * in , POLICY_HND * hnd , uint32 enum_context , uint32 pref_max_length )
2001-11-22 16:12:43 +00:00
{
DEBUG ( 5 , ( " init_q_enum_privs \n " ) ) ;
2005-05-31 13:46:45 +00:00
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
2001-11-22 16:12:43 +00:00
2005-05-31 13:46:45 +00:00
in - > enum_context = enum_context ;
in - > pref_max_length = pref_max_length ;
2001-11-22 16:12:43 +00:00
}
2001-07-09 18:32:54 +00:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_enum_privs ( const char * desc , LSA_Q_ENUM_PRIVS * in , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
2005-05-31 13:46:45 +00:00
if ( in = = NULL )
2001-07-09 18:32:54 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_privs " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & in - > enum_context ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " pref_max_length " , ps , depth , & in - > pref_max_length ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_priv_entries ( const char * desc , LSA_PRIV_ENTRY * entries , uint32 count , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00: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 13:46:45 +00:00
void init_lsa_r_enum_privs ( LSA_R_ENUM_PRIVS * out , uint32 enum_context ,
2001-07-09 18:32:54 +00:00
uint32 count , LSA_PRIV_ENTRY * entries )
{
DEBUG ( 5 , ( " init_lsa_r_enum_privs \n " ) ) ;
2005-05-31 13:46:45 +00:00
out - > enum_context = enum_context ;
out - > count = count ;
2001-07-09 18:32:54 +00:00
if ( entries ! = NULL ) {
2005-05-31 13:46:45 +00:00
out - > ptr = 1 ;
out - > count1 = count ;
out - > privs = entries ;
2001-07-09 18:32:54 +00:00
} else {
2005-05-31 13:46:45 +00:00
out - > ptr = 0 ;
out - > count1 = 0 ;
out - > privs = NULL ;
2001-07-09 18:32:54 +00:00
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_enum_privs ( const char * desc , LSA_R_ENUM_PRIVS * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
2005-05-31 13:46:45 +00:00
if ( out = = NULL )
2001-07-09 18:32:54 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_enum_privs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & out - > enum_context ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( out - > ptr ) {
if ( ! prs_uint32 ( " count1 " , ps , depth , & out - > count1 ) )
2001-07-09 18:32:54 +00:00
return False ;
2007-05-22 20:20:01 +00:00
if ( UNMARSHALLING ( ps ) & & out - > count1 )
2005-05-31 13:46:45 +00:00
if ( ! ( out - > privs = PRS_ALLOC_MEM ( ps , LSA_PRIV_ENTRY , out - > count1 ) ) )
2001-11-22 16:12:43 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_priv_entries ( " " , out - > privs , out - > count1 , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
}
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
2003-01-03 08:28:12 +00: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 16:54:48 +00:00
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
2003-09-25 21:26:16 +00:00
init_unistr2 ( & trn - > name , name , UNI_FLAGS_NONE ) ;
init_uni_hdr ( & trn - > hdr_name , & trn - > name ) ;
2001-11-22 16:54:48 +00:00
trn - > lang_id = lang_id ;
trn - > lang_id_sys = lang_id_sys ;
}
2001-07-09 18:32:54 +00:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 18:32:54 +00:00
{
2005-05-31 13:46:45 +00:00
if ( in = = NULL )
2001-07-09 18:32:54 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_priv_get_dispname " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unihdr ( " hdr_name " , & in - > hdr_name , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( " name " , & in - > name , in - > hdr_name . buffer , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint16 ( " lang_id " , ps , depth , & in - > lang_id ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint16 ( " lang_id_sys " , ps , depth , & in - > lang_id_sys ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 18:32:54 +00:00
{
2005-05-31 13:46:45 +00:00
if ( out = = NULL )
2001-07-09 18:32:54 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_priv_get_dispname " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_info " , ps , depth , & out - > ptr_info ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( out - > ptr_info ) {
if ( ! smb_io_unihdr ( " hdr_name " , & out - > hdr_desc , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( " desc " , & out - > desc , out - > hdr_desc . buffer , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
}
/*
if ( ! prs_align ( ps ) )
return False ;
*/
2005-05-31 13:46:45 +00:00
if ( ! prs_uint16 ( " lang_id " , ps , depth , & out - > lang_id ) )
2001-07-09 18:32:54 +00:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
2003-01-28 21:09:56 +00:00
/*
initialise a LSA_Q_ENUM_ACCOUNTS structure
*/
2001-11-22 23:50:16 +00: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 18:32:54 +00:00
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_enum_accounts ( const char * desc , LSA_Q_ENUM_ACCOUNTS * in , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
2005-05-31 13:46:45 +00:00
if ( in = = NULL )
2001-07-09 18:32:54 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_accounts " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & in - > enum_context ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " pref_max_length " , ps , depth , & in - > pref_max_length ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
2003-01-28 21:09:56 +00:00
2001-07-09 18:32:54 +00:00
/*******************************************************************
Inits an LSA_R_ENUM_PRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_lsa_r_enum_accounts ( LSA_R_ENUM_ACCOUNTS * out , uint32 enum_context )
2001-07-09 18:32:54 +00:00
{
DEBUG ( 5 , ( " init_lsa_r_enum_accounts \n " ) ) ;
2005-05-31 13:46:45 +00: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 18:32:54 +00:00
} else {
2005-05-31 13:46:45 +00:00
out - > sids . num_entries = 0 ;
out - > sids . ptr_sid_enum = 0 ;
out - > sids . num_entries2 = 0 ;
2001-07-09 18:32:54 +00:00
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_enum_accounts ( const char * desc , LSA_R_ENUM_ACCOUNTS * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
2005-05-31 13:46:45 +00:00
if ( out = = NULL )
2001-07-09 18:32:54 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_r_enum_accounts " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " enum_context " , ps , depth , & out - > enum_context ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_sid_enum ( " sids " , & out - > sids , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
2001-06-29 23:12:55 +00:00
/*******************************************************************
Reads or writes an LSA_Q_UNK_GET_CONNUSER structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_unk_get_connuser ( const char * desc , LSA_Q_UNK_GET_CONNUSER * in , prs_struct * ps , int depth )
2001-06-29 23:12:55 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_unk_get_connuser " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_srvname " , ps , depth , & in - > ptr_srvname ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( " uni2_srvname " , & in - > uni2_srvname , in - > ptr_srvname , ps , depth ) ) /* server name to be looked up */
2001-06-29 23:12:55 +00:00
return False ;
2001-12-17 23:03:23 +00:00
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " unk1 " , ps , depth , & in - > unk1 ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " unk2 " , ps , depth , & in - > unk2 ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " unk3 " , ps , depth , & in - > unk3 ) )
2001-06-29 23:12:55 +00:00
return False ;
/* Don't bother to read or write at present... */
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_UNK_GET_CONNUSER structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_unk_get_connuser ( const char * desc , LSA_R_UNK_GET_CONNUSER * out , prs_struct * ps , int depth )
2001-06-29 23:12:55 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_unk_get_connuser " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_user_name " , ps , depth , & out - > ptr_user_name ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unihdr ( " hdr_user_name " , & out - > hdr_user_name , ps , depth ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( " uni2_user_name " , & out - > uni2_user_name , out - > ptr_user_name , ps , depth ) )
2001-06-29 23:12:55 +00:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " unk1 " , ps , depth , & out - > unk1 ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr_dom_name " , ps , depth , & out - > ptr_dom_name ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unihdr ( " hdr_dom_name " , & out - > hdr_dom_name , ps , depth ) )
2001-06-29 23:12:55 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_unistr2 ( " uni2_dom_name " , & out - > uni2_dom_name , out - > ptr_dom_name , ps , depth ) )
2001-06-29 23:12:55 +00:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-06-29 23:12:55 +00:00
return False ;
return True ;
}
2001-07-09 18:32:54 +00:00
2005-01-13 18:20:37 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_create_account ( const char * desc , LSA_Q_CREATEACCOUNT * out , prs_struct * ps , int depth )
2005-01-13 18:20:37 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_create_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2005-01-13 18:20:37 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_dom_sid2 ( " sid " , & out - > sid , ps , depth ) ) /* domain SID */
2005-01-13 18:20:37 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2005-01-13 18:20:37 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_CREATEACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_create_account ( const char * desc , LSA_R_CREATEACCOUNT * out , prs_struct * ps , int depth )
2005-01-13 18:20:37 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2005-01-13 18:20:37 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2005-01-13 18:20:37 +00:00
return False ;
return True ;
}
2001-11-25 02:08:43 +00:00
void init_lsa_q_open_account ( LSA_Q_OPENACCOUNT * trn , POLICY_HND * hnd , DOM_SID * sid , uint32 desired_access )
2001-11-24 00:13:41 +00:00
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
init_dom_sid2 ( & trn - > sid , sid ) ;
2001-11-25 02:08:43 +00:00
trn - > access = desired_access ;
2001-11-24 00:13:41 +00:00
}
2001-07-09 18:32:54 +00:00
/*******************************************************************
Reads or writes an LSA_Q_OPENACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_open_account ( const char * desc , LSA_Q_OPENACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_dom_sid2 ( " sid " , & out - > sid , ps , depth ) ) /* domain SID */
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_OPENACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_open_account ( const char * desc , LSA_R_OPENACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_account " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
2001-11-24 00:13:41 +00:00
void init_lsa_q_enum_privsaccount ( LSA_Q_ENUMPRIVSACCOUNT * trn , POLICY_HND * hnd )
{
memcpy ( & trn - > pol , hnd , sizeof ( trn - > pol ) ) ;
}
2001-07-09 18:32:54 +00:00
/*******************************************************************
Reads or writes an LSA_Q_ENUMPRIVSACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_enum_privsaccount ( const char * desc , LSA_Q_ENUMPRIVSACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_enum_privsaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LUID structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_luid ( const char * desc , LUID * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_luid " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " low " , ps , depth , & out - > low ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " high " , ps , depth , & out - > high ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LUID_ATTR structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_luid_attr ( const char * desc , LUID_ATTR * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_luid_attr " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_luid ( desc , & out - > luid , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " attr " , ps , depth , & out - > attr ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an PRIVILEGE_SET structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_privilege_set ( const char * desc , PRIVILEGE_SET * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
2007-05-14 14:23:51 +00:00
uint32 i , dummy ;
2001-07-09 18:32:54 +00:00
prs_debug ( ps , depth , desc , " lsa_io_privilege_set " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2007-05-14 14:23:51 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & dummy ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " control " , ps , depth , & out - > control ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
for ( i = 0 ; i < out - > count ; i + + ) {
if ( ! lsa_io_luid_attr ( desc , & out - > set [ i ] , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
}
return True ;
}
2005-05-31 13:46:45 +00: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 18:32:54 +00:00
{
2003-10-07 05:06:58 +00:00
NTSTATUS ret = NT_STATUS_OK ;
2003-10-06 01:38:46 +00:00
2005-05-31 13:46:45 +00:00
out - > ptr = 1 ;
out - > count = count ;
2003-10-06 01:38:46 +00:00
2005-05-31 13:46:45 +00:00
if ( ! NT_STATUS_IS_OK ( ret = privilege_set_init_by_ctx ( mem_ctx , & ( out - > set ) ) ) )
2003-10-06 01:38:46 +00:00
return ret ;
2005-05-31 13:46:45 +00:00
out - > set . count = count ;
2005-01-13 18:20:37 +00:00
2005-05-31 13:46:45 +00:00
if ( ! NT_STATUS_IS_OK ( ret = dup_luid_attr ( out - > set . mem_ctx , & ( out - > set . set ) , set , count ) ) )
2003-10-06 01:38:46 +00:00
return ret ;
2005-05-31 13:46:45 +00:00
DEBUG ( 10 , ( " init_lsa_r_enum_privsaccount: %d privileges \n " , out - > count ) ) ;
2003-10-07 05:06:58 +00:00
return ret ;
2001-07-09 18:32:54 +00:00
}
/*******************************************************************
Reads or writes an LSA_R_ENUMPRIVSACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_enum_privsaccount ( const char * desc , LSA_R_ENUMPRIVSACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_privsaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( out - > ptr ! = 0 ) {
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-07-09 18:32:54 +00:00
return False ;
/* malloc memory if unmarshalling here */
2001-11-24 00:13:41 +00:00
2005-05-31 13:46:45 +00: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 01:38:46 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! ( out - > set . set = PRS_ALLOC_MEM ( ps , LUID_ATTR , out - > count ) ) )
2001-11-24 00:13:41 +00:00
return False ;
}
2001-07-09 18:32:54 +00:00
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_privilege_set ( desc , & out - > set , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
}
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_GETSYSTEMACCOUNTstructure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_getsystemaccount ( const char * desc , LSA_Q_GETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_getsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_GETSYSTEMACCOUNTstructure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_getsystemaccount ( const char * desc , LSA_R_GETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-07-09 18:32:54 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_getsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2001-07-09 18:32:54 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-07-09 18:32:54 +00:00
return False ;
return True ;
}
2001-11-24 00:13:41 +00:00
2001-11-29 16:05:05 +00:00
/*******************************************************************
Reads or writes an LSA_Q_SETSYSTEMACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_setsystemaccount ( const char * desc , LSA_Q_SETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-11-29 16:05:05 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_setsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-29 16:05:05 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " access " , ps , depth , & out - > access ) )
2001-11-29 16:05:05 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_SETSYSTEMACCOUNT structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_setsystemaccount ( const char * desc , LSA_R_SETSYSTEMACCOUNT * out , prs_struct * ps , int depth )
2001-11-29 16:05:05 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_setsystemaccount " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-29 16:05:05 +00:00
return False ;
return True ;
}
2006-09-19 16:15:54 +00:00
void init_lsa_string ( LSA_STRING * uni , const char * string )
2001-11-24 00:13:41 +00:00
{
2005-03-10 18:50:47 +00: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 ) ;
}
2007-10-18 17:40:25 -07:00
bool smb_io_lsa_string ( const char * desc , LSA_STRING * string , prs_struct * ps , int depth )
2005-03-10 18:50:47 +00:00
{
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 00:13:41 +00:00
}
/*******************************************************************
2005-03-10 18:50:47 +00:00
Reads or writes an LSA_Q_LOOKUP_PRIV_VALUE structure .
2001-11-24 00:13:41 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 00:13:41 +00:00
{
2005-03-10 18:50:47 +00:00
prs_debug ( ps , depth , desc , " lsa_io_q_lookup_priv_value " ) ;
2001-11-24 00:13:41 +00:00
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-24 00:13:41 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_lsa_string ( " privname " , & out - > privname , ps , depth ) )
2001-11-24 00:13:41 +00:00
return False ;
return True ;
}
/*******************************************************************
2005-03-10 18:50:47 +00:00
Reads or writes an LSA_R_LOOKUP_PRIV_VALUE structure .
2001-11-24 00:13:41 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 00:13:41 +00:00
{
2005-03-10 18:50:47 +00:00
prs_debug ( ps , depth , desc , " lsa_io_r_lookup_priv_value " ) ;
2001-11-24 00:13:41 +00:00
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_luid ( " luid " , & out - > luid , ps , depth ) )
2001-11-24 00:13:41 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-24 00:13:41 +00:00
return False ;
return True ;
}
2001-11-29 16:05:05 +00:00
/*******************************************************************
Reads or writes an LSA_Q_ADDPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_addprivs ( const char * desc , LSA_Q_ADDPRIVS * out , prs_struct * ps , int depth )
2001-11-29 16:05:05 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_addprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-29 16:05:05 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-11-29 16:05:05 +00:00
return False ;
2005-05-31 13:46:45 +00: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 01:38:46 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! ( out - > set . set = PRS_ALLOC_MEM ( ps , LUID_ATTR , out - > count ) ) )
2001-11-29 16:05:05 +00:00
return False ;
}
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_privilege_set ( desc , & out - > set , ps , depth ) )
2001-11-29 16:05:05 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_ADDPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_addprivs ( const char * desc , LSA_R_ADDPRIVS * out , prs_struct * ps , int depth )
2001-11-29 16:05:05 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_addprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-29 16:05:05 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_Q_REMOVEPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_removeprivs ( const char * desc , LSA_Q_REMOVEPRIVS * out , prs_struct * ps , int depth )
2001-11-29 16:05:05 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_removeprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & out - > pol , ps , depth ) )
2001-11-29 16:05:05 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " allrights " , ps , depth , & out - > allrights ) )
2001-11-29 16:05:05 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " ptr " , ps , depth , & out - > ptr ) )
2001-11-29 16:05:05 +00: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 13:46:45 +00:00
if ( out - > ptr ! = 0 ) {
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2001-11-29 16:05:05 +00:00
return False ;
2005-05-31 13:46:45 +00: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 01:38:46 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! ( out - > set . set = PRS_ALLOC_MEM ( ps , LUID_ATTR , out - > count ) ) )
2001-11-29 16:05:05 +00:00
return False ;
}
2005-05-31 13:46:45 +00:00
if ( ! lsa_io_privilege_set ( desc , & out - > set , ps , depth ) )
2001-11-29 16:05:05 +00:00
return False ;
}
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_REMOVEPRIVS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_removeprivs ( const char * desc , LSA_R_REMOVEPRIVS * out , prs_struct * ps , int depth )
2001-11-29 16:05:05 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_removeprivs " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2001-11-29 16:05:05 +00:00
return False ;
return True ;
}
2007-10-18 17:40:25 -07:00
bool policy_handle_is_valid ( const POLICY_HND * hnd )
2002-04-04 02:39:57 +00:00
{
POLICY_HND zero_pol ;
2001-11-29 16:05:05 +00:00
2002-04-04 02:39:57 +00:00
ZERO_STRUCT ( zero_pol ) ;
return ( ( memcmp ( & zero_pol , hnd , sizeof ( POLICY_HND ) ) = = 0 ) ? False : True ) ;
}
2002-08-17 17:00:51 +00:00
/*******************************************************************
Inits an LSA_Q_QUERY_INFO2 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_q_query2 ( LSA_Q_QUERY_INFO2 * in , POLICY_HND * hnd , uint16 info_class )
2002-08-17 17:00:51 +00:00
{
DEBUG ( 5 , ( " init_q_query2 \n " ) ) ;
2005-05-31 13:46:45 +00:00
memcpy ( & in - > pol , hnd , sizeof ( in - > pol ) ) ;
2002-08-17 17:00:51 +00:00
2005-05-31 13:46:45 +00:00
in - > info_class = info_class ;
2002-08-17 17:00:51 +00:00
}
/*******************************************************************
Reads or writes an LSA_Q_QUERY_DNSDOMINFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_query_info2 ( const char * desc , LSA_Q_QUERY_INFO2 * in , prs_struct * ps , int depth )
2002-08-17 17:00:51 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_query_info2 " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " pol " , & in - > pol , ps , depth ) )
2002-08-17 17:00:51 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint16 ( " info_class " , ps , depth , & in - > info_class ) )
2002-08-17 17:00:51 +00:00
return False ;
return True ;
}
/*******************************************************************
Reads or writes an LSA_R_QUERY_DNSDOMINFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_query_info2 ( const char * desc , LSA_R_QUERY_INFO2 * out ,
2002-08-17 17:00:51 +00: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 15:47:24 +00:00
if ( ! prs_uint32 ( " dom_ptr " , ps , depth , & out - > dom_ptr ) )
2002-08-17 17:00:51 +00:00
return False ;
2006-04-11 15:47:24 +00:00
if ( out - > dom_ptr ) {
if ( ! lsa_io_query_info_ctr2 ( " " , ps , depth , & out - > ctr ) )
2002-08-17 17:00:51 +00:00
return False ;
}
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2002-08-17 17:00:51 +00:00
return False ;
return True ;
}
2003-01-15 17:22:48 +00:00
/*******************************************************************
Inits an LSA_Q_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_q_enum_acct_rights ( LSA_Q_ENUM_ACCT_RIGHTS * in ,
2003-01-15 17:22:48 +00:00
POLICY_HND * hnd ,
uint32 count ,
DOM_SID * sid )
{
DEBUG ( 5 , ( " init_q_enum_acct_rights \n " ) ) ;
2005-05-31 13:46:45 +00:00
in - > pol = * hnd ;
init_dom_sid2 ( & in - > sid , sid ) ;
2003-01-15 17:22:48 +00:00
}
2005-01-15 03:54:03 +00:00
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
NTSTATUS init_r_enum_acct_rights ( LSA_R_ENUM_ACCT_RIGHTS * out , PRIVILEGE_SET * privileges )
2005-01-15 03:54:03 +00:00
{
uint32 i ;
2007-06-30 09:15:33 +00:00
const char * privname ;
2005-01-15 03:54:03 +00:00
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 ) {
2007-08-30 19:48:31 +00:00
if ( ! add_string_to_array ( talloc_tos ( ) , privname , & privname_array , & num_priv ) )
2005-01-15 03:54:03 +00:00
return NT_STATUS_NO_MEMORY ;
}
}
if ( num_priv ) {
2007-08-30 19:48:31 +00:00
out - > rights = TALLOC_P ( talloc_tos ( ) , UNISTR4_ARRAY ) ;
2006-03-29 23:03:34 +00:00
if ( ! out - > rights ) {
return NT_STATUS_NO_MEMORY ;
}
2005-03-26 06:52:56 +00:00
2005-05-31 13:46:45 +00:00
if ( ! init_unistr4_array ( out - > rights , num_priv , privname_array ) )
2005-01-15 03:54:03 +00:00
return NT_STATUS_NO_MEMORY ;
2005-05-31 13:46:45 +00:00
out - > count = num_priv ;
2005-01-15 03:54:03 +00:00
}
return NT_STATUS_OK ;
}
2003-01-15 17:22:48 +00:00
/*******************************************************************
reads or writes a LSA_Q_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 17:22:48 +00:00
{
2003-01-28 21:09:56 +00:00
2005-05-31 13:46:45 +00:00
if ( in = = NULL )
2003-01-15 17:22:48 +00:00
return False ;
prs_debug ( ps , depth , desc , " lsa_io_q_enum_acct_rights " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2003-01-15 17:22:48 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_dom_sid2 ( " sid " , & in - > sid , ps , depth ) )
2003-01-15 17:22:48 +00:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 17:22:48 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_enum_acct_rights " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & out - > count ) )
2003-01-15 17:22:48 +00:00
return False ;
2006-07-11 18:01:26 +00:00
if ( ! prs_pointer ( " rights " , ps , depth , ( void * ) & out - > rights , sizeof ( UNISTR4_ARRAY ) , ( PRS_POINTER_CAST ) prs_unistr4_array ) )
2003-01-28 21:09:56 +00:00
return False ;
if ( ! prs_align ( ps ) )
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2003-01-15 17:22:48 +00:00
return False ;
2003-01-28 21:09:56 +00:00
return True ;
}
/*******************************************************************
Inits an LSA_Q_ADD_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-05-31 13:46:45 +00:00
void init_q_add_acct_rights ( LSA_Q_ADD_ACCT_RIGHTS * in , POLICY_HND * hnd ,
2005-03-26 06:52:56 +00:00
DOM_SID * sid , uint32 count , const char * * rights )
2003-01-28 21:09:56 +00:00
{
DEBUG ( 5 , ( " init_q_add_acct_rights \n " ) ) ;
2005-05-31 13:46:45 +00:00
in - > pol = * hnd ;
init_dom_sid2 ( & in - > sid , sid ) ;
2005-03-26 06:52:56 +00:00
2007-08-30 19:48:31 +00:00
in - > rights = TALLOC_P ( talloc_tos ( ) , UNISTR4_ARRAY ) ;
2006-03-29 23:03:34 +00:00
if ( ! in - > rights ) {
smb_panic ( " init_q_add_acct_rights: talloc fail \n " ) ;
return ;
}
2005-05-31 13:46:45 +00:00
init_unistr4_array ( in - > rights , count , rights ) ;
2005-03-26 06:52:56 +00:00
2005-05-31 13:46:45 +00:00
in - > count = count ;
2003-01-28 21:09:56 +00:00
}
/*******************************************************************
reads or writes a LSA_Q_ADD_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_add_acct_rights ( const char * desc , LSA_Q_ADD_ACCT_RIGHTS * in , prs_struct * ps , int depth )
2003-01-28 21:09:56 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_add_acct_rights " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2003-01-28 21:09:56 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_dom_sid2 ( " sid " , & in - > sid , ps , depth ) )
2003-01-28 21:09:56 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & in - > count ) )
2003-01-28 21:09:56 +00:00
return False ;
2006-07-11 18:01:26 +00:00
if ( ! prs_pointer ( " rights " , ps , depth , ( void * ) & in - > rights , sizeof ( UNISTR4_ARRAY ) , ( PRS_POINTER_CAST ) prs_unistr4_array ) )
2003-01-28 21:09:56 +00:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_add_acct_rights ( const char * desc , LSA_R_ADD_ACCT_RIGHTS * out , prs_struct * ps , int depth )
2003-01-28 21:09:56 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_add_acct_rights " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2003-01-15 17:22:48 +00:00
return False ;
return True ;
}
2003-01-29 02:24:12 +00:00
/*******************************************************************
Inits an LSA_Q_REMOVE_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-03-29 23:03:34 +00:00
2005-05-31 13:46:45 +00:00
void init_q_remove_acct_rights ( LSA_Q_REMOVE_ACCT_RIGHTS * in ,
2003-01-29 02:24:12 +00: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 13:46:45 +00:00
in - > pol = * hnd ;
2005-03-26 06:52:56 +00:00
2005-05-31 13:46:45 +00:00
init_dom_sid2 ( & in - > sid , sid ) ;
2005-03-26 06:52:56 +00:00
2005-05-31 13:46:45 +00:00
in - > removeall = removeall ;
in - > count = count ;
2005-03-26 06:52:56 +00:00
2007-08-30 19:48:31 +00:00
in - > rights = TALLOC_P ( talloc_tos ( ) , UNISTR4_ARRAY ) ;
2006-03-29 23:03:34 +00:00
if ( ! in - > rights ) {
smb_panic ( " init_q_remove_acct_rights: talloc fail \n " ) ;
return ;
}
2005-05-31 13:46:45 +00:00
init_unistr4_array ( in - > rights , count , rights ) ;
2003-01-29 02:24:12 +00:00
}
/*******************************************************************
reads or writes a LSA_Q_REMOVE_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-03-29 23:03:34 +00:00
2007-10-18 17:40:25 -07: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 02:24:12 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_q_remove_acct_rights " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_pol_hnd ( " " , & in - > pol , ps , depth ) )
2003-01-29 02:24:12 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! smb_io_dom_sid2 ( " sid " , & in - > sid , ps , depth ) )
2003-01-29 02:24:12 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " removeall " , ps , depth , & in - > removeall ) )
2003-01-29 02:24:12 +00:00
return False ;
2005-05-31 13:46:45 +00:00
if ( ! prs_uint32 ( " count " , ps , depth , & in - > count ) )
2003-01-29 02:24:12 +00:00
return False ;
2006-07-11 18:01:26 +00:00
if ( ! prs_pointer ( " rights " , ps , depth , ( void * ) & in - > rights , sizeof ( UNISTR4_ARRAY ) , ( PRS_POINTER_CAST ) prs_unistr4_array ) )
2003-01-29 02:24:12 +00:00
return False ;
return True ;
}
/*******************************************************************
reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07: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 02:24:12 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_remove_acct_rights " ) ;
depth + + ;
2005-05-31 13:46:45 +00:00
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
2005-06-08 13:59:03 +00:00
Inits an LSA_Q_OPEN_TRUSTED_DOMAIN structure .
2005-05-31 13:46:45 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-08 13:59:03 +00: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 */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_open_trusted_domain ( const char * desc , LSA_Q_OPEN_TRUSTED_DOMAIN * in , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 13:59:03 +00:00
# endif
2006-02-03 22:19:41 +00:00
2005-06-08 13:59:03 +00:00
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_open_trusted_domain ( const char * desc , LSA_Q_OPEN_TRUSTED_DOMAIN * q_o , prs_struct * ps , int depth )
2005-06-08 13:59:03 +00:00
{
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 13:46:45 +00:00
/*******************************************************************
2005-06-08 13:59:03 +00:00
Reads or writes an LSA_R_OPEN_TRUSTED_DOMAIN structure .
2005-05-31 13:46:45 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_open_trusted_domain ( const char * desc , LSA_R_OPEN_TRUSTED_DOMAIN * out , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_open_trusted_domain " ) ;
depth + + ;
if ( ! prs_align ( ps ) )
return False ;
2005-06-08 13:59:03 +00:00
if ( ! smb_io_pol_hnd ( " handle " , & out - > handle , ps , depth ) )
2005-05-31 13:46:45 +00:00
return False ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_create_trusted_domain ( const char * desc , LSA_Q_CREATE_TRUSTED_DOMAIN * in , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_create_trusted_domain ( const char * desc , LSA_R_CREATE_TRUSTED_DOMAIN * out , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_create_secret ( const char * desc , LSA_Q_CREATE_SECRET * in , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_create_secret ( const char * desc , LSA_R_CREATE_SECRET * out , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_data_blob ( const char * desc , prs_struct * ps , int depth , LSA_DATA_BLOB * blob )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_set_secret ( const char * desc , LSA_Q_SET_SECRET * in , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_set_secret ( const char * desc , LSA_R_SET_SECRET * out , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_set_secret " ) ;
depth + + ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
return False ;
return True ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_delete_object ( const char * desc , LSA_Q_DELETE_OBJECT * in , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
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 ;
}
/*******************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_r_delete_object ( const char * desc , LSA_R_DELETE_OBJECT * out , prs_struct * ps , int depth )
2005-05-31 13:46:45 +00:00
{
prs_debug ( ps , depth , desc , " lsa_io_r_delete_object " ) ;
depth + + ;
if ( ! prs_ntstatus ( " status " , ps , depth , & out - > status ) )
2003-01-29 02:24:12 +00:00
return False ;
return True ;
}
2005-06-08 13:59:03 +00:00
2006-02-03 22:19:41 +00: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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
bool lsa_io_q_query_dom_info ( const char * desc , LSA_Q_QUERY_DOM_INFO_POLICY * in , prs_struct * ps , int depth )
2006-02-03 22:19:41 +00:00
{
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 .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-18 17:40:25 -07:00
static bool lsa_io_dominfo_query_3 ( const char * desc , LSA_DOM_INFO_POLICY_KERBEROS * krb_policy ,
2006-02-03 22:19:41 +00:00
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 ;
}
2007-10-18 17:40:25 -07:00
static bool lsa_io_dom_info_query ( const char * desc , prs_struct * ps , int depth , LSA_DOM_INFO_UNION * info )
2006-02-03 22:19:41 +00:00
{
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 ;
}
2007-10-18 17:40:25 -07:00
bool lsa_io_r_query_dom_info ( const char * desc , LSA_R_QUERY_DOM_INFO_POLICY * out ,
2006-02-03 22:19:41 +00:00
prs_struct * ps , int depth )
{
prs_debug ( ps , depth , desc , " lsa_io_r_query_dom_info " ) ;
depth + + ;
2006-07-11 18:01:26 +00:00
if ( ! prs_pointer ( " dominfo " , ps , depth , ( void * ) & out - > info ,
2006-02-03 22:19:41 +00: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 ;
}