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_ */ 897