2 Unix SMB/CIFS implementation.
3 Infrastructure for async SMB client requests
4 Copyright (C) Volker Lendecke 2008
5 Copyright (C) Stefan Metzmacher 2011
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.
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.
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/>.
21 #ifndef _SMBXCLI_BASE_H_
22 #define _SMBXCLI_BASE_H_
24 #define SMB_SUICIDE_PACKET 0x74697865
27 struct smbXcli_session
;
29 struct smb_trans_enc_state
;
32 struct smb2_create_blobs
;
33 struct smb_create_returns
;
35 struct smbXcli_conn
*smbXcli_conn_create(TALLOC_CTX
*mem_ctx
,
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
);
43 bool smbXcli_conn_is_connected(struct smbXcli_conn
*conn
);
44 void smbXcli_conn_disconnect(struct smbXcli_conn
*conn
, NTSTATUS status
);
46 bool smbXcli_conn_has_async_calls(struct smbXcli_conn
*conn
);
48 bool smbXcli_conn_dfs_supported(struct smbXcli_conn
*conn
);
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
);
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
);
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
,
69 struct tevent_req
*smbXcli_conn_samba_suicide_send(TALLOC_CTX
*mem_ctx
,
70 struct tevent_context
*ev
,
71 struct smbXcli_conn
*conn
,
73 NTSTATUS
smbXcli_conn_samba_suicide_recv(struct tevent_req
*req
);
74 NTSTATUS
smbXcli_conn_samba_suicide(struct smbXcli_conn
*conn
,
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
);
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
);
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
);
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
);
104 bool smb1cli_is_andx_req(uint8_t cmd
);
105 size_t smb1cli_req_wct_ofs(struct tevent_req
**reqs
, int num_reqs
);
107 uint16_t smb1cli_req_mid(struct tevent_req
*req
);
108 void smb1cli_req_set_mid(struct tevent_req
*req
, uint16_t mid
);
110 uint32_t smb1cli_req_seqnum(struct tevent_req
*req
);
111 void smb1cli_req_set_seqnum(struct tevent_req
*req
, uint32_t seqnum
);
113 struct smb1cli_req_expected_response
{
118 struct tevent_req
*smb1cli_req_create(TALLOC_CTX
*mem_ctx
,
119 struct tevent_context
*ev
,
120 struct smbXcli_conn
*conn
,
122 uint8_t additional_flags
,
124 uint16_t additional_flags2
,
125 uint16_t clear_flags2
,
126 uint32_t timeout_msec
,
128 struct smbXcli_tcon
*tcon
,
129 struct smbXcli_session
*session
,
130 uint8_t wct
, uint16_t *vwv
,
132 struct iovec
*bytes_iov
);
133 NTSTATUS
smb1cli_req_chain_submit(struct tevent_req
**reqs
, int num_reqs
);
135 struct tevent_req
*smb1cli_req_send(TALLOC_CTX
*mem_ctx
,
136 struct tevent_context
*ev
,
137 struct smbXcli_conn
*conn
,
139 uint8_t additional_flags
,
141 uint16_t additional_flags2
,
142 uint16_t clear_flags2
,
143 uint32_t timeout_msec
,
145 struct smbXcli_tcon
*tcon
,
146 struct smbXcli_session
*session
,
147 uint8_t wct
, uint16_t *vwv
,
149 const uint8_t *bytes
);
150 NTSTATUS
smb1cli_req_recv(struct tevent_req
*req
,
156 uint32_t *pvwv_offset
,
157 uint32_t *pnum_bytes
,
159 uint32_t *pbytes_offset
,
161 const struct smb1cli_req_expected_response
*expected
,
162 size_t num_expected
);
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
,
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
,
181 uint8_t **param
, uint32_t min_param
,
183 uint8_t **data
, uint32_t min_data
,
185 NTSTATUS
smb1cli_trans(TALLOC_CTX
*mem_ctx
, struct smbXcli_conn
*conn
,
187 uint8_t additional_flags
, uint8_t clear_flags
,
188 uint16_t additional_flags2
, uint16_t clear_flags2
,
189 uint32_t timeout_msec
,
191 struct smbXcli_tcon
*tcon
,
192 struct smbXcli_session
*session
,
193 const char *pipe_name
, uint16_t fid
, uint16_t function
,
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
);
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
,
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
);
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
,
218 struct smbXcli_session
*session
,
219 uint16_t in_buf_size
,
222 uint32_t in_sess_key
,
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
,
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
,
237 struct smbXcli_session
*session
,
238 uint16_t in_buf_size
,
241 uint32_t in_sess_key
,
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
,
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
,
261 struct smbXcli_session
*session
,
262 uint16_t in_buf_size
,
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
,
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
);
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
,
283 struct smbXcli_tcon
*tcon
,
284 struct smbXcli_session
*session
,
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
,
300 struct smbXcli_tcon
*tcon
,
301 struct smbXcli_session
*session
,
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
,
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
,
319 struct smbXcli_tcon
*tcon
,
320 struct smbXcli_session
*session
,
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
,
327 struct smbXcli_tcon
*tcon
,
328 struct smbXcli_session
*session
,
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
,
336 struct smbXcli_tcon
*tcon
,
337 struct smbXcli_session
*session
,
343 NTSTATUS
smb1cli_writex_recv(struct tevent_req
*req
,
345 uint16_t *pavailable
);
346 NTSTATUS
smb1cli_writex(struct smbXcli_conn
*conn
,
347 uint32_t timeout_msec
,
349 struct smbXcli_tcon
*tcon
,
350 struct smbXcli_session
*session
,
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
,
363 struct smbXcli_tcon
*tcon
,
364 struct smbXcli_session
*session
,
368 NTSTATUS
smb1cli_readx_recv(struct tevent_req
*req
,
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
,
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
);
393 struct tevent_req
*smb2cli_req_create(TALLOC_CTX
*mem_ctx
,
394 struct tevent_context
*ev
,
395 struct smbXcli_conn
*conn
,
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
,
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
,
410 void smb2cli_req_set_credit_charge(struct tevent_req
*req
, uint16_t charge
);
412 struct smb2cli_req_expected_response
{
417 struct tevent_req
*smb2cli_req_send(TALLOC_CTX
*mem_ctx
,
418 struct tevent_context
*ev
,
419 struct smbXcli_conn
*conn
,
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
,
430 uint32_t max_dyn_len
);
431 NTSTATUS
smb2cli_req_recv(struct tevent_req
*req
, TALLOC_CTX
*mem_ctx
,
433 const struct smb2cli_req_expected_response
*expected
,
434 size_t num_expected
);
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.
440 * This can only be called after smb2cli_req_recv(subreq) before
441 * the TALLOC_FREE(subreq).
443 NTSTATUS
smb2cli_req_get_sent_iov(struct tevent_req
*req
,
444 struct iovec
*sent_iov
);
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
);
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
);
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
,
476 NTSTATUS
smb2cli_session_encryption_key(struct smbXcli_session
*session
,
479 NTSTATUS
smb2cli_session_decryption_key(struct smbXcli_session
*session
,
482 NTSTATUS
smbXcli_session_application_key(struct smbXcli_session
*session
,
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
,
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
,
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
);
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
,
533 uint16_t optional_support
,
534 uint32_t maximal_access
,
535 uint32_t guest_maximal_access
,
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
,
547 uint32_t capabilities
,
548 uint32_t maximal_access
);
549 void smb2cli_tcon_should_sign(struct smbXcli_tcon
*tcon
,
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
);
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
,
562 uint32_t in_capabilities
,
564 uint64_t in_previous_session_id
,
565 const DATA_BLOB
*in_security_buffer
);
566 NTSTATUS
smb2cli_session_setup_recv(struct tevent_req
*req
,
568 struct iovec
**recv_iov
,
569 DATA_BLOB
*out_security_buffer
);
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
);
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
,
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
,
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
);
609 struct tevent_req
*smb2cli_create_send(
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
,
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
,
648 struct smb2_create_blobs
*ret_blobs
);
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
,
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
,
665 uint64_t fid_persistent
,
666 uint64_t fid_volatile
);
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
,
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
,
688 uint64_t fid_persistent
,
689 uint64_t fid_volatile
,
690 uint64_t minimum_count
,
691 uint64_t remaining_bytes
,
694 uint32_t *data_length
);
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
,
704 uint64_t fid_persistent
,
705 uint64_t fid_volatile
,
706 uint32_t remaining_bytes
,
708 const uint8_t *data
);
709 NTSTATUS
smb2cli_write_recv(struct tevent_req
*req
,
711 NTSTATUS
smb2cli_write(struct smbXcli_conn
*conn
,
712 uint32_t timeout_msec
,
713 struct smbXcli_session
*session
,
714 struct smbXcli_tcon
*tcon
,
717 uint64_t fid_persistent
,
718 uint64_t fid_volatile
,
719 uint32_t remaining_bytes
,
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
);
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
);
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
,
776 uint64_t in_fid_persistent
,
777 uint64_t in_fid_volatile
);
778 NTSTATUS
smb2cli_query_info_recv(struct tevent_req
*req
,
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
,
791 uint64_t in_fid_persistent
,
792 uint64_t in_fid_volatile
,
794 DATA_BLOB
*out_output_buffer
);
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
,
805 uint64_t fid_persistent
,
806 uint64_t fid_volatile
,
808 uint32_t outbuf_len
);
809 NTSTATUS
smb2cli_query_directory_recv(struct tevent_req
*req
,
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
,
820 uint64_t fid_persistent
,
821 uint64_t fid_volatile
,
826 uint32_t *data_length
);
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
,
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
,
852 uint32_t *data_length
);
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
,
868 NTSTATUS
smb2cli_ioctl_recv(struct tevent_req
*req
,
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
,
885 DATA_BLOB
*out_input_buffer
,
886 DATA_BLOB
*out_output_buffer
);
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
);
896 #endif /* _SMBXCLI_BASE_H_ */