summaryrefslogtreecommitdiff
path: root/source4/param/share.h
blob: ab20c8a2441c1d87549157ba1d14eaa79cb27448 (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
/* 
   Unix SMB/CIFS implementation.
   
   Modular services configuration
   
   Copyright (C) Simo Sorce	2006
   
   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 _SHARE_H
#define _SHARE_H

struct share_ops;

struct share_context {
	const struct share_ops *ops;
	void *priv_data;
};

struct share_config {
	const char *name;
	struct share_context *ctx;
	void *opaque;
};

enum share_info_type {
	SHARE_INFO_STRING,
	SHARE_INFO_INT,
	SHARE_INFO_BLOB
};

struct share_info {
	enum share_info_type type;
	const char *name;
	void *value;
};

struct tevent_context;

struct share_ops {
	const char *name;
	NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, struct tevent_context *ev_ctx,
			 struct loadparm_context *lp_ctx,
			 struct share_context **);
	const char *(*string_option)(struct share_config *, const char *, const char *);
	int (*int_option)(struct share_config *, const char *, int);
	bool (*bool_option)(struct share_config *, const char *, bool);
	const char **(*string_list_option)(TALLOC_CTX *, struct share_config *, const char *);
	NTSTATUS (*list_all)(TALLOC_CTX *, struct share_context *, int *, const char ***);
	NTSTATUS (*get_config)(TALLOC_CTX *, struct share_context *, const char *, struct share_config **);
	NTSTATUS (*create)(struct share_context *, const char *, struct share_info *, int);
	NTSTATUS (*set)(struct share_context *, const char *, struct share_info *, int);
	NTSTATUS (*remove)(struct share_context *, const char *);
};

struct loadparm_context;

const char *share_string_option(struct share_config *scfg, const char *opt_name, const char *defval);
int share_int_option(struct share_config *scfg, const char *opt_name, int defval);
bool share_bool_option(struct share_config *scfg, const char *opt_name, bool defval);
const char **share_string_list_option(TALLOC_CTX *mem_ctx, struct share_config *scfg, const char *opt_name);
NTSTATUS share_list_all(TALLOC_CTX *mem_ctx, struct share_context *sctx, int *count, const char ***names);
NTSTATUS share_get_config(TALLOC_CTX *mem_ctx, struct share_context *sctx, const char *name, struct share_config **scfg);
NTSTATUS share_create(struct share_context *sctx, const char *name, struct share_info *info, int count);
NTSTATUS share_set(struct share_context *sctx, const char *name, struct share_info *info, int count);
NTSTATUS share_remove(struct share_context *sctx, const char *name);
NTSTATUS share_register(const struct share_ops *ops);
NTSTATUS share_get_context_by_name(TALLOC_CTX *mem_ctx, const char *backend_name,
				   struct tevent_context *event_ctx, 
				   struct loadparm_context *lp_ctx,
				   struct share_context **ctx);
NTSTATUS share_init(void);

/* list of shares options */

#define SHARE_NAME		"name"
#define SHARE_PATH		"path"
#define SHARE_COMMENT		"comment"
#define SHARE_PASSWORD		"password"
#define SHARE_HOSTS_ALLOW	"hosts-allow"
#define SHARE_HOSTS_DENY	"hosts-deny"
#define SHARE_NTVFS_HANDLER	"ntvfs-handler"
#define SHARE_TYPE		"type"
#define SHARE_VOLUME		"volume"
#define SHARE_CSC_POLICY	"csc-policy"
#define SHARE_AVAILABLE		"available"
#define SHARE_BROWSEABLE	"browseable"
#define SHARE_MAX_CONNECTIONS	"max-connections"

/* I'd like to see the following options go away
 * and always use EAs and SECDESCs */
#define SHARE_READONLY		"readonly"
#define SHARE_MAP_SYSTEM	"map-system"
#define SHARE_MAP_HIDDEN	"map-hidden"
#define SHARE_MAP_ARCHIVE	"map-archive"

#define SHARE_STRICT_LOCKING	"strict-locking"
#define SHARE_OPLOCKS	        "oplocks"
#define SHARE_STRICT_SYNC	"strict-sync"
#define SHARE_MSDFS_ROOT	"msdfs-root"
#define SHARE_CI_FILESYSTEM	"ci-filesystem"

#define SHARE_DIR_MASK             "directory mask"
#define SHARE_CREATE_MASK          "create mask"
#define SHARE_FORCE_CREATE_MODE    "force create mode"
#define SHARE_FORCE_DIR_MODE       "force directory mode"

/* defaults */

#define SHARE_HOST_ALLOW_DEFAULT	NULL
#define SHARE_HOST_DENY_DEFAULT		NULL
#define SHARE_VOLUME_DEFAULT		NULL
#define SHARE_TYPE_DEFAULT		"DISK"	
#define SHARE_CSC_POLICY_DEFAULT	0
#define SHARE_AVAILABLE_DEFAULT		true
#define SHARE_BROWSEABLE_DEFAULT	true
#define SHARE_MAX_CONNECTIONS_DEFAULT	0

#define SHARE_DIR_MASK_DEFAULT                   0755
#define SHARE_CREATE_MASK_DEFAULT                0744
#define SHARE_FORCE_CREATE_MODE_DEFAULT          0000
#define SHARE_FORCE_DIR_MODE_DEFAULT             0000



/* I'd like to see the following options go away
 * and always use EAs and SECDESCs */
#define SHARE_READONLY_DEFAULT		true
#define SHARE_MAP_SYSTEM_DEFAULT	false
#define SHARE_MAP_HIDDEN_DEFAULT	false
#define SHARE_MAP_ARCHIVE_DEFAULT	true

#define SHARE_STRICT_LOCKING_DEFAULT	true
#define SHARE_OPLOCKS_DEFAULT	true
#define SHARE_STRICT_SYNC_DEFAULT	false
#define SHARE_MSDFS_ROOT_DEFAULT	false
#define SHARE_CI_FILESYSTEM_DEFAULT	false

#endif /* _SHARE_H */