"userdom_struct" does not need "full_name" anymore -- unused
[samba.git] / source3 / include / smb.h
index 1e31d8545d4c602dff30988a1c09e1e6c94a2fba..799ffe1a462b9a2b805d59c8a48af1a485fc7bb3 100644 (file)
@@ -11,7 +11,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 _SMB_H
 #define _SMB_H
 
 /* logged when starting the various Samba daemons */
-#define COPYRIGHT_STARTUP_MESSAGE      "Copyright Andrew Tridgell and the Samba Team 1992-2007"
+#define COPYRIGHT_STARTUP_MESSAGE      "Copyright Andrew Tridgell and the Samba Team 1992-2009"
 
 
 #if defined(LARGE_SMB_OFF_T)
@@ -47,8 +46,8 @@
 #define SMB_PORTS "445 139"
 
 #define Undefined (-1)
-#define False (0)
-#define True (1)
+#define False false
+#define True true
 #define Auto (2)
 #define Required (3)
 
 #include "debug.h"
 
 /* this defines the error codes that receive_smb can put in smb_read_error */
-#define READ_TIMEOUT 1
-#define READ_EOF 2
-#define READ_ERROR 3
-#define WRITE_ERROR 4 /* This error code can go into the client smb_rw_error. */
-#define READ_BAD_SIG 5
-#define DO_NOT_DO_TDIS 6 /* cli_close_connection() check for this when smbfs wants to keep tree connected */
+enum smb_read_errors {
+       SMB_READ_OK = 0,
+       SMB_READ_TIMEOUT,
+       SMB_READ_EOF,
+       SMB_READ_ERROR,
+       SMB_WRITE_ERROR, /* This error code can go into the client smb_rw_error. */
+       SMB_READ_BAD_SIG,
+       SMB_NO_MEMORY,
+       SMB_DO_NOT_DO_TDIS, /* cli_close_connection() check for this when smbfs wants to keep tree connected */
+       SMB_READ_BAD_DECRYPT
+};
 
 #define DIR_STRUCT_SIZE 43
 
 #define OPENX_FILE_CREATE_IF_NOT_EXIST 0x10
 #define OPENX_FILE_FAIL_IF_NOT_EXIST 0
 
