summaryrefslogtreecommitdiffstats
path: root/source3/modules/onefs_config.h
blob: f0f48e63794efcf959b20544ad701ed9bf07ec2c (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 * Unix SMB/CIFS implementation.
 * OneFS vfs module configuration and defaults
 *
 * Copyright (C) Steven Danneman, 2008
 * Copyright (C) Tim Prouty, 2009
 *
 * 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 <http://www.gnu.org/licenses/>.
 */

#ifndef _ONEFS_CONFIG_H
#define _ONEFS_CONFIG_H

/**
* Specifies when ACLs presented to Windows should be canonicalized
* into the ordering which Explorer expects.
*/
enum onefs_acl_wire_format
{
	ACL_FORMAT_RAW, /**< Never canonicalize */
	ACL_FORMAT_WINDOWS_SD, /**< Only canonicalize synthetic ACLs */
	ACL_FORMAT_ALWAYS /**< Always canonicalize */
};

#define PARM_ONEFS_TYPE "onefs"
#define PARM_ACL_WIRE_FORMAT "acl wire format"
#define PARM_ACL_WIRE_FORMAT_DEFAULT ACL_FORMAT_WINDOWS_SD
#define PARM_ALLOW_EXECUTE_ALWAYS "allow execute always"
#define PARM_ALLOW_EXECUTE_ALWAYS_DEFAULT false
#define PARM_ATIME_NOW		"atime now files"
#define PARM_ATIME_NOW_DEFAULT  NULL
#define PARM_ATIME_STATIC	"atime static files"
#define PARM_ATIME_STATIC_DEFAULT NULL
#define PARM_ATIME_SLOP		"atime now slop"
#define PARM_ATIME_SLOP_DEFAULT	 0
#define PARM_ATOMIC_SENDFILE "atomic sendfile"
#define PARM_ATOMIC_SENDFILE_DEFAULT true
#define PARM_CREATOR_OWNER_GETS_FULL_CONTROL "creator owner gets full control"
#define PARM_CREATOR_OWNER_GETS_FULL_CONTROL_DEFAULT true
#define PARM_CTIME_NOW		"ctime now files"
#define PARM_CTIME_NOW_DEFAULT  NULL
#define PARM_CTIME_SLOP		"ctime now slop"
#define PARM_CTIME_SLOP_DEFAULT	0
#define PARM_DOT_SNAP_CHILD_ACCESSIBLE "dot snap child accessible"
#define PARM_DOT_SNAP_CHILD_ACCESSIBLE_DEFAULT true
#define PARM_DOT_SNAP_CHILD_VISIBLE "dot snap child visible"
#define PARM_DOT_SNAP_CHILD_VISIBLE_DEFAULT false
#define PARM_DOT_SNAP_ROOT_ACCESSIBLE "dot snap root accessible"
#define PARM_DOT_SNAP_ROOT_ACCESSIBLE_DEFAULT true
#define PARM_DOT_SNAP_ROOT_VISIBLE "dot snap root visible"
#define PARM_DOT_SNAP_ROOT_VISIBLE_DEFAULT true
#define PARM_DOT_SNAP_TILDE "dot snap tilde"
#define PARM_DOT_SNAP_TILDE_DEFAULT true
#define PARM_IGNORE_SACLS "ignore sacls"
#define PARM_IGNORE_SACLS_DEFAULT false
#define PARM_IGNORE_STREAMS "ignore streams"
#define PARM_IGNORE_STREAMS_DEFAULT false
#define PARM_MTIME_NOW		"mtime now files"
#define PARM_MTIME_NOW_DEFAULT	NULL
#define PARM_MTIME_STATIC	"mtime static files"
#define PARM_MTIME_STATIC_DEFAULT NULL
#define PARM_MTIME_SLOP		"mtime now slop"
#define PARM_MTIME_SLOP_DEFAULT	0
#define PARM_USE_READDIRPLUS "use readdirplus"
#define PARM_USE_READDIRPLUS_DEFAULT true
#define PARM_SENDFILE_LARGE_READS "sendfile large reads"
#define PARM_SENDFILE_LARGE_READS_DEFAULT false
#define PARM_SENDFILE_SAFE "sendfile safe"
#define PARM_SENDFILE_SAFE_DEFAULT true
#define PARM_SIMPLE_FILE_SHARING_COMPATIBILITY_MODE "simple file sharing compatibility mode"
#define PARM_SIMPLE_FILE_SHARING_COMPATIBILITY_MODE_DEFAULT false
#define PARM_UNMAPPABLE_SIDS_DENY_EVERYONE "unmappable sids deny everyone"
#define PARM_UNMAPPABLE_SIDS_DENY_EVERYONE_DEFAULT false
#define PARM_UNMAPPABLE_SIDS_IGNORE "ignore unmappable sids"
#define PARM_UNMAPPABLE_SIDS_IGNORE_DEFAULT false
#define PARM_UNMAPPABLE_SIDS_IGNORE_LIST "unmappable sids ignore list"
#define PARM_UNMAPPABLE_SIDS_IGNORE_LIST_DEFAULT NULL

#define IS_CTIME_NOW_PATH(conn,cfg,path)  ((conn) && is_in_path((path),\
	(cfg)->ctime_now_list,(conn)->case_sensitive))
