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_MAX_LARGE_READX_SIZE (127*1024) 31 32/* 33 * These definitions depend on smb.h 34 */ 35 36typedef struct file_info 37{ 38 SMB_BIG_UINT size; 39 uint16 mode; 40 uid_t uid; 41 gid_t gid; 42 /* these times are normally kept in GMT */ 43 time_t mtime; 44 time_t atime; 45 time_t ctime; 46 pstring name; 47 char short_name[13*3]; /* the *3 is to cope with multi-byte */ 48} file_info; 49 50struct print_job_info 51{ 52 uint16 id; 53 uint16 priority; 54 size_t size; 55 fstring user; 56 fstring name; 57 time_t t; 58}; 59 60struct cli_state { 61 int port; 62 int fd; 63 int smb_rw_error; /* Copy of last read or write error. */ 64 uint16 cnum; 65 uint16 pid; 66 uint16 mid; 67 uint16 vuid; 68 int protocol; 69 int sec_mode; 70 int rap_error; 71 int privileges; 72 73 fstring desthost; 74 fstring user_name; 75 fstring domain; 76 77 /* 78 * The following strings are the 79 * ones returned by the server if 80 * the protocol > NT1. 81 */ 82 fstring server_type; 83 fstring server_os; 84 fstring server_domain; 85 86 fstring share; 87 fstring dev; 88 struct nmb_name called; 89 struct nmb_name calling; 90 fstring full_dest_host_name; 91 struct in_addr dest_ip; 92 93 struct pwd_info pwd; 94 DATA_BLOB secblob; /* cryptkey or negTokenInit */ 95 uint32 sesskey; 96 int serverzone; 97 uint32 servertime; 98 int readbraw_supported; 99 int writebraw_supported; 100 int timeout; /* in milliseconds. */ 101 size_t max_xmit; 102 size_t max_mux; 103 char *outbuf; 104 char *inbuf; 105 unsigned int bufsize; 106 int initialised; 107 int win95; 108 uint32 capabilities; 109 BOOL dfsroot; 110 111 TALLOC_CTX *mem_ctx; 112 113 smb_sign_info sign_info; 114 115 /* the session key for this CLI, outside 116 any per-pipe authenticaion */ 117 DATA_BLOB user_session_key; 118 119 /* 120 * Only used in NT domain calls. 121 */ 122 123 int pipe_idx; /* Index (into list of known pipes) 124 of the pipe we're talking to, 125 if any */ 126 127 uint16 nt_pipe_fnum[PI_MAX_PIPES]; /* Pipe handle. */ 128 129 /* Secure pipe parameters */ 130 int pipe_auth_flags; 131 132 uint16 saved_netlogon_pipe_fnum; /* The "first" pipe to get 133 the session key for the 134 schannel. */ 135 struct netsec_auth_struct auth_info; 136 137 NTLMSSP_STATE *ntlmssp_pipe_state; 138 139 unsigned char sess_key[16]; /* Current session key. */ 140 DOM_CRED clnt_cred; /* Client credential. */ 141 fstring mach_acct; /* MYNAME$. */ 142 fstring srv_name_slash; /* \\remote server. */ 143 fstring clnt_name_slash; /* \\local client. */ 144 uint16 max_xmit_frag; 145 uint16 max_recv_frag; 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 /* was this structure allocated by cli_initialise? If so, then 161 free in cli_shutdown() */ 162 BOOL allocated; 163 164 /* Name of the pipe we're talking to, if any */ 165 fstring pipe_name; 166}; 167 168#define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001 169#define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002 170#define CLI_FULL_CONNECTION_ANNONYMOUS_FALLBACK 0x0004 171 172#endif /* _CLIENT_H */ 173