Make oplocks a per-share option.
[samba.git] / source4 / param / share.h
index ca3accd4ef68ed6253e207fee4ff36b56a2eea52..9f9cbdce5bed8ed447f37ffa68c9fa8bb6c97d0d 100644 (file)
@@ -7,7 +7,7 @@
    
    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 2 of the License, or
+   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,
@@ -16,8 +16,7 @@
    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, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #ifndef _SHARE_H
@@ -36,29 +35,35 @@ struct share_config {
        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;
-       const char *type;
-       const char *path;
-       const char *comment;
-       const char *password;
-       int32_t max_users;
-       struct security_descriptor *sd;
+       void *value;
 };
 
 struct share_ops {
        const char *name;
-       NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, struct share_context **);
+       NTSTATUS (*init)(TALLOC_CTX *, const struct share_ops*, 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);
+       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 *, struct share_info *);
+       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;
+
 #include "param/share_proto.h"
 
 /* list of shares options */
@@ -85,10 +90,16 @@ struct share_ops {
 #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
@@ -96,20 +107,28 @@ struct share_ops {
 #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_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_STRICT_SYNC_DEFAULT      False
-#define SHARE_MSDFS_ROOT_DEFAULT       False
-#define SHARE_CI_FILESYSTEM_DEFAULT    False
+#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 */