r17206: Add a modular API for share configuration.
[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 2 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, write to the Free Software
20    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23 #ifndef _SHARE_H
24 #define _SHARE_H
25
26 struct share_ops;
27
28 struct share_context {
29         const struct share_ops *ops;
30         void *priv_data;
31 };
32
33 struct share_config {
34         const char *name;
35         struct share_context *ctx;
36         void *opaque;
37 };
38
39 struct share_ops {
40         const char *name;
41         NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, struct share_context **);
42         const char *(*string_option)(struct share_config *, const char *, const char *);
43         int (*int_option)(struct share_config *, const char *, int);
44         BOOL (*bool_option)(struct share_config *, const char *, BOOL);
45         const char **(*string_list_option)(TALLOC_CTX *, struct share_config *, const char *);
46         NTSTATUS (*list_all)(TALLOC_CTX *, struct share_context *, int *, const char ***);
47         NTSTATUS (*get_config)(TALLOC_CTX *, struct share_context *, const char *, struct share_config **);
48         NTSTATUS (*create_obj)(struct share_context *, const char *);
49         NTSTATUS (*delete_obj)(struct share_context *, const char *);
50 };
51
52 #include "param/share_proto.h"
53
54 /* list of shares options */
55
56 #define SHARE_NAME              "name"
57 #define SHARE_PATH              "path"
58 #define SHARE_COMMENT           "comment"
59 #define SHARE_PASSWORD                  "password"
60 #define SHARE_HOSTS_ALLOW       "hosts-allow"
61 #define SHARE_HOSTS_DENY        "hosts-deny"
62 #define SHARE_NTVFS_HANDLER     "ntvfs-handler"
63 #define SHARE_TYPE              "type"
64 #define SHARE_VOLUME            "volume"
65 #define SHARE_CSC_POLICY        "csc-policy"
66 #define SHARE_AVAILABLE "available"
67 #define SHARE_BROWSEABLE        "browseable"
68 #define SHARE_MAX_CONNECTIONS   "max-connections"
69
70 /* I'd like to see the following options go away
71  * and always use EAs and SECDESCs */
72 #define SHARE_READONLY          "readonly"
73 #define SHARE_MAP_SYSTEM        "map-system"
74 #define SHARE_MAP_HIDDEN        "map-hidden"
75 #define SHARE_MAP_ARCHIVE       "map-archive"
76
77 #define SHARE_STRICT_LOCKING    "strict-locking"
78 #define SHARE_STRICT_SYNC       "strict-sync"
79 #define SHARE_MSDFS_ROOT        "msdfs-root"
80 #define SHARE_CI_FILESYSTEM     "ci-filesystem"
81
82 /* defaults */
83
84 #define SHARE_HOST_ALLOW_DEFAULT        NULL
85 #define SHARE_HOST_DENY_DEFAULT         NULL
86 #define SHARE_VOLUME_DEFAULT            NULL
87 #define SHARE_TYPE_DEFAULT              "DISK"  
88 #define SHARE_CSC_POLICY_DEFAULT        0
89 #define SHARE_AVAILABLE_DEFAULT         True
90 #define SHARE_BROWSEABLE_DEFAULT        True
91 #define SHARE_MAX_CONNECTIONS_DEFAULT   0
92
93 /* I'd like to see the following options go away
94  * and always use EAs and SECDESCs */
95 #define SHARE_READONLY_DEFAULT          True
96 #define SHARE_MAP_SYSTEM_DEFAULT        False
97 #define SHARE_MAP_HIDDEN_DEFAULT        False
98 #define SHARE_MAP_ARCHIVE_DEFAULT       True
99
100 #define SHARE_STRICT_LOCKING_DEFAULT    True
101 #define SHARE_STRICT_SYNC_DEFAULT       False
102 #define SHARE_MSDFS_ROOT_DEFAULT        False
103 #define SHARE_CI_FILESYSTEM_DEFAULT     False
104
105 #endif /* _SHARE_H */