1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

s3:locking: add file_has_open_streams()

This can be used to check if a file opened by fsp also has stream opens.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=13451

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Ralph Boehme 2018-05-27 13:03:25 +02:00 committed by Jeremy Allison
parent 37e7ff05ab
commit dd8cf54c79
2 changed files with 32 additions and 0 deletions

View File

@ -1316,3 +1316,34 @@ struct timespec get_share_mode_write_time(struct share_mode_lock *lck)
}
return d->old_write_time;
}
bool file_has_open_streams(files_struct *fsp)
{
struct share_mode_lock *lock = NULL;
struct share_mode_data *d = NULL;
uint32_t i;
lock = get_existing_share_mode_lock(talloc_tos(), fsp->file_id);
if (lock == NULL) {
return false;
}
d = lock->data;
for (i = 0; i < d->num_share_modes; i++) {
struct share_mode_entry *e = &d->share_modes[i];
if (share_mode_stale_pid(d, i)) {
continue;
}
if (e->private_options &
NTCREATEX_OPTIONS_PRIVATE_STREAM_BASEOPEN)
{
TALLOC_FREE(lock);
return true;
}
}
TALLOC_FREE(lock);
return false;
}

View File

@ -207,6 +207,7 @@ bool is_delete_on_close_set(struct share_mode_lock *lck, uint32_t name_hash);
bool set_sticky_write_time(struct file_id fileid, struct timespec write_time);
bool set_write_time(struct file_id fileid, struct timespec write_time);
struct timespec get_share_mode_write_time(struct share_mode_lock *lck);
bool file_has_open_streams(files_struct *fsp);
int share_mode_forall(int (*fn)(struct file_id fid,
const struct share_mode_data *data,
void *private_data),