r26236: Remove more uses of global_loadparm or specify loadparm_context explicitly.
[samba.git] / source4 / 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 share_context **);
53         const char *(*string_option)(struct share_config *, const char *, const char *);
54         int (*int_option)(struct share_config *, const char *, int);
55         bool (*bool_option)(struct share_config *, const char *, bool);
56         const char **(*string_list_option)(TALLOC_CTX *, struct share_config *, const char *);
57         NTSTATUS (*list_all)(TALLOC_CTX *, struct share_context *, int *, const char ***);
58         NTSTATUS (*get_config)(TALLOC_CTX *, struct share_context *, const char *, struct share_config **);
59         NTSTATUS (*create)(struct share_context *, const char *, struct share_info *, int);
60         NTSTATUS (*set)(struct share_context *, const char *, struct share_info *, int);
61         NTSTATUS (*remove)(struct share_context *, const char *);
62 };
63
64 struct loadparm_context;
65
66 #include "param/share_proto.h"
67
68 /* list of shares options */
69
70 #define SHARE_NAME              "name"
71 #define SHARE_PATH              "path"
72 #define SHARE_COMMENT           "comment"
73 #define SHARE_PASSWORD          "password"
74 #define SHARE_HOSTS_ALLOW       "hosts-allow"
75 #define SHARE_HOSTS_DENY        "hosts-deny"
76 #define SHARE_NTVFS_HANDLER     "ntvfs-handler"
77 #define SHARE_TYPE              "type"
78 #define SHARE_VOLUME            "volume"
79 #define SHARE_CSC_POLICY        "csc-policy"
80 #define SHARE_AVAILABLE         "available"
81 #define SHARE_BROWSEABLE        "browseable"
82 #define SHARE_MAX_CONNECTIONS   "max-connections"
83
84 /* I'd like to see the following options go away
85  * and always use EAs and SECDESCs */
86 #define SHARE_READONLY          "readonly"
87 #define SHARE_MAP_SYSTEM        "map-system"
88 #define SHARE_MAP_HIDDEN        "map-hidden"
89 #define SHARE_MAP_ARCHIVE       "map-archive"
90
91 #define SHARE_STRICT_LOCKING    "strict-locking"
92 #define SHARE_STRICT_SYNC       "strict-sync"
93 #define SHARE_MSDFS_ROOT        "msdfs-root"
94 #define SHARE_CI_FILESYSTEM     "ci-filesystem"
95
96 #define SHARE_DIR_MASK             "directory mask"
97 #define SHARE_CREATE_MASK          "create mask"
98 #define SHARE_FORCE_CREATE_MODE    "force create mode"
99 #define SHARE_FORCE_DIR_MODE       "force directory mode"
100
101 /* defaults */
102
103 #define SHARE_HOST_ALLOW_DEFAULT        NULL
104 #define SHARE_HOST_DENY_DEFAULT         NULL
105 #define SHARE_VOLUME_DEFAULT            NULL
106 #define SHARE_TYPE_DEFAULT              "DISK"  
107 #define SHARE_CSC_POLICY_DEFAULT        0
108 #define SHARE_AVAILABLE_DEFAULT         true
109 #define SHARE_BROWSEABLE_DEFAULT        true
110 #define SHARE_MAX_CONNECTIONS_DEFAULT   0
111
112 #define SHARE_DIR_MASK_DEFAULT                   0755
113 #define SHARE_CREATE_MASK_DEFAULT                0744
114 #define SHARE_FORCE_CREATE_MODE_DEFAULT          0000
115 #define SHARE_FORCE_DIR_MODE_DEFAULT             0000
116
117
118
119 /* I'd like to see the following options go away
120  * and always use EAs and SECDESCs */
121 #define SHARE_READONLY_DEFAULT          true
122 #define SHARE_MAP_SYSTEM_DEFAULT        false
123 #define SHARE_MAP_HIDDEN_DEFAULT        false
124 #define SHARE_MAP_ARCHIVE_DEFAULT       true
125
126 #define SHARE_STRICT_LOCKING_DEFAULT    true
127 #define SHARE_STRICT_SYNC_DEFAULT       false
128 #define SHARE_MSDFS_ROOT_DEFAULT        false
129 #define SHARE_CI_FILESYSTEM_DEFAULT     false
130
131 #endif /* _SHARE_H */