2 Unix SMB/CIFS implementation.
3 smb2 wrapper client routines
4 Copyright (C) Jeremy Allison 2013
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #ifndef __SMB2CLI_FNUM_H__
21 #define __SMB2CLI_FNUM_H__
24 struct smbXcli_session
;
27 struct symlink_reparse_struct
;
29 struct cli_smb2_create_flags
{
31 bool exclusive_oplock
:1;
34 struct tevent_req
*cli_smb2_create_fnum_send(
36 struct tevent_context
*ev
,
37 struct cli_state
*cli
,
39 struct cli_smb2_create_flags create_flags
,
40 uint32_t impersonation_level
,
41 uint32_t desired_access
,
42 uint32_t file_attributes
,
43 uint32_t share_access
,
44 uint32_t create_disposition
,
45 uint32_t create_options
,
46 const struct smb2_create_blobs
*in_cblobs
);
47 NTSTATUS
cli_smb2_create_fnum_recv(
48 struct tevent_req
*req
,
50 struct smb_create_returns
*cr
,
52 struct smb2_create_blobs
*out_cblobs
,
53 struct symlink_reparse_struct
**symlink
);
54 NTSTATUS
cli_smb2_create_fnum(
55 struct cli_state
*cli
,
57 struct cli_smb2_create_flags create_flags
,
58 uint32_t impersonation_level
,
59 uint32_t desired_access
,
60 uint32_t file_attributes
,
61 uint32_t share_access
,
62 uint32_t create_disposition
,
63 uint32_t create_options
,
64 const struct smb2_create_blobs
*in_cblobs
,
66 struct smb_create_returns
*cr
,
68 struct smb2_create_blobs
*out_cblobs
);
70 struct tevent_req
*cli_smb2_close_fnum_send(TALLOC_CTX
*mem_ctx
,
71 struct tevent_context
*ev
,
72 struct cli_state
*cli
,
74 NTSTATUS
cli_smb2_close_fnum_recv(struct tevent_req
*req
);
75 NTSTATUS
cli_smb2_close_fnum(struct cli_state
*cli
, uint16_t fnum
);
76 struct tevent_req
*cli_smb2_delete_on_close_send(TALLOC_CTX
*mem_ctx
,
77 struct tevent_context
*ev
,
78 struct cli_state
*cli
,
81 NTSTATUS
cli_smb2_delete_on_close_recv(struct tevent_req
*req
);
82 NTSTATUS
cli_smb2_delete_on_close(struct cli_state
*cli
, uint16_t fnum
, bool flag
);
83 struct tevent_req
*cli_smb2_mkdir_send(
85 struct tevent_context
*ev
,
86 struct cli_state
*cli
,
88 NTSTATUS
cli_smb2_mkdir_recv(struct tevent_req
*req
);
89 struct tevent_req
*cli_smb2_rmdir_send(
91 struct tevent_context
*ev
,
92 struct cli_state
*cli
,
94 const struct smb2_create_blobs
*in_cblobs
);
95 NTSTATUS
cli_smb2_rmdir_recv(struct tevent_req
*req
);
96 struct tevent_req
*cli_smb2_unlink_send(
98 struct tevent_context
*ev
,
99 struct cli_state
*cli
,
101 const struct smb2_create_blobs
*in_cblobs
);
102 NTSTATUS
cli_smb2_unlink_recv(struct tevent_req
*req
);
103 struct tevent_req
*cli_smb2_list_send(
105 struct tevent_context
*ev
,
106 struct cli_state
*cli
,
107 const char *pathname
,
108 unsigned int info_level
,
110 NTSTATUS
cli_smb2_list_recv(
111 struct tevent_req
*req
,
113 struct file_info
**pfinfo
);
114 NTSTATUS
cli_smb2_qpathinfo_basic(struct cli_state
*cli
,
116 SMB_STRUCT_STAT
*sbuf
,
117 uint32_t *attributes
);
118 NTSTATUS
cli_smb2_qpathinfo_alt_name(struct cli_state
*cli
,
121 struct tevent_req
*cli_smb2_query_info_fnum_send(
123 struct tevent_context
*ev
,
124 struct cli_state
*cli
,
126 uint8_t in_info_type
,
127 uint8_t in_info_class
,
128 uint32_t in_max_output_length
,
129 const DATA_BLOB
*in_input_buffer
,
130 uint32_t in_additional_info
,
132 NTSTATUS
cli_smb2_query_info_fnum_recv(
133 struct tevent_req
*req
, TALLOC_CTX
*mem_ctx
, DATA_BLOB
*outbuf
);
134 struct tevent_req
*cli_smb2_set_info_fnum_send(
136 struct tevent_context
*ev
,
137 struct cli_state
*cli
,
139 uint8_t in_info_type
,
140 uint8_t in_info_class
,
141 const DATA_BLOB
*in_input_buffer
,
142 uint32_t in_additional_info
);
143 NTSTATUS
cli_smb2_set_info_fnum_recv(struct tevent_req
*req
);
144 NTSTATUS
cli_smb2_set_info_fnum(
145 struct cli_state
*cli
,
147 uint8_t in_info_type
,
148 uint8_t in_info_class
,
149 const DATA_BLOB
*in_input_buffer
,
150 uint32_t in_additional_info
);
151 NTSTATUS
cli_smb2_query_info_fnum(
152 struct cli_state
*cli
,
154 uint8_t in_info_type
,
155 uint8_t in_info_class
,
156 uint32_t in_max_output_length
,
157 const DATA_BLOB
*in_input_buffer
,
158 uint32_t in_additional_info
,
162 NTSTATUS
cli_smb2_getatr(struct cli_state
*cli
,
167 struct tevent_req
*cli_smb2_qpathinfo2_send(TALLOC_CTX
*mem_ctx
,
168 struct tevent_context
*ev
,
169 struct cli_state
*cli
,
171 NTSTATUS
cli_smb2_qpathinfo2_recv(struct tevent_req
*req
,
172 struct timespec
*create_time
,
173 struct timespec
*access_time
,
174 struct timespec
*write_time
,
175 struct timespec
*change_time
,
179 NTSTATUS
cli_smb2_qpathinfo_streams(struct cli_state
*cli
,
182 unsigned int *pnum_streams
,
183 struct stream_struct
**pstreams
);
184 NTSTATUS
cli_smb2_setpathinfo(struct cli_state
*cli
,
186 uint8_t in_info_type
,
187 uint8_t in_file_info_class
,
188 const DATA_BLOB
*p_in_data
);
189 NTSTATUS
cli_smb2_setatr(struct cli_state
*cli
,
193 NTSTATUS
cli_smb2_setattrE(struct cli_state
*cli
,
198 NTSTATUS
cli_smb2_dskattr(struct cli_state
*cli
,
203 NTSTATUS
cli_smb2_get_fs_attr_info(struct cli_state
*cli
, uint32_t *fs_attr
);
204 NTSTATUS
cli_smb2_get_fs_full_size_info(struct cli_state
*cli
,
205 uint64_t *total_allocation_units
,
206 uint64_t *caller_allocation_units
,
207 uint64_t *actual_allocation_units
,
208 uint64_t *sectors_per_allocation_unit
,
209 uint64_t *bytes_per_sector
);
210 NTSTATUS
cli_smb2_get_fs_volume_info(struct cli_state
*cli
,
213 uint32_t *pserial_number
,
215 struct tevent_req
*cli_smb2_query_mxac_send(TALLOC_CTX
*mem_ctx
,
216 struct tevent_context
*ev
,
217 struct cli_state
*cli
,
219 NTSTATUS
cli_smb2_query_mxac_recv(struct tevent_req
*req
,
221 NTSTATUS
cli_smb2_query_mxac(struct cli_state
*cli
,
224 struct tevent_req
*cli_smb2_rename_send(
226 struct tevent_context
*ev
,
227 struct cli_state
*cli
,
228 const char *fname_src
,
229 const char *fname_dst
,
231 NTSTATUS
cli_smb2_rename_recv(struct tevent_req
*req
);
232 NTSTATUS
cli_smb2_set_ea_fnum(struct cli_state
*cli
,
237 NTSTATUS
cli_smb2_get_ea_list_path(struct cli_state
*cli
,
241 struct ea_struct
**pea_list
);
242 NTSTATUS
cli_smb2_set_ea_path(struct cli_state
*cli
,
247 NTSTATUS
cli_smb2_get_user_quota(struct cli_state
*cli
,
249 SMB_NTQUOTA_STRUCT
*pqt
);
250 NTSTATUS
cli_smb2_list_user_quota_step(struct cli_state
*cli
,
253 SMB_NTQUOTA_LIST
**pqt_list
,
255 NTSTATUS
cli_smb2_get_fs_quota_info(struct cli_state
*cli
,
257 SMB_NTQUOTA_STRUCT
*pqt
);
258 NTSTATUS
cli_smb2_set_user_quota(struct cli_state
*cli
,
260 SMB_NTQUOTA_LIST
*qtl
);
261 NTSTATUS
cli_smb2_set_fs_quota_info(struct cli_state
*cli
,
263 SMB_NTQUOTA_STRUCT
*pqt
);
264 struct tevent_req
*cli_smb2_read_send(TALLOC_CTX
*mem_ctx
,
265 struct tevent_context
*ev
,
266 struct cli_state
*cli
,
270 NTSTATUS
cli_smb2_read_recv(struct tevent_req
*req
,
273 struct tevent_req
*cli_smb2_write_send(TALLOC_CTX
*mem_ctx
,
274 struct tevent_context
*ev
,
275 struct cli_state
*cli
,
281 NTSTATUS
cli_smb2_write_recv(struct tevent_req
*req
,
283 struct tevent_req
*cli_smb2_writeall_send(TALLOC_CTX
*mem_ctx
,
284 struct tevent_context
*ev
,
285 struct cli_state
*cli
,
291 NTSTATUS
cli_smb2_writeall_recv(struct tevent_req
*req
,
293 struct tevent_req
*cli_smb2_splice_send(TALLOC_CTX
*mem_ctx
,
294 struct tevent_context
*ev
,
295 struct cli_state
*cli
,
296 uint16_t src_fnum
, uint16_t dst_fnum
,
297 off_t size
, off_t src_offset
, off_t dst_offset
,
298 int (*splice_cb
)(off_t n
, void *priv
), void *priv
);
299 NTSTATUS
cli_smb2_splice_recv(struct tevent_req
*req
, off_t
*written
);
300 NTSTATUS
cli_smb2_shadow_copy_data(TALLOC_CTX
*mem_ctx
,
301 struct cli_state
*cli
,
306 NTSTATUS
cli_smb2_ftruncate(struct cli_state
*cli
,
309 struct tevent_req
*cli_smb2_notify_send(
311 struct tevent_context
*ev
,
312 struct cli_state
*cli
,
314 uint32_t buffer_size
,
315 uint32_t completion_filter
,
317 NTSTATUS
cli_smb2_notify_recv(struct tevent_req
*req
,
319 struct notify_change
**pchanges
,
320 uint32_t *pnum_changes
);
321 NTSTATUS
cli_smb2_notify(struct cli_state
*cli
, uint16_t fnum
,
322 uint32_t buffer_size
, uint32_t completion_filter
,
323 bool recursive
, TALLOC_CTX
*mem_ctx
,
324 struct notify_change
**pchanges
,
325 uint32_t *pnum_changes
);
327 struct tevent_req
*cli_smb2_fsctl_send(
329 struct tevent_context
*ev
,
330 struct cli_state
*cli
,
335 NTSTATUS
cli_smb2_fsctl_recv(
336 struct tevent_req
*req
, TALLOC_CTX
*mem_ctx
, DATA_BLOB
*out
);
338 #endif /* __SMB2CLI_FNUM_H__ */