-#include "doserr.h"
+#include "../libcli/util/doserr.h"
 
 typedef union unid_t {
        uid_t uid;
@@ -147,10 +151,6 @@ typedef union unid_t {
 
 typedef uint16 smb_ucs2_t;
 
-/* ucs2 string types. */
-typedef smb_ucs2_t wpstring[PSTRING_LEN];
-typedef smb_ucs2_t wfstring[FSTRING_LEN];
-
 #ifdef WORDS_BIGENDIAN
 #define UCS2_SHIFT 8
 #else
@@ -173,69 +173,6 @@ typedef uint32 codepoint_t;
 
 /* pipe string names */
 #define PIPE_LANMAN   "\\PIPE\\LANMAN"
-#define PIPE_SRVSVC   "\\PIPE\\srvsvc"
-#define PIPE_SAMR     "\\PIPE\\samr"
-#define PIPE_WINREG   "\\PIPE\\winreg"
-#define PIPE_WKSSVC   "\\PIPE\\wkssvc"
-#define PIPE_NETLOGON "\\PIPE\\NETLOGON"
-#define PIPE_NTLSA    "\\PIPE\\ntlsa"
-#define PIPE_NTSVCS   "\\PIPE\\ntsvcs"
-#define PIPE_LSASS    "\\PIPE\\lsass"
-#define PIPE_LSARPC   "\\PIPE\\lsarpc"
-#define PIPE_SPOOLSS  "\\PIPE\\spoolss"
-#define PIPE_NETDFS   "\\PIPE\\netdfs"
-#define PIPE_ECHO     "\\PIPE\\rpcecho"
-#define PIPE_SHUTDOWN "\\PIPE\\initshutdown"
-#define PIPE_EPM      "\\PIPE\\epmapper"
-#define PIPE_SVCCTL   "\\PIPE\\svcctl"
-#define PIPE_EVENTLOG "\\PIPE\\eventlog"
-#define PIPE_UNIXINFO    "\\PIPE\\unixinfo"
-
-#define PIPE_NETLOGON_PLAIN "\\NETLOGON"
-
-#define PI_LSARPC              0
-#define PI_LSARPC_DS           1
-#define PI_SAMR                        2
-#define PI_NETLOGON            3
-#define PI_SRVSVC              4
-#define PI_WKSSVC              5
-#define PI_WINREG              6
-#define PI_SPOOLSS             7
-#define PI_NETDFS              8
-#define PI_RPCECHO             9
-#define PI_INITSHUTDOWN                10
-#define PI_SVCCTL              11
-#define PI_EVENTLOG            12
-#define PI_UNIXINFO            13
-#define PI_NTSVCS              14
-#define PI_MAX_PIPES           15
-
-/* 64 bit time (100usec) since ????? - cifs6.txt, section 3.5, page 30 */
-typedef uint64_t NTTIME;
-
-
-/* Allowable account control bits */
-#define ACB_DISABLED                   0x00000001  /* 1 = User account disabled */
-#define ACB_HOMDIRREQ                  0x00000002  /* 1 = Home directory required */
-#define ACB_PWNOTREQ                   0x00000004  /* 1 = User password not required */
-#define ACB_TEMPDUP                    0x00000008  /* 1 = Temporary duplicate account */
-#define ACB_NORMAL                     0x00000010  /* 1 = Normal user account */
-#define ACB_MNS                                0x00000020  /* 1 = MNS logon user account */
-#define ACB_DOMTRUST                   0x00000040  /* 1 = Interdomain trust account */
-#define ACB_WSTRUST                    0x00000080  /* 1 = Workstation trust account */
-#define ACB_SVRTRUST                   0x00000100  /* 1 = Server trust account (BDC) */
-#define ACB_PWNOEXP                    0x00000200  /* 1 = User password does not expire */
-#define ACB_AUTOLOCK                   0x00000400  /* 1 = Account auto locked */
-
-/* only valid for > Windows 2000 */
-#define ACB_ENC_TXT_PWD_ALLOWED                0x00000800  /* 1 = Text password encryped */
-#define ACB_SMARTCARD_REQUIRED         0x00001000  /* 1 = Smart Card required */
-#define ACB_TRUSTED_FOR_DELEGATION     0x00002000  /* 1 = Trusted for Delegation */
-#define ACB_NOT_DELEGATED              0x00004000  /* 1 = Not delegated */
-#define ACB_USE_DES_KEY_ONLY           0x00008000  /* 1 = Use DES key only */
-#define ACB_DONT_REQUIRE_PREAUTH       0x00010000  /* 1 = Preauth not required */
-#define ACB_PWEXPIRED                  0x00020000  /* 1 = Password is expired */
-#define ACB_NO_AUTH_DATA_REQD          0x00080000  /* 1 = No authorization data required */
 
 #define MAX_HOURS_LEN 32
 
@@ -245,41 +182,44 @@ typedef uint64_t NTTIME;
 
 #define SID_MAX_SIZE ((size_t)(8+(MAXSUBAUTHS*4)))
 
-#define LOOKUP_NAME_ISOLATED 1 /* Look up unqualified names */
-#define LOOKUP_NAME_REMOTE   2  /* Ask others */
-#define LOOKUP_NAME_ALL (LOOKUP_NAME_ISOLATED|LOOKUP_NAME_REMOTE)
-
-#define LOOKUP_NAME_GROUP    4  /* (unused) This is a NASTY hack for valid users = @foo
-                                * where foo also exists in as user. */
+#define LOOKUP_NAME_NONE               0x00000000
+#define LOOKUP_NAME_ISOLATED             0x00000001  /* Look up unqualified names */
+#define LOOKUP_NAME_REMOTE               0x00000002  /* Ask others */
+#define LOOKUP_NAME_GROUP                0x00000004  /* (unused) This is a NASTY hack for 
+                                                       valid users = @foo where foo also
+                                                       exists in as user. */
+#define LOOKUP_NAME_EXPLICIT             0x00000008  /* Only include
+                                                       explicitly mapped names and not 
+                                                       the Unix {User,Group} domain */
+#define LOOKUP_NAME_BUILTIN            0x00000010 /* builtin names */
+#define LOOKUP_NAME_WKN                        0x00000020 /* well known names */
+#define LOOKUP_NAME_DOMAIN             0x00000040 /* only lookup own domain */
+#define LOOKUP_NAME_LOCAL              (LOOKUP_NAME_ISOLATED\
+                                       |LOOKUP_NAME_BUILTIN\
+                                       |LOOKUP_NAME_WKN\
+                                       |LOOKUP_NAME_DOMAIN)
+#define LOOKUP_NAME_ALL                        (LOOKUP_NAME_ISOLATED\
+                                       |LOOKUP_NAME_REMOTE\
+                                       |LOOKUP_NAME_BUILTIN\
+                                       |LOOKUP_NAME_WKN\
+                                       |LOOKUP_NAME_DOMAIN)
 
 /**
  * @brief Security Identifier
  *
  * @sa http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/accctrl_38yn.asp
  **/
