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
overlap on the wire. This size gives us a nice read/write size, which
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_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
+#define CLI_SAMBA_MAX_POSIX_LARGE_READX_SIZE (0xFFFF00) /* 24-bit len. */
/*
* These definitions depend on smb.h
*/
-typedef struct file_info
-{
- SMB_OFF_T size;
- uint16 mode;
- uid_t uid;
- gid_t gid;
- /* these times are normally kept in GMT */
- time_t mtime;
- time_t atime;
- time_t ctime;
- pstring name;
- char short_name[13*3]; /* the *3 is to cope with multi-byte */
-} file_info;
-
-struct print_job_info
-{
+struct print_job_info {
uint16 id;
uint16 priority;
size_t size;
time_t t;
};
+struct cli_pipe_auth_data {
+ enum pipe_auth_type auth_type; /* switch for the union below. Defined in ntdomain.h */
+ enum pipe_auth_level auth_level; /* defined in ntdomain.h */
+ union {
+ struct schannel_auth_struct *schannel_auth;
+ NTLMSSP_STATE *ntlmssp_state;
+ struct kerberos_auth_struct *kerberos_auth;
+ } a_u;
+ void (*cli_auth_data_free_func)(struct cli_pipe_auth_data *);
+};
+
+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;
+ struct pwd_info pwd;
+
+ uint16 max_xmit_frag;
+ uint16 max_recv_frag;
+
+ struct cli_pipe_auth_data auth;
+
+ /* The following is only non-null on a netlogon pipe. */
+ struct dcinfo *dc;
+};
+
struct cli_state {
int port;
int fd;
+ int smb_rw_error; /* Copy of last read or write error. */
uint16 cnum;
uint16 pid;
uint16 mid;
int rap_error;
int privileges;
- fstring eff_name;
fstring desthost;
- fstring user_name;
+
+ /* The credentials used to open the cli_state connection. */
fstring domain;
+ fstring user_name;
+ struct pwd_info pwd;
/*
* The following strings are the
fstring full_dest_host_name;
struct in_addr dest_ip;
- struct pwd_info pwd;
DATA_BLOB secblob; /* cryptkey or negTokenInit */
uint32 sesskey;
int serverzone;
int readbraw_supported;
int writebraw_supported;
int timeout; /* in milliseconds. */
- int max_xmit;
- int max_mux;
+ size_t max_xmit;
+ size_t max_mux;
char *outbuf;
char *inbuf;
- int bufsize;
+ unsigned int bufsize;
int initialised;
int win95;
+ BOOL is_samba;
uint32 capabilities;
+ uint32 posix_capabilities;
+ BOOL dfsroot;
TALLOC_CTX *mem_ctx;
- /*
- * Only used in NT domain calls.
- */
+ smb_sign_info sign_info;
+
+ /* 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;
- uint16 nt_pipe_fnum; /* Pipe handle. */
- unsigned char sess_key[16]; /* Current session key. */
- unsigned char ntlmssp_hash[258]; /* ntlmssp data. */
- uint32 ntlmssp_cli_flgs; /* ntlmssp client flags */
- uint32 ntlmssp_srv_flgs; /* ntlmssp server flags */
- uint32 ntlmssp_seq_num; /* ntlmssp sequence number */
- DOM_CRED clnt_cred; /* Client credential. */
- fstring mach_acct; /* MYNAME$. */
- fstring srv_name_slash; /* \\remote server. */
- fstring clnt_name_slash; /* \\local client. */
- uint16 max_xmit_frag;
- uint16 max_recv_frag;
- uint32 ntlmssp_flags;
BOOL use_kerberos;
+ BOOL fallback_after_kerberos;
BOOL use_spnego;
BOOL use_oplocks; /* should we use oplocks? */
BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
BOOL force_dos_errors;
+ BOOL case_sensitive; /* False by default. */
+};
- /* was this structure allocated by cli_initialise? If so, then
- free in cli_shutdown() */
- BOOL allocated;
+typedef struct file_info {
+ struct cli_state *cli;
+ SMB_BIG_UINT size;
+ uint16 mode;
+ uid_t uid;
+ gid_t gid;
+ /* these times are normally kept in GMT */
+ struct timespec mtime_ts;
+ struct timespec atime_ts;
+ struct timespec ctime_ts;
+ pstring name;
+ pstring dir;
+ char short_name[13*3]; /* the *3 is to cope with multi-byte */
+} file_info;
- /* Name of the pipe we're talking to, if any */
- fstring pipe_name;
-};
+#define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
+#define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
+#define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
#endif /* _CLIENT_H */