s3:smb2cli: replace smb2cli_base.c code with the more generic smbXcli_base.c code
[Samba/vl.git] / source3 / include / client.h
blobcbe79134f00f4ecb39d62233a6dbd8df0b441512
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
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 3 of the License, or
11 (at your option) any later version.
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.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef _CLIENT_H
23 #define _CLIENT_H
25 #define CLI_BUFFER_SIZE (0xFFFF)
28 * These definitions depend on smb.h
31 struct print_job_info {
32 uint16 id;
33 uint16 priority;
34 size_t size;
35 fstring user;
36 fstring name;
37 time_t t;
40 struct smbXcli_conn;
42 struct cli_state {
43 /**
44 * A list of subsidiary connections for DFS.
46 struct cli_state *prev, *next;
47 int rap_error;
48 NTSTATUS raw_status; /* maybe via NT_STATUS_DOS() */
49 bool map_dos_errors;
51 /* The credentials used to open the cli_state connection. */
52 char *domain;
53 char *user_name;
54 char *password; /* Can be null to force use of zero NTLMSSP session key. */
57 * The following strings are the
58 * ones returned by the server if
59 * the protocol > NT1.
61 char *server_type;
62 char *server_os;
63 char *server_domain;
65 char *share;
66 char *dev;
68 int timeout; /* in milliseconds. */
69 int initialised;
70 int win95;
71 bool is_guestlogin;
72 /* What the server offered. */
73 uint32_t server_posix_capabilities;
74 /* What the client requested. */
75 uint32_t requested_posix_capabilities;
76 bool dfsroot;
78 struct smb_signing_state *signing_state;
80 struct smb_trans_enc_state *trans_enc_state; /* Setup if we're encrypting SMB's. */
82 /* the session key for this CLI, outside
83 any per-pipe authenticaion */
84 DATA_BLOB user_session_key;
86 /* The list of pipes currently open on this connection. */
87 struct rpc_pipe_client *pipe_list;
89 bool use_kerberos;
90 bool fallback_after_kerberos;
91 bool use_ccache;
92 bool got_kerberos_mechanism; /* Server supports krb5 in SPNEGO. */
94 bool use_oplocks; /* should we use oplocks? */
96 bool case_sensitive; /* False by default. */
98 /* Where (if anywhere) this is mounted under DFS. */
99 char *dfs_mountpoint;
101 struct {
102 int fd;
103 struct sockaddr_storage local_ss;
104 struct sockaddr_storage remote_ss;
105 const char *remote_name;
106 const char *remote_realm;
107 struct tevent_req *read_smb_req;
108 struct tevent_queue *outgoing;
109 struct tevent_req **pending;
111 * The incoming dispatch function should return:
112 * - NT_STATUS_RETRY, if more incoming PDUs are expected.
113 * - NT_STATUS_OK, if no more processing is desired, e.g.
114 * the dispatch function called
115 * tevent_req_done().
116 * - All other return values disconnect the connection.
118 NTSTATUS (*dispatch_incoming)(struct cli_state *cli,
119 TALLOC_CTX *frame,
120 uint8_t *inbuf);
122 enum protocol_types protocol;
124 struct {
125 struct {
126 uint32_t capabilities;
127 uint32_t max_xmit;
128 } client;
130 struct {
131 uint32_t capabilities;
132 uint32_t max_xmit;
133 uint16_t max_mux;
134 uint16_t security_mode;
135 bool readbraw;
136 bool writebraw;
137 bool lockread;
138 bool writeunlock;
139 uint32_t session_key;
140 struct GUID guid;
141 DATA_BLOB gss_blob;
142 uint8_t challenge[8];
143 const char *workgroup;
144 const char *name;
145 int time_zone;
146 time_t system_time;
147 } server;
149 uint32_t capabilities;
150 uint32_t max_xmit;
152 uint16_t mid;
153 } smb1;
154 } conn;
156 struct {
157 uint16_t pid;
158 uint16_t vc_num;
159 uint16_t tid;
160 uint16_t uid;
161 } smb1;
163 struct {
164 struct smbXcli_conn *conn;
166 uint32_t pid;
167 uint32_t tid;
168 uint64_t uid;
170 /* SMB2 negprot */
171 uint16_t security_mode;
172 uint16_t dialect_revision;
173 struct GUID server_guid;
174 uint32_t server_capabilities;
175 uint32_t max_transact_size;
176 uint32_t max_read_size;
177 uint32_t max_write_size;
178 struct timespec system_time;
179 struct timespec server_start_time;
180 DATA_BLOB gss_blob;
182 /* SMB2 tcon */
183 uint8_t share_type;
184 uint32_t share_flags;
185 uint32_t share_capabilities;
186 uint32_t maximal_access;
187 } smb2;
190 struct file_info {
191 uint64_t size;
192 uint16 mode;
193 uid_t uid;
194 gid_t gid;
195 /* these times are normally kept in GMT */
196 struct timespec mtime_ts;
197 struct timespec atime_ts;
198 struct timespec ctime_ts;
199 char *name;
200 char *short_name;
203 #define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
204 #define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
205 #define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
206 #define CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS 0x0008
207 #define CLI_FULL_CONNECTION_OPLOCKS 0x0010
208 #define CLI_FULL_CONNECTION_LEVEL_II_OPLOCKS 0x0020
209 #define CLI_FULL_CONNECTION_USE_CCACHE 0x0040
210 #define CLI_FULL_CONNECTION_FORCE_DOS_ERRORS 0x0080
211 #define CLI_FULL_CONNECTION_FORCE_ASCII 0x0100
213 #endif /* _CLIENT_H */