s4:libcli: add smb_connect_nego_{send,recv}()
[Samba.git] / source4 / libcli / smb_composite / smb_composite.h
blobe43cbb9dff92418ed01908991c39c5f70971ad3b
1 /*
2 Unix SMB/CIFS implementation.
4 SMB composite request interfaces
6 Copyright (C) Andrew Tridgell 2005
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 this defines the structures associated with "composite"
24 requests. Composite requests are libcli requests that are internally
25 implemented as multiple libcli/raw/ calls, but can be treated as a
26 single call via these composite calls. The composite calls are
27 particularly designed to be used in async applications
30 #ifndef __SMB_COMPOSITE_H__
31 #define __SMB_COMPOSITE_H__
33 #include "libcli/raw/libcliraw.h"
34 #include "libcli/smb2/smb2.h"
37 a composite open/read(s)/close request that loads a whole file
38 into memory. Used as a demo of the composite system.
40 struct smb_composite_loadfile {
41 struct {
42 const char *fname;
43 } in;
44 struct {
45 uint8_t *data;
46 uint32_t size;
47 } out;
50 struct composite_context *smb_composite_loadfile_send(struct smbcli_tree *tree,
51 struct smb_composite_loadfile *io);
52 NTSTATUS smb_composite_loadfile_recv(struct composite_context *c, TALLOC_CTX *mem_ctx);
53 NTSTATUS smb_composite_loadfile(struct smbcli_tree *tree,
54 TALLOC_CTX *mem_ctx,
55 struct smb_composite_loadfile *io);
57 struct smb_composite_fetchfile {
58 struct {
59 const char *dest_host;
60 const char **ports;
61 const char *called_name;
62 const char *service;
63 const char *service_type;
64 const char *socket_options;
65 struct cli_credentials *credentials;
66 const char *workgroup;
67 const char *filename;
68 struct smbcli_options options;
69 struct smbcli_session_options session_options;
70 struct resolve_context *resolve_ctx;
71 struct gensec_settings *gensec_settings;
72 } in;
73 struct {
74 uint8_t *data;
75 uint32_t size;
76 } out;
79 struct composite_context *smb_composite_fetchfile_send(struct smb_composite_fetchfile *io,
80 struct tevent_context *event_ctx);
81 NTSTATUS smb_composite_fetchfile_recv(struct composite_context *c,
82 TALLOC_CTX *mem_ctx);
83 NTSTATUS smb_composite_fetchfile(struct smb_composite_fetchfile *io,
84 TALLOC_CTX *mem_ctx);
87 a composite open/write(s)/close request that saves a whole file from
88 memory. Used as a demo of the composite system.
90 struct smb_composite_savefile {
91 struct {
92 const char *fname;
93 uint8_t *data;
94 uint32_t size;
95 } in;
98 struct composite_context *smb_composite_savefile_send(struct smbcli_tree *tree,
99 struct smb_composite_savefile *io);
100 NTSTATUS smb_composite_savefile_recv(struct composite_context *c);
101 NTSTATUS smb_composite_savefile(struct smbcli_tree *tree,
102 struct smb_composite_savefile *io);
105 a composite request for a low level connection to a remote server. Includes
107 - socket establishment
108 - session request
109 - negprot
111 struct tevent_req *smb_connect_nego_send(TALLOC_CTX *mem_ctx,
112 struct tevent_context *ev,
113 struct resolve_context *resolve_ctx,
114 const struct smbcli_options *options,
115 const char *socket_options,
116 const char *dest_hostname,
117 const char *dest_address, /* optional */
118 const char **dest_ports,
119 const char *target_hostname,
120 const char *called_name,
121 const char *calling_name);
122 NTSTATUS smb_connect_nego_recv(struct tevent_req *req,
123 TALLOC_CTX *mem_ctx,
124 struct smbXcli_conn **_conn);
127 a composite request for a full connection to a remote server. Includes
129 - socket establishment
130 - session request
131 - negprot
132 - session setup (if credentials are not NULL)
133 - tree connect (if service is not NULL)
135 struct smb_composite_connect {
136 struct {
137 const char *dest_host;
138 const char **dest_ports;
139 const char *socket_options;
140 const char *called_name;
141 const char *service;
142 const char *service_type;
143 struct smbXcli_conn *existing_conn; /* optional */
144 struct cli_credentials *credentials;
145 bool fallback_to_anonymous;
146 const char *workgroup;
147 struct smbcli_options options;
148 struct smbcli_session_options session_options;
149 struct gensec_settings *gensec_settings;
150 } in;
151 struct {
152 struct smbcli_tree *tree;
153 bool anonymous_fallback_done;
154 } out;
157 struct composite_context *smb_composite_connect_send(struct smb_composite_connect *io,
158 TALLOC_CTX *mem_ctx,
159 struct resolve_context *resolve_ctx,
160 struct tevent_context *event_ctx);
161 NTSTATUS smb_composite_connect_recv(struct composite_context *c, TALLOC_CTX *mem_ctx);
162 NTSTATUS smb_composite_connect(struct smb_composite_connect *io, TALLOC_CTX *mem_ctx,
163 struct resolve_context *resolve_ctx,
164 struct tevent_context *ev);
168 generic session setup interface that takes care of which
169 session setup varient to use
171 struct smb_composite_sesssetup {
172 struct {
173 uint32_t sesskey;
174 uint32_t capabilities;
175 struct cli_credentials *credentials;
176 const char *workgroup;
177 struct gensec_settings *gensec_settings;
178 } in;
179 struct {
180 uint16_t vuid;
181 } out;
184 struct composite_context *smb_composite_sesssetup_send(struct smbcli_session *session,
185 struct smb_composite_sesssetup *io);
186 NTSTATUS smb_composite_sesssetup_recv(struct composite_context *c);
187 NTSTATUS smb_composite_sesssetup(struct smbcli_session *session, struct smb_composite_sesssetup *io);
190 query file system info
192 struct smb_composite_fsinfo {
193 struct {
194 const char *dest_host;
195 const char **dest_ports;
196 const char *socket_options;
197 const char *called_name;
198 const char *service;
199 const char *service_type;
200 struct cli_credentials *credentials;
201 const char *workgroup;
202 enum smb_fsinfo_level level;
203 struct gensec_settings *gensec_settings;
204 } in;
206 struct {
207 union smb_fsinfo *fsinfo;
208 } out;
211 struct composite_context *smb_composite_fsinfo_send(struct smbcli_tree *tree,
212 struct smb_composite_fsinfo *io,
213 struct resolve_context *resolve_ctx,
214 struct tevent_context *event_ctx);
215 NTSTATUS smb_composite_fsinfo_recv(struct composite_context *c, TALLOC_CTX *mem_ctx);
216 NTSTATUS smb_composite_fsinfo(struct smbcli_tree *tree,
217 TALLOC_CTX *mem_ctx,
218 struct smb_composite_fsinfo *io,
219 struct resolve_context *resolve_ctx,
220 struct tevent_context *ev);
223 composite call for appending new acl to the file's security descriptor and get
224 new full acl
227 struct smb_composite_appendacl {
228 struct {
229 const char *fname;
231 const struct security_descriptor *sd;
232 } in;
234 struct {
235 struct security_descriptor *sd;
236 } out;
239 struct composite_context *smb_composite_appendacl_send(struct smbcli_tree *tree,
240 struct smb_composite_appendacl *io);
241 NTSTATUS smb_composite_appendacl_recv(struct composite_context *c, TALLOC_CTX *mem_ctx);
242 NTSTATUS smb_composite_appendacl(struct smbcli_tree *tree,
243 TALLOC_CTX *mem_ctx,
244 struct smb_composite_appendacl *io);
247 a composite API to fire connect() calls to multiple targets, picking the
248 first one.
251 struct smb_composite_connectmulti {
252 struct {
253 int num_dests;
254 const char **hostnames;
255 const char **addresses;
256 int *ports; /* Either NULL for lpcfg_smb_ports() per
257 * destination or a list of explicit ports */
258 } in;
259 struct {
260 struct smbcli_socket *socket;
261 } out;
264 struct smbcli_session;
265 struct resolve_context;
267 struct composite_context *smb2_composite_unlink_send(struct smb2_tree *tree,
268 union smb_unlink *io);
269 NTSTATUS smb2_composite_unlink(struct smb2_tree *tree, union smb_unlink *io);
270 struct composite_context *smb2_composite_mkdir_send(struct smb2_tree *tree,
271 union smb_mkdir *io);
272 NTSTATUS smb2_composite_mkdir(struct smb2_tree *tree, union smb_mkdir *io);
273 struct composite_context *smb2_composite_rmdir_send(struct smb2_tree *tree,
274 struct smb_rmdir *io);
275 NTSTATUS smb2_composite_rmdir(struct smb2_tree *tree, struct smb_rmdir *io);
276 struct tevent_req *smb2_composite_setpathinfo_send(TALLOC_CTX *mem_ctx,
277 struct tevent_context *ev,
278 struct smb2_tree *tree,
279 const union smb_setfileinfo *io);
280 NTSTATUS smb2_composite_setpathinfo_recv(struct tevent_req *req);
281 NTSTATUS smb2_composite_setpathinfo(struct smb2_tree *tree, union smb_setfileinfo *io);
283 #endif /* __SMB_COMPOSITE_H__ */