2011-05-31 02:12:27 +04:00
/*
* Unix SMB / CIFS implementation .
* Main SMB server routines
*
* Copyright ( C ) Andrew Tridgell 1992 - 2002 , 2006
* Copyright ( C ) Jeremy Allison 1992 - 2010
* Copyright ( C ) Volker Lendecke 1993 - 2009
* Copyright ( C ) John H Terpstra 1995 - 1998
* Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1998
* Copyright ( C ) Paul Ashton 1997 - 1998
* Copyright ( C ) Tim Potter 1999 - 2000
* Copyright ( C ) T . D . Lee @ durham . ac . uk 1999
* Copyright ( C ) Ying Chen 2000
* Copyright ( C ) Shirish Kalele 2000
* Copyright ( C ) Andrew Bartlett 2001 - 2003
* Copyright ( C ) Alexander Bokovoy 2002 , 2005
* Copyright ( C ) Simo Sorce 2001 - 2002 , 2009
* Copyright ( C ) Andreas Gruenbacher 2002
* Copyright ( C ) Jim McDonough < jmcd @ us . ibm . com > 2002
* Copyright ( C ) Martin Pool 2002
* Copyright ( C ) Luke Howard 2003
* Copyright ( C ) Stefan ( metze ) Metzmacher 2003 , 2009
* Copyright ( C ) Steve French 2005
* Copyright ( C ) Gerald ( Jerry ) Carter 2006
* Copyright ( C ) James Peach 2006 - 2007
* Copyright ( C ) Jelmer Vernooij 2002 - 2003
* Copyright ( C ) Michael Adam 2007
* Copyright ( C ) Rishi Srivatsavai 2007
* Copyright ( C ) Tim Prouty 2009
* Copyright ( C ) Gregor Beck 2011
*
* 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 3 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 , see < http : //www.gnu.org/licenses/>.
*/
2011-03-19 02:47:12 +03:00
2011-05-31 02:13:15 +04:00
# ifndef _SMBD_PROTO_H_
# define _SMBD_PROTO_H_
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/signing.c */
2014-05-21 16:44:01 +04:00
struct smbXsrv_connection ;
bool srv_check_sign_mac ( struct smbXsrv_connection * conn ,
2011-03-19 02:47:12 +03:00
const char * inbuf , uint32_t * seqnum , bool trusted_channel ) ;
2014-05-21 16:44:01 +04:00
void srv_calculate_sign_mac ( struct smbXsrv_connection * conn ,
2011-03-19 02:47:12 +03:00
char * outbuf , uint32_t seqnum ) ;
2014-05-21 16:44:01 +04:00
void srv_cancel_sign_response ( struct smbXsrv_connection * conn ) ;
bool srv_init_signing ( struct smbXsrv_connection * conn ) ;
void srv_set_signing_negotiated ( struct smbXsrv_connection * conn ,
2011-09-12 11:19:06 +04:00
bool allowed , bool mandatory ) ;
2014-05-21 16:44:01 +04:00
bool srv_is_signing_active ( struct smbXsrv_connection * conn ) ;
bool srv_is_signing_negotiated ( struct smbXsrv_connection * conn ) ;
void srv_set_signing ( struct smbXsrv_connection * conn ,
2011-03-19 02:47:12 +03:00
const DATA_BLOB user_session_key ,
const DATA_BLOB response ) ;
/* The following definitions come from smbd/aio.c */
2012-07-13 12:22:05 +04:00
struct aio_extra ;
2012-07-12 21:57:47 +04:00
bool aio_write_through_requested ( struct aio_extra * aio_ex ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS schedule_aio_read_and_X ( connection_struct * conn ,
struct smb_request * req ,
2012-04-05 08:53:08 +04:00
files_struct * fsp , off_t startpos ,
2011-03-19 02:47:12 +03:00
size_t smb_maxcnt ) ;
NTSTATUS schedule_aio_write_and_X ( connection_struct * conn ,
struct smb_request * req ,
2011-05-05 21:41:59 +04:00
files_struct * fsp , const char * data ,
2012-04-05 08:53:08 +04:00
off_t startpos ,
2011-03-19 02:47:12 +03:00
size_t numtowrite ) ;
NTSTATUS schedule_smb2_aio_read ( connection_struct * conn ,
struct smb_request * smbreq ,
files_struct * fsp ,
TALLOC_CTX * ctx ,
DATA_BLOB * preadbuf ,
2012-04-05 08:53:08 +04:00
off_t startpos ,
2011-03-19 02:47:12 +03:00
size_t smb_maxcnt ) ;
NTSTATUS schedule_aio_smb2_write ( connection_struct * conn ,
struct smb_request * smbreq ,
files_struct * fsp ,
uint64_t in_offset ,
DATA_BLOB in_data ,
bool write_through ) ;
2011-11-14 12:52:47 +04:00
bool cancel_smb2_aio ( struct smb_request * smbreq ) ;
2014-12-05 08:13:33 +03:00
bool aio_add_req_to_fsp ( files_struct * fsp , struct tevent_req * req ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/blocking.c */
2013-02-18 12:56:41 +04:00
void brl_timeout_fn ( struct tevent_context * event_ctx ,
2013-02-18 13:18:29 +04:00
struct tevent_timer * te ,
2011-03-19 02:47:12 +03:00
struct timeval now ,
void * private_data ) ;
struct timeval timeval_brl_min ( const struct timeval * tv1 ,
const struct timeval * tv2 ) ;
void process_blocking_lock_queue ( struct smbd_server_connection * sconn ) ;
bool push_blocking_lock_request ( struct byte_range_lock * br_lck ,
struct smb_request * req ,
files_struct * fsp ,
int lock_timeout ,
int lock_num ,
uint64_t smblctx ,
enum brl_type lock_type ,
enum brl_flavour lock_flav ,
uint64_t offset ,
uint64_t count ,
uint64_t blocking_smblctx ) ;
2011-05-31 07:18:37 +04:00
void smbd_cancel_pending_lock_requests_by_fid ( files_struct * fsp ,
struct byte_range_lock * br_lck ,
enum file_close_type close_type ) ;
2011-03-19 02:47:12 +03:00
void cancel_pending_lock_requests_by_fid ( files_struct * fsp ,
struct byte_range_lock * br_lck ,
enum file_close_type close_type ) ;
void remove_pending_lock_requests_by_mid_smb1 (
struct smbd_server_connection * sconn , uint64_t mid ) ;
bool blocking_lock_was_deferred_smb1 (
struct smbd_server_connection * sconn , uint64_t mid ) ;
struct blocking_lock_record * blocking_lock_cancel_smb1 ( files_struct * fsp ,
uint64_t smblctx ,
uint64_t offset ,
uint64_t count ,
enum brl_flavour lock_flav ,
unsigned char locktype ,
NTSTATUS err ) ;
/* The following definitions come from smbd/close.c */
void set_close_write_time ( struct files_struct * fsp , struct timespec ts ) ;
NTSTATUS close_file ( struct smb_request * req , files_struct * fsp ,
enum file_close_type close_type ) ;
void msg_close_file ( struct messaging_context * msg_ctx ,
void * private_data ,
uint32_t msg_type ,
struct server_id server_id ,
DATA_BLOB * data ) ;
NTSTATUS delete_all_streams ( connection_struct * conn , const char * fname ) ;
2012-10-01 11:55:28 +04:00
bool recursive_rmdir ( TALLOC_CTX * ctx ,
connection_struct * conn ,
struct smb_filename * smb_dname ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/conn.c */
int conn_num_open ( struct smbd_server_connection * sconn ) ;
2011-05-25 07:00:22 +04:00
bool conn_snum_used ( struct smbd_server_connection * sconn , int snum ) ;
2011-03-19 02:47:12 +03:00
connection_struct * conn_new ( struct smbd_server_connection * sconn ) ;
bool conn_idle_all ( struct smbd_server_connection * sconn , time_t t ) ;
2012-06-05 17:50:21 +04:00
void conn_clear_vuid_caches ( struct smbd_server_connection * sconn , uint64_t vuid ) ;
2011-03-19 02:47:12 +03:00
void conn_free ( connection_struct * conn ) ;
2011-05-25 08:58:24 +04:00
void conn_force_tdis ( struct smbd_server_connection * sconn , const char * sharename ) ;
2011-03-19 02:47:12 +03:00
void msg_force_tdis ( struct messaging_context * msg ,
void * private_data ,
uint32_t msg_type ,
struct server_id server_id ,
DATA_BLOB * data ) ;
/* The following definitions come from smbd/connection.c */
2012-08-27 17:12:36 +04:00
int count_current_connections ( const char * sharename , bool verify ) ;
2011-12-13 15:18:01 +04:00
bool connections_snum_used ( struct smbd_server_connection * unused , int snum ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/dfree.c */
2015-02-16 21:26:24 +03:00
void disk_norm ( uint64_t * bsize , uint64_t * dfree , uint64_t * dsize ) ;
uint64_t sys_disk_free ( connection_struct * conn , const char * path ,
2011-03-19 02:47:12 +03:00
uint64_t * bsize , uint64_t * dfree , uint64_t * dsize ) ;
uint64_t get_dfree_info ( connection_struct * conn ,
const char * path ,
uint64_t * bsize ,
uint64_t * dfree ,
uint64_t * dsize ) ;
/* The following definitions come from smbd/dir.c */
bool init_dptrs ( struct smbd_server_connection * sconn ) ;
2012-02-25 05:12:52 +04:00
const char * dptr_path ( struct smbd_server_connection * sconn , int key ) ;
const char * dptr_wcard ( struct smbd_server_connection * sconn , int key ) ;
2011-03-19 02:47:12 +03:00
uint16 dptr_attr ( struct smbd_server_connection * sconn , int key ) ;
void dptr_close ( struct smbd_server_connection * sconn , int * key ) ;
void dptr_closecnum ( connection_struct * conn ) ;
void dptr_idlecnum ( connection_struct * conn ) ;
void dptr_closepath ( struct smbd_server_connection * sconn ,
char * path , uint16 spid ) ;
2012-03-01 04:05:50 +04:00
NTSTATUS dptr_create ( connection_struct * conn ,
struct smb_request * req ,
files_struct * fsp ,
2011-03-19 02:47:12 +03:00
const char * path , bool old_handle , bool expect_close , uint16 spid ,
const char * wcard , bool wcard_has_wild , uint32 attr , struct dptr_struct * * dptr_ret ) ;
void dptr_CloseDir ( files_struct * fsp ) ;
void dptr_SeekDir ( struct dptr_struct * dptr , long offset ) ;
long dptr_TellDir ( struct dptr_struct * dptr ) ;
bool dptr_has_wild ( struct dptr_struct * dptr ) ;
int dptr_dnum ( struct dptr_struct * dptr ) ;
2012-02-29 23:42:21 +04:00
bool dptr_get_priv ( struct dptr_struct * dptr ) ;
void dptr_set_priv ( struct dptr_struct * dptr ) ;
2011-03-19 02:47:12 +03:00
bool dptr_SearchDir ( struct dptr_struct * dptr , const char * name , long * poffset , SMB_STRUCT_STAT * pst ) ;
void dptr_init_search_op ( struct dptr_struct * dptr ) ;
bool dptr_fill ( struct smbd_server_connection * sconn ,
char * buf1 , unsigned int key ) ;
struct dptr_struct * dptr_fetch ( struct smbd_server_connection * sconn ,
char * buf , int * num ) ;
struct dptr_struct * dptr_fetch_lanman2 ( struct smbd_server_connection * sconn ,
int dptr_num ) ;
bool get_dir_entry ( TALLOC_CTX * ctx ,
struct dptr_struct * dirptr ,
const char * mask ,
uint32 dirtype ,
char * * pp_fname_out ,
2012-04-05 08:53:08 +04:00
off_t * size ,
2011-03-19 02:47:12 +03:00
uint32 * mode ,
struct timespec * date ,
bool check_descend ,
bool ask_sharemode ) ;
bool is_visible_file ( connection_struct * conn , const char * dir_path , const char * name , SMB_STRUCT_STAT * pst , bool use_veto ) ;
struct smb_Dir * OpenDir ( TALLOC_CTX * mem_ctx , connection_struct * conn ,
const char * name , const char * mask , uint32 attr ) ;
const char * ReadDirName ( struct smb_Dir * dirp , long * poffset ,
SMB_STRUCT_STAT * sbuf , char * * talloced ) ;
void RewindDir ( struct smb_Dir * dirp , long * poffset ) ;
void SeekDir ( struct smb_Dir * dirp , long offset ) ;
long TellDir ( struct smb_Dir * dirp ) ;
bool SearchDir ( struct smb_Dir * dirp , const char * name , long * poffset ) ;
NTSTATUS can_delete_directory ( struct connection_struct * conn ,
const char * dirname ) ;
/* The following definitions come from smbd/dmapi.c */
const void * dmapi_get_current_session ( void ) ;
bool dmapi_have_session ( void ) ;
bool dmapi_new_session ( void ) ;
bool dmapi_destroy_session ( void ) ;
uint32 dmapi_file_flags ( const char * const path ) ;
/* The following definitions come from smbd/dnsregister.c */
bool smbd_setup_mdns_registration ( struct tevent_context * ev ,
TALLOC_CTX * mem_ctx ,
uint16_t port ) ;
/* The following definitions come from smbd/dosmode.c */
mode_t unix_mode ( connection_struct * conn , int dosmode ,
const struct smb_filename * smb_fname ,
const char * inherit_from_dir ) ;
uint32 dos_mode_msdfs ( connection_struct * conn ,
const struct smb_filename * smb_fname ) ;
int dos_attributes_to_stat_dos_flags ( uint32_t dosmode ) ;
uint32 dos_mode ( connection_struct * conn , struct smb_filename * smb_fname ) ;
int file_set_dosmode ( connection_struct * conn , struct smb_filename * smb_fname ,
uint32 dosmode , const char * parent_dir , bool newfile ) ;
NTSTATUS file_set_sparse ( connection_struct * conn ,
struct files_struct * fsp ,
bool sparse ) ;
int file_ntimes ( connection_struct * conn , const struct smb_filename * smb_fname ,
struct smb_file_time * ft ) ;
bool set_sticky_write_time_path ( struct file_id fileid , struct timespec mtime ) ;
bool set_sticky_write_time_fsp ( struct files_struct * fsp ,
struct timespec mtime ) ;
NTSTATUS set_create_timespec_ea ( connection_struct * conn ,
const struct smb_filename * smb_fname ,
struct timespec create_time ) ;
struct timespec get_create_timespec ( connection_struct * conn ,
struct files_struct * fsp ,
const struct smb_filename * smb_fname ) ;
struct timespec get_change_timespec ( connection_struct * conn ,
struct files_struct * fsp ,
const struct smb_filename * smb_fname ) ;
/* The following definitions come from smbd/error.c */
bool use_nt_status ( void ) ;
void error_packet_set ( char * outbuf , uint8 eclass , uint32 ecode , NTSTATUS ntstatus , int line , const char * file ) ;
int error_packet ( char * outbuf , uint8 eclass , uint32 ecode , NTSTATUS ntstatus , int line , const char * file ) ;
void reply_nt_error ( struct smb_request * req , NTSTATUS ntstatus ,
int line , const char * file ) ;
void reply_force_dos_error ( struct smb_request * req , uint8 eclass , uint32 ecode ,
int line , const char * file ) ;
void reply_both_error ( struct smb_request * req , uint8 eclass , uint32 ecode ,
NTSTATUS status , int line , const char * file ) ;
void reply_openerror ( struct smb_request * req , NTSTATUS status ) ;
/* The following definitions come from smbd/file_access.c */
bool can_delete_file_in_directory ( connection_struct * conn ,
2011-11-05 02:39:55 +04:00
const struct smb_filename * smb_fname ) ;
2011-03-19 02:47:12 +03:00
bool can_write_to_file ( connection_struct * conn ,
const struct smb_filename * smb_fname ) ;
bool directory_has_default_acl ( connection_struct * conn , const char * fname ) ;
2011-12-13 19:01:59 +04:00
NTSTATUS can_set_delete_on_close ( files_struct * fsp , uint32 dosmode ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/fileio.c */
2012-04-05 08:53:08 +04:00
ssize_t read_file ( files_struct * fsp , char * data , off_t pos , size_t n ) ;
2013-02-18 12:56:41 +04:00
void update_write_time_handler ( struct tevent_context * ctx ,
2013-02-18 13:18:29 +04:00
struct tevent_timer * te ,
2011-03-19 02:47:12 +03:00
struct timeval now ,
void * private_data ) ;
void trigger_write_time_update ( struct files_struct * fsp ) ;
void trigger_write_time_update_immediate ( struct files_struct * fsp ) ;
2012-07-12 18:28:11 +04:00
void mark_file_modified ( files_struct * fsp ) ;
2011-03-19 02:47:12 +03:00
ssize_t write_file ( struct smb_request * req ,
files_struct * fsp ,
const char * data ,
2012-04-05 08:53:08 +04:00
off_t pos ,
2011-03-19 02:47:12 +03:00
size_t n ) ;
void delete_write_cache ( files_struct * fsp ) ;
2012-04-05 08:53:08 +04:00
void set_filelen_write_cache ( files_struct * fsp , off_t file_size ) ;
2011-03-19 02:47:12 +03:00
ssize_t flush_write_cache ( files_struct * fsp , enum flush_reason_enum reason ) ;
NTSTATUS sync_file ( connection_struct * conn , files_struct * fsp , bool write_through ) ;
int fsp_stat ( files_struct * fsp ) ;
/* The following definitions come from smbd/filename.c */
NTSTATUS unix_convert ( TALLOC_CTX * ctx ,
connection_struct * conn ,
const char * orig_path ,
struct smb_filename * * smb_fname ,
uint32_t ucf_flags ) ;
NTSTATUS check_name ( connection_struct * conn , const char * name ) ;
int get_real_filename ( connection_struct * conn , const char * path ,
const char * name , TALLOC_CTX * mem_ctx ,
char * * found_name ) ;
NTSTATUS filename_convert ( TALLOC_CTX * mem_ctx ,
connection_struct * conn ,
bool dfs_path ,
const char * name_in ,
uint32_t ucf_flags ,
bool * ppath_contains_wcard ,
struct smb_filename * * pp_smb_fname ) ;
2012-02-25 02:12:05 +04:00
NTSTATUS filename_convert_with_privilege ( TALLOC_CTX * mem_ctx ,
connection_struct * conn ,
struct smb_request * smbreq ,
const char * name_in ,
uint32_t ucf_flags ,
bool * ppath_contains_wcard ,
struct smb_filename * * pp_smb_fname ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/files.c */
2012-06-07 18:13:36 +04:00
NTSTATUS fsp_new ( struct connection_struct * conn , TALLOC_CTX * mem_ctx ,
files_struct * * result ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS file_new ( struct smb_request * req , connection_struct * conn ,
files_struct * * result ) ;
void file_close_conn ( connection_struct * conn ) ;
void file_close_pid ( struct smbd_server_connection * sconn , uint16 smbpid ,
2012-06-05 20:23:14 +04:00
uint64_t vuid ) ;
2012-05-24 14:20:30 +04:00
bool file_init_global ( void ) ;
2011-03-19 02:47:12 +03:00
bool file_init ( struct smbd_server_connection * sconn ) ;
2012-06-05 20:23:14 +04:00
void file_close_user ( struct smbd_server_connection * sconn , uint64_t vuid ) ;
2011-03-19 02:47:12 +03:00
struct files_struct * files_forall (
struct smbd_server_connection * sconn ,
struct files_struct * ( * fn ) ( struct files_struct * fsp ,
void * private_data ) ,
void * private_data ) ;
files_struct * file_find_fd ( struct smbd_server_connection * sconn , int fd ) ;
files_struct * file_find_dif ( struct smbd_server_connection * sconn ,
struct file_id id , unsigned long gen_id ) ;
files_struct * file_find_di_first ( struct smbd_server_connection * sconn ,
struct file_id id ) ;
files_struct * file_find_di_next ( files_struct * start_fsp ) ;
2014-10-29 01:31:46 +03:00
struct files_struct * file_find_one_fsp_from_lease_key (
struct smbd_server_connection * sconn ,
const struct smb2_lease_key * lease_key ) ;
2011-03-19 02:47:12 +03:00
bool file_find_subpath ( files_struct * dir_fsp ) ;
void file_sync_all ( connection_struct * conn ) ;
2012-06-07 18:31:14 +04:00
void fsp_free ( files_struct * fsp ) ;
2011-03-19 02:47:12 +03:00
void file_free ( struct smb_request * req , files_struct * fsp ) ;
files_struct * file_fsp ( struct smb_request * req , uint16 fid ) ;
2013-01-15 20:23:04 +04:00
struct files_struct * file_fsp_get ( struct smbd_smb2_request * smb2req ,
uint64_t persistent_id ,
uint64_t volatile_id ) ;
2012-06-08 12:11:57 +04:00
struct files_struct * file_fsp_smb2 ( struct smbd_smb2_request * smb2req ,
uint64_t persistent_id ,
uint64_t volatile_id ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS dup_file_fsp ( struct smb_request * req , files_struct * from ,
uint32 access_mask , uint32 share_access ,
uint32 create_options , files_struct * to ) ;
NTSTATUS file_name_hash ( connection_struct * conn ,
const char * name , uint32_t * p_name_hash ) ;
NTSTATUS fsp_set_smb_fname ( struct files_struct * fsp ,
const struct smb_filename * smb_fname_in ) ;
2014-11-05 08:46:14 +03:00
const struct GUID * fsp_client_guid ( const files_struct * fsp ) ;
2014-10-29 01:31:46 +03:00
uint32_t fsp_lease_type ( struct files_struct * fsp ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/ipc.c */
2012-05-23 17:21:28 +04:00
NTSTATUS nt_status_np_pipe ( NTSTATUS status ) ;
2011-03-19 02:47:12 +03:00
void send_trans_reply ( connection_struct * conn ,
struct smb_request * req ,
char * rparam , int rparam_len ,
char * rdata , int rdata_len ,
bool buffer_too_large ) ;
void reply_trans ( struct smb_request * req ) ;
void reply_transs ( struct smb_request * req ) ;
/* The following definitions come from smbd/lanman.c */
2012-06-05 18:34:27 +04:00
void api_reply ( connection_struct * conn , uint64_t vuid ,
2011-03-19 02:47:12 +03:00
struct smb_request * req ,
char * data , char * params ,
int tdscnt , int tpscnt ,
int mdrcnt , int mprcnt ) ;
/* The following definitions come from smbd/mangle.c */
void mangle_reset_cache ( void ) ;
void mangle_change_to_posix ( void ) ;
bool mangle_is_mangled ( const char * s , const struct share_params * p ) ;
bool mangle_is_8_3 ( const char * fname , bool check_case ,
const struct share_params * p ) ;
bool mangle_is_8_3_wildcards ( const char * fname , bool check_case ,
const struct share_params * p ) ;
bool mangle_must_mangle ( const char * fname ,
const struct share_params * p ) ;
bool mangle_lookup_name_from_8_3 ( TALLOC_CTX * ctx ,
const char * in ,
char * * out , /* talloced on the given context. */
const struct share_params * p ) ;
bool name_to_8_3 ( const char * in ,
char out [ 13 ] ,
bool cache83 ,
const struct share_params * p ) ;
/* The following definitions come from smbd/mangle_hash.c */
const struct mangle_fns * mangle_hash_init ( void ) ;
/* The following definitions come from smbd/mangle_hash2.c */
const struct mangle_fns * mangle_hash2_init ( void ) ;
const struct mangle_fns * posix_mangle_init ( void ) ;
/* The following definitions come from smbd/message.c */
void reply_sends ( struct smb_request * req ) ;
void reply_sendstrt ( struct smb_request * req ) ;
void reply_sendtxt ( struct smb_request * req ) ;
void reply_sendend ( struct smb_request * req ) ;
/* The following definitions come from smbd/msdfs.c */
bool is_msdfs_link ( connection_struct * conn ,
const char * path ,
SMB_STRUCT_STAT * sbufp ) ;
struct junction_map ;
NTSTATUS get_referred_path ( TALLOC_CTX * ctx ,
const char * dfs_path ,
2012-05-23 15:09:40 +04:00
bool allow_broken_path ,
2011-03-19 02:47:12 +03:00
struct junction_map * jucn ,
int * consumedcntp ,
bool * self_referralp ) ;
int setup_dfs_referral ( connection_struct * orig_conn ,
const char * dfs_path ,
int max_referral_level ,
char * * ppdata , NTSTATUS * pstatus ) ;
bool create_junction ( TALLOC_CTX * ctx ,
const char * dfs_path ,
2011-09-24 07:53:28 +04:00
bool allow_broken_path ,
2011-03-19 02:47:12 +03:00
struct junction_map * jucn ) ;
bool create_msdfs_link ( const struct junction_map * jucn ) ;
bool remove_msdfs_link ( const struct junction_map * jucn ) ;
2011-12-13 15:29:54 +04:00
struct junction_map * enum_msdfs_links ( TALLOC_CTX * ctx , size_t * p_num_jn ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS resolve_dfspath_wcard ( TALLOC_CTX * ctx ,
connection_struct * conn ,
bool dfs_pathnames ,
const char * name_in ,
bool allow_wcards ,
2012-05-23 15:22:47 +04:00
bool allow_broken_path ,
2011-03-19 02:47:12 +03:00
char * * pp_name_out ,
bool * ppath_contains_wcard ) ;
NTSTATUS create_conn_struct ( TALLOC_CTX * ctx ,
2012-05-23 15:06:55 +04:00
struct tevent_context * ev ,
struct messaging_context * msg ,
connection_struct * * pconn ,
int snum ,
const char * path ,
2012-10-10 06:47:49 +04:00
const struct auth_session_info * session_info ) ;
NTSTATUS create_conn_struct_cwd ( TALLOC_CTX * ctx ,
struct tevent_context * ev ,
struct messaging_context * msg ,
connection_struct * * pconn ,
int snum ,
const char * path ,
const struct auth_session_info * session_info ,
char * * poldcwd ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/negprot.c */
void reply_negprot ( struct smb_request * req ) ;
/* The following definitions come from smbd/notify.c */
2012-06-05 11:36:36 +04:00
bool change_notify_fsp_has_changes ( struct files_struct * fsp ) ;
2011-03-19 02:47:12 +03:00
void change_notify_reply ( struct smb_request * req ,
NTSTATUS error_code ,
uint32_t max_param ,
struct notify_change_buf * notify_buf ,
void ( * reply_fn ) ( struct smb_request * req ,
NTSTATUS error_code ,
uint8_t * buf , size_t len ) ) ;
NTSTATUS change_notify_create ( struct files_struct * fsp , uint32 filter ,
bool recursive ) ;
NTSTATUS change_notify_add_request ( struct smb_request * req ,
uint32 max_param ,
uint32 filter , bool recursive ,
struct files_struct * fsp ,
void ( * reply_fn ) ( struct smb_request * req ,
NTSTATUS error_code ,
uint8_t * buf , size_t len ) ) ;
2015-04-21 11:16:16 +03:00
void smbd_notify_cancel_deleted ( struct messaging_context * msg ,
void * private_data , uint32_t msg_type ,
struct server_id server_id , DATA_BLOB * data ) ;
2011-03-19 02:47:12 +03:00
void remove_pending_change_notify_requests_by_mid (
struct smbd_server_connection * sconn , uint64_t mid ) ;
void remove_pending_change_notify_requests_by_fid ( files_struct * fsp ,
NTSTATUS status ) ;
void notify_fname ( connection_struct * conn , uint32 action , uint32 filter ,
const char * path ) ;
char * notify_filter_string ( TALLOC_CTX * mem_ctx , uint32 filter ) ;
2012-03-21 14:55:55 +04:00
struct sys_notify_context * sys_notify_context_create ( TALLOC_CTX * mem_ctx ,
2013-02-18 12:56:41 +04:00
struct tevent_context * ev ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/notify_inotify.c */
2014-11-05 15:18:31 +03:00
int inotify_watch ( TALLOC_CTX * mem_ctx ,
struct sys_notify_context * ctx ,
2014-10-27 16:26:35 +03:00
const char * path ,
uint32_t * filter ,
uint32_t * subdir_filter ,
void ( * callback ) ( struct sys_notify_context * ctx ,
void * private_data ,
struct notify_event * ev ) ,
void * private_data ,
void * handle_p ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/notify_internal.c */
2012-03-14 13:31:13 +04:00
struct notify_context * notify_init ( TALLOC_CTX * mem_ctx ,
2011-03-19 02:47:12 +03:00
struct messaging_context * messaging_ctx ,
2013-02-18 12:56:41 +04:00
struct tevent_context * ev ) ;
2012-04-04 16:51:43 +04:00
NTSTATUS notify_add ( struct notify_context * notify ,
const char * path , uint32_t filter , uint32_t subdir_filter ,
2014-04-04 19:11:51 +04:00
void ( * callback ) ( void * , struct timespec ,
const struct notify_event * ) ,
2011-03-19 02:47:12 +03:00
void * private_data ) ;
NTSTATUS notify_remove ( struct notify_context * notify , void * private_data ) ;
void notify_trigger ( struct notify_context * notify ,
2014-01-02 20:54:53 +04:00
uint32_t action , uint32_t filter ,
const char * dir , const char * path ) ;
2012-04-04 16:51:43 +04:00
void notify_walk_idx ( struct notify_context * notify ,
void ( * fn ) ( const char * path ,
uint32_t * vnns , size_t num_vnns ,
void * private_data ) ,
void * private_data ) ;
void notify_walk ( struct notify_context * notify ,
void ( * fn ) ( const char * path ,
struct notify_db_entry * entries ,
size_t num_entries ,
time_t deleted_time , void * private_data ) ,
void * private_data ) ;
void notify_cleanup ( struct notify_context * notify ) ;
struct tevent_req * notify_cluster_proxy_send (
TALLOC_CTX * mem_ctx , struct tevent_context * ev ,
struct notify_context * notify ) ;
int notify_cluster_proxy_recv ( struct tevent_req * req ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/ntquotas.c */
int vfs_get_ntquota ( files_struct * fsp , enum SMB_QUOTA_TYPE qtype , struct dom_sid * psid , SMB_NTQUOTA_STRUCT * qt ) ;
int vfs_set_ntquota ( files_struct * fsp , enum SMB_QUOTA_TYPE qtype , struct dom_sid * psid , SMB_NTQUOTA_STRUCT * qt ) ;
int vfs_get_user_ntquota_list ( files_struct * fsp , SMB_NTQUOTA_LIST * * qt_list ) ;
void * init_quota_handle ( TALLOC_CTX * mem_ctx ) ;
/* The following definitions come from smbd/nttrans.c */
void reply_ntcreate_and_X ( struct smb_request * req ) ;
2012-08-30 00:29:34 +04:00
NTSTATUS set_sd ( files_struct * fsp , struct security_descriptor * psd ,
uint32_t security_info_sent ) ;
2012-08-30 00:23:06 +04:00
NTSTATUS set_sd_blob ( files_struct * fsp , uint8_t * data , uint32_t sd_len ,
2011-03-19 02:47:12 +03:00
uint32_t security_info_sent ) ;
struct ea_list * read_nttrans_ea_list ( TALLOC_CTX * ctx , const char * pdata , size_t data_size ) ;
void reply_ntcancel ( struct smb_request * req ) ;
void reply_ntrename ( struct smb_request * req ) ;
NTSTATUS smbd_do_query_security_desc ( connection_struct * conn ,
TALLOC_CTX * mem_ctx ,
files_struct * fsp ,
uint32_t security_info_wanted ,
uint32_t max_data_count ,
uint8_t * * ppmarshalled_sd ,
size_t * psd_size ) ;
void reply_nttrans ( struct smb_request * req ) ;
void reply_nttranss ( struct smb_request * req ) ;
/* The following definitions come from smbd/open.c */
2011-11-05 01:37:26 +04:00
NTSTATUS smbd_check_access_rights ( struct connection_struct * conn ,
2011-11-05 02:39:55 +04:00
const struct smb_filename * smb_fname ,
2012-09-14 03:11:31 +04:00
bool use_privs ,
2011-11-05 01:37:26 +04:00
uint32_t access_mask ) ;
2012-06-11 15:05:37 +04:00
NTSTATUS fd_open ( struct connection_struct * conn , files_struct * fsp ,
int flags , mode_t mode ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS fd_close ( files_struct * fsp ) ;
void change_file_owner_to_parent ( connection_struct * conn ,
const char * inherit_from_dir ,
files_struct * fsp ) ;
NTSTATUS change_dir_owner_to_parent ( connection_struct * conn ,
const char * inherit_from_dir ,
const char * fname ,
SMB_STRUCT_STAT * psbuf ) ;
bool is_stat_open ( uint32 access_mask ) ;
2014-12-05 08:15:24 +03:00
NTSTATUS send_break_message ( struct messaging_context * msg_ctx ,
const struct share_mode_entry * exclusive ,
uint16_t break_to ) ;
2014-06-20 18:12:14 +04:00
struct deferred_open_record ;
bool is_deferred_open_async ( const struct deferred_open_record * rec ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS create_directory ( connection_struct * conn , struct smb_request * req ,
struct smb_filename * smb_dname ) ;
void msg_file_was_renamed ( struct messaging_context * msg ,
void * private_data ,
uint32_t msg_type ,
struct server_id server_id ,
DATA_BLOB * data ) ;
NTSTATUS open_streams_for_delete ( connection_struct * conn ,
const char * fname ) ;
2014-10-29 01:31:46 +03:00
int find_share_mode_lease ( struct share_mode_data * d ,
const struct GUID * client_guid ,
const struct smb2_lease_key * key ) ;
struct share_mode_lease ;
struct fsp_lease * find_fsp_lease ( files_struct * new_fsp ,
const struct smb2_lease_key * key ,
const struct share_mode_lease * l ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS create_file_default ( connection_struct * conn ,
struct smb_request * req ,
uint16_t root_dir_fid ,
struct smb_filename * smb_fname ,
uint32_t access_mask ,
uint32_t share_access ,
uint32_t create_disposition ,
uint32_t create_options ,
uint32_t file_attributes ,
uint32_t oplock_request ,
2013-08-21 17:56:14 +04:00
struct smb2_lease * lease ,
2011-03-19 02:47:12 +03:00
uint64_t allocation_size ,
uint32_t private_flags ,
struct security_descriptor * sd ,
struct ea_list * ea_list ,
files_struct * * result ,
2014-11-26 16:12:51 +03:00
int * pinfo ,
const struct smb2_create_blobs * in_context_blobs ,
struct smb2_create_blobs * out_context_blobs ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS get_relative_fid_filename ( connection_struct * conn ,
struct smb_request * req ,
uint16_t root_dir_fid ,
const struct smb_filename * smb_fname ,
struct smb_filename * * smb_fname_out ) ;
/* The following definitions come from smbd/oplock.c */
2014-10-29 01:31:46 +03:00
uint32_t map_oplock_to_lease_type ( uint16_t op_type ) ;
uint32_t get_lease_type ( struct share_mode_data * d , struct share_mode_entry * e ) ;
2014-10-29 01:27:09 +03:00
bool update_num_read_oplocks ( files_struct * fsp , struct share_mode_lock * lck ) ;
2011-03-19 02:47:12 +03:00
void break_kernel_oplock ( struct messaging_context * msg_ctx , files_struct * fsp ) ;
2013-09-03 17:57:11 +04:00
NTSTATUS set_file_oplock ( files_struct * fsp ) ;
2011-03-19 02:47:12 +03:00
bool remove_oplock ( files_struct * fsp ) ;
bool downgrade_oplock ( files_struct * fsp ) ;
2014-10-29 01:31:46 +03:00
bool fsp_lease_update ( struct share_mode_lock * lck ,
const struct GUID * client_guid ,
struct fsp_lease * lease ) ;
NTSTATUS downgrade_lease ( struct smbXsrv_connection * xconn ,
uint32_t num_file_ids ,
const struct file_id * ids ,
const struct smb2_lease_key * key ,
uint32_t lease_state ) ;
2011-03-19 02:47:12 +03:00
void contend_level2_oplocks_begin ( files_struct * fsp ,
enum level2_contention_type type ) ;
void contend_level2_oplocks_end ( files_struct * fsp ,
enum level2_contention_type type ) ;
2011-05-31 07:18:37 +04:00
void smbd_contend_level2_oplocks_begin ( files_struct * fsp ,
enum level2_contention_type type ) ;
void smbd_contend_level2_oplocks_end ( files_struct * fsp ,
enum level2_contention_type type ) ;
2011-03-19 02:47:12 +03:00
void share_mode_entry_to_message ( char * msg , const struct share_mode_entry * e ) ;
2013-09-03 15:55:27 +04:00
void message_to_share_mode_entry ( struct share_mode_entry * e , const char * msg ) ;
2011-12-13 16:13:53 +04:00
bool init_oplocks ( struct smbd_server_connection * sconn ) ;
2012-03-30 17:51:25 +04:00
void init_kernel_oplocks ( struct smbd_server_connection * sconn ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/oplock_irix.c */
2011-12-13 16:38:41 +04:00
struct kernel_oplocks * irix_init_kernel_oplocks ( struct smbd_server_connection * sconn ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/oplock_linux.c */
void linux_set_lease_capability ( void ) ;
int linux_set_lease_sighandler ( int fd ) ;
int linux_setlease ( int fd , int leasetype ) ;
2011-12-13 16:38:41 +04:00
struct kernel_oplocks * linux_init_kernel_oplocks ( struct smbd_server_connection * sconn ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/password.c */
2012-06-05 14:04:15 +04:00
struct user_struct * get_valid_user_struct ( struct smbd_server_connection * sconn ,
2012-06-05 20:17:15 +04:00
uint64_t vuid ) ;
void invalidate_vuid ( struct smbd_server_connection * sconn , uint64_t vuid ) ;
2011-03-19 02:47:12 +03:00
int register_homes_share ( const char * username ) ;
/* The following definitions come from smbd/pipes.c */
NTSTATUS open_np_file ( struct smb_request * smb_req , const char * name ,
struct files_struct * * pfsp ) ;
void reply_open_pipe_and_X ( connection_struct * conn , struct smb_request * req ) ;
void reply_pipe_write ( struct smb_request * req ) ;
void reply_pipe_write_and_X ( struct smb_request * req ) ;
void reply_pipe_read_and_X ( struct smb_request * req ) ;
/* The following definitions come from smbd/posix_acls.c */
void create_file_sids ( const SMB_STRUCT_STAT * psbuf , struct dom_sid * powner_sid , struct dom_sid * pgroup_sid ) ;
uint32_t map_canon_ace_perms ( int snum ,
enum security_ace_type * pacl_type ,
mode_t perms ,
bool directory_ace ) ;
NTSTATUS unpack_nt_owners ( connection_struct * conn , uid_t * puser , gid_t * pgrp , uint32 security_info_sent , const struct security_descriptor * psd ) ;
2011-03-31 05:00:09 +04:00
bool current_user_in_group ( connection_struct * conn , gid_t gid ) ;
2011-03-19 02:47:12 +03:00
SMB_ACL_T free_empty_sys_acl ( connection_struct * conn , SMB_ACL_T the_acl ) ;
NTSTATUS posix_fget_nt_acl ( struct files_struct * fsp , uint32_t security_info ,
2012-10-10 04:50:27 +04:00
TALLOC_CTX * mem_ctx ,
2011-03-19 02:47:12 +03:00
struct security_descriptor * * ppdesc ) ;
NTSTATUS posix_get_nt_acl ( struct connection_struct * conn , const char * name ,
2012-10-10 04:50:27 +04:00
uint32_t security_info ,
TALLOC_CTX * mem_ctx ,
struct security_descriptor * * ppdesc ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS try_chown ( files_struct * fsp , uid_t uid , gid_t gid ) ;
NTSTATUS set_nt_acl ( files_struct * fsp , uint32 security_info_sent , const struct security_descriptor * psd ) ;
int get_acl_group_bits ( connection_struct * conn , const char * fname , mode_t * mode ) ;
int chmod_acl ( connection_struct * conn , const char * name , mode_t mode ) ;
int inherit_access_posix_acl ( connection_struct * conn , const char * inherit_from_dir ,
const char * name , mode_t mode ) ;
int fchmod_acl ( files_struct * fsp , mode_t mode ) ;
bool set_unix_posix_default_acl ( connection_struct * conn , const char * fname ,
const SMB_STRUCT_STAT * psbuf ,
uint16 num_def_acls , const char * pdata ) ;
bool set_unix_posix_acl ( connection_struct * conn , files_struct * fsp , const char * fname , uint16 num_acls , const char * pdata ) ;
2012-10-10 06:48:27 +04:00
NTSTATUS get_nt_acl_no_snum ( TALLOC_CTX * ctx , const char * fname ,
uint32 security_info_wanted ,
struct security_descriptor * * sd ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS make_default_filesystem_acl ( TALLOC_CTX * ctx ,
const char * name ,
SMB_STRUCT_STAT * psbuf ,
struct security_descriptor * * ppdesc ) ;
2012-10-10 09:49:59 +04:00
int posix_sys_acl_blob_get_file ( vfs_handle_struct * handle ,
const char * path_p ,
TALLOC_CTX * mem_ctx ,
char * * blob_description ,
DATA_BLOB * blob ) ;
int posix_sys_acl_blob_get_fd ( vfs_handle_struct * handle ,
files_struct * fsp ,
TALLOC_CTX * mem_ctx ,
char * * blob_description ,
DATA_BLOB * blob ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/process.c */
2011-12-13 16:55:02 +04:00
void smbd_setup_sig_term_handler ( struct smbd_server_connection * sconn ) ;
2011-12-13 16:55:02 +04:00
void smbd_setup_sig_hup_handler ( struct smbd_server_connection * sconn ) ;
2014-06-11 14:55:24 +04:00
bool srv_send_smb ( struct smbXsrv_connection * xconn , char * buffer ,
2011-03-19 02:47:12 +03:00
bool no_signing , uint32_t seqnum ,
bool do_encrypt ,
struct smb_perfcount_data * pcd ) ;
int srv_set_message ( char * buf ,
int num_words ,
int num_bytes ,
bool zero ) ;
2014-09-16 09:32:14 +04:00
void remove_deferred_open_message_smb ( struct smbXsrv_connection * xconn ,
2011-08-02 18:53:33 +04:00
uint64_t mid ) ;
2014-09-16 09:38:44 +04:00
bool schedule_deferred_open_message_smb ( struct smbXsrv_connection * xconn ,
2011-08-02 18:58:46 +04:00
uint64_t mid ) ;
2014-09-16 08:55:39 +04:00
bool open_was_deferred ( struct smbXsrv_connection * xconn , uint64_t mid ) ;
2011-03-19 02:47:12 +03:00
bool get_deferred_open_message_state ( struct smb_request * smbreq ,
struct timeval * p_request_time ,
2014-06-20 18:12:14 +04:00
struct deferred_open_record * * open_rec ) ;
2011-03-19 02:47:12 +03:00
bool push_deferred_open_message_smb ( struct smb_request * req ,
2014-06-20 18:12:14 +04:00
struct timeval request_time ,
struct timeval timeout ,
struct file_id id ,
struct deferred_open_record * open_rec ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS allow_new_trans ( struct trans_state * list , uint64_t mid ) ;
void reply_outbuf ( struct smb_request * req , uint8 num_words , uint32 num_bytes ) ;
2012-03-04 15:10:04 +04:00
void smb_request_done ( struct smb_request * req ) ;
2011-03-19 02:47:12 +03:00
const char * smb_fn_name ( int type ) ;
void add_to_common_flags2 ( uint32 v ) ;
void remove_from_common_flags2 ( uint32 v ) ;
void construct_reply_common_req ( struct smb_request * req , char * outbuf ) ;
2012-02-28 03:19:48 +04:00
bool smb1_is_chain ( const uint8_t * buf ) ;
bool smb1_walk_chain ( const uint8_t * buf ,
bool ( * fn ) ( uint8_t cmd ,
uint8_t wct , const uint16_t * vwv ,
uint16_t num_bytes , const uint8_t * bytes ,
void * private_data ) ,
void * private_data ) ;
unsigned smb1_chain_length ( const uint8_t * buf ) ;
bool smb1_parse_chain ( TALLOC_CTX * mem_ctx , const uint8_t * buf ,
2014-06-12 10:43:26 +04:00
struct smbXsrv_connection * xconn ,
2012-02-28 03:19:48 +04:00
bool encrypted , uint32_t seqnum ,
struct smb_request * * * reqs , unsigned * num_reqs ) ;
2013-03-18 15:36:30 +04:00
bool req_is_in_chain ( const struct smb_request * req ) ;
2011-08-08 20:39:56 +04:00
void smbd_process ( struct tevent_context * ev_ctx ,
2012-05-24 15:46:11 +04:00
struct messaging_context * msg_ctx ,
int sock_fd ,
bool interactive ) ;
2014-06-12 10:43:26 +04:00
bool fork_echo_handler ( struct smbXsrv_connection * xconn ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/quotas.c */
bool disk_quotas ( const char * path , uint64_t * bsize , uint64_t * dfree , uint64_t * dsize ) ;
bool disk_quotas_vxfs ( const char * name , char * path , uint64_t * bsize , uint64_t * dfree , uint64_t * dsize ) ;
/* The following definitions come from smbd/reply.c */
NTSTATUS check_path_syntax ( char * path ) ;
NTSTATUS check_path_syntax_wcard ( char * path , bool * p_contains_wcard ) ;
NTSTATUS check_path_syntax_posix ( char * path ) ;
size_t srvstr_get_path_wcard ( TALLOC_CTX * ctx ,
const char * inbuf ,
uint16 smb_flags2 ,
char * * pp_dest ,
const char * src ,
size_t src_len ,
int flags ,
NTSTATUS * err ,
bool * contains_wcard ) ;
size_t srvstr_get_path ( TALLOC_CTX * ctx ,
const char * inbuf ,
uint16 smb_flags2 ,
char * * pp_dest ,
const char * src ,
size_t src_len ,
int flags ,
NTSTATUS * err ) ;
size_t srvstr_get_path_req_wcard ( TALLOC_CTX * mem_ctx , struct smb_request * req ,
char * * pp_dest , const char * src , int flags ,
NTSTATUS * err , bool * contains_wcard ) ;
size_t srvstr_get_path_req ( TALLOC_CTX * mem_ctx , struct smb_request * req ,
char * * pp_dest , const char * src , int flags ,
NTSTATUS * err ) ;
2013-04-04 15:24:36 +04:00
size_t srvstr_pull_req_talloc ( TALLOC_CTX * ctx , struct smb_request * req ,
2014-02-26 23:16:26 +04:00
char * * dest , const uint8_t * src , int flags ) ;
2011-03-19 02:47:12 +03:00
bool check_fsp_open ( connection_struct * conn , struct smb_request * req ,
files_struct * fsp ) ;
bool check_fsp ( connection_struct * conn , struct smb_request * req ,
files_struct * fsp ) ;
bool check_fsp_ntquota_handle ( connection_struct * conn , struct smb_request * req ,
files_struct * fsp ) ;
2014-06-11 14:54:47 +04:00
void reply_special ( struct smbXsrv_connection * xconn , char * inbuf , size_t inbuf_size ) ;
2011-03-19 02:47:12 +03:00
void reply_tcon ( struct smb_request * req ) ;
void reply_tcon_and_X ( struct smb_request * req ) ;
void reply_unknown_new ( struct smb_request * req , uint8 type ) ;
void reply_ioctl ( struct smb_request * req ) ;
void reply_checkpath ( struct smb_request * req ) ;
void reply_getatr ( struct smb_request * req ) ;
void reply_setatr ( struct smb_request * req ) ;
void reply_dskattr ( struct smb_request * req ) ;
void reply_search ( struct smb_request * req ) ;
void reply_fclose ( struct smb_request * req ) ;
void reply_open ( struct smb_request * req ) ;
void reply_open_and_X ( struct smb_request * req ) ;
void reply_ulogoffX ( struct smb_request * req ) ;
void reply_mknew ( struct smb_request * req ) ;
void reply_ctemp ( struct smb_request * req ) ;
NTSTATUS unlink_internals ( connection_struct * conn , struct smb_request * req ,
uint32 dirtype , struct smb_filename * smb_fname ,
bool has_wild ) ;
void reply_unlink ( struct smb_request * req ) ;
2014-06-12 10:40:25 +04:00
ssize_t fake_sendfile ( struct smbXsrv_connection * xconn , files_struct * fsp ,
off_t startpos , size_t nread ) ;
2014-06-12 10:42:16 +04:00
ssize_t sendfile_short_send ( struct smbXsrv_connection * xconn ,
files_struct * fsp ,
ssize_t nread ,
size_t headersize ,
size_t smb_maxcnt ) ;
2011-03-19 02:47:12 +03:00
void reply_readbraw ( struct smb_request * req ) ;
void reply_lockread ( struct smb_request * req ) ;
void reply_read ( struct smb_request * req ) ;
void reply_read_and_X ( struct smb_request * req ) ;
void error_to_writebrawerr ( struct smb_request * req ) ;
void reply_writebraw ( struct smb_request * req ) ;
void reply_writeunlock ( struct smb_request * req ) ;
void reply_write ( struct smb_request * req ) ;
2014-06-11 16:35:55 +04:00
bool is_valid_writeX_buffer ( struct smbXsrv_connection * xconn ,
2011-03-19 02:47:12 +03:00
const uint8_t * inbuf ) ;
void reply_write_and_X ( struct smb_request * req ) ;
void reply_lseek ( struct smb_request * req ) ;
void reply_flush ( struct smb_request * req ) ;
void reply_exit ( struct smb_request * req ) ;
void reply_close ( struct smb_request * req ) ;
void reply_writeclose ( struct smb_request * req ) ;
void reply_lock ( struct smb_request * req ) ;
void reply_unlock ( struct smb_request * req ) ;
void reply_tdis ( struct smb_request * req ) ;
void reply_echo ( struct smb_request * req ) ;
void reply_printopen ( struct smb_request * req ) ;
void reply_printclose ( struct smb_request * req ) ;
void reply_printqueue ( struct smb_request * req ) ;
void reply_printwrite ( struct smb_request * req ) ;
void reply_mkdir ( struct smb_request * req ) ;
void reply_rmdir ( struct smb_request * req ) ;
NTSTATUS rename_internals_fsp ( connection_struct * conn ,
files_struct * fsp ,
const struct smb_filename * smb_fname_dst_in ,
uint32 attrs ,
bool replace_if_exists ) ;
NTSTATUS rename_internals ( TALLOC_CTX * ctx ,
connection_struct * conn ,
struct smb_request * req ,
struct smb_filename * smb_fname_src ,
struct smb_filename * smb_fname_dst ,
uint32 attrs ,
bool replace_if_exists ,
bool src_has_wild ,
bool dest_has_wild ,
uint32_t access_mask ) ;
void reply_mv ( struct smb_request * req ) ;
NTSTATUS copy_file ( TALLOC_CTX * ctx ,
connection_struct * conn ,
struct smb_filename * smb_fname_src ,
struct smb_filename * smb_fname_dst ,
int ofun ,
int count ,
bool target_is_directory ) ;
void reply_copy ( struct smb_request * req ) ;
uint64_t get_lock_pid ( const uint8_t * data , int data_offset ,
bool large_file_format ) ;
uint64_t get_lock_count ( const uint8_t * data , int data_offset ,
bool large_file_format ) ;
uint64_t get_lock_offset ( const uint8_t * data , int data_offset ,
2014-07-15 13:52:07 +04:00
bool large_file_format ) ;
2011-03-19 02:47:12 +03:00
void reply_lockingX ( struct smb_request * req ) ;
void reply_readbmpx ( struct smb_request * req ) ;
void reply_readbs ( struct smb_request * req ) ;
void reply_setattrE ( struct smb_request * req ) ;
void reply_writebmpx ( struct smb_request * req ) ;
void reply_writebs ( struct smb_request * req ) ;
void reply_getattrE ( struct smb_request * req ) ;
/* The following definitions come from smbd/seal.c */
2014-06-11 16:28:13 +04:00
bool is_encrypted_packet ( const uint8_t * inbuf ) ;
2014-06-12 10:43:26 +04:00
void srv_free_enc_buffer ( struct smbXsrv_connection * xconn , char * buf ) ;
NTSTATUS srv_decrypt_buffer ( struct smbXsrv_connection * xconn , char * buf ) ;
NTSTATUS srv_encrypt_buffer ( struct smbXsrv_connection * xconn , char * buf ,
2011-08-05 19:00:42 +04:00
char * * buf_out ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS srv_request_encryption_setup ( connection_struct * conn ,
unsigned char * * ppdata ,
size_t * p_data_size ,
unsigned char * * pparam ,
size_t * p_param_size ) ;
NTSTATUS srv_encryption_start ( connection_struct * conn ) ;
2014-06-12 10:43:26 +04:00
void server_encryption_shutdown ( struct smbXsrv_connection * xconn ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/sec_ctx.c */
bool unix_token_equal ( const struct security_unix_token * t1 , const struct security_unix_token * t2 ) ;
bool push_sec_ctx ( void ) ;
2012-04-05 01:53:10 +04:00
void set_sec_ctx ( uid_t uid , gid_t gid , int ngroups , gid_t * groups , const struct security_token * token ) ;
2011-03-19 02:47:12 +03:00
void set_root_sec_ctx ( void ) ;
bool pop_sec_ctx ( void ) ;
void init_sec_ctx ( void ) ;
2012-10-26 04:07:29 +04:00
const struct security_token * sec_ctx_active_token ( void ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/server.c */
struct memcache * smbd_memcache ( void ) ;
2014-08-05 20:45:24 +04:00
bool snum_is_shared_printer ( int snum ) ;
2011-09-05 16:35:55 +04:00
void delete_and_reload_printers ( struct tevent_context * ev ,
struct messaging_context * msg_ctx ) ;
2011-12-14 16:25:20 +04:00
bool reload_services ( struct smbd_server_connection * sconn ,
bool ( * snumused ) ( struct smbd_server_connection * , int ) ,
2011-03-19 02:47:12 +03:00
bool test ) ;
2012-10-09 16:35:04 +04:00
/* The following definitions come from smbd/server_exit.c */
void smbd_exit_server ( const char * reason ) _NORETURN_ ;
void smbd_exit_server_cleanly ( const char * const reason ) _NORETURN_ ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/service.c */
bool set_conn_connectpath ( connection_struct * conn , const char * connectpath ) ;
NTSTATUS set_conn_force_user_group ( connection_struct * conn , int snum ) ;
bool set_current_service ( connection_struct * conn , uint16 flags , bool do_chdir ) ;
void load_registry_shares ( void ) ;
int add_home_service ( const char * service , const char * username , const char * homedir ) ;
int find_service ( TALLOC_CTX * ctx , const char * service , char * * p_service_out ) ;
2014-09-15 05:47:41 +04:00
connection_struct * make_connection_smb2 ( struct smbd_smb2_request * req ,
2012-07-02 15:37:07 +04:00
struct smbXsrv_tcon * tcon ,
2012-03-27 13:09:05 +04:00
int snum ,
2012-06-05 14:04:15 +04:00
struct user_struct * vuser ,
2011-03-19 02:47:12 +03:00
const char * pdev ,
NTSTATUS * pstatus ) ;
2014-09-15 05:47:41 +04:00
connection_struct * make_connection ( struct smb_request * req ,
2012-11-01 16:53:27 +04:00
NTTIME now ,
2012-02-03 11:03:10 +04:00
const char * service_in ,
2012-06-05 17:56:46 +04:00
const char * pdev , uint64_t vuid ,
2011-03-19 02:47:12 +03:00
NTSTATUS * status ) ;
2012-06-05 18:07:13 +04:00
void close_cnum ( connection_struct * conn , uint64_t vuid ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/session.c */
struct sessionid ;
2012-08-23 16:47:33 +04:00
struct smbXsrv_session ;
2011-03-19 02:47:12 +03:00
bool session_init ( void ) ;
2012-08-27 11:21:58 +04:00
bool session_claim ( struct smbXsrv_session * session ) ;
2012-08-23 16:47:33 +04:00
void session_yield ( struct smbXsrv_session * session ) ;
2011-03-19 02:47:12 +03:00
int list_sessions ( TALLOC_CTX * mem_ctx , struct sessionid * * session_list ) ;
2013-09-10 10:28:07 +04:00
int find_sessions ( TALLOC_CTX * mem_ctx , const char * username ,
const char * machine , struct sessionid * * session_list ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/sesssetup.c */
void reply_sesssetup_and_X ( struct smb_request * req ) ;
/* The following definitions come from smbd/share_access.c */
bool token_contains_name_in_list ( const char * username ,
const char * domain ,
const char * sharename ,
const struct security_token * token ,
const char * * list ) ;
bool user_ok_token ( const char * username , const char * domain ,
const struct security_token * token , int snum ) ;
bool is_share_read_only_for_token ( const char * username ,
const char * domain ,
const struct security_token * token ,
connection_struct * conn ) ;
/* The following definitions come from smbd/srvstr.c */
2014-08-26 04:11:58 +04:00
NTSTATUS srvstr_push_fn ( const char * base_ptr , uint16 smb_flags2 , void * dest ,
const char * src , int dest_len , int flags , size_t * ret_len ) ;
2011-03-19 02:47:12 +03:00
ssize_t message_push_string ( uint8 * * outbuf , const char * str , int flags ) ;
/* The following definitions come from smbd/statcache.c */
void stat_cache_add ( const char * full_orig_name ,
char * translated_path ,
bool case_sensitive ) ;
bool stat_cache_lookup ( connection_struct * conn ,
2011-10-22 04:46:12 +04:00
bool posix_paths ,
2011-03-19 02:47:12 +03:00
char * * pp_name ,
char * * pp_dirpath ,
char * * pp_start ,
SMB_STRUCT_STAT * pst ) ;
2011-05-31 07:18:37 +04:00
void smbd_send_stat_cache_delete_message ( struct messaging_context * msg_ctx ,
const char * name ) ;
2011-03-19 02:47:12 +03:00
void send_stat_cache_delete_message ( struct messaging_context * msg_ctx ,
const char * name ) ;
void stat_cache_delete ( const char * name ) ;
2011-05-05 13:25:29 +04:00
struct TDB_DATA ;
unsigned int fast_string_hash ( struct TDB_DATA * key ) ;
2011-03-19 02:47:12 +03:00
bool reset_stat_cache ( void ) ;
/* The following definitions come from smbd/statvfs.c */
int sys_statvfs ( const char * path , vfs_statvfs_struct * statbuf ) ;
/* The following definitions come from smbd/trans2.c */
2011-11-16 05:29:59 +04:00
NTSTATUS check_access ( connection_struct * conn ,
files_struct * fsp ,
const struct smb_filename * smb_fname ,
uint32_t access_mask ) ;
2011-03-19 02:47:12 +03:00
uint64_t smb_roundup ( connection_struct * conn , uint64_t val ) ;
uint64_t get_FileIndex ( connection_struct * conn , const SMB_STRUCT_STAT * psbuf ) ;
2014-05-21 13:52:27 +04:00
bool samba_private_attr_name ( const char * unix_ea_name ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS get_ea_value ( TALLOC_CTX * mem_ctx , connection_struct * conn ,
files_struct * fsp , const char * fname ,
const char * ea_name , struct ea_struct * pea ) ;
NTSTATUS get_ea_names_from_file ( TALLOC_CTX * mem_ctx , connection_struct * conn ,
files_struct * fsp , const char * fname ,
char * * * pnames , size_t * pnum_names ) ;
NTSTATUS set_ea ( connection_struct * conn , files_struct * fsp ,
const struct smb_filename * smb_fname , struct ea_list * ea_list ) ;
struct ea_list * read_ea_list_entry ( TALLOC_CTX * ctx , const char * pdata , size_t data_size , size_t * pbytes_used ) ;
void send_trans2_replies ( connection_struct * conn ,
struct smb_request * req ,
2013-07-10 23:38:41 +04:00
NTSTATUS status ,
2011-03-19 02:47:12 +03:00
const char * params ,
int paramsize ,
const char * pdata ,
int datasize ,
int max_data_bytes ) ;
unsigned char * create_volume_objectid ( connection_struct * conn , unsigned char objid [ 16 ] ) ;
NTSTATUS hardlink_internals ( TALLOC_CTX * ctx ,
connection_struct * conn ,
struct smb_request * req ,
bool overwrite_if_exists ,
const struct smb_filename * smb_fname_old ,
struct smb_filename * smb_fname_new ) ;
NTSTATUS smb_set_file_time ( connection_struct * conn ,
files_struct * fsp ,
const struct smb_filename * smb_fname ,
struct smb_file_time * ft ,
bool setting_write_time ) ;
void reply_findclose ( struct smb_request * req ) ;
void reply_findnclose ( struct smb_request * req ) ;
void reply_trans2 ( struct smb_request * req ) ;
void reply_transs2 ( struct smb_request * req ) ;
/* The following definitions come from smbd/uid.c */
bool change_to_guest ( void ) ;
2013-01-05 02:27:18 +04:00
NTSTATUS check_user_share_access ( connection_struct * conn ,
const struct auth_session_info * session_info ,
uint32_t * p_share_access ,
bool * p_readonly_share ) ;
2012-06-05 18:19:01 +04:00
bool change_to_user ( connection_struct * conn , uint64_t vuid ) ;
2011-05-31 07:18:37 +04:00
bool smbd_change_to_root_user ( void ) ;
2013-10-23 13:02:39 +04:00
bool smbd_become_authenticated_pipe_user ( struct auth_session_info * session_info ) ;
bool smbd_unbecome_authenticated_pipe_user ( void ) ;
2011-03-19 02:47:12 +03:00
void become_root ( void ) ;
void unbecome_root ( void ) ;
2011-05-31 07:18:37 +04:00
void smbd_become_root ( void ) ;
void smbd_unbecome_root ( void ) ;
2012-06-05 18:19:01 +04:00
bool become_user ( connection_struct * conn , uint64_t vuid ) ;
2011-04-01 13:54:49 +04:00
bool become_user_by_session ( connection_struct * conn ,
2011-07-18 07:06:47 +04:00
const struct auth_session_info * session_info ) ;
2011-03-19 02:47:12 +03:00
bool unbecome_user ( void ) ;
uid_t get_current_uid ( connection_struct * conn ) ;
gid_t get_current_gid ( connection_struct * conn ) ;
const struct security_unix_token * get_current_utok ( connection_struct * conn ) ;
const struct security_token * get_current_nttok ( connection_struct * conn ) ;
2012-06-05 18:19:01 +04:00
uint64_t get_current_vuid ( connection_struct * conn ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/utmp.c */
void sys_utmp_claim ( const char * username , const char * hostname ,
2012-10-09 11:38:36 +04:00
const char * id_str , int id_num ) ;
2011-03-19 02:47:12 +03:00
void sys_utmp_yield ( const char * username , const char * hostname ,
2012-10-09 11:38:36 +04:00
const char * id_str , int id_num ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/vfs.c */
bool vfs_init_custom ( connection_struct * conn , const char * vfs_object ) ;
bool smbd_vfs_init ( connection_struct * conn ) ;
NTSTATUS vfs_file_exist ( connection_struct * conn , struct smb_filename * smb_fname ) ;
ssize_t vfs_read_data ( files_struct * fsp , char * buf , size_t byte_count ) ;
ssize_t vfs_write_data ( struct smb_request * req ,
files_struct * fsp ,
const char * buffer ,
size_t N ) ;
ssize_t vfs_pwrite_data ( struct smb_request * req ,
files_struct * fsp ,
const char * buffer ,
size_t N ,
2012-04-05 08:53:08 +04:00
off_t offset ) ;
2011-03-19 02:47:12 +03:00
int vfs_allocate_file_space ( files_struct * fsp , uint64_t len ) ;
2012-04-05 08:53:08 +04:00
int vfs_set_filelen ( files_struct * fsp , off_t len ) ;
int vfs_slow_fallocate ( files_struct * fsp , off_t offset , off_t len ) ;
int vfs_fill_sparse ( files_struct * fsp , off_t len ) ;
off_t vfs_transfer_file ( files_struct * in , files_struct * out , off_t n ) ;
2011-03-19 02:47:12 +03:00
const char * vfs_readdirname ( connection_struct * conn , void * p ,
SMB_STRUCT_STAT * sbuf , char * * talloced ) ;
int vfs_ChDir ( connection_struct * conn , const char * path ) ;
char * vfs_GetWd ( TALLOC_CTX * ctx , connection_struct * conn ) ;
NTSTATUS check_reduced_name ( connection_struct * conn , const char * fname ) ;
2012-02-25 02:12:05 +04:00
NTSTATUS check_reduced_name_with_privilege ( connection_struct * conn ,
const char * fname ,
2012-03-01 05:04:08 +04:00
struct smb_request * smbreq ) ;
2015-05-01 22:50:51 +03:00
int vfs_stat_smb_basename ( struct connection_struct * conn , const char * fname ,
SMB_STRUCT_STAT * psbuf ) ;
2011-03-19 02:47:12 +03:00
NTSTATUS vfs_stat_fsp ( files_struct * fsp ) ;
NTSTATUS vfs_chown_fsp ( files_struct * fsp , uid_t uid , gid_t gid ) ;
2011-10-17 22:10:29 +04:00
NTSTATUS vfs_streaminfo ( connection_struct * conn ,
struct files_struct * fsp ,
const char * fname ,
TALLOC_CTX * mem_ctx ,
unsigned int * num_streams ,
struct stream_struct * * streams ) ;
2011-03-19 02:47:12 +03:00
/* The following definitions come from smbd/avahi_register.c */
void * avahi_start_register ( TALLOC_CTX * mem_ctx , struct tevent_context * ev ,
uint16_t port ) ;
2012-06-08 19:54:19 +04:00
/* The following definitions come from smbd/smb2_create.c */
NTSTATUS vfs_default_durable_cookie ( struct files_struct * fsp ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * cookie_blob ) ;
NTSTATUS vfs_default_durable_disconnect ( struct files_struct * fsp ,
const DATA_BLOB old_cookie ,
TALLOC_CTX * mem_ctx ,
DATA_BLOB * new_cookie ) ;
NTSTATUS vfs_default_durable_reconnect ( struct connection_struct * conn ,
struct smb_request * smb1req ,
struct smbXsrv_open * op ,
const DATA_BLOB old_cookie ,
TALLOC_CTX * mem_ctx ,
files_struct * * result ,
DATA_BLOB * new_cookie ) ;
2011-05-31 02:13:15 +04:00
# endif /* _SMBD_PROTO_H_ */