4f0b7ac35da4cb4b605892bfc0360083499176b5
[samba.git] / source3 / smbd / proto.h
1 /*
2  *  Unix SMB/CIFS implementation.
3  *  Main SMB server routines
4  *
5  *  Copyright (C) Andrew Tridgell                       1992-2002,2006
6  *  Copyright (C) Jeremy Allison                        1992-2010
7  *  Copyright (C) Volker Lendecke                       1993-2009
8  *  Copyright (C) John H Terpstra                       1995-1998
9  *  Copyright (C) Luke Kenneth Casson Leighton          1996-1998
10  *  Copyright (C) Paul Ashton                           1997-1998
11  *  Copyright (C) Tim Potter                            1999-2000
12  *  Copyright (C) T.D.Lee@durham.ac.uk                  1999
13  *  Copyright (C) Ying Chen                             2000
14  *  Copyright (C) Shirish Kalele                        2000
15  *  Copyright (C) Andrew Bartlett                       2001-2003
16  *  Copyright (C) Alexander Bokovoy                     2002,2005
17  *  Copyright (C) Simo Sorce                            2001-2002,2009
18  *  Copyright (C) Andreas Gruenbacher                   2002
19  *  Copyright (C) Jim McDonough <jmcd@us.ibm.com>       2002
20  *  Copyright (C) Martin Pool                           2002
21  *  Copyright (C) Luke Howard                           2003
22  *  Copyright (C) Stefan (metze) Metzmacher             2003,2009
23  *  Copyright (C) Steve French                          2005
24  *  Copyright (C) Gerald (Jerry) Carter                 2006
25  *  Copyright (C) James Peach                           2006-2007
26  *  Copyright (C) Jelmer Vernooij                       2002-2003
27  *  Copyright (C) Michael Adam                          2007
28  *  Copyright (C) Rishi Srivatsavai                     2007
29  *  Copyright (C) Tim Prouty                            2009
30  *  Copyright (C) Gregor Beck                           2011
31  *
32  *  This program is free software; you can redistribute it and/or modify
33  *  it under the terms of the GNU General Public License as published by
34  *  the Free Software Foundation; either version 3 of the License, or
35  *  (at your option) any later version.
36  *
37  *  This program is distributed in the hope that it will be useful,
38  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
39  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
40  *  GNU General Public License for more details.
41  *
42  *  You should have received a copy of the GNU General Public License
43  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
44  */
45
46 #ifndef _SMBD_PROTO_H_
47 #define _SMBD_PROTO_H_
48
49 struct smbXsrv_client;
50 struct smbXsrv_connection;
51 struct dcesrv_context;
52
53 /* The following definitions come from smbd/smb2_signing.c */
54
55 bool srv_init_signing(struct smbXsrv_connection *conn);
56
57 /* The following definitions come from smbd/aio.c  */
58
59 struct aio_extra;
60 bool aio_write_through_requested(struct aio_extra *aio_ex);
61 NTSTATUS schedule_smb2_aio_read(connection_struct *conn,
62                                 struct smb_request *smbreq,
63                                 files_struct *fsp,
64                                 TALLOC_CTX *ctx,
65                                 DATA_BLOB *preadbuf,
66                                 off_t startpos,
67                                 size_t smb_maxcnt);
68 NTSTATUS schedule_aio_smb2_write(connection_struct *conn,
69                                 struct smb_request *smbreq,
70                                 files_struct *fsp,
71                                 uint64_t in_offset,
72                                 DATA_BLOB in_data,
73                                 bool write_through);
74 bool cancel_smb2_aio(struct smb_request *smbreq);
75 bool aio_add_req_to_fsp(files_struct *fsp, struct tevent_req *req);
76 struct aio_extra *create_aio_extra(TALLOC_CTX *mem_ctx,
77                                    files_struct *fsp,
78                                    size_t buflen);
79 struct tevent_req *pwrite_fsync_send(TALLOC_CTX *mem_ctx,
80                                      struct tevent_context *ev,
81                                      struct files_struct *fsp,
82                                      const void *data,
83                                      size_t n, off_t offset,
84                                      bool write_through);
85 ssize_t pwrite_fsync_recv(struct tevent_req *req, int *perr);
86
87 /* The following definitions come from smbd/blocking.c  */
88
89 NTSTATUS smbd_do_locks_try(
90         struct files_struct *fsp,
91         uint16_t num_locks,
92         struct smbd_lock_element *locks,
93         uint16_t *blocker_idx,
94         struct server_id *blocking_pid,
95         uint64_t *blocking_smblctx);
96 struct tevent_req *smbd_smb1_do_locks_send(
97         TALLOC_CTX *mem_ctx,
98         struct tevent_context *ev,
99         struct smb_request **smbreq, /* talloc_move()d into our state */
100         struct files_struct *fsp,
101         uint32_t lock_timeout,
102         bool large_offset,
103         uint16_t num_locks,
104         struct smbd_lock_element *locks);
105 NTSTATUS smbd_smb1_do_locks_recv(struct tevent_req *req);
106 bool smbd_smb1_do_locks_extract_smbreq(
107         struct tevent_req *req,
108         TALLOC_CTX *mem_ctx,
109         struct smb_request **psmbreq);
110 void smbd_smb1_brl_finish_by_req(struct tevent_req *req, NTSTATUS status);
111 bool smbd_smb1_brl_finish_by_lock(
112         struct files_struct *fsp,
113         bool large_offset,
114         struct smbd_lock_element lock,
115         NTSTATUS finish_status);
116 bool smbd_smb1_brl_finish_by_mid(
117         struct smbd_server_connection *sconn, uint64_t mid);
118
119 /* The following definitions come from smbd/close.c  */
120
121 void set_close_write_time(struct files_struct *fsp, struct timespec ts);
122 NTSTATUS close_file_smb(struct smb_request *req,
123                         struct files_struct *fsp,
124                         enum file_close_type close_type);
125 NTSTATUS close_file_free(struct smb_request *req,
126                          struct files_struct **_fsp,
127                          enum file_close_type close_type);
128 void msg_close_file(struct messaging_context *msg_ctx,
129                     void *private_data,
130                     uint32_t msg_type,
131                     struct server_id server_id,
132                     DATA_BLOB *data);
133 NTSTATUS delete_all_streams(connection_struct *conn,
134                         const struct smb_filename *smb_fname);
135 NTSTATUS recursive_rmdir(TALLOC_CTX *ctx,
136                      connection_struct *conn,
137                      struct smb_filename *smb_dname);
138 bool has_other_nonposix_opens(struct share_mode_lock *lck,
139                               struct files_struct *fsp);
140
141 /* The following definitions come from smbd/conn.c  */
142
143 int conn_num_open(struct smbd_server_connection *sconn);
144 bool conn_snum_used(struct smbd_server_connection *sconn, int snum);
145 enum protocol_types conn_protocol(struct smbd_server_connection *sconn);
146 connection_struct *conn_new(struct smbd_server_connection *sconn);
147 bool conn_idle_all(struct smbd_server_connection *sconn, time_t t);
148 void conn_clear_vuid_caches(struct smbd_server_connection *sconn, uint64_t vuid);
149 void conn_free(connection_struct *conn);
150 void conn_setup_case_options(connection_struct *conn);
151 void conn_force_tdis(
152         struct smbd_server_connection *sconn,
153         bool (*check_fn)(struct connection_struct *conn,
154                          void *private_data),
155         void *private_data);
156 void msg_force_tdis(struct messaging_context *msg,
157                     void *private_data,
158                     uint32_t msg_type,
159                     struct server_id server_id,
160                     DATA_BLOB *data);
161 void msg_force_tdis_denied(
162         struct messaging_context *msg,
163         void *private_data,
164         uint32_t msg_type,
165         struct server_id server_id,
166         DATA_BLOB *data);
167
168 /* The following definitions come from smbd/connection.c  */
169
170 int count_current_connections(const char *sharename, bool verify);
171 bool connections_snum_used(struct smbd_server_connection *unused, int snum);
172
173 /* The following definitions come from smbd/dfree.c  */
174
175 uint64_t get_dfree_info(connection_struct *conn, struct smb_filename *fname,
176                         uint64_t *bsize, uint64_t *dfree, uint64_t *dsize);
177 void flush_dfree_cache(void);
178
179 /* The following definitions come from smbd/dmapi.c  */
180
181 const void *dmapi_get_current_session(void);
182 bool dmapi_have_session(void);
183 bool dmapi_new_session(void);
184 bool dmapi_destroy_session(void);
185 uint32_t dmapi_file_flags(const char * const path);
186
187 /* The following definitions come from smbd/dnsregister.c  */
188
189 bool smbd_setup_mdns_registration(struct tevent_context *ev,
190                                   TALLOC_CTX *mem_ctx,
191                                   uint16_t port);
192
193 /* The following definitions come from smbd/dosmode.c  */
194
195 mode_t unix_mode(connection_struct *conn, int dosmode,
196                  const struct smb_filename *smb_fname,
197                  struct files_struct *parent_dirfsp);
198 uint32_t dos_mode_msdfs(connection_struct *conn,
199                         const char *name,
200                         const struct stat_ex *st);
201 uint32_t fdos_mode(struct files_struct *fsp);
202 struct tevent_req *dos_mode_at_send(TALLOC_CTX *mem_ctx,
203                                     struct tevent_context *ev,
204                                     files_struct *dir_fsp,
205                                     struct smb_filename *smb_fname);
206 NTSTATUS dos_mode_at_recv(struct tevent_req *req, uint32_t *dosmode);
207 int file_set_dosmode(connection_struct *conn,
208                      struct smb_filename *smb_fname,
209                      uint32_t dosmode,
210                      struct smb_filename *parent_dir,
211                      bool newfile);
212 NTSTATUS file_set_sparse(connection_struct *conn,
213                          struct files_struct *fsp,
214                          bool sparse);
215 int file_ntimes(connection_struct *conn,
216                 files_struct *fsp,
217                 struct smb_file_time *ft);
218 bool set_sticky_write_time_path(struct file_id fileid, struct timespec mtime);
219 bool set_sticky_write_time_fsp(struct files_struct *fsp,
220                                struct timespec mtime);
221
222 NTSTATUS fget_ea_dos_attribute(struct files_struct *fsp,
223                               uint32_t *pattr);
224 NTSTATUS set_ea_dos_attribute(connection_struct *conn,
225                               struct smb_filename *smb_fname,
226                               uint32_t dosmode);
227
228 NTSTATUS set_create_timespec_ea(struct files_struct *fsp,
229                                 struct timespec create_time);
230
231 struct timespec get_create_timespec(connection_struct *conn,
232                                 struct files_struct *fsp,
233                                 const struct smb_filename *smb_fname);
234
235 struct timespec get_change_timespec(connection_struct *conn,
236                                 struct files_struct *fsp,
237                                 const struct smb_filename *smb_fname);
238
239 NTSTATUS parse_dos_attribute_blob(struct smb_filename *smb_fname,
240                                   DATA_BLOB blob,
241                                   uint32_t *pattr);
242
243 /* The following definitions come from smbd/error.c  */
244
245 bool use_nt_status(void);
246 void error_packet_set(char *outbuf, uint8_t eclass, uint32_t ecode, NTSTATUS ntstatus, int line, const char *file);
247 size_t error_packet(char *outbuf,
248                     uint8_t eclass,
249                     uint32_t ecode,
250                     NTSTATUS ntstatus,
251                     int line,
252                     const char *file);
253 void reply_nt_error(struct smb_request *req, NTSTATUS ntstatus,
254                     int line, const char *file);
255 void reply_force_dos_error(struct smb_request *req, uint8_t eclass, uint32_t ecode,
256                     int line, const char *file);
257 void reply_both_error(struct smb_request *req, uint8_t eclass, uint32_t ecode,
258                       NTSTATUS status, int line, const char *file);
259 void reply_openerror(struct smb_request *req, NTSTATUS status);
260
261 /* The following definitions come from smbd/file_access.c  */
262
263 bool can_delete_file_in_directory(connection_struct *conn,
264                         struct files_struct *dirfsp,
265                         const struct smb_filename *smb_fname);
266 bool can_write_to_fsp(struct files_struct *fsp);
267 bool directory_has_default_acl_fsp(struct files_struct *fsp);
268 NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32_t dosmode);
269
270 /* The following definitions come from smbd/fileio.c  */
271
272 ssize_t read_file(files_struct *fsp,char *data,off_t pos,size_t n);
273 void fsp_flush_write_time_update(struct files_struct *fsp);
274 void trigger_write_time_update(struct files_struct *fsp);
275 void trigger_write_time_update_immediate(struct files_struct *fsp);
276 void mark_file_modified(files_struct *fsp);
277 ssize_t write_file(struct smb_request *req,
278                         files_struct *fsp,
279                         const char *data,
280                         off_t pos,
281                         size_t n);
282 NTSTATUS sync_file(connection_struct *conn, files_struct *fsp, bool write_through);
283
284 /* The following definitions come from smbd/filename.c  */
285
286 uint32_t ucf_flags_from_smb_request(struct smb_request *req);
287 uint32_t filename_create_ucf_flags(struct smb_request *req, uint32_t create_disposition);
288 NTSTATUS canonicalize_snapshot_path(struct smb_filename *smb_fname,
289                                     uint32_t ucf_flags,
290                                     NTTIME twrp);
291 NTSTATUS get_real_filename_full_scan_at(struct files_struct *dirfsp,
292                                         const char *name,
293                                         bool mangled,
294                                         TALLOC_CTX *mem_ctx,
295                                         char **found_name);
296 char *get_original_lcomp(TALLOC_CTX *ctx,
297                         connection_struct *conn,
298                         const char *filename_in,
299                         uint32_t ucf_flags);
300 NTSTATUS get_real_filename_at(struct files_struct *dirfsp,
301                               const char *name,
302                               TALLOC_CTX *mem_ctx,
303                               char **found_name);
304
305 /* The following definitions come from smbd/files.c  */
306
307 NTSTATUS fsp_new(struct connection_struct *conn, TALLOC_CTX *mem_ctx,
308                  files_struct **result);
309 void fsp_set_gen_id(files_struct *fsp);
310 NTSTATUS file_new(struct smb_request *req, connection_struct *conn,
311                   files_struct **result);
312 NTSTATUS fsp_bind_smb(struct files_struct *fsp, struct smb_request *req);
313 void file_close_conn(connection_struct *conn, enum file_close_type close_type);
314 bool file_init_global(void);
315 bool file_init(struct smbd_server_connection *sconn);
316 void file_close_user(struct smbd_server_connection *sconn, uint64_t vuid);
317 struct files_struct *files_forall(
318         struct smbd_server_connection *sconn,
319         struct files_struct *(*fn)(struct files_struct *fsp,
320                                    void *private_data),
321         void *private_data);
322 files_struct *file_find_fd(struct smbd_server_connection *sconn, int fd);
323 files_struct *file_find_dif(struct smbd_server_connection *sconn,
324                             struct file_id id, unsigned long gen_id);
325 files_struct *file_find_di_first(struct smbd_server_connection *sconn,
326                                  struct file_id id,
327                                  bool need_fsa);
328 files_struct *file_find_di_next(files_struct *start_fsp,
329                                  bool need_fsa);
330 struct files_struct *file_find_one_fsp_from_lease_key(
331         struct smbd_server_connection *sconn,
332         const struct smb2_lease_key *lease_key);
333 bool file_find_subpath(files_struct *dir_fsp);
334 void fsp_unbind_smb(struct smb_request *req, files_struct *fsp);
335 void file_free(struct smb_request *req, files_struct *fsp);
336 files_struct *file_fsp(struct smb_request *req, uint16_t fid);
337 struct files_struct *file_fsp_get(struct smbd_smb2_request *smb2req,
338                                   uint64_t persistent_id,
339                                   uint64_t volatile_id);
340 struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
341                                    uint64_t persistent_id,
342                                    uint64_t volatile_id);
343 NTSTATUS dup_file_fsp(
344         files_struct *from,
345         uint32_t access_mask,
346         files_struct *to);
347 NTSTATUS file_name_hash(connection_struct *conn,
348                         const char *name, uint32_t *p_name_hash);
349 NTSTATUS fsp_set_smb_fname(struct files_struct *fsp,
350                            const struct smb_filename *smb_fname_in);
351 size_t fsp_fullbasepath(struct files_struct *fsp, char *buf, size_t buflen);
352 void fsp_set_base_fsp(struct files_struct *fsp, struct files_struct *base_fsp);
353 bool fsp_is_alternate_stream(const struct files_struct *fsp);
354 struct files_struct *metadata_fsp(struct files_struct *fsp);
355 bool fsp_search_ask_sharemode(struct files_struct *fsp);
356 bool fsp_getinfo_ask_sharemode(struct files_struct *fsp);
357
358 NTSTATUS create_internal_fsp(connection_struct *conn,
359                              const struct smb_filename *smb_fname,
360                              struct files_struct **_fsp);
361 NTSTATUS create_internal_dirfsp(connection_struct *conn,
362                                 const struct smb_filename *smb_dname,
363                                 struct files_struct **_fsp);
364
365 NTSTATUS open_internal_dirfsp(connection_struct *conn,
366                               const struct smb_filename *smb_dname,
367                               int open_flags,
368                               struct files_struct **_fsp);
369 NTSTATUS openat_internal_dir_from_pathref(
370         struct files_struct *dirfsp,
371         int open_flags,
372         struct files_struct **_fsp);
373
374 NTSTATUS openat_pathref_fsp(const struct files_struct *dirfsp,
375                             struct smb_filename *smb_fname);
376 NTSTATUS open_stream_pathref_fsp(
377         struct files_struct **_base_fsp,
378         struct smb_filename *smb_fname);
379
380 struct reparse_data_buffer;
381
382 NTSTATUS openat_pathref_fsp_nosymlink(
383         TALLOC_CTX *mem_ctx,
384         struct connection_struct *conn,
385         struct files_struct *dirfsp,
386         const char *path_in,
387         NTTIME twrp,
388         bool posix,
389         struct smb_filename **_smb_fname,
390         struct reparse_data_buffer **_symlink_err);
391 NTSTATUS openat_pathref_fsp_lcomp(struct files_struct *dirfsp,
392                                   struct smb_filename *smb_fname_rel,
393                                   uint32_t ucf_flags);
394 NTSTATUS readlink_talloc(
395         TALLOC_CTX *mem_ctx,
396         struct files_struct *dirfsp,
397         struct smb_filename *smb_relname,
398         char **_substitute);
399
400 NTSTATUS read_symlink_reparse(TALLOC_CTX *mem_ctx,
401                               struct files_struct *dirfsp,
402                               struct smb_filename *smb_relname,
403                               struct reparse_data_buffer **_reparse);
404
405 void smb_fname_fsp_unlink(struct smb_filename *smb_fname);
406
407 NTSTATUS move_smb_fname_fsp_link(struct smb_filename *smb_fname_dst,
408                                  struct smb_filename *smb_fname_src);
409
410 NTSTATUS reference_smb_fname_fsp_link(struct smb_filename *smb_fname_dst,
411                                       const struct smb_filename *smb_fname_src);
412
413 NTSTATUS synthetic_pathref(TALLOC_CTX *mem_ctx,
414                            struct files_struct *dirfsp,
415                            const char *base_name,
416                            const char *stream_name,
417                            const SMB_STRUCT_STAT *psbuf,
418                            NTTIME twrp,
419                            uint32_t flags,
420                            struct smb_filename **_smb_fname);
421
422 NTSTATUS parent_pathref(TALLOC_CTX *mem_ctx,
423                         struct files_struct *dirfsp,
424                         const struct smb_filename *smb_fname,
425                         struct smb_filename **_parent,
426                         struct smb_filename **_atname);
427
428 /* The following definitions come from smbd/smb2_ipc.c  */
429
430 NTSTATUS nt_status_np_pipe(NTSTATUS status);
431
432 /* The following definitions come from smbd/mangle.c  */
433
434 void mangle_reset_cache(void);
435 void mangle_change_to_posix(void);
436 bool mangle_is_mangled(const char *s, const struct share_params *p);
437 bool mangle_is_8_3(const char *fname, bool check_case,
438                    const struct share_params *p);
439 bool mangle_is_8_3_wildcards(const char *fname, bool check_case,
440                              const struct share_params *p);
441 bool mangle_must_mangle(const char *fname,
442                    const struct share_params *p);
443 bool mangle_lookup_name_from_8_3(TALLOC_CTX *ctx,
444                         const char *in,
445                         char **out, /* talloced on the given context. */
446                         const struct share_params *p);
447 bool name_to_8_3(const char *in,
448                 char out[13],
449                 bool cache83,
450                 const struct share_params *p);
451
452 /* The following definitions come from smbd/mangle_hash.c  */
453
454 const struct mangle_fns *mangle_hash_init(void);
455
456 /* The following definitions come from smbd/mangle_hash2.c  */
457
458 const struct mangle_fns *mangle_hash2_init(void);
459 const struct mangle_fns *posix_mangle_init(void);
460
461 /* The following definitions come from smbd/msdfs.c  */
462
463 bool parse_msdfs_symlink(TALLOC_CTX *ctx,
464                         bool shuffle_referrals,
465                         const char *target,
466                         struct referral **preflist,
467                         size_t *refcount);
468 bool is_msdfs_link(struct files_struct *dirfsp,
469                    struct smb_filename *smb_fname);
470 struct junction_map;
471 NTSTATUS get_referred_path(TALLOC_CTX *ctx,
472                            struct auth_session_info *session_info,
473                            const char *dfs_path,
474                            const struct tsocket_address *remote_address,
475                            const struct tsocket_address *local_address,
476                            struct junction_map *jucn,
477                            size_t *consumedcntp,
478                            bool *self_referralp);
479 int setup_dfs_referral(connection_struct *orig_conn,
480                         const char *dfs_path,
481                         int max_referral_level,
482                         char **ppdata, NTSTATUS *pstatus);
483 bool create_junction(TALLOC_CTX *ctx,
484                 const char *dfs_path,
485                 struct junction_map *jucn);
486 struct referral;
487 char *msdfs_link_string(TALLOC_CTX *ctx,
488                 const struct referral *reflist,
489                 size_t referral_count);
490 bool create_msdfs_link(const struct junction_map *jucn,
491                        struct auth_session_info *session_info);
492 bool remove_msdfs_link(const struct junction_map *jucn,
493                        struct auth_session_info *session_info);
494
495 struct junction_map *enum_msdfs_links(TALLOC_CTX *ctx,
496                                       struct auth_session_info *session_info,
497                                       size_t *p_num_jn);
498 struct connection_struct;
499 struct smb_filename;
500
501 NTSTATUS create_conn_struct_cwd(TALLOC_CTX *mem_ctx,
502                                 struct tevent_context *ev,
503                                 struct messaging_context *msg,
504                                 const struct auth_session_info *session_info,
505                                 int snum,
506                                 const char *path,
507                                 struct connection_struct **c);
508 struct conn_struct_tos {
509         struct connection_struct *conn;
510         struct smb_filename *oldcwd_fname;
511 };
512 NTSTATUS create_conn_struct_tos(struct messaging_context *msg,
513                                 int snum,
514                                 const char *path,
515                                 const struct auth_session_info *session_info,
516                                 struct conn_struct_tos **_c);
517 NTSTATUS create_conn_struct_tos_cwd(struct messaging_context *msg,
518                                     int snum,
519                                     const char *path,
520                                     const struct auth_session_info *session_info,
521                                     struct conn_struct_tos **_c);
522
523 /* The following definitions come from smbd/notify.c  */
524
525 bool change_notify_fsp_has_changes(struct files_struct *fsp);
526 void change_notify_reply(struct smb_request *req,
527                          NTSTATUS error_code,
528                          uint32_t max_param,
529                          struct notify_change_buf *notify_buf,
530                          void (*reply_fn)(struct smb_request *req,
531                                           NTSTATUS error_code,
532                                           uint8_t *buf, size_t len));
533 void notify_callback(struct smbd_server_connection *sconn,
534                      void *private_data, struct timespec when,
535                      const struct notify_event *e);
536 NTSTATUS change_notify_create(struct files_struct *fsp,
537                               uint32_t max_buffer_size,
538                               uint32_t filter,
539                               bool recursive);
540 NTSTATUS change_notify_add_request(struct smb_request *req,
541                                 uint32_t max_param,
542                                 uint32_t filter, bool recursive,
543                                 struct files_struct *fsp,
544                                 void (*reply_fn)(struct smb_request *req,
545                                         NTSTATUS error_code,
546                                         uint8_t *buf, size_t len));
547 void smbd_notify_cancel_deleted(struct messaging_context *msg,
548                                 void *private_data, uint32_t msg_type,
549                                 struct server_id server_id, DATA_BLOB *data);
550 void smbd_notifyd_restarted(struct messaging_context *msg,
551                             void *private_data, uint32_t msg_type,
552                             struct server_id server_id, DATA_BLOB *data);
553 bool remove_pending_change_notify_requests_by_mid(
554         struct smbd_server_connection *sconn, uint64_t mid);
555 void remove_pending_change_notify_requests_by_fid(files_struct *fsp,
556                                                   NTSTATUS status);
557 void notify_fname(connection_struct *conn, uint32_t action, uint32_t filter,
558                   const char *path);
559 char *notify_filter_string(TALLOC_CTX *mem_ctx, uint32_t filter);
560 struct sys_notify_context *sys_notify_context_create(TALLOC_CTX *mem_ctx,
561                                                      struct tevent_context *ev);
562
563 /* The following definitions come from smbd/notify_inotify.c  */
564
565 int inotify_watch(TALLOC_CTX *mem_ctx,
566                   struct sys_notify_context *ctx,
567                   const char *path,
568                   uint32_t *filter,
569                   uint32_t *subdir_filter,
570                   void (*callback)(struct sys_notify_context *ctx,
571                                    void *private_data,
572                                    struct notify_event *ev,
573                                    uint32_t filter),
574                   void *private_data,
575                   void *handle_p);
576
577 int fam_watch(TALLOC_CTX *mem_ctx,
578               struct sys_notify_context *ctx,
579               const char *path,
580               uint32_t *filter,
581               uint32_t *subdir_filter,
582               void (*callback)(struct sys_notify_context *ctx,
583                                void *private_data,
584                                struct notify_event *ev,
585                                uint32_t filter),
586               void *private_data,
587               void *handle_p);
588
589
590 /* The following definitions come from smbd/notify_internal.c  */
591
592 struct notify_context *notify_init(
593         TALLOC_CTX *mem_ctx, struct messaging_context *msg,
594         struct smbd_server_connection *sconn,
595         void (*callback)(struct smbd_server_connection *sconn,
596                          void *, struct timespec,
597                          const struct notify_event *));
598 NTSTATUS notify_add(struct notify_context *ctx,
599                     const char *path, uint32_t filter, uint32_t subdir_filter,
600                     void *private_data);
601 NTSTATUS notify_remove(struct notify_context *ctx, void *private_data,
602                        char *path);
603 void notify_trigger(struct notify_context *notify,
604                     uint32_t action, uint32_t filter,
605                     const char *dir, const char *path);
606
607 /* The following definitions come from smbd/ntquotas.c  */
608
609 NTSTATUS vfs_get_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype,
610                          struct dom_sid *psid, SMB_NTQUOTA_STRUCT *qt);
611 int vfs_set_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, struct dom_sid *psid, SMB_NTQUOTA_STRUCT *qt);
612 int vfs_get_user_ntquota_list(files_struct *fsp, SMB_NTQUOTA_LIST **qt_list);
613 void *init_quota_handle(TALLOC_CTX *mem_ctx);
614
615 /* The following definitions come from smbd/smb2_nttrans.c  */
616
617 NTSTATUS set_sd(files_struct *fsp, struct security_descriptor *psd,
618                        uint32_t security_info_sent);
619 NTSTATUS set_sd_blob(files_struct *fsp, uint8_t *data, uint32_t sd_len,
620                        uint32_t security_info_sent);
621 NTSTATUS copy_internals(TALLOC_CTX *ctx,
622                         connection_struct *conn,
623                         struct smb_request *req,
624                         struct files_struct *src_dirfsp,
625                         struct smb_filename *smb_fname_src,
626                         struct files_struct *dst_dirfsp,
627                         struct smb_filename *smb_fname_dst,
628                         uint32_t attrs);
629 NTSTATUS smbd_do_query_security_desc(connection_struct *conn,
630                                         TALLOC_CTX *mem_ctx,
631                                         files_struct *fsp,
632                                         uint32_t security_info_wanted,
633                                         uint32_t max_data_count,
634                                         uint8_t **ppmarshalled_sd,
635                                         size_t *psd_size);
636 #ifdef HAVE_SYS_QUOTAS
637
638 struct smb2_query_quota_info;
639
640 NTSTATUS smbd_do_query_getinfo_quota(TALLOC_CTX *mem_ctx,
641                                      files_struct *fsp,
642                                      bool restart_scan,
643                                      bool return_single,
644                                      uint32_t sid_list_length,
645                                      DATA_BLOB *sidbuffer,
646                                      uint32_t max_data_count,
647                                      uint8_t **p_data,
648                                      uint32_t *p_data_size);
649 #endif
650
651 /* The following definitions come from smbd/open.c  */
652
653 NTSTATUS smbd_check_access_rights_fsp(struct files_struct *dirfsp,
654                                       struct files_struct *fsp,
655                                       bool use_privs,
656                                       uint32_t access_mask);
657 NTSTATUS check_parent_access_fsp(struct files_struct *fsp,
658                                 uint32_t access_mask);
659 NTSTATUS fd_openat(const struct files_struct *dirfsp,
660                    struct smb_filename *smb_fname,
661                    files_struct *fsp,
662                    const struct vfs_open_how *how);
663 NTSTATUS fd_close(files_struct *fsp);
664 bool is_oplock_stat_open(uint32_t access_mask);
665 bool is_lease_stat_open(uint32_t access_mask);
666 NTSTATUS send_break_message(struct messaging_context *msg_ctx,
667                             const struct file_id *id,
668                             const struct share_mode_entry *exclusive,
669                             uint16_t break_to);
670 struct deferred_open_record;
671 bool is_deferred_open_async(const struct deferred_open_record *rec);
672 bool defer_smb1_sharing_violation(struct smb_request *req);
673 NTSTATUS create_directory(connection_struct *conn,
674                           struct smb_request *req,
675                           struct files_struct *dirfsp,
676                           struct smb_filename *smb_dname);
677 void msg_file_was_renamed(struct messaging_context *msg,
678                           void *private_data,
679                           uint32_t msg_type,
680                           struct server_id server_id,
681                           DATA_BLOB *data);
682 struct fsp_lease *find_fsp_lease(struct files_struct *new_fsp,
683                                  const struct smb2_lease_key *key,
684                                  uint32_t current_state,
685                                  uint16_t lease_version,
686                                  uint16_t lease_epoch);
687 NTSTATUS create_file_default(connection_struct *conn,
688                              struct smb_request *req,
689                              struct files_struct *dirfsp,
690                              struct smb_filename * smb_fname,
691                              uint32_t access_mask,
692                              uint32_t share_access,
693                              uint32_t create_disposition,
694                              uint32_t create_options,
695                              uint32_t file_attributes,
696                              uint32_t oplock_request,
697                              const struct smb2_lease *lease,
698                              uint64_t allocation_size,
699                              uint32_t private_flags,
700                              struct security_descriptor *sd,
701                              struct ea_list *ea_list,
702                              files_struct **result,
703                              int *pinfo,
704                              const struct smb2_create_blobs *in_context_blobs,
705                              struct smb2_create_blobs *out_context_blobs);
706
707 /* The following definitions come from smbd/oplock.c  */
708
709 uint32_t get_lease_type(struct share_mode_entry *e, struct file_id id);
710
711 void break_kernel_oplock(struct messaging_context *msg_ctx, files_struct *fsp);
712 NTSTATUS set_file_oplock(files_struct *fsp);
713 void release_file_oplock(files_struct *fsp);
714 bool remove_oplock(files_struct *fsp);
715 bool downgrade_oplock(files_struct *fsp);
716 bool fsp_lease_update(struct files_struct *fsp);
717 NTSTATUS downgrade_lease(struct smbXsrv_client *client,
718                         uint32_t num_file_ids,
719                         const struct file_id *ids,
720                         const struct smb2_lease_key *key,
721                         uint32_t lease_state);
722 void contend_level2_oplocks_begin(files_struct *fsp,
723                                   enum level2_contention_type type);
724 void contend_level2_oplocks_end(files_struct *fsp,
725                                 enum level2_contention_type type);
726 void smbd_contend_level2_oplocks_begin(files_struct *fsp,
727                                   enum level2_contention_type type);
728 void smbd_contend_level2_oplocks_end(files_struct *fsp,
729                                 enum level2_contention_type type);
730 void share_mode_entry_to_message(char *msg, const struct file_id *id,
731                                  const struct share_mode_entry *e);
732 void message_to_share_mode_entry(struct file_id *id,
733                                  struct share_mode_entry *e,
734                                  const char *msg);
735 bool init_oplocks(struct smbd_server_connection *sconn);
736 void init_kernel_oplocks(struct smbd_server_connection *sconn);
737
738 /* The following definitions come from smbd/oplock_linux.c  */
739
740 int linux_set_lease_sighandler(int fd);
741 int linux_setlease(int fd, int leasetype);
742 struct kernel_oplocks *linux_init_kernel_oplocks(struct smbd_server_connection *sconn);
743
744 /* The following definitions come from smbd/password.c  */
745
746 void invalidate_vuid(struct smbd_server_connection *sconn, uint64_t vuid);
747 int register_homes_share(const char *username);
748
749 /* The following definitions come from smbd/pipes.c  */
750
751 NTSTATUS open_np_file(struct smb_request *smb_req, const char *name,
752                       struct files_struct **pfsp);
753
754 /* The following definitions come from smbd/posix_acls.c  */
755
756 mode_t unix_perms_to_acl_perms(mode_t mode, int r_mask, int w_mask, int x_mask);
757 int map_acl_perms_to_permset(mode_t mode, SMB_ACL_PERMSET_T *p_permset);
758 uint32_t map_canon_ace_perms(int snum,
759                                 enum security_ace_type *pacl_type,
760                                 mode_t perms,
761                                 bool directory_ace);
762 bool current_user_in_group(connection_struct *conn, gid_t gid);
763 SMB_ACL_T free_empty_sys_acl(connection_struct *conn, SMB_ACL_T the_acl);
764 NTSTATUS posix_fget_nt_acl(struct files_struct *fsp, uint32_t security_info,
765                            TALLOC_CTX *mem_ctx,
766                            struct security_descriptor **ppdesc);
767 NTSTATUS chown_if_needed(files_struct *fsp, uint32_t security_info_sent,
768                          const struct security_descriptor *psd,
769                          bool *did_chown);
770 NTSTATUS set_nt_acl(files_struct *fsp, uint32_t security_info_sent, const struct security_descriptor *psd);
771 int get_acl_group_bits(connection_struct *conn,
772                        struct files_struct *fsp,
773                        mode_t *mode);
774 int inherit_access_posix_acl(connection_struct *conn,
775                              struct files_struct *inherit_from_dirfsp,
776                              const struct smb_filename *smb_fname,
777                              mode_t mode);
778 NTSTATUS set_unix_posix_default_acl(connection_struct *conn,
779                                 files_struct *fsp,
780                                 uint16_t num_def_acls, const char *pdata);
781 NTSTATUS set_unix_posix_acl(connection_struct *conn, files_struct *fsp,
782                                 uint16_t num_acls,
783                                 const char *pdata);
784 int posix_sys_acl_blob_get_file(vfs_handle_struct *handle,
785                                 const struct smb_filename *smb_fname,
786                                 TALLOC_CTX *mem_ctx,
787                                 char **blob_description,
788                                 DATA_BLOB *blob);
789 int posix_sys_acl_blob_get_fd(vfs_handle_struct *handle,
790                               files_struct *fsp,
791                               TALLOC_CTX *mem_ctx,
792                               char **blob_description,
793                               DATA_BLOB *blob);
794
795 enum default_acl_style {DEFAULT_ACL_POSIX, DEFAULT_ACL_WINDOWS, DEFAULT_ACL_EVERYONE};
796
797 const struct enum_list *get_default_acl_style_list(void);
798
799 NTSTATUS make_default_filesystem_acl(
800         TALLOC_CTX *ctx,
801         enum default_acl_style acl_style,
802         const char *name,
803         const SMB_STRUCT_STAT *psbuf,
804         struct security_descriptor **ppdesc);
805
806 /* The following definitions come from smbd/smb2_process.c  */
807
808 #if !defined(WITH_SMB1SERVER)
809 bool smb1_srv_send(struct smbXsrv_connection *xconn,
810                    char *buffer,
811                    bool do_signing,
812                    uint32_t seqnum,
813                    bool do_encrypt);
814 #endif
815 size_t srv_smb1_set_message(char *buf,
816                        size_t num_words,
817                        size_t num_bytes,
818                        bool zero);
819 NTSTATUS read_packet_remainder(int fd, char *buffer,
820                                unsigned int timeout, ssize_t len);
821 NTSTATUS receive_smb_talloc(TALLOC_CTX *mem_ctx,
822                             struct smbXsrv_connection *xconn,
823                             int sock,
824                             char **buffer, unsigned int timeout,
825                             size_t *p_unread, bool *p_encrypted,
826                             size_t *p_len,
827                             uint32_t *seqnum,
828                             bool trusted_channel);
829 void remove_deferred_open_message_smb(struct smbXsrv_connection *xconn,
830                                       uint64_t mid);
831 bool schedule_deferred_open_message_smb(struct smbXsrv_connection *xconn,
832                                         uint64_t mid);
833 bool open_was_deferred(struct smbXsrv_connection *xconn, uint64_t mid);
834 bool get_deferred_open_message_state(struct smb_request *smbreq,
835                                 struct timeval *p_request_time,
836                                 struct deferred_open_record **open_rec);
837 bool push_deferred_open_message_smb(struct smb_request *req,
838                                     struct timeval timeout,
839                                     struct file_id id,
840                                     struct deferred_open_record *open_rec);
841 bool create_smb1_outbuf(TALLOC_CTX *mem_ctx, struct smb_request *req,
842                    const uint8_t *inbuf, char **outbuf,
843                    uint8_t num_words, uint32_t num_bytes);
844 void construct_smb1_reply_common_req(struct smb_request *req, char *outbuf);
845 void reply_smb1_outbuf(struct smb_request *req, uint8_t num_words, uint32_t num_bytes);
846 void process_smb(struct smbXsrv_connection *xconn,
847                  uint8_t *inbuf,
848                  size_t nread,
849                  size_t unread_bytes,
850                  uint32_t seqnum,
851                  bool encrypted);
852 void smbd_process(struct tevent_context *ev_ctx,
853                   struct messaging_context *msg_ctx,
854                   int sock_fd,
855                   bool interactive);
856 bool valid_smb1_header(const uint8_t *inbuf);
857 bool init_smb1_request(struct smb_request *req,
858                       struct smbd_server_connection *sconn,
859                       struct smbXsrv_connection *xconn,
860                       const uint8_t *inbuf,
861                       size_t unread_bytes, bool encrypted,
862                       uint32_t seqnum);
863
864 /* The following definitions come from smbd/quotas.c  */
865
866 bool disk_quotas(connection_struct *conn, struct smb_filename *fname,
867                  uint64_t *bsize, uint64_t *dfree, uint64_t *dsize);
868
869 /* The following definitions come from smbd/smb2_reply.c  */
870
871 NTSTATUS check_path_syntax(char *path, bool posix);
872 NTSTATUS smb1_strip_dfs_path(TALLOC_CTX *mem_ctx,
873                              uint32_t *ucf_flags,
874                              char **in_path);
875 NTSTATUS smb2_strip_dfs_path(const char *in_path, const char **out_path);
876 size_t srvstr_get_path(TALLOC_CTX *ctx,
877                         const char *inbuf,
878                         uint16_t smb_flags2,
879                         char **pp_dest,
880                         const char *src,
881                         size_t src_len,
882                         int flags,
883                         NTSTATUS *err);
884 size_t srvstr_get_path_posix(TALLOC_CTX *ctx,
885                         const char *inbuf,
886                         uint16_t smb_flags2,
887                         char **pp_dest,
888                         const char *src,
889                         size_t src_len,
890                         int flags,
891                         NTSTATUS *err);
892 size_t srvstr_get_path_req(TALLOC_CTX *mem_ctx, struct smb_request *req,
893                            char **pp_dest, const char *src, int flags,
894                            NTSTATUS *err);
895 size_t srvstr_pull_req_talloc(TALLOC_CTX *ctx, struct smb_request *req,
896                               char **dest, const uint8_t *src, int flags);
897 bool check_fsp_open(connection_struct *conn, struct smb_request *req,
898                     files_struct *fsp);
899 bool check_fsp(connection_struct *conn, struct smb_request *req,
900                files_struct *fsp);
901 bool check_fsp_ntquota_handle(connection_struct *conn, struct smb_request *req,
902                               files_struct *fsp);
903 void reply_special(struct smbXsrv_connection *xconn, char *inbuf, size_t inbuf_size);
904 NTSTATUS unlink_internals(connection_struct *conn,
905                         struct smb_request *req,
906                         uint32_t dirtype,
907                         struct files_struct *dirfsp,
908                         struct smb_filename *smb_fname);
909 ssize_t fake_sendfile(struct smbXsrv_connection *xconn, files_struct *fsp,
910                       off_t startpos, size_t nread);
911 ssize_t sendfile_short_send(struct smbXsrv_connection *xconn,
912                             files_struct *fsp,
913                             ssize_t nread,
914                             size_t headersize,
915                             size_t smb_maxcnt);
916 NTSTATUS rename_internals_fsp(connection_struct *conn,
917                         files_struct *fsp,
918                         struct smb_filename *smb_fname_dst_in,
919                         const char *dst_original_lcomp,
920                         uint32_t attrs,
921                         bool replace_if_exists);
922 NTSTATUS rename_internals(TALLOC_CTX *ctx,
923                         connection_struct *conn,
924                         struct smb_request *req,
925                         struct files_struct *src_dirfsp,
926                         struct smb_filename *smb_fname_src,
927                         struct smb_filename *smb_fname_dst,
928                         const char *dst_original_lcomp,
929                         uint32_t attrs,
930                         bool replace_if_exists,
931                         uint32_t access_mask);
932 NTSTATUS copy_file(TALLOC_CTX *ctx,
933                         connection_struct *conn,
934                         struct smb_filename *smb_fname_src,
935                         struct smb_filename *smb_fname_dst,
936                         uint32_t new_create_disposition);
937 uint64_t get_lock_offset(const uint8_t *data, int data_offset,
938                          bool large_file_format);
939
940 /* The following definitions come from smbd/seal.c  */
941
942 bool is_encrypted_packet(const uint8_t *inbuf);
943 void srv_free_enc_buffer(struct smbXsrv_connection *xconn, char *buf);
944 NTSTATUS srv_decrypt_buffer(struct smbXsrv_connection *xconn, char *buf);
945 NTSTATUS srv_encrypt_buffer(struct smbXsrv_connection *xconn, char *buf,
946                             char **buf_out);
947 NTSTATUS srv_request_encryption_setup(connection_struct *conn,
948                                         unsigned char **ppdata,
949                                         size_t *p_data_size,
950                                         unsigned char **pparam,
951                                         size_t *p_param_size);
952 NTSTATUS srv_encryption_start(connection_struct *conn);
953 void server_encryption_shutdown(struct smbXsrv_connection *xconn);
954
955 /* The following definitions come from smbd/sec_ctx.c  */
956
957 bool unix_token_equal(const struct security_unix_token *t1, const struct security_unix_token *t2);
958 bool push_sec_ctx(void);
959 void set_sec_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups, const struct security_token *token);
960 void set_root_sec_ctx(void);
961 bool pop_sec_ctx(void);
962 void init_sec_ctx(void);
963 const struct security_token *sec_ctx_active_token(void);
964
965 /* The following definitions come from smbd/server.c  */
966
967 struct memcache *smbd_memcache(void);
968 bool snum_is_shared_printer(int snum);
969 void delete_and_reload_printers(void);
970 bool reload_services(struct smbd_server_connection *sconn,
971                      bool (*snumused) (struct smbd_server_connection *, int),
972                      bool test);
973
974 /* The following definitions come from smbd/server_exit.c  */
975
976 void smbd_exit_server(const char *reason) _NORETURN_;
977 void smbd_exit_server_cleanly(const char *const reason) _NORETURN_;
978
979 /* The following definitions come from smbd/smb2_service.c  */
980
981 bool set_conn_connectpath(connection_struct *conn, const char *connectpath);
982 bool canonicalize_connect_path(connection_struct *conn);
983 NTSTATUS set_conn_force_user_group(connection_struct *conn, int snum);
984 bool chdir_current_service(connection_struct *conn);
985 void load_registry_shares(void);
986 int add_home_service(const char *service, const char *username, const char *homedir);
987 int find_service(TALLOC_CTX *ctx, const char *service, char **p_service_out);
988 connection_struct *make_connection_smb2(struct smbd_smb2_request *req,
989                                         struct smbXsrv_tcon *tcon,
990                                         int snum,
991                                         const char *pdev,
992                                         NTSTATUS *pstatus);
993 NTSTATUS make_connection_snum(struct smbXsrv_connection *xconn,
994                               connection_struct *conn,
995                               int snum,
996                               struct smbXsrv_session *session,
997                               const char *pdev);
998 void close_cnum(connection_struct *conn,
999                 uint64_t vuid,
1000                 enum file_close_type close_type);
1001
1002 /* The following definitions come from smbd/session.c  */
1003 struct sessionid;
1004 struct smbXsrv_session;
1005 bool session_init(void);
1006 bool session_claim(struct smbXsrv_session *session);
1007 void session_yield(struct smbXsrv_session *session);
1008 int list_sessions(TALLOC_CTX *mem_ctx, struct sessionid **session_list);
1009 int find_sessions(TALLOC_CTX *mem_ctx, const char *username,
1010                   const char *machine, struct sessionid **session_list);
1011
1012 /* The following definitions come from smbd/share_access.c  */
1013
1014 bool token_contains_name_in_list(const char *username,
1015                                  const char *domain,
1016                                  const char *sharename,
1017                                  const struct security_token *token,
1018                                  const char **list);
1019 bool user_ok_token(const char *username, const char *domain,
1020                    const struct security_token *token, int snum);
1021 bool is_share_read_only_for_token(const char *username,
1022                                   const char *domain,
1023                                   const struct security_token *token,
1024                                   connection_struct *conn);
1025
1026 /* The following definitions come from smbd/srvstr.c  */
1027
1028 NTSTATUS srvstr_push_fn(const char *base_ptr, uint16_t smb_flags2, void *dest,
1029                       const char *src, int dest_len, int flags, size_t *ret_len);
1030
1031 /* The following definitions come from smbd/statvfs.c  */
1032
1033 int sys_statvfs(const char *path, struct vfs_statvfs_struct *statbuf);
1034
1035 /* The following definitions come from smbd/trans2.c  */
1036
1037 char *store_file_unix_basic(connection_struct *conn,
1038                             char *pdata,
1039                             files_struct *fsp,
1040                             const SMB_STRUCT_STAT *psbuf);
1041 char *store_file_unix_basic_info2(connection_struct *conn,
1042                                   char *pdata,
1043                                   files_struct *fsp,
1044                                   const SMB_STRUCT_STAT *psbuf);
1045 NTSTATUS smb_set_file_disposition_info(connection_struct *conn,
1046                                        const char *pdata,
1047                                        int total_data,
1048                                        files_struct *fsp,
1049                                        struct smb_filename *smb_fname);
1050 NTSTATUS refuse_symlink_fsp(const struct files_struct *fsp);
1051 NTSTATUS check_any_access_fsp(struct files_struct *fsp,
1052                               uint32_t access_requested);
1053 uint64_t smb_roundup(connection_struct *conn, uint64_t val);
1054 bool samba_private_attr_name(const char *unix_ea_name);
1055 NTSTATUS get_ea_value_fsp(TALLOC_CTX *mem_ctx,
1056                           files_struct *fsp,
1057                           const char *ea_name,
1058                           struct ea_struct *pea);
1059 NTSTATUS get_ea_names_from_fsp(TALLOC_CTX *mem_ctx,
1060                         files_struct *fsp,
1061                         char ***pnames,
1062                         size_t *pnum_names);
1063 NTSTATUS set_ea(connection_struct *conn, files_struct *fsp,
1064                 struct ea_list *ea_list);
1065 unsigned char *create_volume_objectid(connection_struct *conn, unsigned char objid[16]);
1066 NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
1067                 connection_struct *conn,
1068                 struct smb_request *req,
1069                 bool overwrite_if_exists,
1070                 const struct smb_filename *smb_fname_old,
1071                 struct smb_filename *smb_fname_new);
1072 NTSTATUS smb_set_file_time(connection_struct *conn,
1073                            files_struct *fsp,
1074                            struct smb_filename *smb_fname,
1075                            struct smb_file_time *ft,
1076                            bool setting_write_time);
1077 NTSTATUS smb_set_file_size(connection_struct *conn,
1078                            struct smb_request *req,
1079                            files_struct *fsp,
1080                            struct smb_filename *smb_fname,
1081                            const SMB_STRUCT_STAT *psbuf,
1082                            off_t size,
1083                            bool fail_after_createfile);
1084
1085 bool map_info2_flags_to_sbuf(const SMB_STRUCT_STAT *psbuf,
1086                              const uint32_t smb_fflags,
1087                              const uint32_t smb_fmask,
1088                              int *stat_fflags);
1089
1090 enum perm_type {
1091         PERM_NEW_FILE,
1092         PERM_NEW_DIR,
1093         PERM_EXISTING_FILE,
1094         PERM_EXISTING_DIR
1095 };
1096
1097 NTSTATUS unix_perms_from_wire(connection_struct *conn,
1098                               const SMB_STRUCT_STAT *psbuf,
1099                               uint32_t perms,
1100                               enum perm_type ptype,
1101                               mode_t *ret_perms);
1102 struct ea_list *read_ea_list(TALLOC_CTX *ctx, const char *pdata,
1103                              size_t data_size);
1104 unsigned int estimate_ea_size(files_struct *fsp);
1105 NTSTATUS smb_set_fsquota(connection_struct *conn,
1106                          struct smb_request *req,
1107                          files_struct *fsp,
1108                          const DATA_BLOB *qdata);
1109
1110 /* The following definitions come from smbd/uid.c  */
1111
1112 bool change_to_guest(void);
1113 NTSTATUS check_user_share_access(connection_struct *conn,
1114                                 const struct auth_session_info *session_info,
1115                                 uint32_t *p_share_access,
1116                                 bool *p_readonly_share);
1117 bool change_to_user_and_service(connection_struct *conn, uint64_t vuid);
1118 bool change_to_user_and_service_by_fsp(struct files_struct *fsp);
1119 bool smbd_change_to_root_user(void);
1120 bool smbd_become_authenticated_pipe_user(struct auth_session_info *session_info);
1121 bool smbd_unbecome_authenticated_pipe_user(void);
1122 void become_root(void);
1123 void unbecome_root(void);
1124 void smbd_become_root(void);
1125 void smbd_unbecome_root(void);
1126 bool become_user_without_service(connection_struct *conn, uint64_t vuid);
1127 bool become_user_without_service_by_fsp(struct files_struct *fsp);
1128 bool become_user_without_service_by_session(connection_struct *conn,
1129                             const struct auth_session_info *session_info);
1130 bool unbecome_user_without_service(void);
1131 uid_t get_current_uid(connection_struct *conn);
1132 gid_t get_current_gid(connection_struct *conn);
1133 const struct security_unix_token *get_current_utok(connection_struct *conn);
1134 const struct security_token *get_current_nttok(connection_struct *conn);
1135
1136 /* The following definitions come from smbd/utmp.c  */
1137
1138 void sys_utmp_claim(const char *username, const char *hostname,
1139                     const char *id_str, int id_num);
1140 void sys_utmp_yield(const char *username, const char *hostname,
1141                     const char *id_str, int id_num);
1142
1143 /* The following definitions come from smbd/vfs.c  */
1144
1145 bool vfs_init_custom(connection_struct *conn, const char *vfs_object);
1146 bool smbd_vfs_init(connection_struct *conn);
1147 NTSTATUS vfs_file_exist(connection_struct *conn, struct smb_filename *smb_fname);
1148 bool vfs_valid_pread_range(off_t offset, size_t length);
1149 bool vfs_valid_pwrite_range(off_t offset, size_t length);
1150 ssize_t vfs_pwrite_data(struct smb_request *req,
1151                         files_struct *fsp,
1152                         const char *buffer,
1153                         size_t N,
1154                         off_t offset);
1155 int vfs_allocate_file_space(files_struct *fsp, uint64_t len);
1156 int vfs_set_filelen(files_struct *fsp, off_t len);
1157 int vfs_slow_fallocate(files_struct *fsp, off_t offset, off_t len);
1158 int vfs_fill_sparse(files_struct *fsp, off_t len);
1159 int vfs_set_blocking(files_struct *fsp, bool set);
1160 off_t vfs_transfer_file(files_struct *in, files_struct *out, off_t n);
1161 const char *vfs_readdirname(connection_struct *conn,
1162                             struct files_struct *dirfsp,
1163                             DIR *d,
1164                             char **talloced);
1165 int vfs_ChDir(connection_struct *conn,
1166                         const struct smb_filename *smb_fname);
1167 struct smb_filename *vfs_GetWd(TALLOC_CTX *ctx, connection_struct *conn);
1168 int vfs_stat(struct connection_struct *conn,
1169              struct smb_filename *smb_fname);
1170 int vfs_stat_smb_basename(struct connection_struct *conn,
1171                         const struct smb_filename *smb_fname_in,
1172                         SMB_STRUCT_STAT *psbuf);
1173 NTSTATUS vfs_stat_fsp(files_struct *fsp);
1174 NTSTATUS vfs_fstreaminfo(struct files_struct *fsp,
1175                         TALLOC_CTX *mem_ctx,
1176                         unsigned int *num_streams,
1177                         struct stream_struct **streams);
1178 void init_smb_file_time(struct smb_file_time *ft);
1179 int vfs_fake_fd(void);
1180 int vfs_fake_fd_close(int fd);
1181
1182 /* The following definitions come from smbd/avahi_register.c */
1183
1184 void *avahi_start_register(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
1185                            uint16_t port);
1186
1187 /* The following definitions come from smbd/smb2_create.c */
1188
1189 NTSTATUS vfs_default_durable_cookie(struct files_struct *fsp,
1190                                     TALLOC_CTX *mem_ctx,
1191                                     DATA_BLOB *cookie_blob);
1192 NTSTATUS vfs_default_durable_disconnect(struct files_struct *fsp,
1193                                         const DATA_BLOB old_cookie,
1194                                         TALLOC_CTX *mem_ctx,
1195                                         DATA_BLOB *new_cookie);
1196 NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
1197                                        struct smb_request *smb1req,
1198                                        struct smbXsrv_open *op,
1199                                        const DATA_BLOB old_cookie,
1200                                        TALLOC_CTX *mem_ctx,
1201                                        files_struct **result,
1202                                        DATA_BLOB *new_cookie);
1203
1204 struct smb3_file_posix_information;
1205 void smb3_file_posix_information_init(
1206         connection_struct *conn,
1207         const struct stat_ex *st,
1208         uint32_t reparse_tag,
1209         uint32_t dos_attributes,
1210         struct smb3_file_posix_information *dst);
1211
1212 #endif /* _SMBD_PROTO_H_ */