X-Git-Url: http://git.samba.org/?p=samba.git;a=blobdiff_plain;f=source3%2Fsmbd%2Fproto.h;h=eb35a94862ac82b249527d5a3475a4c0526d47ca;hp=175b92bc1cdcc4f55b5dba976e02e920446ea6f8;hb=29dd6f3e59055a17fa3d6a63619773f940e63374;hpb=fc424b28cd54f4ff5737417db1e1f8059cad80db diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h index 175b92bc1cd..eb35a94862a 100644 --- a/source3/smbd/proto.h +++ b/source3/smbd/proto.h @@ -66,9 +66,6 @@ void srv_set_signing(struct smbXsrv_connection *conn, /* The following definitions come from smbd/aio.c */ -int get_outstanding_aio_calls(void); -void increment_outstanding_aio_calls(void); -void decrement_outstanding_aio_calls(void); struct aio_extra; bool aio_write_through_requested(struct aio_extra *aio_ex); NTSTATUS schedule_aio_read_and_X(connection_struct *conn, @@ -149,6 +146,9 @@ NTSTATUS delete_all_streams(connection_struct *conn, bool recursive_rmdir(TALLOC_CTX *ctx, connection_struct *conn, struct smb_filename *smb_dname); +bool has_other_nonposix_opens(struct share_mode_lock *lck, + struct files_struct *fsp, + struct server_id self); /* The following definitions come from smbd/conn.c */ @@ -176,6 +176,7 @@ uint64_t sys_disk_free(connection_struct *conn, struct smb_filename *fname, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize); uint64_t get_dfree_info(connection_struct *conn, struct smb_filename *fname, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize); +void flush_dfree_cache(void); /* The following definitions come from smbd/dir.c */ @@ -262,6 +263,11 @@ mode_t unix_mode(connection_struct *conn, int dosmode, uint32_t dos_mode_msdfs(connection_struct *conn, const struct smb_filename *smb_fname); uint32_t dos_mode(connection_struct *conn, struct smb_filename *smb_fname); +struct tevent_req *dos_mode_at_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + files_struct *dir_fsp, + struct smb_filename *smb_fname); +NTSTATUS dos_mode_at_recv(struct tevent_req *req, uint32_t *dosmode); int file_set_dosmode(connection_struct *conn, struct smb_filename *smb_fname, uint32_t dosmode, const char *parent_dir, bool newfile); NTSTATUS file_set_sparse(connection_struct *conn, @@ -292,11 +298,20 @@ struct timespec get_change_timespec(connection_struct *conn, struct files_struct *fsp, const struct smb_filename *smb_fname); +NTSTATUS parse_dos_attribute_blob(struct smb_filename *smb_fname, + DATA_BLOB blob, + uint32_t *pattr); + /* The following definitions come from smbd/error.c */ bool use_nt_status(void); void error_packet_set(char *outbuf, uint8_t eclass, uint32_t ecode, NTSTATUS ntstatus, int line, const char *file); -int error_packet(char *outbuf, uint8_t eclass, uint32_t ecode, NTSTATUS ntstatus, int line, const char *file); +size_t error_packet(char *outbuf, + uint8_t eclass, + uint32_t ecode, + NTSTATUS ntstatus, + int line, + const char *file); void reply_nt_error(struct smb_request *req, NTSTATUS ntstatus, int line, const char *file); void reply_force_dos_error(struct smb_request *req, uint8_t eclass, uint32_t ecode, @@ -317,10 +332,7 @@ NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32_t dosmode); /* The following definitions come from smbd/fileio.c */ ssize_t read_file(files_struct *fsp,char *data,off_t pos,size_t n); -void update_write_time_handler(struct tevent_context *ctx, - struct tevent_timer *te, - struct timeval now, - void *private_data); +void fsp_flush_write_time_update(struct files_struct *fsp); void trigger_write_time_update(struct files_struct *fsp); void trigger_write_time_update_immediate(struct files_struct *fsp); void mark_file_modified(files_struct *fsp); @@ -353,6 +365,7 @@ NTSTATUS filename_convert(TALLOC_CTX *mem_ctx, connection_struct *conn, const char *name_in, uint32_t ucf_flags, + time_t *twrp, bool *ppath_contains_wcard, struct smb_filename **pp_smb_fname); NTSTATUS filename_convert_with_privilege(TALLOC_CTX *mem_ctx, @@ -390,7 +403,6 @@ struct files_struct *file_find_one_fsp_from_lease_key( struct smbd_server_connection *sconn, const struct smb2_lease_key *lease_key); bool file_find_subpath(files_struct *dir_fsp); -void file_sync_all(connection_struct *conn); void fsp_free(files_struct *fsp); void file_free(struct smb_request *req, files_struct *fsp); files_struct *file_fsp(struct smb_request *req, uint16_t fid); @@ -496,21 +508,22 @@ NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx, bool allow_broken_path, char **pp_name_out, bool *ppath_contains_wcard); -NTSTATUS create_conn_struct(TALLOC_CTX *ctx, - struct tevent_context *ev, - struct messaging_context *msg, - connection_struct **pconn, - int snum, - const char *path, - const struct auth_session_info *session_info); -NTSTATUS create_conn_struct_cwd(TALLOC_CTX *ctx, - struct tevent_context *ev, - struct messaging_context *msg, - connection_struct **pconn, +struct connection_struct; +struct smb_filename; +struct conn_struct_tos { + struct connection_struct *conn; + struct smb_filename *oldcwd_fname; +}; +NTSTATUS create_conn_struct_tos(struct messaging_context *msg, int snum, const char *path, const struct auth_session_info *session_info, - struct smb_filename **poldcwd_fname); + struct conn_struct_tos **_c); +NTSTATUS create_conn_struct_tos_cwd(struct messaging_context *msg, + int snum, + const char *path, + const struct auth_session_info *session_info, + struct conn_struct_tos **_c); /* The following definitions come from smbd/negprot.c */ @@ -585,7 +598,6 @@ int fam_watch(TALLOC_CTX *mem_ctx, struct notify_context *notify_init( TALLOC_CTX *mem_ctx, struct messaging_context *msg, - struct tevent_context *ev, struct smbd_server_connection *sconn, void (*callback)(struct smbd_server_connection *sconn, void *, struct timespec, @@ -631,6 +643,20 @@ NTSTATUS smbd_do_query_security_desc(connection_struct *conn, uint32_t max_data_count, uint8_t **ppmarshalled_sd, size_t *psd_size); +#ifdef HAVE_SYS_QUOTAS + +struct smb2_query_quota_info; + +NTSTATUS smbd_do_query_getinfo_quota(TALLOC_CTX *mem_ctx, + files_struct *fsp, + bool restart_scan, + bool return_single, + uint32_t sid_list_length, + DATA_BLOB *sidbuffer, + uint32_t max_data_count, + uint8_t **p_data, + uint32_t *p_data_size); +#endif void reply_nttrans(struct smb_request *req); void reply_nttranss(struct smb_request *req); @@ -651,8 +677,9 @@ void change_file_owner_to_parent(connection_struct *conn, files_struct *fsp); bool is_stat_open(uint32_t access_mask); NTSTATUS send_break_message(struct messaging_context *msg_ctx, - const struct share_mode_entry *exclusive, - uint16_t break_to); + const struct file_id *id, + const struct share_mode_entry *exclusive, + uint16_t break_to); struct deferred_open_record; bool is_deferred_open_async(const struct deferred_open_record *rec); NTSTATUS create_directory(connection_struct *conn, struct smb_request *req, @@ -724,14 +751,12 @@ void smbd_contend_level2_oplocks_end(files_struct *fsp, enum level2_contention_type type); void share_mode_entry_to_message(char *msg, const struct file_id *id, const struct share_mode_entry *e); -void message_to_share_mode_entry(struct share_mode_entry *e, const char *msg); +void message_to_share_mode_entry(struct file_id *id, + struct share_mode_entry *e, + const char *msg); bool init_oplocks(struct smbd_server_connection *sconn); void init_kernel_oplocks(struct smbd_server_connection *sconn); -/* The following definitions come from smbd/oplock_irix.c */ - -struct kernel_oplocks *irix_init_kernel_oplocks(struct smbd_server_connection *sconn); - /* The following definitions come from smbd/oplock_linux.c */ void linux_set_lease_capability(void); @@ -757,6 +782,8 @@ void reply_pipe_read_and_X(struct smb_request *req); /* The following definitions come from smbd/posix_acls.c */ +mode_t unix_perms_to_acl_perms(mode_t mode, int r_mask, int w_mask, int x_mask); +int map_acl_perms_to_permset(mode_t mode, SMB_ACL_PERMSET_T *p_permset); uint32_t map_canon_ace_perms(int snum, enum security_ace_type *pacl_type, mode_t perms, @@ -777,14 +804,10 @@ NTSTATUS set_nt_acl(files_struct *fsp, uint32_t security_info_sent, const struct int get_acl_group_bits( connection_struct *conn, const struct smb_filename *smb_fname, mode_t *mode); -int chmod_acl(connection_struct *conn, - const struct smb_filename *smb_fname, - mode_t mode); int inherit_access_posix_acl(connection_struct *conn, const char *inherit_from_dir, const struct smb_filename *smb_fname, mode_t mode); -int fchmod_acl(files_struct *fsp, mode_t mode); bool set_unix_posix_default_acl(connection_struct *conn, const struct smb_filename *smb_fname, uint16_t num_def_acls, const char *pdata); @@ -814,21 +837,19 @@ NTSTATUS make_default_filesystem_acl( TALLOC_CTX *ctx, enum default_acl_style acl_style, const char *name, - SMB_STRUCT_STAT *psbuf, + const SMB_STRUCT_STAT *psbuf, struct security_descriptor **ppdesc); /* The following definitions come from smbd/process.c */ -void smbd_setup_sig_term_handler(struct smbd_server_connection *sconn); -void smbd_setup_sig_hup_handler(struct smbd_server_connection *sconn); bool srv_send_smb(struct smbXsrv_connection *xconn, char *buffer, bool no_signing, uint32_t seqnum, bool do_encrypt, struct smb_perfcount_data *pcd); -int srv_set_message(char *buf, - int num_words, - int num_bytes, - bool zero); +size_t srv_set_message(char *buf, + size_t num_words, + size_t num_bytes, + bool zero); void remove_deferred_open_message_smb(struct smbXsrv_connection *xconn, uint64_t mid); bool schedule_deferred_open_message_smb(struct smbXsrv_connection *xconn, @@ -955,7 +976,7 @@ ssize_t sendfile_short_send(struct smbXsrv_connection *xconn, size_t smb_maxcnt); void reply_readbraw(struct smb_request *req); void reply_lockread(struct smb_request *req); -int setup_readX_header(char *outbuf, size_t smb_maxcnt); +size_t setup_readX_header(char *outbuf, size_t smb_maxcnt); void reply_read(struct smb_request *req); void reply_read_and_X(struct smb_request *req); void error_to_writebrawerr(struct smb_request *req); @@ -1047,8 +1068,7 @@ const struct security_token *sec_ctx_active_token(void); struct memcache *smbd_memcache(void); bool snum_is_shared_printer(int snum); -void delete_and_reload_printers(struct tevent_context *ev, - struct messaging_context *msg_ctx); +void delete_and_reload_printers(void); bool reload_services(struct smbd_server_connection *sconn, bool (*snumused) (struct smbd_server_connection *, int), bool test); @@ -1062,7 +1082,8 @@ void smbd_exit_server_cleanly(const char *const reason) _NORETURN_; bool set_conn_connectpath(connection_struct *conn, const char *connectpath); NTSTATUS set_conn_force_user_group(connection_struct *conn, int snum); -bool set_current_service(connection_struct *conn, uint16_t flags, bool do_chdir); +void set_current_case_sensitive(connection_struct *conn, uint16_t flags); +bool chdir_current_service(connection_struct *conn); void load_registry_shares(void); int add_home_service(const char *service, const char *username, const char *homedir); int find_service(TALLOC_CTX *ctx, const char *service, char **p_service_out); @@ -1190,12 +1211,19 @@ void reply_transs2(struct smb_request *req); /* The following definitions come from smbd/uid.c */ +#define smbd_impersonate_debug_create(main_ev, name, dbg_lvl) \ + _smbd_impersonate_debug_create(main_ev, name, dbg_lvl, __location__) +struct tevent_context *_smbd_impersonate_debug_create(struct tevent_context *main_ev, + const char *name, + int dbg_lvl, + const char *location); bool change_to_guest(void); NTSTATUS check_user_share_access(connection_struct *conn, const struct auth_session_info *session_info, uint32_t *p_share_access, bool *p_readonly_share); bool change_to_user(connection_struct *conn, uint64_t vuid); +bool change_to_user_by_fsp(struct files_struct *fsp); bool smbd_change_to_root_user(void); bool smbd_become_authenticated_pipe_user(struct auth_session_info *session_info); bool smbd_unbecome_authenticated_pipe_user(void); @@ -1203,7 +1231,10 @@ void become_root(void); void unbecome_root(void); void smbd_become_root(void); void smbd_unbecome_root(void); +bool become_guest(void); +void unbecome_guest(void); bool become_user(connection_struct *conn, uint64_t vuid); +bool become_user_by_fsp(struct files_struct *fsp); bool become_user_by_session(connection_struct *conn, const struct auth_session_info *session_info); bool unbecome_user(void); @@ -1213,6 +1244,17 @@ const struct security_unix_token *get_current_utok(connection_struct *conn); const struct security_token *get_current_nttok(connection_struct *conn); uint64_t get_current_vuid(connection_struct *conn); +struct tevent_context *smbd_impersonate_conn_vuid_create( + struct tevent_context *main_ev, + struct connection_struct *conn, + uint64_t vuid); +struct tevent_context *smbd_impersonate_conn_sess_create( + struct tevent_context *main_ev, + struct connection_struct *conn, + struct auth_session_info *session_info); +struct tevent_context *smbd_impersonate_root_create(struct tevent_context *main_ev); +struct tevent_context *smbd_impersonate_guest_create(struct tevent_context *main_ev); + /* The following definitions come from smbd/utmp.c */ void sys_utmp_claim(const char *username, const char *hostname, @@ -1225,11 +1267,6 @@ void sys_utmp_yield(const char *username, const char *hostname, bool vfs_init_custom(connection_struct *conn, const char *vfs_object); bool smbd_vfs_init(connection_struct *conn); NTSTATUS vfs_file_exist(connection_struct *conn, struct smb_filename *smb_fname); -ssize_t vfs_read_data(files_struct *fsp, char *buf, size_t byte_count); -ssize_t vfs_write_data(struct smb_request *req, - files_struct *fsp, - const char *buffer, - size_t N); ssize_t vfs_pwrite_data(struct smb_request *req, files_struct *fsp, const char *buffer,