-typedef struct dom_sid {
-       uint8  sid_rev_num;             /**< SID revision number */
-       uint8  num_auths;               /**< Number of sub-authorities */
-       uint8  id_auth[6];              /**< Identifier Authority */
-       /*
-        *  Pointer to sub-authorities.
-        *
-        * @note The values in these uint32's are in *native* byteorder, not
-        * neccessarily little-endian...... JRA.
-        */
-       uint32 sub_auths[MAXSUBAUTHS];  
-} DOM_SID;
-
-#define dom_sid2 dom_sid
-#define dom_sid28 dom_sid
+typedef struct dom_sid DOM_SID;
 
 enum id_mapping {
-       ID_UNKNOWN,
+       ID_UNKNOWN = 0,
        ID_MAPPED,
-       ID_UNMAPPED
+       ID_UNMAPPED,
+       ID_EXPIRED
 };
 
 enum id_type {
+       ID_TYPE_NOT_SPECIFIED = 0,
        ID_TYPE_UID,
        ID_TYPE_GID
 };
@@ -295,20 +235,31 @@ struct id_map {
        enum id_mapping status;
 };
 
-#include "librpc/ndr/misc.h"
-#include "librpc/ndr/security.h"
+#include "librpc/gen_ndr/misc.h"
+#include "librpc/gen_ndr/security.h"
 #include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/unixinfo.h"
 #include "librpc/gen_ndr/lsa.h"
 #include "librpc/gen_ndr/dfs.h"
-#include "librpc/gen_ndr/initshutdown.h"
 #include "librpc/gen_ndr/winreg.h"
+#include "librpc/gen_ndr/initshutdown.h"
 #include "librpc/gen_ndr/eventlog.h"
 #include "librpc/gen_ndr/srvsvc.h"
 #include "librpc/gen_ndr/wkssvc.h"
