/*
* Unix SMB / Netbios implementation .
* Version 1.9 .
* RPC Pipe client / server routines
* Copyright ( C ) Andrew Tridgell 1992 - 1997 ,
* Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1997 ,
* Copyright ( C ) Paul Ashton 1997.
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
extern int DEBUGLEVEL ;
/*******************************************************************
makes a SH_INFO_1_STR structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_share_info1_str ( SH_INFO_1_STR * sh1 , char * net_name , char * remark )
{
if ( sh1 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_share_info1_str \n " ) ) ;
make_unistr2 ( & ( sh1 - > uni_netname ) , net_name , strlen ( net_name ) + 1 ) ;
make_unistr2 ( & ( sh1 - > uni_remark ) , remark , strlen ( remark ) + 1 ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_share_info1_str ( char * desc , SH_INFO_1_STR * sh1 , prs_struct * ps , int depth )
{
if ( sh1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_share_info1_str " ) ;
depth + + ;
prs_align ( ps ) ;
smb_io_unistr2 ( " " , & ( sh1 - > uni_netname ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( sh1 - > uni_remark ) , True , ps , depth ) ;
}
/*******************************************************************
makes a SH_INFO_1 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_share_info1 ( SH_INFO_1 * sh1 , char * net_name , uint32 type , char * remark )
{
if ( sh1 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_share_info1: %s %8x %s \n " , net_name , type , remark ) ) ;
sh1 - > ptr_netname = net_name ! = NULL ? 1 : 0 ;
sh1 - > type = type ;
sh1 - > ptr_remark = remark ! = NULL ? 1 : 0 ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_share_info1 ( char * desc , SH_INFO_1 * sh1 , prs_struct * ps , int depth )
{
if ( sh1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_share_info1 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_netname " , ps , depth , & ( sh1 - > ptr_netname ) ) ;
prs_uint32 ( " type " , ps , depth , & ( sh1 - > type ) ) ;
prs_uint32 ( " ptr_remark " , ps , depth , & ( sh1 - > ptr_remark ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_share_info_1 ( char * desc , SRV_SHARE_INFO_1 * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_share_1_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( ctr - > num_entries_read ) ) ;
prs_uint32 ( " ptr_share_info " , ps , depth , & ( ctr - > ptr_share_info ) ) ;
if ( ctr - > ptr_share_info ! = 0 )
{
int i ;
int num_entries = ctr - > num_entries_read ;
if ( num_entries > MAX_SHARE_ENTRIES )
{
num_entries = MAX_SHARE_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( ctr - > num_entries_read2 ) ) ;
SMB_ASSERT_ARRAY ( ctr - > info_1 , num_entries ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_share_info1 ( " " , & ( ctr - > info_1 [ i ] ) , ps , depth ) ;
}
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_share_info1_str ( " " , & ( ctr - > info_1_str [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
makes a SH_INFO_2_STR structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_share_info2_str ( SH_INFO_2_STR * sh2 ,
char * net_name , char * remark ,
char * path , char * passwd )
{
if ( sh2 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_share_info2_str \n " ) ) ;
make_unistr2 ( & ( sh2 - > uni_netname ) , net_name , strlen ( net_name ) + 1 ) ;
make_unistr2 ( & ( sh2 - > uni_remark ) , remark , strlen ( remark ) + 1 ) ;
make_unistr2 ( & ( sh2 - > uni_path ) , path , strlen ( path ) + 1 ) ;
make_unistr2 ( & ( sh2 - > uni_passwd ) , passwd , strlen ( passwd ) + 1 ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_share_info2_str ( char * desc , SH_INFO_2_STR * sh2 , prs_struct * ps , int depth )
{
if ( sh2 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_share_info2_str " ) ;
depth + + ;
prs_align ( ps ) ;
smb_io_unistr2 ( " " , & ( sh2 - > uni_netname ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( sh2 - > uni_remark ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( sh2 - > uni_path ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( sh2 - > uni_passwd ) , True , ps , depth ) ;
}
/*******************************************************************
makes a SH_INFO_2 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_share_info2 ( SH_INFO_2 * sh2 ,
char * net_name , uint32 type , char * remark ,
uint32 perms , uint32 max_uses , uint32 num_uses ,
char * path , char * passwd )
{
if ( sh2 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_share_info2: %s %8x %s \n " , net_name , type , remark ) ) ;
sh2 - > ptr_netname = net_name ! = NULL ? 1 : 0 ;
sh2 - > type = type ;
sh2 - > ptr_remark = remark ! = NULL ? 1 : 0 ;
sh2 - > perms = perms ;
sh2 - > max_uses = max_uses ;
sh2 - > num_uses = num_uses ;
sh2 - > type = type ;
sh2 - > ptr_path = path ! = NULL ? 1 : 0 ;
sh2 - > ptr_passwd = passwd ! = NULL ? 1 : 0 ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_share_info2 ( char * desc , SH_INFO_2 * sh2 , prs_struct * ps , int depth )
{
if ( sh2 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_share_info2 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_netname " , ps , depth , & ( sh2 - > ptr_netname ) ) ;
prs_uint32 ( " type " , ps , depth , & ( sh2 - > type ) ) ;
prs_uint32 ( " ptr_remark " , ps , depth , & ( sh2 - > ptr_remark ) ) ;
prs_uint32 ( " perms " , ps , depth , & ( sh2 - > perms ) ) ;
prs_uint32 ( " max_uses " , ps , depth , & ( sh2 - > max_uses ) ) ;
prs_uint32 ( " num_uses " , ps , depth , & ( sh2 - > num_uses ) ) ;
prs_uint32 ( " ptr_path " , ps , depth , & ( sh2 - > ptr_path ) ) ;
prs_uint32 ( " ptr_passwd " , ps , depth , & ( sh2 - > ptr_passwd ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_share_info_2 ( char * desc , SRV_SHARE_INFO_2 * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_share_2_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( ctr - > num_entries_read ) ) ;
prs_uint32 ( " ptr_share_info " , ps , depth , & ( ctr - > ptr_share_info ) ) ;
if ( ctr - > ptr_share_info ! = 0 )
{
int i ;
int num_entries = ctr - > num_entries_read ;
if ( num_entries > MAX_SHARE_ENTRIES )
{
num_entries = MAX_SHARE_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( ctr - > num_entries_read2 ) ) ;
SMB_ASSERT_ARRAY ( ctr - > info_2 , num_entries ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_share_info2 ( " " , & ( ctr - > info_2 [ i ] ) , ps , depth ) ;
}
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_share_info2_str ( " " , & ( ctr - > info_2_str [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_share_ctr ( char * desc , SRV_SHARE_INFO_CTR * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_share_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " switch_value " , ps , depth , & ( ctr - > switch_value ) ) ;
prs_uint32 ( " ptr_share_ctr " , ps , depth , & ( ctr - > ptr_share_ctr ) ) ;
if ( ctr - > ptr_share_ctr ! = 0 )
{
switch ( ctr - > switch_value )
{
case 2 :
{
srv_io_srv_share_info_2 ( " " , & ( ctr - > share . info2 ) , ps , depth ) ;
break ;
}
case 1 :
{
srv_io_srv_share_info_1 ( " " , & ( ctr - > share . info1 ) , ps , depth ) ;
break ;
}
default :
{
DEBUG ( 5 , ( " %s no share info at switch_value %d \n " ,
tab_depth ( depth ) , ctr - > switch_value ) ) ;
break ;
}
}
}
}
Makefile.in :
- added srvsvc client files
clientgen.c :
- replaced cli_error(cli, int *cls, int *err) with
cli_error(cli, uint8 cls, uint32 *err). this version detects
32 bit status messages. the DOS error "MORE_DATA", the
equivalent of the 32 bit *warning* 0x8000 0005
(STATUS_BUFFER_OVERFLOW), was being processed as an error,
terminating the cli_receive_trans() call.
cli_pipe.c :
- replaced calls that had been incorrectly modified from
32 bit warnings (0x8000 0005 - STATUS_BUFFER_OVERFLOW)
to 8 bit DOS errors (0x01 0xEA - MORE_DATA).
the use of the old version of cli_error (DOS only)
instead of the new one (DOS and 32 bit) caused the
dce/rpc client code to fail.
- replaced 2 space indentation with tab indentation in all functions.
cli_srvsvc.c :
cmd_srvsvc.c :
- added these files back in, fixing them up to use jeremy's
modified versions of the dce/rpc client functions.
parse_srv.c :
- added back in some "unused" functions required by dce/rpc
client-side code. it would be helpful if all such "unused"
functions could be added back in.
rpcclient.c :
- added "session", "file", "share", "connection" enumeration
functions back in. these are equivalent to nt's "NetXXXXXEnum"
Win32 (MSDN) functions.
- added "srvinfo" function back in. this is equivalent to
nt's NetServerGetInfo Win32 (MSDN) function.
-
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_q_net_share_enum ( SRV_Q_NET_SHARE_ENUM * q_n ,
char * srv_name ,
uint32 share_level , SRV_SHARE_INFO_CTR * ctr ,
uint32 preferred_len ,
ENUM_HND * hnd )
{
if ( q_n = = NULL | | ctr = = NULL | | hnd = = NULL ) return ;
q_n - > ctr = ctr ;
DEBUG ( 5 , ( " make_q_net_share_enum \n " ) ) ;
make_buf_unistr2 ( & ( q_n - > uni_srv_name ) , & ( q_n - > ptr_srv_name ) , srv_name ) ;
q_n - > share_level = share_level ;
q_n - > preferred_len = preferred_len ;
memcpy ( & ( q_n - > enum_hnd ) , hnd , sizeof ( * hnd ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_q_net_share_enum ( char * desc , SRV_Q_NET_SHARE_ENUM * q_n , prs_struct * ps , int depth )
{
if ( q_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_q_net_share_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_name " , ps , depth , & ( q_n - > ptr_srv_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_srv_name ) , True , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " share_level " , ps , depth , & ( q_n - > share_level ) ) ;
if ( q_n - > share_level ! = - 1 )
{
srv_io_srv_share_ctr ( " share_ctr " , q_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " preferred_len " , ps , depth , & ( q_n - > preferred_len ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( q_n - > enum_hnd ) , ps , depth ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_r_net_share_enum ( char * desc , SRV_R_NET_SHARE_ENUM * r_n , prs_struct * ps , int depth )
{
if ( r_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_r_net_share_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " share_level " , ps , depth , & ( r_n - > share_level ) ) ;
if ( r_n - > share_level ! = 0 )
{
srv_io_srv_share_ctr ( " share_ctr " , r_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " total_entries " , ps , depth , & ( r_n - > total_entries ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( r_n - > enum_hnd ) , ps , depth ) ;
prs_uint32 ( " status " , ps , depth , & ( r_n - > status ) ) ;
}
/*******************************************************************
makes a SESS_INFO_0_STR structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_sess_info0_str ( SESS_INFO_0_STR * ss0 , char * name )
{
if ( ss0 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_sess_info0_str \n " ) ) ;
make_unistr2 ( & ( ss0 - > uni_name ) , name , strlen ( name ) + 1 ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_sess_info0_str ( char * desc , SESS_INFO_0_STR * ss0 , prs_struct * ps , int depth )
{
if ( ss0 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_sess_info0_str " ) ;
depth + + ;
prs_align ( ps ) ;
smb_io_unistr2 ( " " , & ( ss0 - > uni_name ) , True , ps , depth ) ;
}
/*******************************************************************
makes a SESS_INFO_0 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_sess_info0 ( SESS_INFO_0 * ss0 , char * name )
{
if ( ss0 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_sess_info0: %s \n " , name ) ) ;
ss0 - > ptr_name = name ! = NULL ? 1 : 0 ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_sess_info0 ( char * desc , SESS_INFO_0 * ss0 , prs_struct * ps , int depth )
{
if ( ss0 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_sess_info0 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_name " , ps , depth , & ( ss0 - > ptr_name ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_sess_info_0 ( char * desc , SRV_SESS_INFO_0 * ss0 , prs_struct * ps , int depth )
{
if ( ss0 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_sess_info_0 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( ss0 - > num_entries_read ) ) ;
prs_uint32 ( " ptr_sess_info " , ps , depth , & ( ss0 - > ptr_sess_info ) ) ;
if ( ss0 - > ptr_sess_info ! = 0 )
{
int i ;
int num_entries = ss0 - > num_entries_read ;
if ( num_entries > MAX_SESS_ENTRIES )
{
num_entries = MAX_SESS_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( ss0 - > num_entries_read2 ) ) ;
SMB_ASSERT_ARRAY ( ss0 - > info_0 , num_entries ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_sess_info0 ( " " , & ( ss0 - > info_0 [ i ] ) , ps , depth ) ;
}
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_sess_info0_str ( " " , & ( ss0 - > info_0_str [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
makes a SESS_INFO_1_STR structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_sess_info1_str ( SESS_INFO_1_STR * ss1 , char * name , char * user )
{
if ( ss1 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_sess_info1_str \n " ) ) ;
make_unistr2 ( & ( ss1 - > uni_name ) , name , strlen ( name ) + 1 ) ;
make_unistr2 ( & ( ss1 - > uni_user ) , name , strlen ( user ) + 1 ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_sess_info1_str ( char * desc , SESS_INFO_1_STR * ss1 , prs_struct * ps , int depth )
{
if ( ss1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_sess_info1_str " ) ;
depth + + ;
prs_align ( ps ) ;
smb_io_unistr2 ( " " , & ( ss1 - > uni_name ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( ss1 - > uni_user ) , True , ps , depth ) ;
}
/*******************************************************************
makes a SESS_INFO_1 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_sess_info1 ( SESS_INFO_1 * ss1 ,
char * name , char * user ,
uint32 num_opens , uint32 open_time , uint32 idle_time ,
uint32 user_flags )
{
if ( ss1 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_sess_info1: %s \n " , name ) ) ;
ss1 - > ptr_name = name ! = NULL ? 1 : 0 ;
ss1 - > ptr_user = user ! = NULL ? 1 : 0 ;
ss1 - > num_opens = num_opens ;
ss1 - > open_time = open_time ;
ss1 - > idle_time = idle_time ;
ss1 - > user_flags = user_flags ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_sess_info1 ( char * desc , SESS_INFO_1 * ss1 , prs_struct * ps , int depth )
{
if ( ss1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_sess_info1 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_name " , ps , depth , & ( ss1 - > ptr_name ) ) ;
prs_uint32 ( " ptr_user " , ps , depth , & ( ss1 - > ptr_user ) ) ;
prs_uint32 ( " num_opens " , ps , depth , & ( ss1 - > num_opens ) ) ;
prs_uint32 ( " open_time " , ps , depth , & ( ss1 - > open_time ) ) ;
prs_uint32 ( " idle_time " , ps , depth , & ( ss1 - > idle_time ) ) ;
prs_uint32 ( " user_flags " , ps , depth , & ( ss1 - > user_flags ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_sess_info_1 ( char * desc , SRV_SESS_INFO_1 * ss1 , prs_struct * ps , int depth )
{
if ( ss1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_sess_info_1 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( ss1 - > num_entries_read ) ) ;
prs_uint32 ( " ptr_sess_info " , ps , depth , & ( ss1 - > ptr_sess_info ) ) ;
if ( ss1 - > ptr_sess_info ! = 0 )
{
int i ;
int num_entries = ss1 - > num_entries_read ;
if ( num_entries > MAX_SESS_ENTRIES )
{
num_entries = MAX_SESS_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( ss1 - > num_entries_read2 ) ) ;
SMB_ASSERT_ARRAY ( ss1 - > info_1 , num_entries ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_sess_info1 ( " " , & ( ss1 - > info_1 [ i ] ) , ps , depth ) ;
}
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_sess_info1_str ( " " , & ( ss1 - > info_1_str [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_sess_ctr ( char * desc , SRV_SESS_INFO_CTR * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_sess_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " switch_value " , ps , depth , & ( ctr - > switch_value ) ) ;
prs_uint32 ( " ptr_sess_ctr " , ps , depth , & ( ctr - > ptr_sess_ctr ) ) ;
if ( ctr - > ptr_sess_ctr ! = 0 )
{
switch ( ctr - > switch_value )
{
case 0 :
{
srv_io_srv_sess_info_0 ( " " , & ( ctr - > sess . info0 ) , ps , depth ) ;
break ;
}
case 1 :
{
srv_io_srv_sess_info_1 ( " " , & ( ctr - > sess . info1 ) , ps , depth ) ;
break ;
}
default :
{
DEBUG ( 5 , ( " %s no session info at switch_value %d \n " ,
tab_depth ( depth ) , ctr - > switch_value ) ) ;
break ;
}
}
}
}
Makefile.in :
- added srvsvc client files
clientgen.c :
- replaced cli_error(cli, int *cls, int *err) with
cli_error(cli, uint8 cls, uint32 *err). this version detects
32 bit status messages. the DOS error "MORE_DATA", the
equivalent of the 32 bit *warning* 0x8000 0005
(STATUS_BUFFER_OVERFLOW), was being processed as an error,
terminating the cli_receive_trans() call.
cli_pipe.c :
- replaced calls that had been incorrectly modified from
32 bit warnings (0x8000 0005 - STATUS_BUFFER_OVERFLOW)
to 8 bit DOS errors (0x01 0xEA - MORE_DATA).
the use of the old version of cli_error (DOS only)
instead of the new one (DOS and 32 bit) caused the
dce/rpc client code to fail.
- replaced 2 space indentation with tab indentation in all functions.
cli_srvsvc.c :
cmd_srvsvc.c :
- added these files back in, fixing them up to use jeremy's
modified versions of the dce/rpc client functions.
parse_srv.c :
- added back in some "unused" functions required by dce/rpc
client-side code. it would be helpful if all such "unused"
functions could be added back in.
rpcclient.c :
- added "session", "file", "share", "connection" enumeration
functions back in. these are equivalent to nt's "NetXXXXXEnum"
Win32 (MSDN) functions.
- added "srvinfo" function back in. this is equivalent to
nt's NetServerGetInfo Win32 (MSDN) function.
-
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_q_net_sess_enum ( SRV_Q_NET_SESS_ENUM * q_n ,
char * srv_name , char * qual_name ,
uint32 sess_level , SRV_SESS_INFO_CTR * ctr ,
uint32 preferred_len ,
ENUM_HND * hnd )
{
if ( q_n = = NULL | | ctr = = NULL | | hnd = = NULL ) return ;
q_n - > ctr = ctr ;
DEBUG ( 5 , ( " make_q_net_sess_enum \n " ) ) ;
make_buf_unistr2 ( & ( q_n - > uni_srv_name ) , & ( q_n - > ptr_srv_name ) , srv_name ) ;
make_buf_unistr2 ( & ( q_n - > uni_qual_name ) , & ( q_n - > ptr_qual_name ) , qual_name ) ;
q_n - > sess_level = sess_level ;
q_n - > preferred_len = preferred_len ;
memcpy ( & ( q_n - > enum_hnd ) , hnd , sizeof ( * hnd ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_q_net_sess_enum ( char * desc , SRV_Q_NET_SESS_ENUM * q_n , prs_struct * ps , int depth )
{
if ( q_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_q_net_sess_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_name " , ps , depth , & ( q_n - > ptr_srv_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_srv_name ) , True , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_qual_name " , ps , depth , & ( q_n - > ptr_qual_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_qual_name ) , q_n - > ptr_qual_name , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " sess_level " , ps , depth , & ( q_n - > sess_level ) ) ;
if ( q_n - > sess_level ! = - 1 )
{
srv_io_srv_sess_ctr ( " sess_ctr " , q_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " preferred_len " , ps , depth , & ( q_n - > preferred_len ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( q_n - > enum_hnd ) , ps , depth ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_r_net_sess_enum ( char * desc , SRV_R_NET_SESS_ENUM * r_n , prs_struct * ps , int depth )
{
if ( r_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_r_net_sess_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " sess_level " , ps , depth , & ( r_n - > sess_level ) ) ;
if ( r_n - > sess_level ! = - 1 )
{
srv_io_srv_sess_ctr ( " sess_ctr " , r_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " total_entries " , ps , depth , & ( r_n - > total_entries ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( r_n - > enum_hnd ) , ps , depth ) ;
prs_uint32 ( " status " , ps , depth , & ( r_n - > status ) ) ;
}
/*******************************************************************
makes a CONN_INFO_0 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_conn_info0 ( CONN_INFO_0 * ss0 , uint32 id )
{
if ( ss0 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_conn_info0 \n " ) ) ;
ss0 - > id = id ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_conn_info0 ( char * desc , CONN_INFO_0 * ss0 , prs_struct * ps , int depth )
{
if ( ss0 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_conn_info0 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " id " , ps , depth , & ( ss0 - > id ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_conn_info_0 ( char * desc , SRV_CONN_INFO_0 * ss0 , prs_struct * ps , int depth )
{
if ( ss0 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_conn_info_0 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( ss0 - > num_entries_read ) ) ;
prs_uint32 ( " ptr_conn_info " , ps , depth , & ( ss0 - > ptr_conn_info ) ) ;
if ( ss0 - > ptr_conn_info ! = 0 )
{
int i ;
int num_entries = ss0 - > num_entries_read ;
if ( num_entries > MAX_CONN_ENTRIES )
{
num_entries = MAX_CONN_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( ss0 - > num_entries_read2 ) ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_conn_info0 ( " " , & ( ss0 - > info_0 [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
makes a CONN_INFO_1_STR structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_conn_info1_str ( CONN_INFO_1_STR * ss1 , char * usr_name , char * net_name )
{
if ( ss1 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_conn_info1_str \n " ) ) ;
make_unistr2 ( & ( ss1 - > uni_usr_name ) , usr_name , strlen ( usr_name ) + 1 ) ;
make_unistr2 ( & ( ss1 - > uni_net_name ) , net_name , strlen ( net_name ) + 1 ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_conn_info1_str ( char * desc , CONN_INFO_1_STR * ss1 , prs_struct * ps , int depth )
{
if ( ss1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_conn_info1_str " ) ;
depth + + ;
prs_align ( ps ) ;
smb_io_unistr2 ( " " , & ( ss1 - > uni_usr_name ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( ss1 - > uni_net_name ) , True , ps , depth ) ;
}
/*******************************************************************
makes a CONN_INFO_1 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_conn_info1 ( CONN_INFO_1 * ss1 ,
uint32 id , uint32 type ,
uint32 num_opens , uint32 num_users , uint32 open_time ,
char * usr_name , char * net_name )
{
if ( ss1 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_conn_info1: %s %s \n " , usr_name , net_name ) ) ;
ss1 - > id = id ;
ss1 - > type = type ;
ss1 - > num_opens = num_opens ;
ss1 - > num_users = num_users ;
ss1 - > open_time = open_time ;
ss1 - > ptr_usr_name = usr_name ! = NULL ? 1 : 0 ;
ss1 - > ptr_net_name = net_name ! = NULL ? 1 : 0 ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_conn_info1 ( char * desc , CONN_INFO_1 * ss1 , prs_struct * ps , int depth )
{
if ( ss1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_conn_info1 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " id " , ps , depth , & ( ss1 - > id ) ) ;
prs_uint32 ( " type " , ps , depth , & ( ss1 - > type ) ) ;
prs_uint32 ( " num_opens " , ps , depth , & ( ss1 - > num_opens ) ) ;
prs_uint32 ( " num_users " , ps , depth , & ( ss1 - > num_users ) ) ;
prs_uint32 ( " open_time " , ps , depth , & ( ss1 - > open_time ) ) ;
prs_uint32 ( " ptr_usr_name " , ps , depth , & ( ss1 - > ptr_usr_name ) ) ;
prs_uint32 ( " ptr_net_name " , ps , depth , & ( ss1 - > ptr_net_name ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_conn_info_1 ( char * desc , SRV_CONN_INFO_1 * ss1 , prs_struct * ps , int depth )
{
if ( ss1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_conn_info_1 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( ss1 - > num_entries_read ) ) ;
prs_uint32 ( " ptr_conn_info " , ps , depth , & ( ss1 - > ptr_conn_info ) ) ;
if ( ss1 - > ptr_conn_info ! = 0 )
{
int i ;
int num_entries = ss1 - > num_entries_read ;
if ( num_entries > MAX_CONN_ENTRIES )
{
num_entries = MAX_CONN_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( ss1 - > num_entries_read2 ) ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_conn_info1 ( " " , & ( ss1 - > info_1 [ i ] ) , ps , depth ) ;
}
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_conn_info1_str ( " " , & ( ss1 - > info_1_str [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_conn_ctr ( char * desc , SRV_CONN_INFO_CTR * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_conn_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " switch_value " , ps , depth , & ( ctr - > switch_value ) ) ;
prs_uint32 ( " ptr_conn_ctr " , ps , depth , & ( ctr - > ptr_conn_ctr ) ) ;
if ( ctr - > ptr_conn_ctr ! = 0 )
{
switch ( ctr - > switch_value )
{
case 0 :
{
srv_io_srv_conn_info_0 ( " " , & ( ctr - > conn . info0 ) , ps , depth ) ;
break ;
}
case 1 :
{
srv_io_srv_conn_info_1 ( " " , & ( ctr - > conn . info1 ) , ps , depth ) ;
break ;
}
default :
{
DEBUG ( 5 , ( " %s no connection info at switch_value %d \n " ,
tab_depth ( depth ) , ctr - > switch_value ) ) ;
break ;
}
}
}
}
Makefile.in :
- added srvsvc client files
clientgen.c :
- replaced cli_error(cli, int *cls, int *err) with
cli_error(cli, uint8 cls, uint32 *err). this version detects
32 bit status messages. the DOS error "MORE_DATA", the
equivalent of the 32 bit *warning* 0x8000 0005
(STATUS_BUFFER_OVERFLOW), was being processed as an error,
terminating the cli_receive_trans() call.
cli_pipe.c :
- replaced calls that had been incorrectly modified from
32 bit warnings (0x8000 0005 - STATUS_BUFFER_OVERFLOW)
to 8 bit DOS errors (0x01 0xEA - MORE_DATA).
the use of the old version of cli_error (DOS only)
instead of the new one (DOS and 32 bit) caused the
dce/rpc client code to fail.
- replaced 2 space indentation with tab indentation in all functions.
cli_srvsvc.c :
cmd_srvsvc.c :
- added these files back in, fixing them up to use jeremy's
modified versions of the dce/rpc client functions.
parse_srv.c :
- added back in some "unused" functions required by dce/rpc
client-side code. it would be helpful if all such "unused"
functions could be added back in.
rpcclient.c :
- added "session", "file", "share", "connection" enumeration
functions back in. these are equivalent to nt's "NetXXXXXEnum"
Win32 (MSDN) functions.
- added "srvinfo" function back in. this is equivalent to
nt's NetServerGetInfo Win32 (MSDN) function.
-
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_q_net_conn_enum ( SRV_Q_NET_CONN_ENUM * q_n ,
char * srv_name , char * qual_name ,
uint32 conn_level , SRV_CONN_INFO_CTR * ctr ,
uint32 preferred_len ,
ENUM_HND * hnd )
{
if ( q_n = = NULL | | ctr = = NULL | | hnd = = NULL ) return ;
q_n - > ctr = ctr ;
DEBUG ( 5 , ( " make_q_net_conn_enum \n " ) ) ;
make_buf_unistr2 ( & ( q_n - > uni_srv_name ) , & ( q_n - > ptr_srv_name ) , srv_name ) ;
make_buf_unistr2 ( & ( q_n - > uni_qual_name ) , & ( q_n - > ptr_qual_name ) , qual_name ) ;
q_n - > conn_level = conn_level ;
q_n - > preferred_len = preferred_len ;
memcpy ( & ( q_n - > enum_hnd ) , hnd , sizeof ( * hnd ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_q_net_conn_enum ( char * desc , SRV_Q_NET_CONN_ENUM * q_n , prs_struct * ps , int depth )
{
if ( q_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_q_net_conn_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_name " , ps , depth , & ( q_n - > ptr_srv_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_srv_name ) , q_n - > ptr_srv_name , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_qual_name " , ps , depth , & ( q_n - > ptr_qual_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_qual_name ) , q_n - > ptr_qual_name , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " conn_level " , ps , depth , & ( q_n - > conn_level ) ) ;
if ( q_n - > conn_level ! = - 1 )
{
srv_io_srv_conn_ctr ( " conn_ctr " , q_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " preferred_len " , ps , depth , & ( q_n - > preferred_len ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( q_n - > enum_hnd ) , ps , depth ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_r_net_conn_enum ( char * desc , SRV_R_NET_CONN_ENUM * r_n , prs_struct * ps , int depth )
{
if ( r_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_r_net_conn_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " conn_level " , ps , depth , & ( r_n - > conn_level ) ) ;
if ( r_n - > conn_level ! = - 1 )
{
srv_io_srv_conn_ctr ( " conn_ctr " , r_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " total_entries " , ps , depth , & ( r_n - > total_entries ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( r_n - > enum_hnd ) , ps , depth ) ;
prs_uint32 ( " status " , ps , depth , & ( r_n - > status ) ) ;
}
/*******************************************************************
makes a FILE_INFO_3_STR structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_file_info3_str ( FILE_INFO_3_STR * fi3 , char * user_name , char * path_name )
{
if ( fi3 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_file_info3_str \n " ) ) ;
make_unistr2 ( & ( fi3 - > uni_path_name ) , path_name , strlen ( path_name ) + 1 ) ;
make_unistr2 ( & ( fi3 - > uni_user_name ) , user_name , strlen ( user_name ) + 1 ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_file_info3_str ( char * desc , FILE_INFO_3_STR * sh1 , prs_struct * ps , int depth )
{
if ( sh1 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_file_info3_str " ) ;
depth + + ;
prs_align ( ps ) ;
smb_io_unistr2 ( " " , & ( sh1 - > uni_path_name ) , True , ps , depth ) ;
smb_io_unistr2 ( " " , & ( sh1 - > uni_user_name ) , True , ps , depth ) ;
}
/*******************************************************************
makes a FILE_INFO_3 structure
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_file_info3 ( FILE_INFO_3 * fl3 ,
uint32 id , uint32 perms , uint32 num_locks ,
char * path_name , char * user_name )
{
if ( fl3 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_file_info3: %s %s \n " , path_name , user_name ) ) ;
fl3 - > id = id ;
fl3 - > perms = perms ;
fl3 - > num_locks = num_locks ;
fl3 - > ptr_path_name = path_name ! = NULL ? 1 : 0 ;
fl3 - > ptr_user_name = user_name ! = NULL ? 1 : 0 ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_file_info3 ( char * desc , FILE_INFO_3 * fl3 , prs_struct * ps , int depth )
{
if ( fl3 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_file_info3 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " id " , ps , depth , & ( fl3 - > id ) ) ;
prs_uint32 ( " perms " , ps , depth , & ( fl3 - > perms ) ) ;
prs_uint32 ( " num_locks " , ps , depth , & ( fl3 - > num_locks ) ) ;
prs_uint32 ( " ptr_path_name " , ps , depth , & ( fl3 - > ptr_path_name ) ) ;
prs_uint32 ( " ptr_user_name " , ps , depth , & ( fl3 - > ptr_user_name ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_file_info_3 ( char * desc , SRV_FILE_INFO_3 * fl3 , prs_struct * ps , int depth )
{
if ( fl3 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_file_3_fl3 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " num_entries_read " , ps , depth , & ( fl3 - > num_entries_read ) ) ;
prs_uint32 ( " ptr_file_fl3 " , ps , depth , & ( fl3 - > ptr_file_info ) ) ;
if ( fl3 - > ptr_file_info ! = 0 )
{
int i ;
int num_entries = fl3 - > num_entries_read ;
if ( num_entries > MAX_FILE_ENTRIES )
{
num_entries = MAX_FILE_ENTRIES ; /* report this! */
}
prs_uint32 ( " num_entries_read2 " , ps , depth , & ( fl3 - > num_entries_read2 ) ) ;
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_file_info3 ( " " , & ( fl3 - > info_3 [ i ] ) , ps , depth ) ;
}
for ( i = 0 ; i < num_entries ; i + + )
{
prs_grow ( ps ) ;
srv_io_file_info3_str ( " " , & ( fl3 - > info_3_str [ i ] ) , ps , depth ) ;
}
prs_align ( ps ) ;
}
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_srv_file_ctr ( char * desc , SRV_FILE_INFO_CTR * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_srv_file_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " switch_value " , ps , depth , & ( ctr - > switch_value ) ) ;
prs_uint32 ( " ptr_file_ctr " , ps , depth , & ( ctr - > ptr_file_ctr ) ) ;
if ( ctr - > ptr_file_ctr ! = 0 )
{
switch ( ctr - > switch_value )
{
case 3 :
{
srv_io_srv_file_info_3 ( " " , & ( ctr - > file . info3 ) , ps , depth ) ;
break ;
}
default :
{
DEBUG ( 5 , ( " %s no file info at switch_value %d \n " ,
tab_depth ( depth ) , ctr - > switch_value ) ) ;
break ;
}
}
}
}
Makefile.in :
- added srvsvc client files
clientgen.c :
- replaced cli_error(cli, int *cls, int *err) with
cli_error(cli, uint8 cls, uint32 *err). this version detects
32 bit status messages. the DOS error "MORE_DATA", the
equivalent of the 32 bit *warning* 0x8000 0005
(STATUS_BUFFER_OVERFLOW), was being processed as an error,
terminating the cli_receive_trans() call.
cli_pipe.c :
- replaced calls that had been incorrectly modified from
32 bit warnings (0x8000 0005 - STATUS_BUFFER_OVERFLOW)
to 8 bit DOS errors (0x01 0xEA - MORE_DATA).
the use of the old version of cli_error (DOS only)
instead of the new one (DOS and 32 bit) caused the
dce/rpc client code to fail.
- replaced 2 space indentation with tab indentation in all functions.
cli_srvsvc.c :
cmd_srvsvc.c :
- added these files back in, fixing them up to use jeremy's
modified versions of the dce/rpc client functions.
parse_srv.c :
- added back in some "unused" functions required by dce/rpc
client-side code. it would be helpful if all such "unused"
functions could be added back in.
rpcclient.c :
- added "session", "file", "share", "connection" enumeration
functions back in. these are equivalent to nt's "NetXXXXXEnum"
Win32 (MSDN) functions.
- added "srvinfo" function back in. this is equivalent to
nt's NetServerGetInfo Win32 (MSDN) function.
-
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_q_net_file_enum ( SRV_Q_NET_FILE_ENUM * q_n ,
char * srv_name , char * qual_name ,
uint32 file_level , SRV_FILE_INFO_CTR * ctr ,
uint32 preferred_len ,
ENUM_HND * hnd )
{
if ( q_n = = NULL | | ctr = = NULL | | hnd = = NULL ) return ;
q_n - > ctr = ctr ;
DEBUG ( 5 , ( " make_q_net_file_enum \n " ) ) ;
make_buf_unistr2 ( & ( q_n - > uni_srv_name ) , & ( q_n - > ptr_srv_name ) , srv_name ) ;
make_buf_unistr2 ( & ( q_n - > uni_qual_name ) , & ( q_n - > ptr_qual_name ) , qual_name ) ;
q_n - > file_level = file_level ;
q_n - > preferred_len = preferred_len ;
memcpy ( & ( q_n - > enum_hnd ) , hnd , sizeof ( * hnd ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_q_net_file_enum ( char * desc , SRV_Q_NET_FILE_ENUM * q_n , prs_struct * ps , int depth )
{
if ( q_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_q_net_file_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_name " , ps , depth , & ( q_n - > ptr_srv_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_srv_name ) , True , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_qual_name " , ps , depth , & ( q_n - > ptr_qual_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_qual_name ) , q_n - > ptr_qual_name , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " file_level " , ps , depth , & ( q_n - > file_level ) ) ;
if ( q_n - > file_level ! = - 1 )
{
srv_io_srv_file_ctr ( " file_ctr " , q_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " preferred_len " , ps , depth , & ( q_n - > preferred_len ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( q_n - > enum_hnd ) , ps , depth ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_r_net_file_enum ( char * desc , SRV_R_NET_FILE_ENUM * r_n , prs_struct * ps , int depth )
{
if ( r_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_r_net_file_enum " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " file_level " , ps , depth , & ( r_n - > file_level ) ) ;
if ( r_n - > file_level ! = 0 )
{
srv_io_srv_file_ctr ( " file_ctr " , r_n - > ctr , ps , depth ) ;
}
prs_uint32 ( " total_entries " , ps , depth , & ( r_n - > total_entries ) ) ;
smb_io_enum_hnd ( " enum_hnd " , & ( r_n - > enum_hnd ) , ps , depth ) ;
prs_uint32 ( " status " , ps , depth , & ( r_n - > status ) ) ;
}
/*******************************************************************
makes a SRV_INFO_101 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_info_101 ( SRV_INFO_101 * sv101 , uint32 platform_id , char * name ,
uint32 ver_major , uint32 ver_minor ,
uint32 srv_type , char * comment )
{
if ( sv101 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_info_101 \n " ) ) ;
sv101 - > platform_id = platform_id ;
make_buf_unistr2 ( & ( sv101 - > uni_name ) , & ( sv101 - > ptr_name ) , name ) ;
sv101 - > ver_major = ver_major ;
sv101 - > ver_minor = ver_minor ;
sv101 - > srv_type = srv_type ;
make_buf_unistr2 ( & ( sv101 - > uni_comment ) , & ( sv101 - > ptr_comment ) , comment ) ;
}
/*******************************************************************
reads or writes a SRV_INFO_101 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_info_101 ( char * desc , SRV_INFO_101 * sv101 , prs_struct * ps , int depth )
{
if ( sv101 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_info_101 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " platform_id " , ps , depth , & ( sv101 - > platform_id ) ) ;
prs_uint32 ( " ptr_name " , ps , depth , & ( sv101 - > ptr_name ) ) ;
prs_uint32 ( " ver_major " , ps , depth , & ( sv101 - > ver_major ) ) ;
prs_uint32 ( " ver_minor " , ps , depth , & ( sv101 - > ver_minor ) ) ;
prs_uint32 ( " srv_type " , ps , depth , & ( sv101 - > srv_type ) ) ;
prs_uint32 ( " ptr_comment " , ps , depth , & ( sv101 - > ptr_comment ) ) ;
prs_align ( ps ) ;
smb_io_unistr2 ( " uni_name " , & ( sv101 - > uni_name ) , True , ps , depth ) ;
smb_io_unistr2 ( " uni_comment " , & ( sv101 - > uni_comment ) , True , ps , depth ) ;
}
/*******************************************************************
makes a SRV_INFO_102 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_info_102 ( SRV_INFO_102 * sv102 , uint32 platform_id , char * name ,
char * comment , uint32 ver_major , uint32 ver_minor ,
uint32 srv_type , uint32 users , uint32 disc , uint32 hidden ,
uint32 announce , uint32 ann_delta , uint32 licenses ,
char * usr_path )
{
if ( sv102 = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_info_102 \n " ) ) ;
sv102 - > platform_id = platform_id ;
make_buf_unistr2 ( & ( sv102 - > uni_name ) , & ( sv102 - > ptr_name ) , name ) ;
sv102 - > ver_major = ver_major ;
sv102 - > ver_minor = ver_minor ;
sv102 - > srv_type = srv_type ;
make_buf_unistr2 ( & ( sv102 - > uni_comment ) , & ( sv102 - > ptr_comment ) , comment ) ;
/* same as 101 up to here */
sv102 - > users = users ;
sv102 - > disc = disc ;
sv102 - > hidden = hidden ;
sv102 - > announce = announce ;
sv102 - > ann_delta = ann_delta ;
sv102 - > licenses = licenses ;
make_buf_unistr2 ( & ( sv102 - > uni_usr_path ) , & ( sv102 - > ptr_usr_path ) , usr_path ) ;
}
/*******************************************************************
reads or writes a SRV_INFO_102 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_info_102 ( char * desc , SRV_INFO_102 * sv102 , prs_struct * ps , int depth )
{
if ( sv102 = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_info102 " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " platform_id " , ps , depth , & ( sv102 - > platform_id ) ) ;
prs_uint32 ( " ptr_name " , ps , depth , & ( sv102 - > ptr_name ) ) ;
prs_uint32 ( " ver_major " , ps , depth , & ( sv102 - > ver_major ) ) ;
prs_uint32 ( " ver_minor " , ps , depth , & ( sv102 - > ver_minor ) ) ;
prs_uint32 ( " srv_type " , ps , depth , & ( sv102 - > srv_type ) ) ;
prs_uint32 ( " ptr_comment " , ps , depth , & ( sv102 - > ptr_comment ) ) ;
/* same as 101 up to here */
prs_uint32 ( " users " , ps , depth , & ( sv102 - > users ) ) ;
prs_uint32 ( " disc " , ps , depth , & ( sv102 - > disc ) ) ;
prs_uint32 ( " hidden " , ps , depth , & ( sv102 - > hidden ) ) ;
prs_uint32 ( " announce " , ps , depth , & ( sv102 - > announce ) ) ;
prs_uint32 ( " ann_delta " , ps , depth , & ( sv102 - > ann_delta ) ) ;
prs_uint32 ( " licenses " , ps , depth , & ( sv102 - > licenses ) ) ;
prs_uint32 ( " ptr_usr_path " , ps , depth , & ( sv102 - > ptr_usr_path ) ) ;
smb_io_unistr2 ( " uni_name " , & ( sv102 - > uni_name ) , True , ps , depth ) ;
prs_align ( ps ) ;
smb_io_unistr2 ( " uni_comment " , & ( sv102 - > uni_comment ) , True , ps , depth ) ;
prs_align ( ps ) ;
smb_io_unistr2 ( " uni_usr_path " , & ( sv102 - > uni_usr_path ) , True , ps , depth ) ;
}
/*******************************************************************
reads or writes a SRV_INFO_102 structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_info_ctr ( char * desc , SRV_INFO_CTR * ctr , prs_struct * ps , int depth )
{
if ( ctr = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_info_ctr " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " switch_value " , ps , depth , & ( ctr - > switch_value ) ) ;
prs_uint32 ( " ptr_srv_ctr " , ps , depth , & ( ctr - > ptr_srv_ctr ) ) ;
if ( ctr - > ptr_srv_ctr ! = 0 & & ctr - > switch_value ! = 0 & & ctr ! = NULL )
{
switch ( ctr - > switch_value )
{
case 101 :
{
srv_io_info_101 ( " sv101 " , & ( ctr - > srv . sv101 ) , ps , depth ) ;
break ;
}
case 102 :
{
srv_io_info_102 ( " sv102 " , & ( ctr - > srv . sv102 ) , ps , depth ) ;
break ;
}
default :
{
DEBUG ( 5 , ( " %s no server info at switch_value %d \n " ,
tab_depth ( depth ) , ctr - > switch_value ) ) ;
break ;
}
}
prs_align ( ps ) ;
}
}
Makefile.in :
- added srvsvc client files
clientgen.c :
- replaced cli_error(cli, int *cls, int *err) with
cli_error(cli, uint8 cls, uint32 *err). this version detects
32 bit status messages. the DOS error "MORE_DATA", the
equivalent of the 32 bit *warning* 0x8000 0005
(STATUS_BUFFER_OVERFLOW), was being processed as an error,
terminating the cli_receive_trans() call.
cli_pipe.c :
- replaced calls that had been incorrectly modified from
32 bit warnings (0x8000 0005 - STATUS_BUFFER_OVERFLOW)
to 8 bit DOS errors (0x01 0xEA - MORE_DATA).
the use of the old version of cli_error (DOS only)
instead of the new one (DOS and 32 bit) caused the
dce/rpc client code to fail.
- replaced 2 space indentation with tab indentation in all functions.
cli_srvsvc.c :
cmd_srvsvc.c :
- added these files back in, fixing them up to use jeremy's
modified versions of the dce/rpc client functions.
parse_srv.c :
- added back in some "unused" functions required by dce/rpc
client-side code. it would be helpful if all such "unused"
functions could be added back in.
rpcclient.c :
- added "session", "file", "share", "connection" enumeration
functions back in. these are equivalent to nt's "NetXXXXXEnum"
Win32 (MSDN) functions.
- added "srvinfo" function back in. this is equivalent to
nt's NetServerGetInfo Win32 (MSDN) function.
-
/*******************************************************************
makes a SRV_Q_NET_SRV_GET_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_q_net_srv_get_info ( SRV_Q_NET_SRV_GET_INFO * srv ,
char * server_name , uint32 switch_value )
{
if ( srv = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_q_net_srv_get_info \n " ) ) ;
make_buf_unistr2 ( & ( srv - > uni_srv_name ) , & ( srv - > ptr_srv_name ) , server_name ) ;
srv - > switch_value = switch_value ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_q_net_srv_get_info ( char * desc , SRV_Q_NET_SRV_GET_INFO * q_n , prs_struct * ps , int depth )
{
if ( q_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_q_net_srv_get_info " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_name " , ps , depth , & ( q_n - > ptr_srv_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_srv_name ) , True , ps , depth ) ;
prs_align ( ps ) ;
prs_uint32 ( " switch_value " , ps , depth , & ( q_n - > switch_value ) ) ;
}
/*******************************************************************
makes a SRV_R_NET_SRV_GET_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_srv_r_net_srv_get_info ( SRV_R_NET_SRV_GET_INFO * srv ,
uint32 switch_value , SRV_INFO_CTR * ctr , uint32 status )
{
if ( srv = = NULL ) return ;
DEBUG ( 5 , ( " make_srv_r_net_srv_get_info \n " ) ) ;
srv - > ctr = ctr ;
if ( status = = 0x0 )
{
srv - > ctr - > switch_value = switch_value ;
srv - > ctr - > ptr_srv_ctr = 1 ;
}
else
{
srv - > ctr - > switch_value = 0 ;
srv - > ctr - > ptr_srv_ctr = 0 ;
}
srv - > status = status ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_r_net_srv_get_info ( char * desc , SRV_R_NET_SRV_GET_INFO * r_n , prs_struct * ps , int depth )
{
if ( r_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_r_net_srv_get_info " ) ;
depth + + ;
prs_align ( ps ) ;
srv_io_info_ctr ( " ctr " , r_n - > ctr , ps , depth ) ;
prs_uint32 ( " status " , ps , depth , & ( r_n - > status ) ) ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_q_net_remote_tod ( char * desc , SRV_Q_NET_REMOTE_TOD * q_n , prs_struct * ps , int depth )
{
if ( q_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_q_net_remote_tod " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_name " , ps , depth , & ( q_n - > ptr_srv_name ) ) ;
smb_io_unistr2 ( " " , & ( q_n - > uni_srv_name ) , True , ps , depth ) ;
}
/*******************************************************************
reads or writes a TIME_OF_DAY_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void srv_io_time_of_day_info ( char * desc , TIME_OF_DAY_INFO * tod , prs_struct * ps , int depth )
{
if ( tod = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_time_of_day_info " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " elapsedt " , ps , depth , & ( tod - > elapsedt ) ) ;
prs_uint32 ( " msecs " , ps , depth , & ( tod - > msecs ) ) ;
prs_uint32 ( " hours " , ps , depth , & ( tod - > hours ) ) ;
prs_uint32 ( " mins " , ps , depth , & ( tod - > mins ) ) ;
prs_uint32 ( " secs " , ps , depth , & ( tod - > secs ) ) ;
prs_uint32 ( " hunds " , ps , depth , & ( tod - > hunds ) ) ;
prs_uint32 ( " timezone " , ps , depth , & ( tod - > zone ) ) ;
prs_uint32 ( " tintervals " , ps , depth , & ( tod - > tintervals ) ) ;
prs_uint32 ( " day " , ps , depth , & ( tod - > day ) ) ;
prs_uint32 ( " month " , ps , depth , & ( tod - > month ) ) ;
prs_uint32 ( " year " , ps , depth , & ( tod - > year ) ) ;
prs_uint32 ( " weekday " , ps , depth , & ( tod - > weekday ) ) ;
}
/*******************************************************************
makes a TIME_OF_DAY_INFO structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void make_time_of_day_info ( TIME_OF_DAY_INFO * tod , uint32 elapsedt , uint32 msecs ,
uint32 hours , uint32 mins , uint32 secs , uint32 hunds ,
uint32 zone , uint32 tintervals , uint32 day ,
uint32 month , uint32 year , uint32 weekday )
{
if ( tod = = NULL ) return ;
DEBUG ( 5 , ( " make_time_of_day_info \n " ) ) ;
tod - > elapsedt = elapsedt ;
tod - > msecs = msecs ;
tod - > hours = hours ;
tod - > mins = mins ;
tod - > secs = secs ;
tod - > hunds = hunds ;
tod - > zone = zone ;
tod - > tintervals = tintervals ;
tod - > day = day ;
tod - > month = month ;
tod - > year = year ;
tod - > weekday = weekday ;
}
/*******************************************************************
reads or writes a structure .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void srv_io_r_net_remote_tod ( char * desc , SRV_R_NET_REMOTE_TOD * r_n , prs_struct * ps , int depth )
{
if ( r_n = = NULL ) return ;
prs_debug ( ps , depth , desc , " srv_io_r_net_remote_tod " ) ;
depth + + ;
prs_align ( ps ) ;
prs_uint32 ( " ptr_srv_tod " , ps , depth , & ( r_n - > ptr_srv_tod ) ) ;
srv_io_time_of_day_info ( " tod " , r_n - > tod , ps , depth ) ;
prs_uint32 ( " status " , ps , depth , & ( r_n - > status ) ) ;
}