1/* 2 Unix SMB/CIFS implementation. 3 SMB parameters and setup 4 Copyright (C) Andrew Tridgell 1992-1998 5 Copyright (C) Luke Kenneth Casson Leighton 1996-1998 6 Copyright (C) Jeremy Allison 1998 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21*/ 22 23#ifndef _CLIENT_H 24#define _CLIENT_H 25 26/* the client asks for a smaller buffer to save ram and also to get more 27 overlap on the wire. This size gives us a nice read/write size, which 28 will be a multiple of the page size on almost any system */ 29#define CLI_BUFFER_SIZE (0xFFFF) 30#define CLI_SAMBA_MAX_LARGE_READX_SIZE (127*1024) /* Works for Samba servers */ 31#define CLI_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */ 32 33/* 34 * These definitions depend on smb.h 35 */ 36 37struct print_job_info 38{ 39 uint16 id; 40 uint16 priority; 41 size_t size; 42 fstring user; 43 fstring name; 44 time_t t; 45}; 46 47struct cli_pipe_auth_data { 48 enum pipe_auth_type auth_type; /* switch for the union below. Defined in ntdomain.h */ 49 enum pipe_auth_level auth_level; /* defined in ntdomain.h */ 50 union { 51 struct schannel_auth_struct *schannel_auth; 52 NTLMSSP_STATE *ntlmssp_state; 53 struct kerberos_auth_struct *kerberos_auth; 54 } a_u; 55 void (*cli_auth_data_free_func)(struct cli_pipe_auth_data *); 56}; 57 58struct rpc_pipe_client { 59 struct rpc_pipe_client *prev, *next; 60 61 TALLOC_CTX *mem_ctx; 62 63 struct cli_state *cli; 64 65 int pipe_idx; 66 const char *pipe_name; 67 uint16 fnum; 68 69 const char *domain; 70 const char *user_name; 71 struct pwd_info pwd; 72 73 uint16 max_xmit_frag; 74 uint16 max_recv_frag; 75 76 struct cli_pipe_auth_data auth; 77 78 /* The following is only non-null on a netlogon pipe. */ 79 struct dcinfo *dc; 80}; 81 82struct cli_state { 83 int port; 84 int fd; 85 int smb_rw_error; /* Copy of last read or write error. */ 86 uint16 cnum; 87 uint16 pid; 88 uint16 mid; 89 uint16 vuid; 90 int protocol; 91 int sec_mode; 92 int rap_error; 93 int privileges; 94 95 fstring desthost; 96 97 /* The credentials used to open the cli_state connection. */ 98 fstring domain; 99 fstring user_name; 100 struct pwd_info pwd; 101 102 /* 103 * The following strings are the 104 * ones returned by the server if 105 * the protocol > NT1. 106 */ 107 fstring server_type; 108 fstring server_os; 109 fstring server_domain; 110 111 fstring share; 112 fstring dev; 113 struct nmb_name called; 114 struct nmb_name calling; 115 fstring full_dest_host_name; 116 struct in_addr dest_ip; 117 118 DATA_BLOB secblob; /* cryptkey or negTokenInit */ 119 uint32 sesskey; 120 int serverzone; 121 uint32 servertime; 122 int readbraw_supported; 123 int writebraw_supported; 124 int timeout; /* in milliseconds. */ 125 size_t max_xmit; 126 size_t max_mux; 127 char *outbuf; 128 char *inbuf; 129 unsigned int bufsize; 130 int initialised; 131 int win95; 132 BOOL is_samba; 133 uint32 capabilities; 134 BOOL dfsroot; 135 136 TALLOC_CTX *mem_ctx; 137 138 smb_sign_info sign_info; 139 140 /* the session key for this CLI, outside 141 any per-pipe authenticaion */ 142 DATA_BLOB user_session_key; 143 144 /* The list of pipes currently open on this connection. */ 145 struct rpc_pipe_client *pipe_list; 146 147 BOOL use_kerberos; 148 BOOL fallback_after_kerberos; 149 BOOL use_spnego; 150 151 BOOL use_oplocks; /* should we use oplocks? */ 152 BOOL use_level_II_oplocks; /* should we use level II oplocks? */ 153 154 /* a oplock break request handler */ 155 BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level); 156 157 BOOL force_dos_errors; 158 BOOL case_sensitive; /* False by default. */ 159}; 160 161typedef struct file_info { 162 struct cli_state *cli; 163 SMB_BIG_UINT size; 164 uint16 mode; 165 uid_t uid; 166 gid_t gid; 167 /* these times are normally kept in GMT */ 168 struct timespec mtime_ts; 169 struct timespec atime_ts; 170 struct timespec ctime_ts; 171 pstring name; 172 pstring dir; 173 char short_name[13*3]; /* the *3 is to cope with multi-byte */ 174} file_info; 175 176#define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001 177#define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002 178#define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004 179 180#endif /* _CLIENT_H */ 181