interface open_files
{
typedef [public,bitmap16bit] bitmap {
- SHARE_ENTRY_FLAG_POSIX_OPEN = 0x0001
+ SHARE_ENTRY_FLAG_POSIX_OPEN = 0x0001,
+ SHARE_ENTRY_FLAG_STREAM_BASEOPEN = 0x0002
} share_entry_flags;
typedef [enum16bit] enum {
{
struct file_has_open_streams_state *state = private_data;
- if ((e->private_options &
- NTCREATEX_FLAG_STREAM_BASEOPEN) == 0) {
+ if (!(e->flags & SHARE_ENTRY_FLAG_STREAM_BASEOPEN)) {
return false;
}
uint16_t fsp_get_share_entry_flags(const struct files_struct *fsp)
{
uint16_t flags = 0;
+ uint32_t private_options = fh_get_private_options(fsp->fh);
if (fsp->fsp_flags.posix_open) {
flags |= SHARE_ENTRY_FLAG_POSIX_OPEN;
}
+ if (private_options & NTCREATEX_FLAG_STREAM_BASEOPEN) {
+ flags |= SHARE_ENTRY_FLAG_STREAM_BASEOPEN;
+ }
return flags;
}
if (flags & SHARE_ENTRY_FLAG_POSIX_OPEN) {
fsp->fsp_flags.posix_open = true;
}
+ /*
+ * This flag is only ever set on the internal base_fsp of a stream
+ * fsp and we don't expect it to be set when we're called as part
+ * of restoring an fsp when doing a Durable Handle reconnect.
+ */
+ SMB_ASSERT(!(flags & SHARE_ENTRY_FLAG_STREAM_BASEOPEN));
}