+#include "librpc/gen_ndr/echo.h"
+#include "librpc/gen_ndr/svcctl.h"
+#include "librpc/gen_ndr/netlogon.h"
+#include "librpc/gen_ndr/samr.h"
+#include "librpc/gen_ndr/dssetup.h"
+#include "librpc/gen_ndr/epmapper.h"
+#include "librpc/gen_ndr/libnet_join.h"
+#include "librpc/gen_ndr/krb5pac.h"
+#include "librpc/gen_ndr/ntsvcs.h"
+#include "librpc/gen_ndr/nbt.h"
+#include "librpc/gen_ndr/drsuapi.h"
+#include "librpc/gen_ndr/drsblobs.h"
 
 struct lsa_dom_info {
-       BOOL valid;
+       bool valid;
        DOM_SID sid;
        const char *name;
        int num_idxs;
@@ -367,10 +318,10 @@ typedef struct nt_user_token {
        SE_PRIV privileges;
 } NT_USER_TOKEN;
 
-typedef struct _unix_token {
+typedef struct unix_user_token {
        uid_t uid;
        gid_t gid;
-       int ngroups;
+       size_t ngroups;
        gid_t *groups;
 } UNIX_USER_TOKEN;
 
@@ -379,17 +330,6 @@ typedef struct time_info {
        uint32 time;
 } UTIME;
 
-/* Structure used when SMBwritebmpx is active */
-typedef struct {
-       size_t wr_total_written; /* So we know when to discard this */
-       int32 wr_timeout;
-       int32 wr_errclass; /* Cached errors */
-       int32 wr_error; /* Cached errors */
-       NTSTATUS wr_status; /* Cached errors */
-       BOOL  wr_mode; /* write through mode) */
-       BOOL  wr_discard; /* discard all further data */
-} write_bmpx_struct;
-
 typedef struct write_cache {
        SMB_OFF_T file_size;
        SMB_OFF_T offset;
@@ -409,7 +349,7 @@ typedef struct {
 struct fd_handle {
        size_t ref_count;
        int fd;
-       SMB_BIG_UINT position_information;
+       uint64_t position_information;
        SMB_OFF_T pos;
        uint32 private_options; /* NT Create options, but we only look at
                                 * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
@@ -418,16 +358,15 @@ struct fd_handle {
                                 * DELETE_ON_CLOSE is not stored in the share
                                 * mode database.
                                 */
-       unsigned long file_id;
+       unsigned long gen_id;
 };
 
-struct messaging_context;
-struct event_context;
-struct fd_event;
-struct timed_event;
 struct idle_event;
 struct share_mode_entry;
 struct uuid;
+struct named_mutex;
+struct pcap_cache;
+struct wb_context;
 
 struct vfs_fsp_data {
     struct vfs_fsp_data *next;
@@ -483,80 +422,69 @@ typedef struct files_struct {
        struct fd_handle *fh;
        unsigned int num_smb_operations;
        uint16 rap_print_jobid;
-       SMB_DEV_T dev;
-       SMB_INO_T inode;
-       SMB_BIG_UINT initial_allocation_size; /* Faked up initial allocation on disk. */
+       struct file_id file_id;
+       uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
        mode_t mode;
        uint16 file_pid;
        uint16 vuid;
-       write_bmpx_struct *wbmpx_ptr;
        write_cache *wcp;
        struct timeval open_time;
        uint32 access_mask;             /* NTCreateX access bits (FILE_READ_DATA etc.) */
        uint32 share_access;            /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
-       BOOL pending_modtime_owner;
-       struct timespec pending_modtime;
-       struct timespec last_write_time;
+
+       bool update_write_time_triggered;
+       struct timed_event *update_write_time_event;
+       bool update_write_time_on_close;
+       struct timespec close_write_time;
+       bool write_time_forced;
+
        int oplock_type;
        int sent_oplock_break;
        struct timed_event *oplock_timeout;
        struct lock_struct last_lock_failure;
+       int current_lock_count; /* Count the number of outstanding locks and pending locks. */
 
        struct share_mode_entry *pending_break_messages;
        int num_pending_break_messages;
 
-       BOOL can_lock;
-       BOOL can_read;
-       BOOL can_write;
-       BOOL print_file;
-       BOOL modified;
-       BOOL is_directory;
-       BOOL is_stat;
-       BOOL lockdb_clean;
-       BOOL initial_delete_on_close; /* Only set at NTCreateX if file was created. */
-       BOOL posix_open;
+       bool can_lock;
+       bool can_read;
+       bool can_write;
+       bool print_file;
+       bool modified;
+       bool is_directory;
+       bool aio_write_behind;
+       bool lockdb_clean;
+       bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */
+       bool posix_open;
        char *fsp_name;
 
        struct vfs_fsp_data *vfs_extension;
-       FAKE_FILE_HANDLE *fake_file_handle;
+       struct fake_file_handle *fake_file_handle;
 
        struct notify_change_buf *notify;
+
+       struct files_struct *base_fsp; /* placeholder for delete on close */
 } files_struct;
 
 #include "ntquotas.h"
 #include "sysquotas.h"
 
-/* used to hold an arbitrary blob of data */
-typedef struct data_blob_ {
-       uint8 *data;
-       size_t length;
-       void (*free)(struct data_blob_ *data_blob);
-} DATA_BLOB;
-
-/*
- * Structure used to keep directory state information around.
- * Used in NT change-notify code.
- */
-
-typedef struct {
-       time_t modify_time;
-       time_t status_time;
-} dir_status_struct;
-
 struct vuid_cache_entry {
-       uint16 vuid;
-       BOOL read_only;
-       BOOL admin_user;
+       struct auth_serversupplied_info *server_info;
+       uint16_t vuid;
+       bool read_only;
+       bool admin_user;
 };
 
 struct vuid_cache {
-       unsigned int entries;
+       unsigned int next_entry;
        struct vuid_cache_entry array[VUID_CACHE_SIZE];
 };
 
 typedef struct {
        char *name;
-       BOOL is_wild;
+       bool is_wild;
 } name_compare_entry;
 
 struct trans_state {
@@ -570,11 +498,11 @@ struct trans_state {
 
        uint8 cmd;              /* SMBtrans or SMBtrans2 */
 
-       fstring name;           /* for trans requests */
+       char *name;             /* for trans requests */
        uint16 call;            /* for trans2 and nttrans requests */
 
-       BOOL close_on_completion;
-       BOOL one_way;
+       bool close_on_completion;
+       bool one_way;
 
        unsigned int setup_count;
        uint16 *setup;
@@ -589,6 +517,16 @@ struct trans_state {
        char *data;
 };
 
+/*
+ * Info about an alternate data stream
+ */
+
+struct stream_struct {
+       SMB_OFF_T size;
+       SMB_OFF_T alloc_size;
+       char *name;
+};
+
 /* Include VFS stuff */
 
 #include "smb_acls.h"
@@ -596,10 +534,10 @@ struct trans_state {
 
 struct dfree_cached_info {
        time_t last_dfree_time;
-       SMB_BIG_UINT dfree_ret;
-       SMB_BIG_UINT bsize;
-       SMB_BIG_UINT dfree;
-       SMB_BIG_UINT dsize;
+       uint64_t dfree_ret;
+       uint64_t bsize;
+       uint64_t dfree;
+       uint64_t dsize;
 };
 
 struct dptr_struct;
@@ -614,17 +552,15 @@ struct share_iterator {
 
 typedef struct connection_struct {
        struct connection_struct *next, *prev;
-       TALLOC_CTX *mem_ctx; /* long-lived memory context for things hanging off this struct. */
        unsigned cnum; /* an index passed over the wire */
        struct share_params *params;
-       BOOL force_user;
-       BOOL force_group;
+       bool force_user;
        struct vuid_cache vuid_cache;
        struct dptr_struct *dirptr;
-       BOOL printer;
-       BOOL ipc;
-       BOOL read_only; /* Attributes for the current user of the share. */
-       BOOL admin_user; /* Attributes for the current user of the share. */
+       bool printer;
+       bool ipc;
+       bool read_only; /* Attributes for the current user of the share. */
+       bool admin_user; /* Attributes for the current user of the share. */
        char *dirpath;
        char *connectpath;
        char *origpath;
@@ -633,33 +569,36 @@ typedef struct connection_struct {
        struct vfs_ops vfs_opaque;                      /* OPAQUE Filesystem operations */
        struct vfs_handle_struct *vfs_handles;          /* for the new plugins */
 
-       char *user; /* name of user who *opened* this connection */
-       uid_t uid; /* uid of user who *opened* this connection */
-       gid_t gid; /* gid of user who *opened* this connection */
-       char client_address[18]; /* String version of client IP address. */
+       /*
+        * This represents the user information on this connection. Depending
+        * on the vuid using this tid, this might change per SMB request.
+        */
+       struct auth_serversupplied_info *server_info;
 
-       uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
+       char client_address[INET6_ADDRSTRLEN]; /* String version of client IP address. */
 
-       /* following groups stuff added by ih */
+       uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
 
-       /* This groups info is valid for the user that *opened* the connection */
-       size_t ngroups;
-       gid_t *groups;
-       NT_USER_TOKEN *nt_user_token;
-       
        time_t lastused;
        time_t lastused_count;
-       BOOL used;
+       bool used;
        int num_files_open;
        unsigned int num_smb_operations; /* Count of smb operations on this tree. */
+       int encrypt_level;
+       bool encrypted_tid;
+
+       /* Semantics requested by the client or forced by the server config. */
+       bool case_sensitive;
+       bool case_preserve;
+       bool short_case_preserve;
 
-       BOOL case_sensitive;
-       BOOL case_preserve;
-       BOOL short_case_preserve;
+       /* Semantics provided by the underlying filesystem. */
+       int fs_capabilities;
 
        name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */
        name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */
        name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */       
+       name_compare_entry *aio_write_behind_list; /* Per-share list of files to use aio write behind on. */       
        struct dfree_cached_info *dfree_info;
        struct trans_state *pending_trans;
        struct notify_context *notify_ctx;
@@ -672,6 +611,34 @@ struct current_user {
        NT_USER_TOKEN *nt_user_token;
 };
 
+struct smb_request {
+       uint8_t cmd;
+       uint16 flags2;
+       uint16 smbpid;
+       uint16 mid;
+       uint16 vuid;
+       uint16 tid;
+       uint8  wct;
+       uint16_t *vwv;
+       uint16_t buflen;
+       const uint8_t *buf;
+       const uint8 *inbuf;
+       uint8 *outbuf;
+       size_t unread_bytes;
+       bool encrypted;
+       connection_struct *conn;
+
+       /*
+        * Chained request handling
+        */
+       struct files_struct *chain_fsp;
+
+       /*
+        * Here we collect the outbufs from the chain handlers
+        */
+       uint8_t *chain_outbuf;
+};
+
 /* Defines for the sent_oplock_break field above. */
 #define NO_BREAK_SENT 0
 #define BREAK_TO_NONE_SENT 1
@@ -680,7 +647,6 @@ struct current_user {
 typedef struct {
        fstring smb_name; /* user name from the client */
        fstring unix_name; /* unix user name of a validated user */
-       fstring full_name; /* to store full name (such as "Joe Bloggs") from gecos field of password file */
        fstring domain; /* domain that the client specified */
 } userdom_struct;
 
@@ -715,22 +681,25 @@ struct server_info_struct {
        uint32 type;
        fstring comment;
        fstring domain; /* used ONLY in ipc.c NOT namework.c */
-       BOOL server_added; /* used ONLY in ipc.c NOT namework.c */
+       bool server_added; /* used ONLY in ipc.c NOT namework.c */
 };
 
 /* used for network interfaces */
 struct interface {
        struct interface *next, *prev;
-       struct in_addr ip;
-       struct in_addr bcast;
-       struct in_addr nmask;
+       char *name;
+       int flags;
+       struct sockaddr_storage ip;
+       struct sockaddr_storage netmask;
+       struct sockaddr_storage bcast;
 };
 
 /* Internal message queue for deferred opens. */
 struct pending_message_list {
        struct pending_message_list *next, *prev;
        struct timeval request_time; /* When was this first issued? */
-       struct timeval end_time; /* When does this time out? */
+       struct timed_event *te;
+       bool encrypted;
        DATA_BLOB buf;
        DATA_BLOB private_data;
 };
@@ -739,7 +708,7 @@ struct pending_message_list {
 
 /* struct returned by get_share_modes */
 struct share_mode_entry {
-       struct process_id pid;
+       struct server_id pid;
        uint16 op_mid;
        uint16 op_type;
        uint32 access_mask;             /* NTCreateX access bits (FILE_READ_DATA etc.) */
@@ -749,17 +718,16 @@ struct share_mode_entry {
                                 * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB for
                                 * smbstatus and swat */
        struct timeval time;
-       SMB_DEV_T dev;
-       SMB_INO_T inode;
+       struct file_id id;
        unsigned long share_file_id;
        uint32 uid;             /* uid of file opener. */
-       uint16 flags;           /* POSIX_OPEN only defined so far... */
+       uint16 flags;           /* See SHARE_MODE_XX above. */
 };
 
 /* oplock break message definition - linearization of share_mode_entry.
 
 Offset  Data                   length.
-0      struct process_id pid   4
+0      struct server_id pid    4
 4      uint16 op_mid           2
 6      uint16 op_type          2
 8      uint32 access_mask      4
@@ -775,19 +743,25 @@ Offset  Data                      length.
 54
 
 */
+#ifdef CLUSTER_SUPPORT
+#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 58
+#else
 #define MSG_SMB_SHARE_MODE_ENTRY_SIZE 54
+#endif
 
 struct share_mode_lock {
        const char *servicepath; /* canonicalized. */
        const char *filename;
-       SMB_DEV_T dev;
-       SMB_INO_T ino;
+       struct file_id id;
        int num_share_modes;
        struct share_mode_entry *share_modes;
        UNIX_USER_TOKEN *delete_token;
-       BOOL delete_on_close;
-       BOOL fresh;
-       BOOL modified;
+       bool delete_on_close;
+       struct timespec old_write_time;
+       struct timespec changed_write_time;
+       bool fresh;
+       bool modified;
+       struct db_record *record;
 };
 
 /*
@@ -799,7 +773,9 @@ struct locking_data {
        union {
                struct {
                        int num_share_mode_entries;
-                       BOOL delete_on_close;
+                       bool delete_on_close;
+                       struct timespec old_write_time;
+                       struct timespec changed_write_time;
                        uint32 delete_token_size; /* Only valid if either of
                                                     the two previous fields
                                                     are True. */
@@ -817,7 +793,7 @@ struct locking_data {
 /* Used to store pipe open records for NetFileEnum() */
 
 struct pipe_open_rec {
-       struct process_id pid;
+       struct server_id pid;
        uid_t uid;
        int pnum;
        fstring name;
@@ -864,18 +840,18 @@ struct pipe_open_rec {
 
 /* key and data in the connections database - used in smbstatus and smbd */
 struct connections_key {
-       struct process_id pid;
+       struct server_id pid;
        int cnum;
        fstring name;
 };
 
 struct connections_data {
        int magic;
-       struct process_id pid;
+       struct server_id pid;
        int cnum;
        uid_t uid;
        gid_t gid;
-       char name[24];
+       char servicename[FSTRING_LEN];
        char addr[24];
        char machine[FSTRING_LEN];
        time_t start;
@@ -886,7 +862,7 @@ struct connections_data {
 /* the following are used by loadparm for option lists */
 typedef enum {
        P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST,
-       P_STRING,P_USTRING,P_GSTRING,P_UGSTRING,P_ENUM,P_SEP
+       P_STRING,P_USTRING,P_ENUM,P_SEP
 } parm_type;
 
 typedef enum {
@@ -903,11 +879,11 @@ struct parm_struct {
        parm_type type;
        parm_class p_class;
        void *ptr;
-       BOOL (*special)(int snum, const char *, char **);
+       bool (*special)(int snum, const char *, char **);
        const struct enum_list *enum_list;
        unsigned flags;
        union {
-               BOOL bvalue;
+               bool bvalue;
                int ivalue;
                char *svalue;
                char cvalue;
@@ -1239,17 +1215,24 @@ struct bitmap {
 
 /* Mapping of generic access rights for files to specific rights. */
 
+/* This maps to 0x1F01FF */
 #define FILE_GENERIC_ALL (STANDARD_RIGHTS_REQUIRED_ACCESS| SYNCHRONIZE_ACCESS|FILE_ALL_ACCESS)
 
+/* This maps to 0x120089 */
 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ_ACCESS|FILE_READ_DATA|FILE_READ_ATTRIBUTES|\
                                                        FILE_READ_EA|SYNCHRONIZE_ACCESS)
 
+/* This maps to 0x120116 */
 #define FILE_GENERIC_WRITE (STD_RIGHT_READ_CONTROL_ACCESS|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|\
                                                        FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONIZE_ACCESS)
 
-#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE_ACCESS|\
+#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE_ACCESS|FILE_READ_ATTRIBUTES|\
                                                                FILE_EXECUTE|SYNCHRONIZE_ACCESS)
 
+/* Share specific rights. */
+#define SHARE_ALL_ACCESS      FILE_GENERIC_ALL
+#define SHARE_READ_ONLY       (FILE_GENERIC_READ|FILE_EXECUTE)
+
 /* Mapping of access rights to UNIX perms. */
 #define UNIX_ACCESS_RWX                FILE_GENERIC_ALL
 #define UNIX_ACCESS_R          FILE_GENERIC_READ
@@ -1335,9 +1318,19 @@ struct bitmap {
 #define FILE_DELETE_ON_CLOSE      0x1000
 #define FILE_OPEN_BY_FILE_ID     0x2000
 
-/* Private create options used by the ntcreatex processing code. From Samba4. */
-#define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x01000000
-#define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x02000000
+#define NTCREATEX_OPTIONS_MUST_IGNORE_MASK      (0x008F0480)
+
+#define NTCREATEX_OPTIONS_INVALID_PARAM_MASK    (0xFF100030)
+
+/*
+ * Private create options used by the ntcreatex processing code. From Samba4.
+ * We reuse some ignored flags for private use.
+ */
+#define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x00010000
+#define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x00020000
+
+/* Private options for streams support */
+#define NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE 0x00040000
 
 /* Responses when opening a file. */
 #define FILE_WAS_SUPERSEDED 0
@@ -1477,6 +1470,9 @@ char *strdup(char *s);
 
 #define FLAGS2_WIN2K_SIGNATURE         0xC852 /* Hack alert ! For now... JRA. */
 
+/* TCONX Flag (smb_vwv2). */
+#define TCONX_FLAG_EXTENDED_RESPONSE   0x8
+
 /* Capabilities.  see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */
 
 #define CAP_RAW_MODE         0x0001
@@ -1524,7 +1520,7 @@ enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,
 enum schema_types {SCHEMA_COMPAT, SCHEMA_AD, SCHEMA_SAMBA};
 
 /* LDAP SSL options */
-enum ldap_ssl_types {LDAP_SSL_ON, LDAP_SSL_OFF, LDAP_SSL_START_TLS};
+enum ldap_ssl_types {LDAP_SSL_OFF, LDAP_SSL_START_TLS};
 
 /* LDAP PASSWD SYNC methods */
 enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PASSWD_SYNC_ONLY};
@@ -1532,7 +1528,7 @@ enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PAS
 /* Remote architectures we know about. */
 enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT,
                        RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_VISTA,
-                       RA_SAMBA, RA_CIFSFS};
+                       RA_SAMBA, RA_CIFSFS, RA_WINXP64};
 
 /* case handling */
 enum case_handling {CASE_LOWER,CASE_UPPER};
@@ -1671,16 +1667,17 @@ minimum length == 18.
 
 enum smbd_capability {
     KERNEL_OPLOCK_CAPABILITY,
-    DMAPI_ACCESS_CAPABILITY
+    DMAPI_ACCESS_CAPABILITY,
+    LEASE_CAPABILITY
 };
 
 /* if a kernel does support oplocks then a structure of the following
    typee is used to describe how to interact with the kernel */
 struct kernel_oplocks {
        files_struct * (*receive_message)(fd_set *fds);
-       BOOL (*set_oplock)(files_struct *fsp, int oplock_type);
+       bool (*set_oplock)(files_struct *fsp, int oplock_type);
        void (*release_oplock)(files_struct *fsp);
-       BOOL (*msg_waiting)(fd_set *fds);
+       bool (*msg_waiting)(fd_set *fds);
        int notification_fd;
 };
 
@@ -1713,8 +1710,8 @@ struct node_status_extra {
 };
 
 struct pwd_info {
-       BOOL null_pwd;
-       BOOL cleartext;
+       bool null_pwd;
+       bool cleartext;
 
        fstring password;
 };
@@ -1731,24 +1728,6 @@ struct pending_auth_data {
 typedef struct user_struct {
        struct user_struct *next, *prev;
        uint16 vuid; /* Tag for this entry. */
-       uid_t uid; /* uid of a validated user */
-       gid_t gid; /* gid of a validated user */
-
-       userdom_struct user;
-       char *homedir;
-       char *unix_homedir;
-       char *logon_script;
-       
-       BOOL guest;
-
-       /* following groups stuff added by ih */
-       /* This groups info is needed for when we become_user() for this uid */
-       int n_groups;
-       gid_t *groups;
-
-       NT_USER_TOKEN *nt_user_token;
-
-       DATA_BLOB session_key;
 
        char *session_keystr; /* used by utmp and pam session code.  
                                 TDB key string */
@@ -1826,10 +1805,11 @@ typedef struct _smb_iconv_t {
 #ifndef LDAP_PORT
 #define LDAP_PORT      389
 #endif
+#define LDAP_GC_PORT    3268
 
 /* used by the IP comparison function */
 struct ip_service {
-       struct in_addr ip;
+       struct sockaddr_storage ss;
        unsigned port;
 };
 
@@ -1840,15 +1820,15 @@ struct ip_service {
 
 typedef struct smb_sign_info {
        void (*sign_outgoing_message)(char *outbuf, struct smb_sign_info *si);
-       BOOL (*check_incoming_message)(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok);
+       bool (*check_incoming_message)(const char *inbuf, struct smb_sign_info *si, bool must_be_ok);
        void (*free_signing_context)(struct smb_sign_info *si);
        void *signing_context;
 
-       BOOL negotiated_smb_signing;
-       BOOL allow_smb_signing;
-       BOOL doing_signing;
-       BOOL mandatory_signing;
-       BOOL seen_valid; /* Have I ever seen a validly signed packet? */
+       bool negotiated_smb_signing;
+       bool allow_smb_signing;
+       bool doing_signing;
+       bool mandatory_signing;
+       bool seen_valid; /* Have I ever seen a validly signed packet? */
 } smb_sign_info;
 
 struct ea_struct {
@@ -1866,6 +1846,8 @@ struct ea_list {
 #define SAMBA_POSIX_INHERITANCE_EA_NAME "user.SAMBA_PAI"
 /* EA to use for DOS attributes */
 #define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB"
+/* Prefix for DosStreams in the vfs_streams_xattr module */
+#define SAMBA_XATTR_DOSSTREAM_PREFIX "user.DosStream."
 
 #define UUID_SIZE 16
 
@@ -1896,4 +1878,20 @@ enum usershare_err {
 /* Different reasons for closing a file. */
 enum file_close_type {NORMAL_CLOSE=0,SHUTDOWN_CLOSE,ERROR_CLOSE};
 
+/* Used in SMB_FS_OBJECTID_INFORMATION requests.  Must be exactly 48 bytes. */
+#define SAMBA_EXTENDED_INFO_MAGIC 0x536d4261 /* "SmBa" */
+#define SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH 28
+struct smb_extended_info {
+       uint32 samba_magic;             /* Always SAMBA_EXTRA_INFO_MAGIC */
+       uint32 samba_version;           /* Major/Minor/Release/Revision */
+       uint32 samba_subversion;        /* Prerelease/RC/Vendor patch */
+       NTTIME samba_gitcommitdate;
+       char   samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
+};
+
+/*
+ * create_file_flags
+ */
+#define CFF_DOS_PATH           0x00000001
+
 #endif /* _SMB_H */