libcli/smb: s/smbXcli_session_copy/smbXcli_session_shallow_copy
[garming/samba-autobuild/.git] / libcli / smb / smbXcli_base.h
1 /*
2    Unix SMB/CIFS implementation.
3    Infrastructure for async SMB client requests
4    Copyright (C) Volker Lendecke 2008
5    Copyright (C) Stefan Metzmacher 2011
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef _SMBXCLI_BASE_H_
22 #define _SMBXCLI_BASE_H_
23
24 #define SMB_SUICIDE_PACKET 0x74697865
25
26 struct smbXcli_conn;
27 struct smbXcli_session;
28 struct smbXcli_tcon;
29 struct smb_trans_enc_state;
30 struct GUID;
31 struct iovec;
32 struct smb2_create_blobs;
33 struct smb_create_returns;
34
35 struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
36                                          int fd,
37                                          const char *remote_name,
38                                          enum smb_signing_setting signing_state,
39                                          uint32_t smb1_capabilities,
40                                          struct GUID *client_guid,
41                                          uint32_t smb2_capabilities);
42
43 bool smbXcli_conn_is_connected(struct smbXcli_conn *conn);
44 void smbXcli_conn_disconnect(struct smbXcli_conn *conn, NTSTATUS status);
45
46 bool smbXcli_conn_has_async_calls(struct smbXcli_conn *conn);
47
48 bool smbXcli_conn_dfs_supported(struct smbXcli_conn *conn);
49
50 enum protocol_types smbXcli_conn_protocol(struct smbXcli_conn *conn);
51 bool smbXcli_conn_use_unicode(struct smbXcli_conn *conn);
52 bool smbXcli_conn_signing_mandatory(struct smbXcli_conn *conn);
53 bool smbXcli_conn_support_passthrough(struct smbXcli_conn *conn);
54
55 void smbXcli_conn_set_sockopt(struct smbXcli_conn *conn, const char *options);
56 const struct sockaddr_storage *smbXcli_conn_local_sockaddr(struct smbXcli_conn *conn);
57 const struct sockaddr_storage *smbXcli_conn_remote_sockaddr(struct smbXcli_conn *conn);
58 const char *smbXcli_conn_remote_name(struct smbXcli_conn *conn);
59
60 uint16_t smbXcli_conn_max_requests(struct smbXcli_conn *conn);
61 NTTIME smbXcli_conn_server_system_time(struct smbXcli_conn *conn);
62 const DATA_BLOB *smbXcli_conn_server_gss_blob(struct smbXcli_conn *conn);
63 const struct GUID *smbXcli_conn_server_guid(struct smbXcli_conn *conn);
64 bool smbXcli_conn_get_force_channel_sequence(struct smbXcli_conn *conn);
65 void smbXcli_conn_set_force_channel_sequence(struct smbXcli_conn *conn,
66                                              bool v);
67
68
69 struct tevent_req *smbXcli_conn_samba_suicide_send(TALLOC_CTX *mem_ctx,
70                                                    struct tevent_context *ev,
71                                                    struct smbXcli_conn *conn,
72                                                    uint8_t exitcode);
73 NTSTATUS smbXcli_conn_samba_suicide_recv(struct tevent_req *req);
74 NTSTATUS smbXcli_conn_samba_suicide(struct smbXcli_conn *conn,
75                                     uint8_t exitcode);
76
77 void smbXcli_req_unset_pending(struct tevent_req *req);
78 bool smbXcli_req_set_pending(struct tevent_req *req);
79 struct timeval smbXcli_req_endtime(struct tevent_req *req);
80
81 uint32_t smb1cli_conn_capabilities(struct smbXcli_conn *conn);
82 uint32_t smb1cli_conn_max_xmit(struct smbXcli_conn *conn);
83 bool smb1cli_conn_req_possible(struct smbXcli_conn *conn);
84 uint32_t smb1cli_conn_server_session_key(struct smbXcli_conn *conn);
85 const uint8_t *smb1cli_conn_server_challenge(struct smbXcli_conn *conn);
86 uint16_t smb1cli_conn_server_security_mode(struct smbXcli_conn *conn);
87 bool smb1cli_conn_server_readbraw(struct smbXcli_conn *conn);
88 bool smb1cli_conn_server_writebraw(struct smbXcli_conn *conn);
89 bool smb1cli_conn_server_lockread(struct smbXcli_conn *conn);
90 bool smb1cli_conn_server_writeunlock(struct smbXcli_conn *conn);
91 int smb1cli_conn_server_time_zone(struct smbXcli_conn *conn);
92
93 bool smb1cli_conn_activate_signing(struct smbXcli_conn *conn,
94                                    const DATA_BLOB user_session_key,
95                                    const DATA_BLOB response);
96 bool smb1cli_conn_check_signing(struct smbXcli_conn *conn,
97                                 const uint8_t *buf, uint32_t seqnum);
98 bool smb1cli_conn_signing_is_active(struct smbXcli_conn *conn);
99
100 void smb1cli_conn_set_encryption(struct smbXcli_conn *conn,
101                                  struct smb_trans_enc_state *es);
102 bool smb1cli_conn_encryption_on(struct smbXcli_conn *conn);
103
104 bool smb1cli_is_andx_req(uint8_t cmd);
105 size_t smb1cli_req_wct_ofs(struct tevent_req **reqs, int num_reqs);
106
107 uint16_t smb1cli_req_mid(struct tevent_req *req);
108 void smb1cli_req_set_mid(struct tevent_req *req, uint16_t mid);
109
110 uint32_t smb1cli_req_seqnum(struct tevent_req *req);
111 void smb1cli_req_set_seqnum(struct tevent_req *req, uint32_t seqnum);
112
113 struct smb1cli_req_expected_response {
114         NTSTATUS status;
115         uint8_t wct;
116 };
117
118 struct tevent_req *smb1cli_req_create(TALLOC_CTX *mem_ctx,
119                                       struct tevent_context *ev,
120                                       struct smbXcli_conn *conn,
121                                       uint8_t smb_command,
122                                       uint8_t additional_flags,
123                                       uint8_t clear_flags,
124                                       uint16_t additional_flags2,
125                                       uint16_t clear_flags2,
126                                       uint32_t timeout_msec,
127                                       uint32_t pid,
128                                       struct smbXcli_tcon *tcon,
129                                       struct smbXcli_session *session,
130                                       uint8_t wct, uint16_t *vwv,
131                                       int iov_count,
132                                       struct iovec *bytes_iov);
133 NTSTATUS smb1cli_req_chain_submit(struct tevent_req **reqs, int num_reqs);
134
135 struct tevent_req *smb1cli_req_send(TALLOC_CTX *mem_ctx,
136                                     struct tevent_context *ev,
137                                     struct smbXcli_conn *conn,
138                                     uint8_t smb_command,
139                                     uint8_t additional_flags,
140                                     uint8_t clear_flags,
141                                     uint16_t additional_flags2,
142                                     uint16_t clear_flags2,
143                                     uint32_t timeout_msec,
144                                     uint32_t pid,
145                                     struct smbXcli_tcon *tcon,
146                                     struct smbXcli_session *session,
147                                     uint8_t wct, uint16_t *vwv,
148                                     uint32_t num_bytes,
149                                     const uint8_t *bytes);
150 NTSTATUS smb1cli_req_recv(struct tevent_req *req,
151                           TALLOC_CTX *mem_ctx,
152                           struct iovec **piov,
153                           uint8_t **phdr,
154                           uint8_t *pwct,
155                           uint16_t **pvwv,
156                           uint32_t *pvwv_offset,
157                           uint32_t *pnum_bytes,
158                           uint8_t **pbytes,
159                           uint32_t *pbytes_offset,
160                           uint8_t **pinbuf,
161                           const struct smb1cli_req_expected_response *expected,
162                           size_t num_expected);
163
164 struct tevent_req *smb1cli_trans_send(
165         TALLOC_CTX *mem_ctx, struct tevent_context *ev,
166         struct smbXcli_conn *conn, uint8_t cmd,
167         uint8_t additional_flags, uint8_t clear_flags,
168         uint16_t additional_flags2, uint16_t clear_flags2,
169         uint32_t timeout_msec,
170         uint32_t pid,
171         struct smbXcli_tcon *tcon,
172         struct smbXcli_session *session,
173         const char *pipe_name, uint16_t fid, uint16_t function, int flags,
174         uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
175         uint8_t *param, uint32_t num_param, uint32_t max_param,
176         uint8_t *data, uint32_t num_data, uint32_t max_data);
177 NTSTATUS smb1cli_trans_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
178                             uint16_t *recv_flags2,
179                             uint16_t **setup, uint8_t min_setup,
180                             uint8_t *num_setup,
181                             uint8_t **param, uint32_t min_param,
182                             uint32_t *num_param,
183                             uint8_t **data, uint32_t min_data,
184                             uint32_t *num_data);
185 NTSTATUS smb1cli_trans(TALLOC_CTX *mem_ctx, struct smbXcli_conn *conn,
186                 uint8_t trans_cmd,
187                 uint8_t additional_flags, uint8_t clear_flags,
188                 uint16_t additional_flags2, uint16_t clear_flags2,
189                 uint32_t timeout_msec,
190                 uint32_t pid,
191                 struct smbXcli_tcon *tcon,
192                 struct smbXcli_session *session,
193                 const char *pipe_name, uint16_t fid, uint16_t function,
194                 int flags,
195                 uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
196                 uint8_t *param, uint32_t num_param, uint32_t max_param,
197                 uint8_t *data, uint32_t num_data, uint32_t max_data,
198                 uint16_t *recv_flags2,
199                 uint16_t **rsetup, uint8_t min_rsetup, uint8_t *num_rsetup,
200                 uint8_t **rparam, uint32_t min_rparam, uint32_t *num_rparam,
201                 uint8_t **rdata, uint32_t min_rdata, uint32_t *num_rdata);
202
203 struct tevent_req *smb1cli_echo_send(TALLOC_CTX *mem_ctx,
204                                      struct tevent_context *ev,
205                                      struct smbXcli_conn *conn,
206                                      uint32_t timeout_msec,
207                                      uint16_t num_echos,
208                                      DATA_BLOB data);
209 NTSTATUS smb1cli_echo_recv(struct tevent_req *req);
210 NTSTATUS smb1cli_echo(struct smbXcli_conn *conn, uint32_t timeout_msec,
211                       uint16_t num_echos, DATA_BLOB data);
212
213 struct tevent_req *smb1cli_session_setup_lm21_send(TALLOC_CTX *mem_ctx,
214                                 struct tevent_context *ev,
215                                 struct smbXcli_conn *conn,
216                                 uint32_t timeout_msec,
217                                 uint32_t pid,
218                                 struct smbXcli_session *session,
219                                 uint16_t in_buf_size,
220                                 uint16_t in_mpx_max,
221                                 uint16_t in_vc_num,
222                                 uint32_t in_sess_key,
223                                 const char *in_user,
224                                 const char *in_domain,
225                                 const DATA_BLOB in_password,
226                                 const char *in_native_os,
227                                 const char *in_native_lm);
228 NTSTATUS smb1cli_session_setup_lm21_recv(struct tevent_req *req,
229                                          TALLOC_CTX *mem_ctx,
230                                          char **out_native_os,
231                                          char **out_native_lm);
232 struct tevent_req *smb1cli_session_setup_nt1_send(TALLOC_CTX *mem_ctx,
233                                 struct tevent_context *ev,
234                                 struct smbXcli_conn *conn,
235                                 uint32_t timeout_msec,
236                                 uint32_t pid,
237                                 struct smbXcli_session *session,
238                                 uint16_t in_buf_size,
239                                 uint16_t in_mpx_max,
240                                 uint16_t in_vc_num,
241                                 uint32_t in_sess_key,
242                                 const char *in_user,
243                                 const char *in_domain,
244                                 const DATA_BLOB in_apassword,
245                                 const DATA_BLOB in_upassword,
246                                 uint32_t in_capabilities,
247                                 const char *in_native_os,
248                                 const char *in_native_lm);
249 NTSTATUS smb1cli_session_setup_nt1_recv(struct tevent_req *req,
250                                         TALLOC_CTX *mem_ctx,
251                                         struct iovec **precv_iov,
252                                         const uint8_t **precv_inbuf,
253                                         char **out_native_os,
254                                         char **out_native_lm,
255                                         char **out_primary_domain);
256 struct tevent_req *smb1cli_session_setup_ext_send(TALLOC_CTX *mem_ctx,
257                                 struct tevent_context *ev,
258                                 struct smbXcli_conn *conn,
259                                 uint32_t timeout_msec,
260                                 uint32_t pid,
261                                 struct smbXcli_session *session,
262                                 uint16_t in_buf_size,
263                                 uint16_t in_mpx_max,
264                                 uint16_t in_vc_num,
265                                 uint32_t in_sess_key,
266                                 const DATA_BLOB in_security_blob,
267                                 uint32_t in_capabilities,
268                                 const char *in_native_os,
269                                 const char *in_native_lm);
270 NTSTATUS smb1cli_session_setup_ext_recv(struct tevent_req *req,
271                                         TALLOC_CTX *mem_ctx,
272                                         struct iovec **precv_iov,
273                                         const uint8_t **precv_inbuf,
274                                         DATA_BLOB *out_security_blob,
275                                         char **out_native_os,
276                                         char **out_native_lm);
277
278 struct tevent_req *smb1cli_ntcreatex_send(TALLOC_CTX *mem_ctx,
279                                           struct tevent_context *ev,
280                                           struct smbXcli_conn *conn,
281                                           uint32_t timeout_msec,
282                                           uint32_t pid,
283                                           struct smbXcli_tcon *tcon,
284                                           struct smbXcli_session *session,
285                                           const char *fname,
286                                           uint32_t CreatFlags,
287                                           uint32_t RootDirectoryFid,
288                                           uint32_t DesiredAccess,
289                                           uint64_t AllocationSize,
290                                           uint32_t FileAttributes,
291                                           uint32_t ShareAccess,
292                                           uint32_t CreateDisposition,
293                                           uint32_t CreateOptions,
294                                           uint32_t ImpersonationLevel,
295                                           uint8_t SecurityFlags);
296 NTSTATUS smb1cli_ntcreatex_recv(struct tevent_req *req, uint16_t *pfnum);
297 NTSTATUS smb1cli_ntcreatex(struct smbXcli_conn *conn,
298                            uint32_t timeout_msec,
299                            uint32_t pid,
300                            struct smbXcli_tcon *tcon,
301                            struct smbXcli_session *session,
302                            const char *fname,
303                            uint32_t CreatFlags,
304                            uint32_t RootDirectoryFid,
305                            uint32_t DesiredAccess,
306                            uint64_t AllocationSize,
307                            uint32_t FileAttributes,
308                            uint32_t ShareAccess,
309                            uint32_t CreateDisposition,
310                            uint32_t CreateOptions,
311                            uint32_t ImpersonationLevel,
312                            uint8_t SecurityFlags,
313                            uint16_t *pfnum);
314 struct tevent_req *smb1cli_close_send(TALLOC_CTX *mem_ctx,
315                                       struct tevent_context *ev,
316                                       struct smbXcli_conn *conn,
317                                       uint32_t timeout_msec,
318                                       uint32_t pid,
319                                       struct smbXcli_tcon *tcon,
320                                       struct smbXcli_session *session,
321                                       uint16_t fnum,
322                                       uint32_t last_modified);
323 NTSTATUS smb1cli_close_recv(struct tevent_req *req);
324 NTSTATUS smb1cli_close(struct smbXcli_conn *conn,
325                        uint32_t timeout_msec,
326                        uint32_t pid,
327                        struct smbXcli_tcon *tcon,
328                        struct smbXcli_session *session,
329                        uint16_t fnum,
330                        uint32_t last_modified);
331 struct tevent_req *smb1cli_writex_send(TALLOC_CTX *mem_ctx,
332                                        struct tevent_context *ev,
333                                        struct smbXcli_conn *conn,
334                                        uint32_t timeout_msec,
335                                        uint32_t pid,
336                                        struct smbXcli_tcon *tcon,
337                                        struct smbXcli_session *session,
338                                        uint16_t fnum,
339                                        uint16_t mode,
340                                        const uint8_t *buf,
341                                        uint64_t offset,
342                                        uint32_t size);
343 NTSTATUS smb1cli_writex_recv(struct tevent_req *req,
344                              uint32_t *pwritten,
345                              uint16_t *pavailable);
346 NTSTATUS smb1cli_writex(struct smbXcli_conn *conn,
347                         uint32_t timeout_msec,
348                         uint32_t pid,
349                         struct smbXcli_tcon *tcon,
350                         struct smbXcli_session *session,
351                         uint16_t fnum,
352                         uint16_t mode,
353                         const uint8_t *buf,
354                         uint64_t offset,
355                         uint32_t size,
356                         uint32_t *pwritten,
357                         uint16_t *pavailable);
358 struct tevent_req *smb1cli_readx_send(TALLOC_CTX *mem_ctx,
359                                       struct tevent_context *ev,
360                                       struct smbXcli_conn *conn,
361                                       uint32_t timeout_msec,
362                                       uint32_t pid,
363                                       struct smbXcli_tcon *tcon,
364                                       struct smbXcli_session *session,
365                                       uint16_t fnum,
366                                       uint64_t offset,
367                                       uint32_t size);
368 NTSTATUS smb1cli_readx_recv(struct tevent_req *req,
369                             uint32_t *received,
370                             uint8_t **rcvbuf);
371
372 bool smb2cli_conn_req_possible(struct smbXcli_conn *conn, uint32_t *max_dyn_len);
373 uint32_t smb2cli_conn_server_capabilities(struct smbXcli_conn *conn);
374 uint16_t smb2cli_conn_server_security_mode(struct smbXcli_conn *conn);
375 uint32_t smb2cli_conn_max_trans_size(struct smbXcli_conn *conn);
376 uint32_t smb2cli_conn_max_read_size(struct smbXcli_conn *conn);
377 uint32_t smb2cli_conn_max_write_size(struct smbXcli_conn *conn);
378 void smb2cli_conn_set_max_credits(struct smbXcli_conn *conn,
379                                   uint16_t max_credits);
380 uint16_t smb2cli_conn_get_cur_credits(struct smbXcli_conn *conn);
381 uint8_t smb2cli_conn_get_io_priority(struct smbXcli_conn *conn);
382 void smb2cli_conn_set_io_priority(struct smbXcli_conn *conn,
383                                   uint8_t io_priority);
384 uint32_t smb2cli_conn_cc_chunk_len(struct smbXcli_conn *conn);
385 void smb2cli_conn_set_cc_chunk_len(struct smbXcli_conn *conn,
386                                    uint32_t chunk_len);
387 uint32_t smb2cli_conn_cc_max_chunks(struct smbXcli_conn *conn);
388 void smb2cli_conn_set_cc_max_chunks(struct smbXcli_conn *conn,
389                                     uint32_t max_chunks);
390 void smb2cli_conn_set_mid(struct smbXcli_conn *conn, uint64_t mid);
391 uint64_t smb2cli_conn_get_mid(struct smbXcli_conn *conn);
392
393 struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
394                                       struct tevent_context *ev,
395                                       struct smbXcli_conn *conn,
396                                       uint16_t cmd,
397                                       uint32_t additional_flags,
398                                       uint32_t clear_flags,
399                                       uint32_t timeout_msec,
400                                       struct smbXcli_tcon *tcon,
401                                       struct smbXcli_session *session,
402                                       const uint8_t *fixed,
403                                       uint16_t fixed_len,
404                                       const uint8_t *dyn,
405                                       uint32_t dyn_len,
406                                       uint32_t max_dyn_len);
407 void smb2cli_req_set_notify_async(struct tevent_req *req);
408 NTSTATUS smb2cli_req_compound_submit(struct tevent_req **reqs,
409                                      int num_reqs);
410 void smb2cli_req_set_credit_charge(struct tevent_req *req, uint16_t charge);
411
412 struct smb2cli_req_expected_response {
413         NTSTATUS status;
414         uint16_t body_size;
415 };
416
417 struct tevent_req *smb2cli_req_send(TALLOC_CTX *mem_ctx,
418                                     struct tevent_context *ev,
419                                     struct smbXcli_conn *conn,
420                                     uint16_t cmd,
421                                     uint32_t additional_flags,
422                                     uint32_t clear_flags,
423                                     uint32_t timeout_msec,
424                                     struct smbXcli_tcon *tcon,
425                                     struct smbXcli_session *session,
426                                     const uint8_t *fixed,
427                                     uint16_t fixed_len,
428                                     const uint8_t *dyn,
429                                     uint32_t dyn_len,
430                                     uint32_t max_dyn_len);
431 NTSTATUS smb2cli_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
432                           struct iovec **piov,
433                           const struct smb2cli_req_expected_response *expected,
434                           size_t num_expected);
435
436 /*
437  * This expects an iov[3] array, that is filled with references to
438  * the buffers used for the sending the requests into the socket.
439  *
440  * This can only be called after smb2cli_req_recv(subreq) before
441  * the TALLOC_FREE(subreq).
442  */
443 NTSTATUS smb2cli_req_get_sent_iov(struct tevent_req *req,
444                                   struct iovec *sent_iov);
445
446 struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx,
447                                         struct tevent_context *ev,
448                                         struct smbXcli_conn *conn,
449                                         uint32_t timeout_msec,
450                                         enum protocol_types min_protocol,
451                                         enum protocol_types max_protocol,
452                                         uint16_t max_credits);
453 NTSTATUS smbXcli_negprot_recv(struct tevent_req *req);
454 NTSTATUS smbXcli_negprot(struct smbXcli_conn *conn,
455                          uint32_t timeout_msec,
456                          enum protocol_types min_protocol,
457                          enum protocol_types max_protocol);
458
459 struct tevent_req *smb2cli_validate_negotiate_info_send(TALLOC_CTX *mem_ctx,
460                                                 struct tevent_context *ev,
461                                                 struct smbXcli_conn *conn,
462                                                 uint32_t timeout_msec,
463                                                 struct smbXcli_session *session,
464                                                 struct smbXcli_tcon *tcon);
465 NTSTATUS smb2cli_validate_negotiate_info_recv(struct tevent_req *req);
466
467 struct smbXcli_session *smbXcli_session_create(TALLOC_CTX *mem_ctx,
468                                                struct smbXcli_conn *conn);
469 struct smbXcli_session *smbXcli_session_shallow_copy(TALLOC_CTX *mem_ctx,
470                                                struct smbXcli_session *src);
471 bool smbXcli_session_is_guest(struct smbXcli_session *session);
472 bool smbXcli_session_is_authenticated(struct smbXcli_session *session);
473 NTSTATUS smb2cli_session_signing_key(struct smbXcli_session *session,
474                                      TALLOC_CTX *mem_ctx,
475                                      DATA_BLOB *key);
476 NTSTATUS smb2cli_session_encryption_key(struct smbXcli_session *session,
477                                         TALLOC_CTX *mem_ctx,
478                                         DATA_BLOB *key);
479 NTSTATUS smb2cli_session_decryption_key(struct smbXcli_session *session,
480                                         TALLOC_CTX *mem_ctx,
481                                         DATA_BLOB *key);
482 NTSTATUS smbXcli_session_application_key(struct smbXcli_session *session,
483                                          TALLOC_CTX *mem_ctx,
484                                          DATA_BLOB *key);
485 void smbXcli_session_set_disconnect_expired(struct smbXcli_session *session);
486 uint16_t smb1cli_session_current_id(struct smbXcli_session* session);
487 void smb1cli_session_set_id(struct smbXcli_session* session,
488                             uint16_t session_id);
489 void smb1cli_session_set_action(struct smbXcli_session *session,
490                                 uint16_t action);
491 NTSTATUS smb1cli_session_set_session_key(struct smbXcli_session *session,
492                                          const DATA_BLOB _session_key);
493 NTSTATUS smb1cli_session_protect_session_key(struct smbXcli_session *session);
494 uint8_t smb2cli_session_security_mode(struct smbXcli_session *session);
495 uint64_t smb2cli_session_current_id(struct smbXcli_session *session);
496 uint16_t smb2cli_session_get_flags(struct smbXcli_session *session);
497 void smb2cli_session_set_id_and_flags(struct smbXcli_session *session,
498                                       uint64_t session_id,
499                                       uint16_t session_flags);
500 void smb2cli_session_increment_channel_sequence(struct smbXcli_session *session);
501 uint16_t smb2cli_session_reset_channel_sequence(struct smbXcli_session *session,
502                                                 uint16_t channel_sequence);
503 uint16_t smb2cli_session_current_channel_sequence(struct smbXcli_session *session);
504 void smb2cli_session_start_replay(struct smbXcli_session *session);
505 void smb2cli_session_stop_replay(struct smbXcli_session *session);
506 void smb2cli_session_require_signed_response(struct smbXcli_session *session,
507                                              bool require_signed_response);
508 NTSTATUS smb2cli_session_update_preauth(struct smbXcli_session *session,
509                                         const struct iovec *iov);
510 NTSTATUS smb2cli_session_set_session_key(struct smbXcli_session *session,
511                                          const DATA_BLOB session_key,
512                                          const struct iovec *recv_iov);
513 NTSTATUS smb2cli_session_create_channel(TALLOC_CTX *mem_ctx,
514                                         struct smbXcli_session *session1,
515                                         struct smbXcli_conn *conn,
516                                         struct smbXcli_session **_session2);
517 NTSTATUS smb2cli_session_set_channel_key(struct smbXcli_session *session,
518                                          const DATA_BLOB channel_key,
519                                          const struct iovec *recv_iov);
520 NTSTATUS smb2cli_session_encryption_on(struct smbXcli_session *session);
521
522 struct smbXcli_tcon *smbXcli_tcon_create(TALLOC_CTX *mem_ctx);
523 struct smbXcli_tcon *smbXcli_tcon_copy(TALLOC_CTX *mem_ctx,
524                                 const struct smbXcli_tcon *tcon_in);
525 void smbXcli_tcon_set_fs_attributes(struct smbXcli_tcon *tcon,
526                                     uint32_t fs_attributes);
527 uint32_t smbXcli_tcon_get_fs_attributes(struct smbXcli_tcon *tcon);
528 bool smbXcli_tcon_is_dfs_share(struct smbXcli_tcon *tcon);
529 uint16_t smb1cli_tcon_current_id(struct smbXcli_tcon *tcon);
530 void smb1cli_tcon_set_id(struct smbXcli_tcon *tcon, uint16_t tcon_id);
531 bool smb1cli_tcon_set_values(struct smbXcli_tcon *tcon,
532                              uint16_t tcon_id,
533                              uint16_t optional_support,
534                              uint32_t maximal_access,
535                              uint32_t guest_maximal_access,
536                              const char *service,
537                              const char *fs_type);
538 uint32_t smb2cli_tcon_current_id(struct smbXcli_tcon *tcon);
539 void smb2cli_tcon_set_id(struct smbXcli_tcon *tcon, uint32_t tcon_id);
540 uint32_t smb2cli_tcon_capabilities(struct smbXcli_tcon *tcon);
541 uint32_t smb2cli_tcon_flags(struct smbXcli_tcon *tcon);
542 void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
543                              struct smbXcli_session *session,
544                              uint32_t tcon_id,
545                              uint8_t type,
546                              uint32_t flags,
547                              uint32_t capabilities,
548                              uint32_t maximal_access);
549 void smb2cli_tcon_should_sign(struct smbXcli_tcon *tcon,
550                               bool should_sign);
551 bool smb2cli_tcon_is_signing_on(struct smbXcli_tcon *tcon);
552 void smb2cli_tcon_should_encrypt(struct smbXcli_tcon *tcon,
553                                  bool should_encrypt);
554 bool smb2cli_tcon_is_encryption_on(struct smbXcli_tcon *tcon);
555
556 struct tevent_req *smb2cli_session_setup_send(TALLOC_CTX *mem_ctx,
557                                 struct tevent_context *ev,
558                                 struct smbXcli_conn *conn,
559                                 uint32_t timeout_msec,
560                                 struct smbXcli_session *session,
561                                 uint8_t in_flags,
562                                 uint32_t in_capabilities,
563                                 uint32_t in_channel,
564                                 uint64_t in_previous_session_id,
565                                 const DATA_BLOB *in_security_buffer);
566 NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
567                                     TALLOC_CTX *mem_ctx,
568                                     struct iovec **recv_iov,
569                                     DATA_BLOB *out_security_buffer);
570
571 struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
572                                        struct tevent_context *ev,
573                                        struct smbXcli_conn *conn,
574                                        uint32_t timeout_msec,
575                                        struct smbXcli_session *session);
576 NTSTATUS smb2cli_logoff_recv(struct tevent_req *req);
577 NTSTATUS smb2cli_logoff(struct smbXcli_conn *conn,
578                         uint32_t timeout_msec,
579                         struct smbXcli_session *session);
580
581 struct tevent_req *smb2cli_tcon_send(TALLOC_CTX *mem_ctx,
582                                      struct tevent_context *ev,
583                                      struct smbXcli_conn *conn,
584                                      uint32_t timeout_msec,
585                                      struct smbXcli_session *session,
586                                      struct smbXcli_tcon *tcon,
587                                      uint16_t flags,
588                                      const char *unc);
589 NTSTATUS smb2cli_tcon_recv(struct tevent_req *req);
590 NTSTATUS smb2cli_tcon(struct smbXcli_conn *conn,
591                       uint32_t timeout_msec,
592                       struct smbXcli_session *session,
593                       struct smbXcli_tcon *tcon,
594                       uint16_t flags,
595                       const char *unc);
596
597 struct tevent_req *smb2cli_tdis_send(TALLOC_CTX *mem_ctx,
598                                      struct tevent_context *ev,
599                                      struct smbXcli_conn *conn,
600                                      uint32_t timeout_msec,
601                                      struct smbXcli_session *session,
602                                      struct smbXcli_tcon *tcon);
603 NTSTATUS smb2cli_tdis_recv(struct tevent_req *req);
604 NTSTATUS smb2cli_tdis(struct smbXcli_conn *conn,
605                       uint32_t timeout_msec,
606                       struct smbXcli_session *session,
607                       struct smbXcli_tcon *tcon);
608
609 struct tevent_req *smb2cli_create_send(
610         TALLOC_CTX *mem_ctx,
611         struct tevent_context *ev,
612         struct smbXcli_conn *conn,
613         uint32_t timeout_msec,
614         struct smbXcli_session *session,
615         struct smbXcli_tcon *tcon,
616         const char *filename,
617         uint8_t  oplock_level,          /* SMB2_OPLOCK_LEVEL_* */
618         uint32_t impersonation_level,   /* SMB2_IMPERSONATION_* */
619         uint32_t desired_access,
620         uint32_t file_attributes,
621         uint32_t share_access,
622         uint32_t create_disposition,
623         uint32_t create_options,
624         struct smb2_create_blobs *blobs);
625 NTSTATUS smb2cli_create_recv(struct tevent_req *req,
626                              uint64_t *fid_persistent,
627                              uint64_t *fid_volatile,
628                              struct smb_create_returns *cr,
629                              TALLOC_CTX *mem_ctx,
630                              struct smb2_create_blobs *blobs);
631 NTSTATUS smb2cli_create(struct smbXcli_conn *conn,
632                         uint32_t timeout_msec,
633                         struct smbXcli_session *session,
634                         struct smbXcli_tcon *tcon,
635                         const char *filename,
636                         uint8_t  oplock_level,       /* SMB2_OPLOCK_LEVEL_* */
637                         uint32_t impersonation_level, /* SMB2_IMPERSONATION_* */
638                         uint32_t desired_access,
639                         uint32_t file_attributes,
640                         uint32_t share_access,
641                         uint32_t create_disposition,
642                         uint32_t create_options,
643                         struct smb2_create_blobs *blobs,
644                         uint64_t *fid_persistent,
645                         uint64_t *fid_volatile,
646                         struct smb_create_returns *cr,
647                         TALLOC_CTX *mem_ctx,
648                         struct smb2_create_blobs *ret_blobs);
649
650 struct tevent_req *smb2cli_close_send(TALLOC_CTX *mem_ctx,
651                                       struct tevent_context *ev,
652                                       struct smbXcli_conn *conn,
653                                       uint32_t timeout_msec,
654                                       struct smbXcli_session *session,
655                                       struct smbXcli_tcon *tcon,
656                                       uint16_t flags,
657                                       uint64_t fid_persistent,
658                                       uint64_t fid_volatile);
659 NTSTATUS smb2cli_close_recv(struct tevent_req *req);
660 NTSTATUS smb2cli_close(struct smbXcli_conn *conn,
661                        uint32_t timeout_msec,
662                        struct smbXcli_session *session,
663                        struct smbXcli_tcon *tcon,
664                        uint16_t flags,
665                        uint64_t fid_persistent,
666                        uint64_t fid_volatile);
667
668 struct tevent_req *smb2cli_read_send(TALLOC_CTX *mem_ctx,
669                                      struct tevent_context *ev,
670                                      struct smbXcli_conn *conn,
671                                      uint32_t timeout_msec,
672                                      struct smbXcli_session *session,
673                                      struct smbXcli_tcon *tcon,
674                                      uint32_t length,
675                                      uint64_t offset,
676                                      uint64_t fid_persistent,
677                                      uint64_t fid_volatile,
678                                      uint64_t minimum_count,
679                                      uint64_t remaining_bytes);
680 NTSTATUS smb2cli_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
681                            uint8_t **data, uint32_t *data_length);
682 NTSTATUS smb2cli_read(struct smbXcli_conn *conn,
683                       uint32_t timeout_msec,
684                       struct smbXcli_session *session,
685                       struct smbXcli_tcon *tcon,
686                       uint32_t length,
687                       uint64_t offset,
688                       uint64_t fid_persistent,
689                       uint64_t fid_volatile,
690                       uint64_t minimum_count,
691                       uint64_t remaining_bytes,
692                       TALLOC_CTX *mem_ctx,
693                       uint8_t **data,
694                       uint32_t *data_length);
695
696 struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
697                                       struct tevent_context *ev,
698                                       struct smbXcli_conn *conn,
699                                       uint32_t timeout_msec,
700                                       struct smbXcli_session *session,
701                                       struct smbXcli_tcon *tcon,
702                                       uint32_t length,
703                                       uint64_t offset,
704                                       uint64_t fid_persistent,
705                                       uint64_t fid_volatile,
706                                       uint32_t remaining_bytes,
707                                       uint32_t flags,
708                                       const uint8_t *data);
709 NTSTATUS smb2cli_write_recv(struct tevent_req *req,
710                         uint32_t *written);
711 NTSTATUS smb2cli_write(struct smbXcli_conn *conn,
712                        uint32_t timeout_msec,
713                        struct smbXcli_session *session,
714                        struct smbXcli_tcon *tcon,
715                        uint32_t length,
716                        uint64_t offset,
717                        uint64_t fid_persistent,
718                        uint64_t fid_volatile,
719                        uint32_t remaining_bytes,
720                        uint32_t flags,
721                        const uint8_t *data,
722                        uint32_t *written);
723
724 struct tevent_req *smb2cli_flush_send(TALLOC_CTX *mem_ctx,
725                                       struct tevent_context *ev,
726                                       struct smbXcli_conn *conn,
727                                       uint32_t timeout_msec,
728                                       struct smbXcli_session *session,
729                                       struct smbXcli_tcon *tcon,
730                                       uint64_t fid_persistent,
731                                       uint64_t fid_volatile);
732 NTSTATUS smb2cli_flush_recv(struct tevent_req *req);
733 NTSTATUS smb2cli_flush(struct smbXcli_conn *conn,
734                        uint32_t timeout_msec,
735                        struct smbXcli_session *session,
736                        struct smbXcli_tcon *tcon,
737                        uint64_t fid_persistent,
738                        uint64_t fid_volatile);
739
740 struct tevent_req *smb2cli_set_info_send(TALLOC_CTX *mem_ctx,
741                                          struct tevent_context *ev,
742                                          struct smbXcli_conn *conn,
743                                          uint32_t timeout_msec,
744                                          struct smbXcli_session *session,
745                                          struct smbXcli_tcon *tcon,
746                                          uint8_t in_info_type,
747                                          uint8_t in_file_info_class,
748                                          const DATA_BLOB *in_input_buffer,
749                                          uint32_t in_additional_info,
750                                          uint64_t in_fid_persistent,
751                                          uint64_t in_fid_volatile);
752 NTSTATUS smb2cli_set_info_recv(struct tevent_req *req);
753 NTSTATUS smb2cli_set_info(struct smbXcli_conn *conn,
754                           uint32_t timeout_msec,
755                           struct smbXcli_session *session,
756                           struct smbXcli_tcon *tcon,
757                           uint8_t in_info_type,
758                           uint8_t in_file_info_class,
759                           const DATA_BLOB *in_input_buffer,
760                           uint32_t in_additional_info,
761                           uint64_t in_fid_persistent,
762                           uint64_t in_fid_volatile);
763
764 struct tevent_req *smb2cli_query_info_send(TALLOC_CTX *mem_ctx,
765                                            struct tevent_context *ev,
766                                            struct smbXcli_conn *conn,
767                                            uint32_t timeout_msec,
768                                            struct smbXcli_session *session,
769                                            struct smbXcli_tcon *tcon,
770                                            uint8_t in_info_type,
771                                            uint8_t in_file_info_class,
772                                            uint32_t in_max_output_length,
773                                            const DATA_BLOB *in_input_buffer,
774                                            uint32_t in_additional_info,
775                                            uint32_t in_flags,
776                                            uint64_t in_fid_persistent,
777                                            uint64_t in_fid_volatile);
778 NTSTATUS smb2cli_query_info_recv(struct tevent_req *req,
779                                  TALLOC_CTX *mem_ctx,
780                                  DATA_BLOB *out_output_buffer);
781 NTSTATUS smb2cli_query_info(struct smbXcli_conn *conn,
782                             uint32_t timeout_msec,
783                             struct smbXcli_session *session,
784                             struct smbXcli_tcon *tcon,
785                             uint8_t in_info_type,
786                             uint8_t in_file_info_class,
787                             uint32_t in_max_output_length,
788                             const DATA_BLOB *in_input_buffer,
789                             uint32_t in_additional_info,
790                             uint32_t in_flags,
791                             uint64_t in_fid_persistent,
792                             uint64_t in_fid_volatile,
793                             TALLOC_CTX *mem_ctx,
794                             DATA_BLOB *out_output_buffer);
795
796 struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
797                                                 struct tevent_context *ev,
798                                                 struct smbXcli_conn *conn,
799                                                 uint32_t timeout_msec,
800                                                 struct smbXcli_session *session,
801                                                 struct smbXcli_tcon *tcon,
802                                                 uint8_t level,
803                                                 uint8_t flags,
804                                                 uint32_t file_index,
805                                                 uint64_t fid_persistent,
806                                                 uint64_t fid_volatile,
807                                                 const char *mask,
808                                                 uint32_t outbuf_len);
809 NTSTATUS smb2cli_query_directory_recv(struct tevent_req *req,
810                                       TALLOC_CTX *mem_ctx,
811                                       uint8_t **data,
812                                       uint32_t *data_length);
813 NTSTATUS smb2cli_query_directory(struct smbXcli_conn *conn,
814                                  uint32_t timeout_msec,
815                                  struct smbXcli_session *session,
816                                  struct smbXcli_tcon *tcon,
817                                  uint8_t level,
818                                  uint8_t flags,
819                                  uint32_t file_index,
820                                  uint64_t fid_persistent,
821                                  uint64_t fid_volatile,
822                                  const char *mask,
823                                  uint32_t outbuf_len,
824                                  TALLOC_CTX *mem_ctx,
825                                  uint8_t **data,
826                                  uint32_t *data_length);
827
828 struct tevent_req *smb2cli_notify_send(TALLOC_CTX *mem_ctx,
829                                        struct tevent_context *ev,
830                                        struct smbXcli_conn *conn,
831                                        uint32_t timeout_msec,
832                                        struct smbXcli_session *session,
833                                        struct smbXcli_tcon *tcon,
834                                        uint32_t output_buffer_length,
835                                        uint64_t fid_persistent,
836                                        uint64_t fid_volatile,
837                                        uint32_t completion_filter,
838                                        bool recursive);
839 NTSTATUS smb2cli_notify_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
840                              uint8_t **data, uint32_t *data_length);
841 NTSTATUS smb2cli_notify(struct smbXcli_conn *conn,
842                         uint32_t timeout_msec,
843                         struct smbXcli_session *session,
844                         struct smbXcli_tcon *tcon,
845                         uint32_t output_buffer_length,
846                         uint64_t fid_persistent,
847                         uint64_t fid_volatile,
848                         uint32_t completion_filter,
849                         bool recursive,
850                         TALLOC_CTX *mem_ctx,
851                         uint8_t **data,
852                         uint32_t *data_length);
853
854 struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
855                                       struct tevent_context *ev,
856                                       struct smbXcli_conn *conn,
857                                       uint32_t timeout_msec,
858                                       struct smbXcli_session *session,
859                                       struct smbXcli_tcon *tcon,
860                                       uint64_t in_fid_persistent,
861                                       uint64_t in_fid_volatile,
862                                       uint32_t in_ctl_code,
863                                       uint32_t in_max_input_length,
864                                       const DATA_BLOB *in_input_buffer,
865                                       uint32_t in_max_output_length,
866                                       const DATA_BLOB *in_output_buffer,
867                                       uint32_t in_flags);
868 NTSTATUS smb2cli_ioctl_recv(struct tevent_req *req,
869                             TALLOC_CTX *mem_ctx,
870                             DATA_BLOB *out_input_buffer,
871                             DATA_BLOB *out_output_buffer);
872 NTSTATUS smb2cli_ioctl(struct smbXcli_conn *conn,
873                        uint32_t timeout_msec,
874                        struct smbXcli_session *session,
875                        struct smbXcli_tcon *tcon,
876                        uint64_t in_fid_persistent,
877                        uint64_t in_fid_volatile,
878                        uint32_t in_ctl_code,
879                        uint32_t in_max_input_length,
880                        const DATA_BLOB *in_input_buffer,
881                        uint32_t in_max_output_length,
882                        const DATA_BLOB *in_output_buffer,
883                        uint32_t in_flags,
884                        TALLOC_CTX *mem_ctx,
885                        DATA_BLOB *out_input_buffer,
886                        DATA_BLOB *out_output_buffer);
887
888 struct tevent_req *smb2cli_echo_send(TALLOC_CTX *mem_ctx,
889                                      struct tevent_context *ev,
890                                      struct smbXcli_conn *conn,
891                                      uint32_t timeout_msec);
892 NTSTATUS smb2cli_echo_recv(struct tevent_req *req);
893 NTSTATUS smb2cli_echo(struct smbXcli_conn *conn,
894                       uint32_t timeout_msec);
895
896 #endif /* _SMBXCLI_BASE_H_ */