#define IS_MTIME_NOW_PATH(conn,cfg,path)  ((conn) && is_in_path((path),\
	(cfg)->mtime_now_list,(conn)->case_sensitive))
#define IS_ATIME_NOW_PATH(conn,cfg,path)  ((conn) && is_in_path((path),\
	(cfg)->atime_now_list,(conn)->case_sensitive))
#define IS_MTIME_STATIC_PATH(conn,cfg,path)  ((conn) && is_in_path((path),\
	(cfg)->mtime_static_list,(conn)->case_sensitive))
#define IS_ATIME_STATIC_PATH(conn,cfg,path)  ((conn) && is_in_path((path),\
	(cfg)->atime_static_list,(conn)->case_sensitive))

/*
 * Store some commonly evaluated parameters to avoid loadparm pain.
 */

#define ONEFS_VFS_CONFIG_INITIALIZED	0x00010000

#define ONEFS_VFS_CONFIG_FAKETIMESTAMPS	0x00000001

struct onefs_vfs_share_config
{
	uint32_t init_flags;

	/* data for fake timestamps */
	int atime_slop;
	int ctime_slop;
	int mtime_slop;

	/* Per-share list of files to fake the create time for. */
        name_compare_entry *ctime_now_list;

	/* Per-share list of files to fake the modification time for. */
	name_compare_entry *mtime_now_list;

	/* Per-share list of files to fake the access time for. */
	name_compare_entry *atime_now_list;

	/* Per-share list of files to fake the modification time for. */
	name_compare_entry *mtime_static_list;

	/* The access  time  will  equal  the  create  time.  */
	/* The  modification  time  will  equal  the  create  time.*/

	/* Per-share list of files to fake the access time for. */
	name_compare_entry *atime_static_list;
};

struct onefs_vfs_global_config
{
	uint32_t init_flags;

	/* Snapshot options */
	bool dot_snap_child_accessible;
	bool dot_snap_child_visible;
	bool dot_snap_root_accessible;
	bool dot_snap_root_visible;
	bool dot_snap_tilde;
};

int onefs_load_config(connection_struct *conn);

bool onefs_get_config(int snum, int config_type,
		      struct onefs_vfs_share_config *cfg);

void onefs_sys_config_enc(void);

void onefs_sys_config_snap_opt(struct onefs_vfs_global_config *global_config);

void onefs_sys_config_tilde(struct onefs_vfs_global_config *global_config);

#endif /* _ONEFS_CONFIG_H */