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
+ 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,
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 02139, USA.
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CLIENT_H
will be a multiple of the page size on almost any system */
#define CLI_BUFFER_SIZE (0xFFFF)
#define CLI_SAMBA_MAX_LARGE_READX_SIZE (127*1024) /* Works for Samba servers */
+#define CLI_SAMBA_MAX_LARGE_WRITEX_SIZE (127*1024) /* Works for Samba servers */
#define CLI_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
+#define CLI_WINDOWS_MAX_LARGE_WRITEX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
+#define CLI_SAMBA_MAX_POSIX_LARGE_READX_SIZE (0xFFFF00) /* 24-bit len. */
+#define CLI_SAMBA_MAX_POSIX_LARGE_WRITEX_SIZE (0xFFFF00) /* 24-bit len. */
/*
* These definitions depend on smb.h
struct rpc_pipe_client {
struct rpc_pipe_client *prev, *next;
- TALLOC_CTX *mem_ctx;
-
struct cli_state *cli;
- int pipe_idx;
const char *pipe_name;
uint16 fnum;
- const char *domain;
- const char *user_name;
+ const struct ndr_syntax_id *abstract_syntax;
+ const struct ndr_syntax_id *transfer_syntax;
+
+ char *desthost;
+ char *srv_name_slash;
+
+ char *domain;
+ char *user_name;
struct pwd_info pwd;
uint16 max_xmit_frag;
};
/* Transport encryption state. */
-enum smb_trans_enc_type { SMB_TRANS_ENC_NTLM, SMB_TRANS_ENC_GSS };
+enum smb_trans_enc_type {
+ SMB_TRANS_ENC_NTLM
+#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
+ , SMB_TRANS_ENC_GSS
+#endif
+};
+
+#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
+struct smb_tran_enc_state_gss {
+ gss_ctx_id_t gss_ctx;
+ gss_cred_id_t creds;
+};
+#endif
struct smb_trans_enc_state {
- enum smb_trans_enc_type smb_enc_type;
- BOOL enc_on;
- union {
- NTLMSSP_STATE *ntlmssp_state;
+ enum smb_trans_enc_type smb_enc_type;
+ uint16 enc_ctx_num;
+ bool enc_on;
+ union {
+ NTLMSSP_STATE *ntlmssp_state;
#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
- gss_ctx_id_t context_handle;
+ struct smb_tran_enc_state_gss *gss_state;
#endif
- } s;
+ } s;
};
struct cli_state {
int port;
int fd;
- int smb_rw_error; /* Copy of last read or write error. */
+ /* Last read or write error. */
+ enum smb_read_errors smb_rw_error;
uint16 cnum;
uint16 pid;
uint16 mid;
struct nmb_name called;
struct nmb_name calling;
fstring full_dest_host_name;
- struct in_addr dest_ip;
+ struct sockaddr_storage dest_ss;
DATA_BLOB secblob; /* cryptkey or negTokenInit */
uint32 sesskey;
unsigned int bufsize;
int initialised;
int win95;
- BOOL is_samba;
+ bool is_samba;
uint32 capabilities;
- BOOL dfsroot;
+ uint32 posix_capabilities;
+ bool dfsroot;
- TALLOC_CTX *mem_ctx;
+#if 0
+ TALLOC_CTX *longterm_mem_ctx;
+ TALLOC_CTX *call_mem_ctx;
+#endif
smb_sign_info sign_info;
struct smb_trans_enc_state *trans_enc_state; /* Setup if we're encrypting SMB's. */
- /* the session key for this CLI, outside
+ /* the session key for this CLI, outside
any per-pipe authenticaion */
DATA_BLOB user_session_key;
/* The list of pipes currently open on this connection. */
struct rpc_pipe_client *pipe_list;
- BOOL use_kerberos;
- BOOL fallback_after_kerberos;
- BOOL use_spnego;
+ bool use_kerberos;
+ bool fallback_after_kerberos;
+ bool use_spnego;
- BOOL use_oplocks; /* should we use oplocks? */
- BOOL use_level_II_oplocks; /* should we use level II oplocks? */
+ bool use_oplocks; /* should we use oplocks? */
+ bool use_level_II_oplocks; /* should we use level II oplocks? */
/* a oplock break request handler */
- BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
+ bool (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
- BOOL force_dos_errors;
- BOOL case_sensitive; /* False by default. */
+ bool force_dos_errors;
+ bool case_sensitive; /* False by default. */
+
+ struct event_context *event_ctx;
+ struct fd_event *fd_event;
+ char *evt_inbuf;
+
+ struct cli_request *outstanding_requests;
+};
+
+struct cli_request {
+ struct cli_request *prev, *next;
+ struct async_req *async;
+
+ struct cli_state *cli;
+
+ struct smb_trans_enc_state *enc_state;
+
+ uint16_t mid;
+
+ char *outbuf;
+ size_t sent;
+ char *inbuf;
+
+ union {
+ struct {
+ off_t ofs;
+ size_t size;
+ ssize_t received;
+ uint8_t *rcvbuf;
+ } read;
+ } data;
};
typedef struct file_info {
struct timespec mtime_ts;
struct timespec atime_ts;
struct timespec ctime_ts;
- pstring name;
- pstring dir;
+ char *name;
char short_name[13*3]; /* the *3 is to cope with multi-byte */
} file_info;
#define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
#define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
#define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
+#define CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS 0x0008
#endif /* _CLIENT_H */