r25554: Convert last instances of BOOL, True and False to the standard types.
[kai/samba-autobuild/.git] / source4 / ntvfs / posix / vfs_posix.h
index dd2bf74543a85f42a9148ead7c9d3692e5711615..a660da329a98ec2401dffc047fc802ca2d438959 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,
    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 _VFS_POSIX_H_
 #define _VFS_POSIX_H_
 
+#include "librpc/gen_ndr/xattr.h"
 #include "system/filesys.h"
-#include "smb_server/smb_server.h"
 #include "ntvfs/ntvfs.h"
+#include "ntvfs/common/ntvfs_common.h"
+#include "dsdb/samdb/samdb.h"
 
 /* this is the private structure for the posix vfs backend. It is used
    to hold per-connection (per tree connect) state information */
 struct pvfs_state {
-       struct smbsrv_tcon *tcon;
+       struct ntvfs_module_context *ntvfs;
        const char *base_directory;
        struct GUID *base_fs_uuid;
 
        const char *share_name;
        uint_t flags;
 
-       struct pvfs_file *open_files;
-
        struct pvfs_mangle_context *mangle_ctx;
 
        struct brl_context *brl_context;
        struct odb_context *odb_context;
+       struct notify_context *notify_context;
        struct sidmap_context *sidmap;
 
-       /* an id tree mapping open search ID to a pvfs_search_state structure */
-       struct idr_context *idtree_search;
-
-       /* an id tree mapping open file handle -> struct pvfs_file */
-       struct idr_context *idtree_fnum;
-
        /* a list of pending async requests. Needed to support
           ntcancel */
        struct pvfs_wait *wait_list;
@@ -67,14 +61,38 @@ struct pvfs_state {
        /* the allocation size rounding */
        uint32_t alloc_size_rounding;
 
-       /* how long to keep inactive searches around for */
-       uint_t search_inactivity_time;
-       
+       struct {
+               /* the open files as DLINKLIST */
+               struct pvfs_file *list;
+       } files;
+
+       struct {
+               /* an id tree mapping open search ID to a pvfs_search_state structure */
+               struct idr_context *idtree;
+
+               /* the open searches as DLINKLIST */
+               struct pvfs_search_state *list;
+
+               /* how long to keep inactive searches around for */
+               uint_t inactivity_time;
+       } search;
+
        /* used to accelerate acl mapping */
        struct {
                const struct dom_sid *creator_owner;
                const struct dom_sid *creator_group;            
        } sid_cache;
+
+       /* the acl backend */
+       const struct pvfs_acl_ops *acl_ops;
+
+       /* non-flag share options */
+       struct {
+               mode_t dir_mask;
+               mode_t force_dir_mode;
+               mode_t create_mask;
+               mode_t force_create_mode;
+       } options;
 };
 
 /* this is the basic information needed about a file from the filesystem */
@@ -100,9 +118,9 @@ struct pvfs_filename {
        char *full_name;
        const char *stream_name; /* does not include :$DATA suffix */
        uint32_t stream_id;      /* this uses a hash, so is probabilistic */
-       BOOL has_wildcard;
-       BOOL exists;          /* true if the base filename exists */
-       BOOL stream_exists;   /* true if the stream exists */
+       bool has_wildcard;
+       bool exists;          /* true if the base filename exists */
+       bool stream_exists;   /* true if the stream exists */
        struct stat st;
        struct pvfs_dos_fileinfo dos;
 };
@@ -123,9 +141,6 @@ struct pvfs_file_handle {
        /* a unique file key to be used for open file locking */
        DATA_BLOB odb_locking_key;
 
-       /* a unique file key to be used for byte range locking */
-       DATA_BLOB brl_locking_key;
-
        uint32_t create_options;
 
        /* this is set by the mode_information level. What does it do? */
@@ -135,20 +150,23 @@ struct pvfs_file_handle {
        uint64_t seek_offset;
        uint64_t position;
 
-       BOOL have_opendb_entry;
+       bool have_opendb_entry;
 
        /* we need this hook back to our parent for lock destruction */
        struct pvfs_state *pvfs;
 
        /* have we set a sticky write time that we should remove on close */
-       BOOL sticky_write_time;
+       bool sticky_write_time;
+
+       /* the open went through to completion */
+       bool open_completed;
 };
 
 /* open file state */
 struct pvfs_file {
        struct pvfs_file *next, *prev;
        struct pvfs_file_handle *handle;
-       uint16_t fnum;
+       struct ntvfs_handle *ntvfs;
 
        struct pvfs_state *pvfs;
 
@@ -156,22 +174,37 @@ struct pvfs_file {
        uint32_t share_access;
        uint32_t access_mask;
 
-       /* we need to remember the session it was opened on,
-          as it is illegal to operate on someone elses fnum */
-       struct smbsrv_session *session;
-
-       /* we need to remember the client pid that 
-          opened the file so SMBexit works */
-       uint16_t smbpid;
-
        /* a list of pending locks - used for locking cancel operations */
        struct pvfs_pending_lock *pending_list;
 
+       /* a file handle to be used for byte range locking */
+       struct brl_handle *brl_handle;
+
        /* a count of active locks - used to avoid calling brl_close on
           file close */
        uint64_t lock_count;
+
+       /* for directories, a buffer of pending notify events */
+       struct pvfs_notify_buffer *notify_buffer;
+
+       /* for directories, the state of an incomplete SMB2 Find */
+       struct pvfs_search_state *search;
 };
 
+/* the state of a search started with pvfs_search_first() */
+struct pvfs_search_state {
+       struct pvfs_search_state *prev, *next;
+       struct pvfs_state *pvfs;
+       uint16_t handle;
+       off_t current_index;
+       uint16_t search_attrib;
+       uint16_t must_attrib;
+       struct pvfs_dir *dir;
+       time_t last_used;
+       uint_t num_ea_names;
+       struct ea_name *ea_names;
+       struct timed_event *te;
+};
 
 /* flags to pvfs_resolve_name() */
 #define PVFS_RESOLVE_WILDCARD    (1<<0)
@@ -187,6 +220,7 @@ struct pvfs_file {
 #define PVFS_FLAG_STRICT_LOCKING (1<<6)
 #define PVFS_FLAG_XATTR_ENABLE   (1<<7)
 #define PVFS_FLAG_FAKE_OPLOCKS   (1<<8)
+#define PVFS_FLAG_LINUX_AIO      (1<<9)
 
 /* forward declare some anonymous structures */
 struct pvfs_dir;
@@ -194,14 +228,33 @@ struct pvfs_dir;
 /* types of notification for pvfs wait events */
 enum pvfs_wait_notice {PVFS_WAIT_EVENT, PVFS_WAIT_TIMEOUT, PVFS_WAIT_CANCEL};
 
+#define PVFS_EADB                      "posix:eadb"
+#define PVFS_XATTR                     "posix:xattr"
+#define PVFS_FAKE_OPLOCKS              "posix:fakeoplocks"
+#define PVFS_SHARE_DELAY               "posix:sharedelay"
+#define PVFS_ALLOCATION_ROUNDING       "posix:allocationrounding"
+#define PVFS_SEARCH_INACTIVITY         "posix:searchinactivity"
+#define PVFS_ACL                       "posix:acl"
+#define PVFS_AIO                       "posix:aio"
+
+#define PVFS_XATTR_DEFAULT                     true
+#define PVFS_FAKE_OPLOCKS_DEFAULT              false
+#define PVFS_SHARE_DELAY_DEFAULT               1000000
+#define PVFS_ALLOCATION_ROUNDING_DEFAULT       512
+#define PVFS_SEARCH_INACTIVITY_DEFAULT         300
+
+struct pvfs_acl_ops {
+       const char *name;
+       NTSTATUS (*acl_load)(struct pvfs_state *, struct pvfs_filename *, int , TALLOC_CTX *, 
+                            struct security_descriptor **);
+       NTSTATUS (*acl_save)(struct pvfs_state *, struct pvfs_filename *, int , struct security_descriptor *);
+};
+
+#include "ntvfs/posix/vfs_posix_proto.h"
 
-/* putting this prototype here avoids us having to expose this whole header in the
-   rest of Samba */
-void *pvfs_wait_message(struct pvfs_state *pvfs, 
-                        struct smbsrv_request *req, 
-                        int msg_type, 
-                        struct timeval end_time,
-                        void (*fn)(void *, enum pvfs_wait_notice),
-                        void *private);
+NTSTATUS pvfs_aio_pread(struct ntvfs_request *req, union smb_read *rd,
+                       struct pvfs_file *f, uint32_t maxcnt);
+NTSTATUS pvfs_aio_pwrite(struct ntvfs_request *req, union smb_write *wr,
+                        struct pvfs_file *f);
 
 #endif /* _VFS_POSIX_H_ */