Make oplocks a per-share option.
[samba.git] / source / param / share.h
1 /* 
2    Unix SMB/CIFS implementation.
3    
4    Modular services configuration
5    
6    Copyright (C) Simo Sorce     2006
7    
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12    
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17    
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #ifndef _SHARE_H
23 #define _SHARE_H
24
25 struct share_ops;
26
27 struct share_context {
28         const struct share_ops *ops;
29         void *priv_data;
30 };
31
32 struct share_config {
33         const char *name;
34         struct share_context *ctx;
35         void *opaque;
36 };
37
38 enum share_info_type {
39         SHARE_INFO_STRING,
40         SHARE_INFO_INT,
41         SHARE_INFO_BLOB
42 };
43
44 struct share_info {
45         enum share_info_type type;
46         const char *name;
47         void *value;
48 };
49
50 struct share_ops {
51         const char *name;
52         NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, struct loadparm_context *lp_ctx,
53                          struct share_context **);
54         const char *(*string_option)(struct share_config *, const char *, const char *);
55         int (*int_option)(struct share_config *, const char *, int);
56         bool (*bool_option)(struct share_config *, const char *, bool);
57         const char **(*string_list_option)(TALLOC_CTX *, struct share_config *, const char *);
58         NTSTATUS (*list_all)(TALLOC_CTX *, struct share_context *, int *, const char ***);
59         NTSTATUS (*get_config)(TALLOC_CTX *, struct share_context *, const char *, struct share_config **);
60         NTSTATUS (*create)(struct share_context *, const char *, struct share_info *, int);
61         NTSTATUS (*set)(struct share_context *, const char *, struct share_info *, int);
62         NTSTATUS (*remove)(struct share_context *, const char *);
63 };
64
65 struct loadparm_context;
66
67 #include "param/share_proto.h"
68
69 /* list of shares options */
70
71 #define SHARE_NAME              "name"
72 #define SHARE_PATH              "path"
73 #define SHARE_COMMENT           "comment"
74 #define SHARE_PASSWORD          "password"
75 #define SHARE_HOSTS_ALLOW       "hosts-allow"
76 #define SHARE_HOSTS_DENY        "hosts-deny"
77 #define SHARE_NTVFS_HANDLER     "ntvfs-handler"
78 #define SHARE_TYPE              "type"
79 #define SHARE_VOLUME            "volume"
80 #define SHARE_CSC_POLICY        "csc-policy"
81 #define SHARE_AVAILABLE         "available"
82 #define SHARE_BROWSEABLE        "browseable"
83 #define SHARE_MAX_CONNECTIONS   "max-connections"
84
85 /* I'd like to see the following options go away
86  * and always use EAs and SECDESCs */
87 #define SHARE_READONLY          "readonly"
88 #define SHARE_MAP_SYSTEM        "map-system"
89 #define SHARE_MAP_HIDDEN        "map-hidden"
90 #define SHARE_MAP_ARCHIVE       "map-archive"
91
92 #define SHARE_STRICT_LOCKING    "strict-locking"
93 #define SHARE_OPLOCKS           "oplocks"
94 #define SHARE_STRICT_SYNC       "strict-sync"
95 #define SHARE_MSDFS_ROOT        "msdfs-root"
96 #define SHARE_CI_FILESYSTEM     "ci-filesystem"
97
98 #define SHARE_DIR_MASK             "directory mask"
99 #define SHARE_CREATE_MASK          "create mask"
100 #define SHARE_FORCE_CREATE_MODE    "force create mode"
101 #define SHARE_FORCE_DIR_MODE       "force directory mode"
102
103 /* defaults */
104
105 #define SHARE_HOST_ALLOW_DEFAULT        NULL
106 #define SHARE_HOST_DENY_DEFAULT         NULL
107 #define SHARE_VOLUME_DEFAULT            NULL
108 #define SHARE_TYPE_DEFAULT              "DISK"  
109 #define SHARE_CSC_POLICY_DEFAULT        0
110 #define SHARE_AVAILABLE_DEFAULT         true
111 #define SHARE_BROWSEABLE_DEFAULT        true
112 #define SHARE_MAX_CONNECTIONS_DEFAULT   0
113
114 #define SHARE_DIR_MASK_DEFAULT                   0755
115 #define SHARE_CREATE_MASK_DEFAULT                0744
116 #define SHARE_FORCE_CREATE_MODE_DEFAULT          0000
117 #define SHARE_FORCE_DIR_MODE_DEFAULT             0000
118
119
120
121 /* I'd like to see the following options go away
122  * and always use EAs and SECDESCs */
123 #define SHARE_READONLY_DEFAULT          true
124 #define SHARE_MAP_SYSTEM_DEFAULT        false
125 #define SHARE_MAP_HIDDEN_DEFAULT        false
126 #define SHARE_MAP_ARCHIVE_DEFAULT       true
127
128 #define SHARE_STRICT_LOCKING_DEFAULT    true
129 #define SHARE_OPLOCKS_DEFAULT   true
130 #define SHARE_STRICT_SYNC_DEFAULT       false
131 #define SHARE_MSDFS_ROOT_DEFAULT        false
132 #define SHARE_CI_FILESYSTEM_DEFAULT     false
133
134 #endif /* _SHARE_H */