From 4f5791ebd03eaec1c7da0865a383175b05102712 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 5 May 2024 19:47:29 +0200 Subject: Adding upstream version 2:4.17.12+dfsg. Signed-off-by: Daniel Baumann --- source3/locking/share_mode_lock.h | 140 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 source3/locking/share_mode_lock.h (limited to 'source3/locking/share_mode_lock.h') diff --git a/source3/locking/share_mode_lock.h b/source3/locking/share_mode_lock.h new file mode 100644 index 0000000..4f47b6f --- /dev/null +++ b/source3/locking/share_mode_lock.h @@ -0,0 +1,140 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __LOCKING_SHARE_MODE_LOCK_H__ +#define __LOCKING_SHARE_MODE_LOCK_H__ + +#include "replace.h" +#include +#include "librpc/gen_ndr/file_id.h" +#include "lib/util/time.h" + +struct share_mode_data; +struct share_mode_lock; +struct share_mode_entry; +struct smb_filename; +struct files_struct; +struct smb2_lease_key; + +bool locking_init(void); +bool locking_init_readonly(void); +bool locking_end(void); + +struct share_mode_lock *get_share_mode_lock( + TALLOC_CTX *mem_ctx, + struct file_id id, + const char *servicepath, + const struct smb_filename *smb_fname, + const struct timespec *old_write_time); +struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx, + struct file_id id); + +bool del_share_mode(struct share_mode_lock *lck, + struct files_struct *fsp); +bool downgrade_share_oplock(struct share_mode_lock *lck, + struct files_struct *fsp); +bool remove_share_oplock(struct share_mode_lock *lck, + struct files_struct *fsp); +bool file_has_read_lease(struct files_struct *fsp); + +bool set_share_mode( + struct share_mode_lock *lck, + struct files_struct *fsp, + uid_t uid, + uint64_t mid, + uint16_t op_type, + const struct smb2_lease_key *lease_key, + uint32_t share_access, + uint32_t access_mask); +bool reset_share_mode_entry( + struct share_mode_lock *lck, + struct server_id old_pid, + uint64_t old_share_file_id, + struct server_id new_pid, + uint64_t new_mid, + uint64_t new_share_file_id); + +bool mark_share_mode_disconnected( + struct share_mode_lock *lck, struct files_struct *fsp); + +struct share_mode_lock *fetch_share_mode_unlocked( + TALLOC_CTX *mem_ctx, + struct file_id id); + +struct tevent_req *fetch_share_mode_send( + TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct file_id id, + bool *queued); +NTSTATUS fetch_share_mode_recv( + struct tevent_req *req, + TALLOC_CTX *mem_ctx, + struct share_mode_lock **_lck); + +int share_entry_forall( + int (*fn)(struct file_id fid, + const struct share_mode_data *data, + const struct share_mode_entry *entry, + void *private_data), + void *private_data); + +NTSTATUS share_mode_count_entries(struct file_id fid, size_t *num_share_modes); +NTSTATUS share_mode_do_locked( + struct file_id id, + void (*fn)(const uint8_t *buf, + size_t buflen, + bool *modified_dependent, + void *private_data), + void *private_data); +int share_mode_forall( + int (*fn)(struct file_id fid, + const struct share_mode_data *data, + void *private_data), + void *private_data); +bool share_mode_forall_entries( + struct share_mode_lock *lck, + bool (*fn)(struct share_mode_entry *e, + bool *modified, + void *private_data), + void *private_data); + +NTTIME share_mode_changed_write_time(struct share_mode_lock *lck); +const char *share_mode_servicepath(struct share_mode_lock *lck); +char *share_mode_filename(TALLOC_CTX *mem_ctx, struct share_mode_lock *lck); +char *share_mode_data_dump( + TALLOC_CTX *mem_ctx, struct share_mode_lock *lck); + +void share_mode_flags_get( + struct share_mode_lock *lck, + uint32_t *access_mask, + uint32_t *share_mode, + uint32_t *lease_type); +void share_mode_flags_set( + struct share_mode_lock *lck, + uint32_t access_mask, + uint32_t share_mode, + uint32_t lease_type, + bool *modified); + +struct tevent_req *share_mode_watch_send( + TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct share_mode_lock *lck, + struct server_id blocker); +NTSTATUS share_mode_watch_recv( + struct tevent_req *req, bool *blockerdead, struct server_id *blocker); +NTSTATUS share_mode_wakeup_waiters(struct file_id id); + +#endif -- cgit v1.2.3