libcli/smb: pass down smbXcli_session to smb1cli_req_create/send() and smb1cli_trans*
[Samba/gebeck_regimport.git] / libcli / smb / smbXcli_base.h
blob9d4847c7d6e1eafb8395e997e169ec0298599931
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
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 struct smbXcli_conn;
25 struct smbXcli_session;
26 struct smb_trans_enc_state;
27 struct GUID;
29 struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
30 int fd,
31 const char *remote_name,
32 enum smb_signing_setting signing_state,
33 uint32_t smb1_capabilities,
34 struct GUID *client_guid,
35 uint32_t smb2_capabilities);
37 bool smbXcli_conn_is_connected(struct smbXcli_conn *conn);
38 void smbXcli_conn_disconnect(struct smbXcli_conn *conn, NTSTATUS status);
40 bool smbXcli_conn_has_async_calls(struct smbXcli_conn *conn);
42 enum protocol_types smbXcli_conn_protocol(struct smbXcli_conn *conn);
43 bool smbXcli_conn_use_unicode(struct smbXcli_conn *conn);
45 void smbXcli_conn_set_sockopt(struct smbXcli_conn *conn, const char *options);
46 const struct sockaddr_storage *smbXcli_conn_local_sockaddr(struct smbXcli_conn *conn);
47 const struct sockaddr_storage *smbXcli_conn_remote_sockaddr(struct smbXcli_conn *conn);
48 const char *smbXcli_conn_remote_name(struct smbXcli_conn *conn);
50 uint16_t smbXcli_conn_max_requests(struct smbXcli_conn *conn);
51 NTTIME smbXcli_conn_server_system_time(struct smbXcli_conn *conn);
52 const DATA_BLOB *smbXcli_conn_server_gss_blob(struct smbXcli_conn *conn);
53 const struct GUID *smbXcli_conn_server_guid(struct smbXcli_conn *conn);
55 struct tevent_req *smbXcli_conn_samba_suicide_send(TALLOC_CTX *mem_ctx,
56 struct tevent_context *ev,
57 struct smbXcli_conn *conn,
58 uint8_t exitcode);
59 NTSTATUS smbXcli_conn_samba_suicide_recv(struct tevent_req *req);
60 NTSTATUS smbXcli_conn_samba_suicide(struct smbXcli_conn *conn,
61 uint8_t exitcode);
63 void smbXcli_req_unset_pending(struct tevent_req *req);
64 bool smbXcli_req_set_pending(struct tevent_req *req);
66 uint32_t smb1cli_conn_capabilities(struct smbXcli_conn *conn);
67 uint32_t smb1cli_conn_max_xmit(struct smbXcli_conn *conn);
68 uint32_t smb1cli_conn_server_session_key(struct smbXcli_conn *conn);
69 const uint8_t *smb1cli_conn_server_challenge(struct smbXcli_conn *conn);
70 uint16_t smb1cli_conn_server_security_mode(struct smbXcli_conn *conn);
71 bool smb1cli_conn_server_readbraw(struct smbXcli_conn *conn);
72 bool smb1cli_conn_server_writebraw(struct smbXcli_conn *conn);
73 bool smb1cli_conn_server_lockread(struct smbXcli_conn *conn);
74 bool smb1cli_conn_server_writeunlock(struct smbXcli_conn *conn);
75 int smb1cli_conn_server_time_zone(struct smbXcli_conn *conn);
77 bool smb1cli_conn_activate_signing(struct smbXcli_conn *conn,
78 const DATA_BLOB user_session_key,
79 const DATA_BLOB response);
80 bool smb1cli_conn_check_signing(struct smbXcli_conn *conn,
81 const uint8_t *buf, uint32_t seqnum);
82 bool smb1cli_conn_signing_is_active(struct smbXcli_conn *conn);
84 void smb1cli_conn_set_encryption(struct smbXcli_conn *conn,
85 struct smb_trans_enc_state *es);
86 bool smb1cli_conn_encryption_on(struct smbXcli_conn *conn);
88 bool smb1cli_is_andx_req(uint8_t cmd);
89 size_t smb1cli_req_wct_ofs(struct tevent_req **reqs, int num_reqs);
91 uint16_t smb1cli_req_mid(struct tevent_req *req);
92 void smb1cli_req_set_mid(struct tevent_req *req, uint16_t mid);
94 uint32_t smb1cli_req_seqnum(struct tevent_req *req);
95 void smb1cli_req_set_seqnum(struct tevent_req *req, uint32_t seqnum);
97 struct smb1cli_req_expected_response {
98 NTSTATUS status;
99 uint8_t wct;
102 struct tevent_req *smb1cli_req_create(TALLOC_CTX *mem_ctx,
103 struct tevent_context *ev,
104 struct smbXcli_conn *conn,
105 uint8_t smb_command,
106 uint8_t additional_flags,
107 uint8_t clear_flags,
108 uint16_t additional_flags2,
109 uint16_t clear_flags2,
110 uint32_t timeout_msec,
111 uint32_t pid,
112 uint16_t tid,
113 struct smbXcli_session *session,
114 uint8_t wct, uint16_t *vwv,
115 int iov_count,
116 struct iovec *bytes_iov);
117 NTSTATUS smb1cli_req_chain_submit(struct tevent_req **reqs, int num_reqs);
119 struct tevent_req *smb1cli_req_send(TALLOC_CTX *mem_ctx,
120 struct tevent_context *ev,
121 struct smbXcli_conn *conn,
122 uint8_t smb_command,
123 uint8_t additional_flags,
124 uint8_t clear_flags,
125 uint16_t additional_flags2,
126 uint16_t clear_flags2,
127 uint32_t timeout_msec,
128 uint32_t pid,
129 uint16_t tid,
130 struct smbXcli_session *session,
131 uint8_t wct, uint16_t *vwv,
132 uint32_t num_bytes,
133 const uint8_t *bytes);
134 NTSTATUS smb1cli_req_recv(struct tevent_req *req,
135 TALLOC_CTX *mem_ctx,
136 struct iovec **piov,
137 uint8_t **phdr,
138 uint8_t *pwct,
139 uint16_t **pvwv,
140 uint32_t *pvwv_offset,
141 uint32_t *pnum_bytes,
142 uint8_t **pbytes,
143 uint32_t *pbytes_offset,
144 uint8_t **pinbuf,
145 const struct smb1cli_req_expected_response *expected,
146 size_t num_expected);
148 struct tevent_req *smb1cli_trans_send(
149 TALLOC_CTX *mem_ctx, struct tevent_context *ev,
150 struct smbXcli_conn *conn, uint8_t cmd,
151 uint8_t additional_flags, uint8_t clear_flags,
152 uint16_t additional_flags2, uint16_t clear_flags2,
153 uint32_t timeout_msec,
154 uint32_t pid, uint16_t tid,
155 struct smbXcli_session *session,
156 const char *pipe_name, uint16_t fid, uint16_t function, int flags,
157 uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
158 uint8_t *param, uint32_t num_param, uint32_t max_param,
159 uint8_t *data, uint32_t num_data, uint32_t max_data);
160 NTSTATUS smb1cli_trans_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
161 uint16_t *recv_flags2,
162 uint16_t **setup, uint8_t min_setup,
163 uint8_t *num_setup,
164 uint8_t **param, uint32_t min_param,
165 uint32_t *num_param,
166 uint8_t **data, uint32_t min_data,
167 uint32_t *num_data);
168 NTSTATUS smb1cli_trans(TALLOC_CTX *mem_ctx, struct smbXcli_conn *conn,
169 uint8_t trans_cmd,
170 uint8_t additional_flags, uint8_t clear_flags,
171 uint16_t additional_flags2, uint16_t clear_flags2,
172 uint32_t timeout_msec,
173 uint32_t pid, uint16_t tid,
174 struct smbXcli_session *session,
175 const char *pipe_name, uint16_t fid, uint16_t function,
176 int flags,
177 uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
178 uint8_t *param, uint32_t num_param, uint32_t max_param,
179 uint8_t *data, uint32_t num_data, uint32_t max_data,
180 uint16_t *recv_flags2,
181 uint16_t **rsetup, uint8_t min_rsetup, uint8_t *num_rsetup,
182 uint8_t **rparam, uint32_t min_rparam, uint32_t *num_rparam,
183 uint8_t **rdata, uint32_t min_rdata, uint32_t *num_rdata);
185 uint32_t smb2cli_conn_server_capabilities(struct smbXcli_conn *conn);
186 uint16_t smb2cli_conn_server_security_mode(struct smbXcli_conn *conn);
187 uint32_t smb2cli_conn_max_trans_size(struct smbXcli_conn *conn);
188 uint32_t smb2cli_conn_max_read_size(struct smbXcli_conn *conn);
189 uint32_t smb2cli_conn_max_write_size(struct smbXcli_conn *conn);
190 void smb2cli_conn_set_max_credits(struct smbXcli_conn *conn,
191 uint16_t max_credits);
193 struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
194 struct tevent_context *ev,
195 struct smbXcli_conn *conn,
196 uint16_t cmd,
197 uint32_t additional_flags,
198 uint32_t clear_flags,
199 uint32_t timeout_msec,
200 uint32_t pid,
201 uint32_t tid,
202 struct smbXcli_session *session,
203 const uint8_t *fixed,
204 uint16_t fixed_len,
205 const uint8_t *dyn,
206 uint32_t dyn_len);
207 void smb2cli_req_set_notify_async(struct tevent_req *req);
208 NTSTATUS smb2cli_req_compound_submit(struct tevent_req **reqs,
209 int num_reqs);
210 void smb2cli_req_set_credit_charge(struct tevent_req *req, uint16_t charge);
212 struct smb2cli_req_expected_response {
213 NTSTATUS status;
214 uint16_t body_size;
217 struct tevent_req *smb2cli_req_send(TALLOC_CTX *mem_ctx,
218 struct tevent_context *ev,
219 struct smbXcli_conn *conn,
220 uint16_t cmd,
221 uint32_t additional_flags,
222 uint32_t clear_flags,
223 uint32_t timeout_msec,
224 uint32_t pid,
225 uint32_t tid,
226 struct smbXcli_session *session,
227 const uint8_t *fixed,
228 uint16_t fixed_len,
229 const uint8_t *dyn,
230 uint32_t dyn_len);
231 NTSTATUS smb2cli_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
232 struct iovec **piov,
233 const struct smb2cli_req_expected_response *expected,
234 size_t num_expected);
236 struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx,
237 struct tevent_context *ev,
238 struct smbXcli_conn *conn,
239 uint32_t timeout_msec,
240 enum protocol_types min_protocol,
241 enum protocol_types max_protocol);
242 NTSTATUS smbXcli_negprot_recv(struct tevent_req *req);
243 NTSTATUS smbXcli_negprot(struct smbXcli_conn *conn,
244 uint32_t timeout_msec,
245 enum protocol_types min_protocol,
246 enum protocol_types max_protocol);
248 struct smbXcli_session *smbXcli_session_create(TALLOC_CTX *mem_ctx,
249 struct smbXcli_conn *conn);
250 uint16_t smb1cli_session_current_id(struct smbXcli_session* session);
251 void smb1cli_session_set_id(struct smbXcli_session* session,
252 uint16_t session_id);
253 uint8_t smb2cli_session_security_mode(struct smbXcli_session *session);
254 uint64_t smb2cli_session_current_id(struct smbXcli_session *session);
255 uint16_t smb2cli_session_get_flags(struct smbXcli_session *session);
256 NTSTATUS smb2cli_session_application_key(struct smbXcli_session *session,
257 TALLOC_CTX *mem_ctx,
258 DATA_BLOB *key);
259 void smb2cli_session_set_id_and_flags(struct smbXcli_session *session,
260 uint64_t session_id,
261 uint16_t session_flags);
262 NTSTATUS smb2cli_session_set_session_key(struct smbXcli_session *session,
263 const DATA_BLOB session_key,
264 const struct iovec *recv_iov);
265 NTSTATUS smb2cli_session_create_channel(TALLOC_CTX *mem_ctx,
266 struct smbXcli_session *session1,
267 struct smbXcli_conn *conn,
268 struct smbXcli_session **_session2);
269 NTSTATUS smb2cli_session_set_channel_key(struct smbXcli_session *session,
270 const DATA_BLOB channel_key,
271 const struct iovec *recv_iov);
273 struct tevent_req *smb2cli_session_setup_send(TALLOC_CTX *mem_ctx,
274 struct tevent_context *ev,
275 struct smbXcli_conn *conn,
276 uint32_t timeout_msec,
277 struct smbXcli_session *session,
278 uint8_t in_flags,
279 uint32_t in_capabilities,
280 uint32_t in_channel,
281 uint64_t in_previous_session_id,
282 const DATA_BLOB *in_security_buffer);
283 NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
284 TALLOC_CTX *mem_ctx,
285 struct iovec **recv_iov,
286 DATA_BLOB *out_security_buffer);
288 struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
289 struct tevent_context *ev,
290 struct smbXcli_conn *conn,
291 uint32_t timeout_msec,
292 struct smbXcli_session *session);
293 NTSTATUS smb2cli_logoff_recv(struct tevent_req *req);
294 NTSTATUS smb2cli_logoff(struct smbXcli_conn *conn,
295 uint32_t timeout_msec,
296 struct smbXcli_session *session);
298 struct tevent_req *smb2cli_create_send(
299 TALLOC_CTX *mem_ctx,
300 struct tevent_context *ev,
301 struct smbXcli_conn *conn,
302 uint32_t timeout_msec,
303 struct smbXcli_session *session,
304 uint32_t tcon_id,
305 const char *filename,
306 uint8_t oplock_level, /* SMB2_OPLOCK_LEVEL_* */
307 uint32_t impersonation_level, /* SMB2_IMPERSONATION_* */
308 uint32_t desired_access,
309 uint32_t file_attributes,
310 uint32_t share_access,
311 uint32_t create_disposition,
312 uint32_t create_options,
313 struct smb2_create_blobs *blobs);
314 NTSTATUS smb2cli_create_recv(struct tevent_req *req,
315 uint64_t *fid_persistent,
316 uint64_t *fid_volatile);
317 NTSTATUS smb2cli_create(struct smbXcli_conn *conn,
318 uint32_t timeout_msec,
319 struct smbXcli_session *session,
320 uint32_t tcon_id,
321 const char *filename,
322 uint8_t oplock_level, /* SMB2_OPLOCK_LEVEL_* */
323 uint32_t impersonation_level, /* SMB2_IMPERSONATION_* */
324 uint32_t desired_access,
325 uint32_t file_attributes,
326 uint32_t share_access,
327 uint32_t create_disposition,
328 uint32_t create_options,
329 struct smb2_create_blobs *blobs,
330 uint64_t *fid_persistent,
331 uint64_t *fid_volatile);
333 struct tevent_req *smb2cli_close_send(TALLOC_CTX *mem_ctx,
334 struct tevent_context *ev,
335 struct smbXcli_conn *conn,
336 uint32_t timeout_msec,
337 struct smbXcli_session *session,
338 uint32_t tcon_id,
339 uint16_t flags,
340 uint64_t fid_persistent,
341 uint64_t fid_volatile);
342 NTSTATUS smb2cli_close_recv(struct tevent_req *req);
343 NTSTATUS smb2cli_close(struct smbXcli_conn *conn,
344 uint32_t timeout_msec,
345 struct smbXcli_session *session,
346 uint32_t tcon_id,
347 uint16_t flags,
348 uint64_t fid_persistent,
349 uint64_t fid_volatile);
351 struct tevent_req *smb2cli_read_send(TALLOC_CTX *mem_ctx,
352 struct tevent_context *ev,
353 struct smbXcli_conn *conn,
354 uint32_t timeout_msec,
355 struct smbXcli_session *session,
356 uint32_t tcon_id,
357 uint32_t length,
358 uint64_t offset,
359 uint64_t fid_persistent,
360 uint64_t fid_volatile,
361 uint64_t minimum_count,
362 uint64_t remaining_bytes);
363 NTSTATUS smb2cli_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
364 uint8_t **data, uint32_t *data_length);
365 NTSTATUS smb2cli_read(struct smbXcli_conn *conn,
366 uint32_t timeout_msec,
367 struct smbXcli_session *session,
368 uint32_t tcon_id,
369 uint32_t length,
370 uint64_t offset,
371 uint64_t fid_persistent,
372 uint64_t fid_volatile,
373 uint64_t minimum_count,
374 uint64_t remaining_bytes,
375 TALLOC_CTX *mem_ctx,
376 uint8_t **data,
377 uint32_t *data_length);
379 struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
380 struct tevent_context *ev,
381 struct smbXcli_conn *conn,
382 uint32_t timeout_msec,
383 struct smbXcli_session *session,
384 uint32_t tcon_id,
385 uint32_t length,
386 uint64_t offset,
387 uint64_t fid_persistent,
388 uint64_t fid_volatile,
389 uint32_t remaining_bytes,
390 uint32_t flags,
391 const uint8_t *data);
392 NTSTATUS smb2cli_write_recv(struct tevent_req *req);
393 NTSTATUS smb2cli_write(struct smbXcli_conn *conn,
394 uint32_t timeout_msec,
395 struct smbXcli_session *session,
396 uint32_t tcon_id,
397 uint32_t length,
398 uint64_t offset,
399 uint64_t fid_persistent,
400 uint64_t fid_volatile,
401 uint32_t remaining_bytes,
402 uint32_t flags,
403 const uint8_t *data);
405 struct tevent_req *smb2cli_flush_send(TALLOC_CTX *mem_ctx,
406 struct tevent_context *ev,
407 struct smbXcli_conn *conn,
408 uint32_t timeout_msec,
409 struct smbXcli_session *session,
410 uint32_t tcon_id,
411 uint64_t fid_persistent,
412 uint64_t fid_volatile);
413 NTSTATUS smb2cli_flush_recv(struct tevent_req *req);
414 NTSTATUS smb2cli_flush(struct smbXcli_conn *conn,
415 uint32_t timeout_msec,
416 struct smbXcli_session *session,
417 uint32_t tcon_id,
418 uint64_t fid_persistent,
419 uint64_t fid_volatile);
421 struct tevent_req *smb2cli_set_info_send(TALLOC_CTX *mem_ctx,
422 struct tevent_context *ev,
423 struct smbXcli_conn *conn,
424 uint32_t timeout_msec,
425 struct smbXcli_session *session,
426 uint32_t tcon_id,
427 uint8_t in_info_type,
428 uint8_t in_file_info_class,
429 const DATA_BLOB *in_input_buffer,
430 uint32_t in_additional_info,
431 uint64_t in_fid_persistent,
432 uint64_t in_fid_volatile);
433 NTSTATUS smb2cli_set_info_recv(struct tevent_req *req);
434 NTSTATUS smb2cli_set_info(struct smbXcli_conn *conn,
435 uint32_t timeout_msec,
436 struct smbXcli_session *session,
437 uint32_t tcon_id,
438 uint8_t in_info_type,
439 uint8_t in_file_info_class,
440 const DATA_BLOB *in_input_buffer,
441 uint32_t in_additional_info,
442 uint64_t in_fid_persistent,
443 uint64_t in_fid_volatile);
445 struct tevent_req *smb2cli_query_info_send(TALLOC_CTX *mem_ctx,
446 struct tevent_context *ev,
447 struct smbXcli_conn *conn,
448 uint32_t timeout_msec,
449 struct smbXcli_session *session,
450 uint32_t tcon_id,
451 uint8_t in_info_type,
452 uint8_t in_file_info_class,
453 uint32_t in_max_output_length,
454 const DATA_BLOB *in_input_buffer,
455 uint32_t in_additional_info,
456 uint32_t in_flags,
457 uint64_t in_fid_persistent,
458 uint64_t in_fid_volatile);
459 NTSTATUS smb2cli_query_info_recv(struct tevent_req *req,
460 TALLOC_CTX *mem_ctx,
461 DATA_BLOB *out_output_buffer);
462 NTSTATUS smb2cli_query_info(struct smbXcli_conn *conn,
463 uint32_t timeout_msec,
464 struct smbXcli_session *session,
465 uint32_t tcon_id,
466 uint8_t in_info_type,
467 uint8_t in_file_info_class,
468 uint32_t in_max_output_length,
469 const DATA_BLOB *in_input_buffer,
470 uint32_t in_additional_info,
471 uint32_t in_flags,
472 uint64_t in_fid_persistent,
473 uint64_t in_fid_volatile,
474 TALLOC_CTX *mem_ctx,
475 DATA_BLOB *out_output_buffer);
477 struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
478 struct tevent_context *ev,
479 struct smbXcli_conn *conn,
480 uint32_t timeout_msec,
481 struct smbXcli_session *session,
482 uint32_t tcon_id,
483 uint8_t level,
484 uint8_t flags,
485 uint32_t file_index,
486 uint64_t fid_persistent,
487 uint64_t fid_volatile,
488 const char *mask,
489 uint32_t outbuf_len);
490 NTSTATUS smb2cli_query_directory_recv(struct tevent_req *req,
491 TALLOC_CTX *mem_ctx,
492 uint8_t **data,
493 uint32_t *data_length);
494 NTSTATUS smb2cli_query_directory(struct smbXcli_conn *conn,
495 uint32_t timeout_msec,
496 struct smbXcli_session *session,
497 uint32_t tcon_id,
498 uint8_t level,
499 uint8_t flags,
500 uint32_t file_index,
501 uint64_t fid_persistent,
502 uint64_t fid_volatile,
503 const char *mask,
504 uint32_t outbuf_len,
505 TALLOC_CTX *mem_ctx,
506 uint8_t **data,
507 uint32_t *data_length);
509 struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
510 struct tevent_context *ev,
511 struct smbXcli_conn *conn,
512 uint32_t timeout_msec,
513 struct smbXcli_session *session,
514 uint32_t tcon_id,
515 uint64_t in_fid_persistent,
516 uint64_t in_fid_volatile,
517 uint32_t in_ctl_code,
518 uint32_t in_max_input_length,
519 const DATA_BLOB *in_input_buffer,
520 uint32_t in_max_output_length,
521 const DATA_BLOB *in_output_buffer,
522 uint32_t in_flags);
523 NTSTATUS smb2cli_ioctl_recv(struct tevent_req *req,
524 TALLOC_CTX *mem_ctx,
525 DATA_BLOB *out_input_buffer,
526 DATA_BLOB *out_output_buffer);
527 NTSTATUS smb2cli_ioctl(struct smbXcli_conn *conn,
528 uint32_t timeout_msec,
529 struct smbXcli_session *session,
530 uint32_t tcon_id,
531 uint64_t in_fid_persistent,
532 uint64_t in_fid_volatile,
533 uint32_t in_ctl_code,
534 uint32_t in_max_input_length,
535 const DATA_BLOB *in_input_buffer,
536 uint32_t in_max_output_length,
537 const DATA_BLOB *in_output_buffer,
538 uint32_t in_flags,
539 TALLOC_CTX *mem_ctx,
540 DATA_BLOB *out_input_buffer,
541 DATA_BLOB *out_output_buffer);
543 #endif /* _SMBXCLI_BASE_H_ */