2005-09-26 15:47:55 +04:00
/*
Unix SMB / CIFS implementation .
SMB composite request interfaces
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-09-26 15:47:55 +04:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-09-26 15:47:55 +04:00
*/
/*
this defines the structures associated with " composite "
requests . Composite requests are libcli requests that are internally
implemented as multiple libcli / raw / calls , but can be treated as a
single call via these composite calls . The composite calls are
particularly designed to be used in async applications
*/
2011-08-18 14:59:25 +04:00
# ifndef __SMB_COMPOSITE_H__
# define __SMB_COMPOSITE_H__
2008-01-04 02:21:58 +03:00
# include "libcli/raw/signing.h"
2008-01-04 02:22:12 +03:00
# include "libcli/raw/libcliraw.h"
2008-05-16 09:03:58 +04:00
# include "libcli/smb2/smb2.h"
2008-01-04 02:21:58 +03:00
2005-09-26 15:47:55 +04:00
/*
a composite open / read ( s ) / close request that loads a whole file
into memory . Used as a demo of the composite system .
*/
struct smb_composite_loadfile {
struct {
const char * fname ;
} in ;
struct {
uint8_t * data ;
uint32_t size ;
} out ;
} ;
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_loadfile_send ( struct smbcli_tree * tree ,
struct smb_composite_loadfile * io ) ;
NTSTATUS smb_composite_loadfile_recv ( struct composite_context * c , TALLOC_CTX * mem_ctx ) ;
NTSTATUS smb_composite_loadfile ( struct smbcli_tree * tree ,
TALLOC_CTX * mem_ctx ,
struct smb_composite_loadfile * io ) ;
2005-09-26 15:47:55 +04:00
struct smb_composite_fetchfile {
struct {
const char * dest_host ;
2007-12-12 04:15:29 +03:00
const char * * ports ;
2005-09-26 15:47:55 +04:00
const char * called_name ;
const char * service ;
const char * service_type ;
2008-11-02 03:03:26 +03:00
const char * socket_options ;
2005-09-26 15:47:55 +04:00
struct cli_credentials * credentials ;
const char * workgroup ;
const char * filename ;
2008-02-21 16:50:57 +03:00
struct smbcli_options options ;
2008-09-30 04:47:19 +04:00
struct smbcli_session_options session_options ;
2008-02-28 22:30:03 +03:00
struct resolve_context * resolve_ctx ;
2008-11-02 18:07:28 +03:00
struct gensec_settings * gensec_settings ;
2005-09-26 15:47:55 +04:00
} in ;
struct {
uint8_t * data ;
uint32_t size ;
} out ;
} ;
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_fetchfile_send ( struct smb_composite_fetchfile * io ,
struct tevent_context * event_ctx ) ;
NTSTATUS smb_composite_fetchfile_recv ( struct composite_context * c ,
TALLOC_CTX * mem_ctx ) ;
NTSTATUS smb_composite_fetchfile ( struct smb_composite_fetchfile * io ,
TALLOC_CTX * mem_ctx ) ;
2005-09-26 15:47:55 +04:00
/*
a composite open / write ( s ) / close request that saves a whole file from
memory . Used as a demo of the composite system .
*/
struct smb_composite_savefile {
struct {
const char * fname ;
uint8_t * data ;
uint32_t size ;
} in ;
} ;
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_savefile_send ( struct smbcli_tree * tree ,
struct smb_composite_savefile * io ) ;
NTSTATUS smb_composite_savefile_recv ( struct composite_context * c ) ;
NTSTATUS smb_composite_savefile ( struct smbcli_tree * tree ,
struct smb_composite_savefile * io ) ;
2005-09-26 15:47:55 +04:00
/*
a composite request for a full connection to a remote server . Includes
- socket establishment
- session request
- negprot
2008-04-25 18:08:52 +04:00
- session setup ( if credentials are not NULL )
- tree connect ( if service is not NULL )
2005-09-26 15:47:55 +04:00
*/
struct smb_composite_connect {
struct {
const char * dest_host ;
2007-12-12 04:15:29 +03:00
const char * * dest_ports ;
2008-11-02 03:03:26 +03:00
const char * socket_options ;
2005-09-26 15:47:55 +04:00
const char * called_name ;
const char * service ;
const char * service_type ;
struct cli_credentials * credentials ;
2007-08-27 22:10:19 +04:00
bool fallback_to_anonymous ;
2005-09-26 15:47:55 +04:00
const char * workgroup ;
2008-01-04 02:22:12 +03:00
struct smbcli_options options ;
2008-09-30 04:47:19 +04:00
struct smbcli_session_options session_options ;
2008-11-02 18:07:28 +03:00
struct gensec_settings * gensec_settings ;
2005-09-26 15:47:55 +04:00
} in ;
struct {
struct smbcli_tree * tree ;
2007-08-27 22:10:19 +04:00
bool anonymous_fallback_done ;
2005-09-26 15:47:55 +04:00
} out ;
} ;
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_connect_send ( struct smb_composite_connect * io ,
TALLOC_CTX * mem_ctx ,
struct resolve_context * resolve_ctx ,
struct tevent_context * event_ctx ) ;
NTSTATUS smb_composite_connect_recv ( struct composite_context * c , TALLOC_CTX * mem_ctx ) ;
NTSTATUS smb_composite_connect ( struct smb_composite_connect * io , TALLOC_CTX * mem_ctx ,
struct resolve_context * resolve_ctx ,
struct tevent_context * ev ) ;
2005-09-26 15:47:55 +04:00
/*
generic session setup interface that takes care of which
session setup varient to use
*/
struct smb_composite_sesssetup {
struct {
uint32_t sesskey ;
uint32_t capabilities ;
struct cli_credentials * credentials ;
const char * workgroup ;
2008-11-02 04:05:48 +03:00
struct gensec_settings * gensec_settings ;
2005-09-26 15:47:55 +04:00
} in ;
struct {
uint16_t vuid ;
} out ;
} ;
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_sesssetup_send ( struct smbcli_session * session ,
struct smb_composite_sesssetup * io ) ;
NTSTATUS smb_composite_sesssetup_recv ( struct composite_context * c ) ;
NTSTATUS smb_composite_sesssetup ( struct smbcli_session * session , struct smb_composite_sesssetup * io ) ;
2005-09-26 15:47:55 +04:00
/*
query file system info
*/
struct smb_composite_fsinfo {
struct {
const char * dest_host ;
2007-12-12 04:15:29 +03:00
const char * * dest_ports ;
2008-11-02 03:03:26 +03:00
const char * socket_options ;
2005-09-26 15:47:55 +04:00
const char * called_name ;
const char * service ;
const char * service_type ;
struct cli_credentials * credentials ;
const char * workgroup ;
enum smb_fsinfo_level level ;
2008-11-02 18:07:28 +03:00
struct gensec_settings * gensec_settings ;
2005-09-26 15:47:55 +04:00
} in ;
struct {
union smb_fsinfo * fsinfo ;
} out ;
} ;
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_fsinfo_send ( struct smbcli_tree * tree ,
struct smb_composite_fsinfo * io ,
struct resolve_context * resolve_ctx ) ;
NTSTATUS smb_composite_fsinfo_recv ( struct composite_context * c , TALLOC_CTX * mem_ctx ) ;
NTSTATUS smb_composite_fsinfo ( struct smbcli_tree * tree ,
TALLOC_CTX * mem_ctx ,
struct smb_composite_fsinfo * io ,
struct resolve_context * resolve_ctx ) ;
2005-09-26 15:47:55 +04:00
/*
composite call for appending new acl to the file ' s security descriptor and get
new full acl
*/
struct smb_composite_appendacl {
struct {
const char * fname ;
const struct security_descriptor * sd ;
} in ;
struct {
struct security_descriptor * sd ;
} out ;
} ;
2005-10-02 14:02:35 +04:00
2011-08-18 14:59:25 +04:00
struct composite_context * smb_composite_appendacl_send ( struct smbcli_tree * tree ,
struct smb_composite_appendacl * io ) ;
NTSTATUS smb_composite_appendacl_recv ( struct composite_context * c , TALLOC_CTX * mem_ctx ) ;
NTSTATUS smb_composite_appendacl ( struct smbcli_tree * tree ,
TALLOC_CTX * mem_ctx ,
struct smb_composite_appendacl * io ) ;
2005-10-02 14:02:35 +04:00
/*
a composite API to fire connect ( ) calls to multiple targets , picking the
first one .
*/
struct smb_composite_connectmulti {
struct {
int num_dests ;
const char * * hostnames ;
const char * * addresses ;
2010-07-16 08:32:42 +04:00
int * ports ; /* Either NULL for lpcfg_smb_ports() per
2005-10-02 14:02:35 +04:00
* destination or a list of explicit ports */
} in ;
struct {
struct smbcli_socket * socket ;
} out ;
} ;
2006-03-07 14:07:23 +03:00
2006-03-14 18:03:25 +03:00
struct smbcli_session ;
2008-01-03 03:39:01 +03:00
struct resolve_context ;
2006-03-14 18:03:25 +03:00
2011-08-18 14:59:25 +04:00
struct composite_context * smb2_composite_unlink_send ( struct smb2_tree * tree ,
union smb_unlink * io ) ;
NTSTATUS smb2_composite_unlink ( struct smb2_tree * tree , union smb_unlink * io ) ;
struct composite_context * smb2_composite_mkdir_send ( struct smb2_tree * tree ,
union smb_mkdir * io ) ;
NTSTATUS smb2_composite_mkdir ( struct smb2_tree * tree , union smb_mkdir * io ) ;
struct composite_context * smb2_composite_rmdir_send ( struct smb2_tree * tree ,
struct smb_rmdir * io ) ;
NTSTATUS smb2_composite_rmdir ( struct smb2_tree * tree , struct smb_rmdir * io ) ;
struct tevent_req * smb2_composite_setpathinfo_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct smb2_tree * tree ,
const union smb_setfileinfo * io ) ;
NTSTATUS smb2_composite_setpathinfo_recv ( struct tevent_req * req ) ;
NTSTATUS smb2_composite_setpathinfo ( struct smb2_tree * tree , union smb_setfileinfo * io ) ;
# endif /* __SMB_COMPOSITE_H__ */