summaryrefslogtreecommitdiffstats
path: root/source3/librpc/idl/open_files.idl
blob: 5dea021ff9a97ec4ef24e25b2d98621d17d7acba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#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;
}