r18542: Some late nite work.
[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_info {
40         const char *name;
41         const char *type;
42         const char *path;
43         const char *comment;
44         const char *password;
45         int32_t max_users;
46         struct security_descriptor *sd;
47 };
48
49 struct share_ops {
50         const char *name;
51         NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, struct share_context **);
52         const char *(*string_option)(struct share_config *, const char *, const char *);
53         int (*int_option)(struct share_config *, const char *, int);
54         BOOL (*bool_option)(struct share_config *, const char *, BOOL);
55         const char **(*string_list_option)(TALLOC_CTX *, struct share_config *, const char *);
56         NTSTATUS (*list_all)(TALLOC_CTX *, struct share_context *, int *, const char ***);
57         NTSTATUS (*get_config)(TALLOC_CTX *, struct share_context *, const char *, struct share_config **);
58         NTSTATUS (*create)(struct share_context *, struct share_info *);
59         NTSTATUS (*remove)(struct share_context *, const char *);
60 };
61
62 #include "param/share_proto.h"
63
64 /* list of shares options */
65
66 #define SHARE_NAME              "name"
67 #define SHARE_PATH              "path"
68 #define SHARE_COMMENT           "comment"
69 #define SHARE_PASSWORD          "password"
70 #define SHARE_HOSTS_ALLOW       "hosts-allow"
71 #define SHARE_HOSTS_DENY        "hosts-deny"
72 #define SHARE_NTVFS_HANDLER     "ntvfs-handler"
73 #define SHARE_TYPE              "type"
74 #define SHARE_VOLUME            "volume"
75 #define SHARE_CSC_POLICY        "csc-policy"
76 #define SHARE_AVAILABLE         "available"
77 #define SHARE_BROWSEABLE        "browseable"
78 #define SHARE_MAX_CONNECTIONS   "max-connections"
79
80 /* I'd like to see the following options go away
81  * and always use EAs and SECDESCs */
82 #define SHARE_READONLY          "readonly"
83 #define SHARE_MAP_SYSTEM        "map-system"
84 #define SHARE_MAP_HIDDEN        "map-hidden"
85 #define SHARE_MAP_ARCHIVE       "map-archive"
86
87 #define SHARE_STRICT_LOCKING    "strict-locking"
88 #define SHARE_STRICT_SYNC       "strict-sync"
89 #define SHARE_MSDFS_ROOT        "msdfs-root"
90 #define SHARE_CI_FILESYSTEM     "ci-filesystem"
91
92 /* defaults */
93
94 #define SHARE_HOST_ALLOW_DEFAULT        NULL
95 #define SHARE_HOST_DENY_DEFAULT         NULL
96 #define SHARE_VOLUME_DEFAULT            NULL
97 #define SHARE_TYPE_DEFAULT              "DISK"  
98 #define SHARE_CSC_POLICY_DEFAULT        0
99 #define SHARE_AVAILABLE_DEFAULT         True
100 #define SHARE_BROWSEABLE_DEFAULT        True
101 #define SHARE_MAX_CONNECTIONS_DEFAULT   0
102
103 /* I'd like to see the following options go away
104  * and always use EAs and SECDESCs */
105 #define SHARE_READONLY_DEFAULT          True
106 #define SHARE_MAP_SYSTEM_DEFAULT        False
107 #define SHARE_MAP_HIDDEN_DEFAULT        False
108 #define SHARE_MAP_ARCHIVE_DEFAULT       True
109
110 #define SHARE_STRICT_LOCKING_DEFAULT    True
111 #define SHARE_STRICT_SYNC_DEFAULT       False
112 #define SHARE_MSDFS_ROOT_DEFAULT        False
113 #define SHARE_CI_FILESYSTEM_DEFAULT     False
114
115 #endif /* _SHARE_H */