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. */
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;
struct dcinfo *dc;
};
+/* Transport encryption state. */
+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;
+ uint16 enc_ctx_num;
+ bool enc_on;
+ union {
+ NTLMSSP_STATE *ntlmssp_state;
+#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
+ struct smb_tran_enc_state_gss *gss_state;
+#endif
+ } s;
+};
+
struct cli_state {
int port;
int fd;
- /* Copy of last read or write error. */
+ /* Last read or write error. */
enum smb_read_errors smb_rw_error;
uint16 cnum;
uint16 pid;
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;
- /* the session key for this CLI, outside
+ struct smb_trans_enc_state *trans_enc_state; /* Setup if we're encrypting SMB's. */
+
+ /* the session key for this CLI, outside
any per-pipe authenticaion */
DATA_BLOB user_session_key;
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 */