1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00
samba-mirror/source3/librpc/idl/open_files.idl
Stefan Metzmacher 5bba79d639 s3:locking: introduce share_mode_data->not_stored
share_mode_data->fresh was very similar, but only set
and never used.

Now we remember 'not_stored' instead, the 'not_' is easier
as ndr_pull sets [skip] elements to 0.

We use this as indication to move the value to
memcache.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15125

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
2022-09-20 00:34:35 +00:00

134 lines
3.5 KiB
Plaintext

#include "idl_types.h"
import "server_id.idl";
import "security.idl";
import "file_id.idl";
import "smb2_lease_struct.idl";
import "misc.idl";
[
pointer_default(unique)
]
interface open_files
{
typedef [enum16bit] enum {
SHARE_MODE_ENTRY_OP_TYPE_NONE = 0,
SHARE_MODE_ENTRY_OP_TYPE_EXCLUSIVE = 1,
SHARE_MODE_ENTRY_OP_TYPE_BATCH_WITHOUT_EXCLUSIVE = 2,
SHARE_MODE_ENTRY_OP_TYPE_BATCH = 3,
SHARE_MODE_ENTRY_OP_TYPE_LEVEL_II = 4,
SHARE_MODE_ENTRY_OP_TYPE_LEASE = 0x100
} share_mode_entry_op_type;
typedef [public] struct {
server_id pid;
hyper op_mid;
share_mode_entry_op_type op_type;
GUID client_guid;
smb2_lease_key lease_key;
uint32 access_mask;
uint32 share_access;
uint32 private_options;
timeval time;
udlong share_file_id;
uint32 uid;
uint16 flags;
uint32 name_hash;
/*
* In-memory flag indicating a non-existing pid. We don't want
* to store this share_mode_entry on disk.
*/
[skip] boolean8 stale;
} share_mode_entry;
typedef [public] struct {
uint32 name_hash;
security_token *delete_nt_token;
security_unix_token *delete_token;
} delete_token;
typedef [public,bitmap16bit] bitmap {
SHARE_MODE_SHARE_DELETE = 0x100,
SHARE_MODE_SHARE_WRITE = 0x080,
SHARE_MODE_SHARE_READ = 0x040,
SHARE_MODE_ACCESS_DELETE = 0x020,
SHARE_MODE_ACCESS_WRITE = 0x010,
SHARE_MODE_ACCESS_READ = 0x008,
SHARE_MODE_LEASE_HANDLE = 0x004,
SHARE_MODE_LEASE_WRITE = 0x002,
SHARE_MODE_LEASE_READ = 0x001
} share_mode_flags;
typedef [public] struct {
hyper unique_content_epoch;
share_mode_flags flags;
[string,charset(UTF8)] char *servicepath;
[string,charset(UTF8)] char *base_name;
[string,charset(UTF8)] char *stream_name;
uint32 num_delete_tokens;
[size_is(num_delete_tokens)] delete_token delete_tokens[];
NTTIME old_write_time;
NTTIME changed_write_time;
[skip] boolean8 not_stored;
[skip] boolean8 modified;
[ignore] file_id id; /* In memory key used to lookup cache. */
} share_mode_data;
/* these are 0x30 (48) characters */
const string VFS_DEFAULT_DURABLE_COOKIE_MAGIC =
"VFS_DEFAULT_DURABLE_COOKIE_MAGIC ";
const uint32 VFS_DEFAULT_DURABLE_COOKIE_VERSION = 0;
/* this corresponds to struct stat_ex (SMB_STRUCT_STAT) */
typedef struct {
hyper st_ex_dev;
hyper st_ex_ino;
hyper st_ex_mode;
hyper st_ex_nlink;
hyper st_ex_uid;
hyper st_ex_gid;
hyper st_ex_rdev;
hyper st_ex_size;
timespec st_ex_atime;
timespec st_ex_mtime;
timespec st_ex_ctime;
timespec st_ex_btime;
hyper st_ex_blksize;
hyper st_ex_blocks;
uint32 st_ex_flags;
uint32 st_ex_iflags;
} vfs_default_durable_stat;
typedef [public] struct {
[value(VFS_DEFAULT_DURABLE_COOKIE_MAGIC),charset(DOS)] uint8 magic[0x30];
[value(VFS_DEFAULT_DURABLE_COOKIE_VERSION)] uint32 version;
boolean8 allow_reconnect;
file_id id;
[string,charset(UTF8)] char *servicepath;
[string,charset(UTF8)] char *base_name;
hyper initial_allocation_size;
hyper position_information;
boolean8 update_write_time_triggered;
boolean8 update_write_time_on_close;
boolean8 write_time_forced;
NTTIME close_write_time;
vfs_default_durable_stat stat_info;
} vfs_default_durable_cookie;
typedef [public] struct {
file_id id;
udlong share_file_id;
uint8 break_to;
} oplock_break_message;
typedef [public] struct {
file_id id;
udlong share_file_id;
[string,charset(UTF8)] char *servicepath;
[string,charset(UTF8)] char *base_name;
[string,charset(UTF8)] char *stream_name;
} file_rename_message;
}