s3-build: avoid to globally include printing and spoolss headers.
[vlendec/samba-autobuild/.git] / source3 / include / smb.h
index 84aa36a36457c7adb218ba973300c2f474ce1409..53228ba97969559944dd028d4f1929320d1cd8e7 100644 (file)
@@ -27,7 +27,7 @@
 #define _SMB_H
 
 /* logged when starting the various Samba daemons */
-#define COPYRIGHT_STARTUP_MESSAGE      "Copyright Andrew Tridgell and the Samba Team 1992-2009"
+#define COPYRIGHT_STARTUP_MESSAGE      "Copyright Andrew Tridgell and the Samba Team 1992-2010"
 
 
 #if defined(LARGE_SMB_OFF_T)
@@ -144,27 +144,6 @@ typedef union unid_t {
        gid_t gid;
 } unid_t;
 
-/*
- * SMB UCS2 (16-bit unicode) internal type.
- * smb_ucs2_t is *always* in little endian format.
- */
-
-#ifdef WORDS_BIGENDIAN
-#define UCS2_SHIFT 8
-#else
-#define UCS2_SHIFT 0
-#endif
-
-/* turn a 7 bit character into a ucs2 character */
-#define UCS2_CHAR(c) ((c) << UCS2_SHIFT)
-
-/* return an ascii version of a ucs2 character */
-#define UCS2_TO_CHAR(c) (((c) >> UCS2_SHIFT) & 0xff)
-
-/* Copy into a smb_ucs2_t from a possibly unaligned buffer. Return the copied smb_ucs2_t */
-#define COPY_UCS2_CHAR(dest,src) (((unsigned char *)(dest))[0] = ((unsigned char *)(src))[0],\
-                               ((unsigned char *)(dest))[1] = ((unsigned char *)(src))[1], (dest))
-
 /* pipe string names */
 #define PIPE_LANMAN   "\\PIPE\\LANMAN"
 
@@ -182,9 +161,8 @@ typedef union unid_t {
 #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_NO_NSS              0x00000008  /* no NSS calls to avoid
+                                                       winbind recursions */
 #define LOOKUP_NAME_BUILTIN            0x00000010 /* builtin names */
 #define LOOKUP_NAME_WKN                        0x00000020 /* well known names */
 #define LOOKUP_NAME_DOMAIN             0x00000040 /* only lookup own domain */
@@ -198,64 +176,14 @@ typedef union unid_t {
                                        |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 DOM_SID;
-
-enum id_mapping {
-       ID_UNKNOWN = 0,
-       ID_MAPPED,
-       ID_UNMAPPED,
-       ID_EXPIRED
-};
-
-enum id_type {
-       ID_TYPE_NOT_SPECIFIED = 0,
-       ID_TYPE_UID,
-       ID_TYPE_GID
-};
-
-struct unixid {
-       uint32_t id;
-       enum id_type type;
-};
-
-struct id_map {
-       DOM_SID *sid;
-       struct unixid xid;
-       enum id_mapping status;
-};
-
-#include "librpc/gen_ndr/misc.h"
-#include "librpc/gen_ndr/security.h"
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/lsa.h"
-#include "librpc/gen_ndr/dfs.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/idmap.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"
-#include "librpc/gen_ndr/spoolss.h"
+#include "librpc/gen_ndr/dcerpc.h"
 
 struct lsa_dom_info {
        bool valid;
-       DOM_SID sid;
+       struct dom_sid sid;
        const char *name;
        int num_idxs;
        int *idxs;
@@ -269,30 +197,30 @@ struct lsa_name_info {
 };
 
 /* Some well-known SIDs */
-extern const DOM_SID global_sid_World_Domain;
-extern const DOM_SID global_sid_World;
-extern const DOM_SID global_sid_Creator_Owner_Domain;
-extern const DOM_SID global_sid_NT_Authority;
-extern const DOM_SID global_sid_System;
-extern const DOM_SID global_sid_NULL;
-extern const DOM_SID global_sid_Authenticated_Users;
-extern const DOM_SID global_sid_Network;
-extern const DOM_SID global_sid_Creator_Owner;
-extern const DOM_SID global_sid_Creator_Group;
-extern const DOM_SID global_sid_Anonymous;
-extern const DOM_SID global_sid_Builtin;
-extern const DOM_SID global_sid_Builtin_Administrators;
-extern const DOM_SID global_sid_Builtin_Users;
-extern const DOM_SID global_sid_Builtin_Guests;
-extern const DOM_SID global_sid_Builtin_Power_Users;
-extern const DOM_SID global_sid_Builtin_Account_Operators;
-extern const DOM_SID global_sid_Builtin_Server_Operators;
-extern const DOM_SID global_sid_Builtin_Print_Operators;
-extern const DOM_SID global_sid_Builtin_Backup_Operators;
-extern const DOM_SID global_sid_Builtin_Replicator;
-extern const DOM_SID global_sid_Builtin_PreWin2kAccess;
-extern const DOM_SID global_sid_Unix_Users;
-extern const DOM_SID global_sid_Unix_Groups;
+extern const struct dom_sid global_sid_World_Domain;
+extern const struct dom_sid global_sid_World;
+extern const struct dom_sid global_sid_Creator_Owner_Domain;
+extern const struct dom_sid global_sid_NT_Authority;
+extern const struct dom_sid global_sid_System;
+extern const struct dom_sid global_sid_NULL;
+extern const struct dom_sid global_sid_Authenticated_Users;
+extern const struct dom_sid global_sid_Network;
+extern const struct dom_sid global_sid_Creator_Owner;
+extern const struct dom_sid global_sid_Creator_Group;
+extern const struct dom_sid global_sid_Anonymous;
+extern const struct dom_sid global_sid_Builtin;
+extern const struct dom_sid global_sid_Builtin_Administrators;
+extern const struct dom_sid global_sid_Builtin_Users;
+extern const struct dom_sid global_sid_Builtin_Guests;
+extern const struct dom_sid global_sid_Builtin_Power_Users;
+extern const struct dom_sid global_sid_Builtin_Account_Operators;
+extern const struct dom_sid global_sid_Builtin_Server_Operators;
+extern const struct dom_sid global_sid_Builtin_Print_Operators;
+extern const struct dom_sid global_sid_Builtin_Backup_Operators;
+extern const struct dom_sid global_sid_Builtin_Replicator;
+extern const struct dom_sid global_sid_Builtin_PreWin2kAccess;
+extern const struct dom_sid global_sid_Unix_Users;
+extern const struct dom_sid global_sid_Unix_Groups;
 
 /*
  * The complete list of SIDS belonging to this user.
@@ -309,7 +237,7 @@ extern const DOM_SID global_sid_Unix_Groups;
 
 typedef struct nt_user_token {
        size_t num_sids;
-       DOM_SID *user_sids;
+       struct dom_sid *user_sids;
        SE_PRIV privileges;
 } NT_USER_TOKEN;
 
@@ -333,12 +261,6 @@ typedef struct write_cache {
        char *data;
 } write_cache;
 
-typedef struct {
-       smb_ucs2_t *origname;
-       smb_ucs2_t *filename;
-       SMB_STRUCT_STAT *statinfo;
-} smb_filename;
-
 #include "fake_file.h"
 
 struct fd_handle {
@@ -348,7 +270,8 @@ struct fd_handle {
        SMB_OFF_T pos;
        uint32 private_options; /* NT Create options, but we only look at
                                 * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
-                                * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB (Except
+                                * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB and
+                                * NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE
                                 * for print files *only*, where
                                 * DELETE_ON_CLOSE is not stored in the share
                                 * mode database.
@@ -360,9 +283,9 @@ struct idle_event;
 struct share_mode_entry;
 struct uuid;
 struct named_mutex;
-struct pcap_cache;
 struct wb_context;
 struct rpc_cli_smbd_conn;
+struct fncall_context;
 
 struct vfs_fsp_data {
     struct vfs_fsp_data *next;
@@ -413,13 +336,21 @@ struct notify_change_buf {
        struct notify_change_request *requests;
 };
 
+struct print_file_data {
+       char *svcname;
+       char *docname;
+       char *filename;
+       struct policy_handle handle;
+       uint32_t jobid;
+       uint16 rap_jobid;
+};
+
 typedef struct files_struct {
        struct files_struct *next, *prev;
        int fnum;
        struct connection_struct *conn;
        struct fd_handle *fh;
        unsigned int num_smb_operations;
-       uint16 rap_print_jobid;
        struct file_id file_id;
        uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
        mode_t mode;
@@ -448,14 +379,14 @@ typedef struct files_struct {
        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 delete_on_close;
        bool posix_open;
-       char *fsp_name;
+       struct smb_filename *fsp_name;
 
        struct vfs_fsp_data *vfs_extension;
        struct fake_file_handle *fake_file_handle;
@@ -463,6 +394,20 @@ typedef struct files_struct {
        struct notify_change_buf *notify;
 
        struct files_struct *base_fsp; /* placeholder for delete on close */
+
+       /*
+        * Read-only cached brlock record, thrown away when the
+        * brlock.tdb seqnum changes. This avoids fetching data from
+        * the brlock.tdb on every read/write call.
+        */
+       int brlock_seqnum;
+       struct byte_range_lock *brlock_rec;
+
+       struct dptr_struct *dptr;
+
+       /* if not NULL, means this is a print file */
+       struct print_file_data *print_file;
+
 } files_struct;
 
 #include "ntquotas.h"
@@ -472,7 +417,6 @@ struct vuid_cache_entry {
        struct auth_serversupplied_info *server_info;
        uint16_t vuid;
        bool read_only;
-       bool admin_user;
 };
 
 struct vuid_cache {
@@ -488,7 +432,7 @@ typedef struct {
 struct trans_state {
        struct trans_state *next, *prev;
        uint16 vuid;
-       uint16 mid;
+       uint64_t mid;
 
        uint32 max_param_return;
        uint32 max_data_return;
@@ -550,21 +494,21 @@ struct share_iterator {
 
 typedef struct connection_struct {
        struct connection_struct *next, *prev;
+       struct smbd_server_connection *sconn; /* can be NULL */
        unsigned cnum; /* an index passed over the wire */
        struct share_params *params;
        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. */
-       char *dirpath;
+       /* Does this filesystem honor
+          sub second timestamps on files
+          and directories when setting time ? */
+       enum timestamp_set_resolution ts_res;
        char *connectpath;
        char *origpath;
 
-       struct vfs_ops vfs;                   /* Filesystem operations */
-       struct vfs_ops vfs_opaque;                      /* OPAQUE Filesystem operations */
        struct vfs_handle_struct *vfs_handles;          /* for the new plugins */
 
        /*
@@ -598,6 +542,9 @@ typedef struct connection_struct {
 
        /* Semantics provided by the underlying filesystem. */
        int fs_capabilities;
+       /* Device number of the directory of the share mount.
+          Used to ensure unique FileIndex returns. */
+       SMB_DEV_T base_share_dev;
 
        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). */
@@ -606,6 +553,9 @@ typedef struct connection_struct {
        struct dfree_cached_info *dfree_info;
        struct trans_state *pending_trans;
        struct notify_context *notify_ctx;
+
+       struct rpc_pipe_client *spoolss_pipe;
+
 } connection_struct;
 
 struct current_user {
@@ -615,12 +565,13 @@ struct current_user {
        NT_USER_TOKEN *nt_user_token;
 };
 
+struct smbd_smb2_request;
 
 struct smb_request {
        uint8_t cmd;
        uint16 flags2;
        uint16 smbpid;
-       uint16 mid;
+       uint64_t mid; /* For compatibility with SMB2. */
        uint32_t seqnum;
        uint16 vuid;
        uint16 tid;
@@ -644,6 +595,7 @@ struct smb_request {
        size_t unread_bytes;
        bool encrypted;
        connection_struct *conn;
+       struct smbd_server_connection *sconn;
        struct smb_perfcount_data pcd;
 
        /*
@@ -660,6 +612,13 @@ struct smb_request {
         * state information for async smb handling
         */
        void *async_priv;
+
+       bool done;
+
+       /*
+        * Back pointer to smb2 request.
+        */
+       struct smbd_smb2_request *smb2req;
 };
 
 /* Defines for the sent_oplock_break field above. */
@@ -675,8 +634,23 @@ typedef struct {
 
 /* Extra fields above "LPQ_PRINTING" are used to map extra NT status codes. */
 
-enum {LPQ_QUEUED=0,LPQ_PAUSED,LPQ_SPOOLING,LPQ_PRINTING,LPQ_ERROR,LPQ_DELETING,
-      LPQ_OFFLINE,LPQ_PAPEROUT,LPQ_PRINTED,LPQ_DELETED,LPQ_BLOCKED,LPQ_USER_INTERVENTION};
+enum {
+       LPQ_QUEUED = 0,
+       LPQ_PAUSED,
+       LPQ_SPOOLING,
+       LPQ_PRINTING,
+       LPQ_ERROR,
+       LPQ_DELETING,
+       LPQ_OFFLINE,
+       LPQ_PAPEROUT,
+       LPQ_PRINTED,
+       LPQ_DELETED,
+       LPQ_BLOCKED,
+       LPQ_USER_INTERVENTION,
+
+       /* smbd is dooing the file spooling before passing control to spoolss */
+       PJOB_SMBD_SPOOLING
+};
 
 typedef struct _print_queue_struct {
        int job;                /* normally the UNIX jobid -- see note in 
@@ -725,6 +699,7 @@ struct pending_message_list {
        struct smb_perfcount_data pcd;
        uint32_t seqnum;
        bool encrypted;
+       bool processed;
        DATA_BLOB buf;
        DATA_BLOB private_data;
 };
@@ -734,7 +709,7 @@ struct pending_message_list {
 /* struct returned by get_share_modes */
 struct share_mode_entry {
        struct server_id pid;
-       uint16 op_mid;
+       uint64_t op_mid;        /* For compatibility with SMB2 opens. */
        uint16 op_type;
        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). */
@@ -753,31 +728,49 @@ struct share_mode_entry {
 
 Offset  Data                   length.
 0      struct server_id pid    4
-4      uint16 op_mid           2
-     uint16 op_type          2
-     uint32 access_mask      4
-12     uint32 share_access     4
-16     uint32 private_options  4
-20     uint32 time sec         4
-24     uint32 time usec        4
-28     uint64 dev              8 bytes
-36     uint64 inode            8 bytes
-44     uint64 extid            8 bytes
-52     unsigned long file_id   4 bytes
-56     uint32 uid              4 bytes
-60     uint16 flags            2 bytes
-62
+4      uint16 op_mid           8
+12     uint16 op_type          2
+14     uint32 access_mask      4
+18     uint32 share_access     4
+22     uint32 private_options  4
+26     uint32 time sec         4
+30     uint32 time usec        4
+34     uint64 dev              8 bytes
+42     uint64 inode            8 bytes
+50     uint64 extid            8 bytes
+58     unsigned long file_id   4 bytes
+62     uint32 uid              4 bytes
+66     uint16 flags            2 bytes
+68
 
 */
+
+#define OP_BREAK_MSG_PID_OFFSET 0
+#define OP_BREAK_MSG_MID_OFFSET 4
+#define OP_BREAK_MSG_OP_TYPE_OFFSET 12
+#define OP_BREAK_MSG_ACCESS_MASK_OFFSET 14
+#define OP_BREAK_MSG_SHARE_ACCESS_OFFSET 18
+#define OP_BREAK_MSG_PRIV_OFFSET 22
+#define OP_BREAK_MSG_TIME_SEC_OFFSET 26
+#define OP_BREAK_MSG_TIME_USEC_OFFSET 30
+#define OP_BREAK_MSG_DEV_OFFSET 34
+#define OP_BREAK_MSG_INO_OFFSET 42
+#define OP_BREAK_MSG_EXTID_OFFSET 50
+#define OP_BREAK_MSG_FILE_ID_OFFSET 58
+#define OP_BREAK_MSG_UID_OFFSET 62
+#define OP_BREAK_MSG_FLAGS_OFFSET 66
+
 #ifdef CLUSTER_SUPPORT
-#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 66
+#define OP_BREAK_MSG_VNN_OFFSET 68
+#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 72
 #else
-#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 62
+#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 68
 #endif
 
 struct share_mode_lock {
        const char *servicepath; /* canonicalized. */
-       const char *filename;
+       const char *base_name;
+       const char *stream_name;
        struct file_id id;
        int num_share_modes;
        struct share_mode_entry *share_modes;
@@ -835,20 +828,6 @@ struct pipe_open_rec {
 #define PW_HISTORY_ENTRY_LEN (PW_HISTORY_SALT_LEN+SALTED_MD5_HASH_LEN)
 #define MAX_PW_HISTORY_LEN 24
 
-/*
- * Flags for account policy.
- */
-#define AP_MIN_PASSWORD_LEN            1
-#define AP_PASSWORD_HISTORY            2
-#define AP_USER_MUST_LOGON_TO_CHG_PASS 3
-#define AP_MAX_PASSWORD_AGE            4
-#define AP_MIN_PASSWORD_AGE            5
-#define AP_LOCK_ACCOUNT_DURATION       6
-#define AP_RESET_COUNT_TIME            7
-#define AP_BAD_ATTEMPT_LOCKOUT         8
-#define AP_TIME_TO_LOGOUT              9
-#define AP_REFUSE_MACHINE_PW_CHANGE    10
-
 /*
  * Flags for local user manipulation.
  */
@@ -881,7 +860,12 @@ struct connections_data {
        char addr[24];
        char machine[FSTRING_LEN];
        time_t start;
-       uint32 bcast_msg_flags;
+
+       /*
+        * This field used to hold the msg_flags. For compatibility reasons,
+        * keep the data structure in the tdb file the same.
+        */
+       uint32 unused_compatitibility_field;
 };
 
 
@@ -928,6 +912,7 @@ struct parm_struct {
 #define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */
 #define FLAG_HIDE      0x2000 /* options that should be hidden in SWAT */
 #define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */
+#define FLAG_META      0x8000 /* A meta directive - not a real parameter */
 
 struct bitmap {
        uint32 *b;
@@ -1242,18 +1227,29 @@ 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)
+#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)
+#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|FILE_READ_ATTRIBUTES|\
-                                                               FILE_EXECUTE|SYNCHRONIZE_ACCESS)
+#define FILE_GENERIC_WRITE (SEC_STD_READ_CONTROL|\
+                           FILE_WRITE_DATA|\
+                           FILE_WRITE_ATTRIBUTES|\
+                           FILE_WRITE_EA|\
+                           FILE_APPEND_DATA|\
+                           SYNCHRONIZE_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
@@ -1337,12 +1333,23 @@ struct bitmap {
 #define FILE_DIRECTORY_FILE       0x0001
 #define FILE_WRITE_THROUGH        0x0002
 #define FILE_SEQUENTIAL_ONLY      0x0004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x0008
+#define FILE_SYNCHRONOUS_IO_ALERT      0x0010  /* may be ignored */
+#define FILE_SYNCHRONOUS_IO_NONALERT   0x0020  /* may be ignored */
 #define FILE_NON_DIRECTORY_FILE   0x0040
+#define FILE_CREATE_TREE_CONNECTION    0x0080  /* ignore, should be zero */
+#define FILE_COMPLETE_IF_OPLOCKED      0x0100  /* ignore, should be zero */
 #define FILE_NO_EA_KNOWLEDGE      0x0200
-#define FILE_EIGHT_DOT_THREE_ONLY 0x0400
+#define FILE_EIGHT_DOT_THREE_ONLY 0x0400 /* aka OPEN_FOR_RECOVERY: ignore, should be zero */
 #define FILE_RANDOM_ACCESS        0x0800
 #define FILE_DELETE_ON_CLOSE      0x1000
 #define FILE_OPEN_BY_FILE_ID     0x2000
+#define FILE_OPEN_FOR_BACKUP_INTENT    0x4000
+#define FILE_NO_COMPRESSION       0x8000
+#define FILE_RESERVER_OPFILTER    0x00100000   /* ignore, should be zero */
+#define FILE_OPEN_REPARSE_POINT   0x00200000
+#define FILE_OPEN_NO_RECALL       0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 /* ignore should be zero */
 
 #define NTCREATEX_OPTIONS_MUST_IGNORE_MASK      (0x008F0480)
 
@@ -1350,13 +1357,17 @@ struct bitmap {
 
 /*
  * Private create options used by the ntcreatex processing code. From Samba4.
- * We reuse some ignored flags for private use.
+ * We reuse some ignored flags for private use. Passed in the private_flags
+ * argument.
  */
-#define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x00010000
-#define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x00020000
+#define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x0001
+#define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x0002
 
 /* Private options for streams support */
-#define NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE 0x00040000
+#define NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE 0x0004
+
+/* Private options for printer support */
+#define NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE 0x0008
 
 /* Responses when opening a file. */
 #define FILE_WAS_SUPERSEDED 0
@@ -1447,10 +1458,6 @@ extern int dcelogin_atmost_once;
 char *strdup(char *s);
 #endif
 
-#ifndef SIGNAL_CAST
-#define SIGNAL_CAST (RETSIGTYPE (*)(int))
-#endif
-
 #ifndef SELECT_CAST
 #define SELECT_CAST
 #endif
@@ -1499,6 +1506,15 @@ char *strdup(char *s);
 /* TCONX Flag (smb_vwv2). */
 #define TCONX_FLAG_EXTENDED_RESPONSE   0x8
 
+/* File Status Flags. See:
+
+http://msdn.microsoft.com/en-us/library/cc246334(PROT.13).aspx
+*/
+
+#define NO_EAS                 0x1
+#define NO_SUBSTREAMS          0x2
+#define NO_REPARSETAG          0x4
+
 /* Capabilities.  see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */
 
 #define CAP_RAW_MODE         0x0001
@@ -1520,7 +1536,15 @@ char *strdup(char *s);
 
 /* protocol types. It assumes that higher protocols include lower protocols
    as subsets */
-enum protocol_types {PROTOCOL_NONE,PROTOCOL_CORE,PROTOCOL_COREPLUS,PROTOCOL_LANMAN1,PROTOCOL_LANMAN2,PROTOCOL_NT1};
+enum protocol_types {
+       PROTOCOL_NONE,
+       PROTOCOL_CORE,
+       PROTOCOL_COREPLUS,
+       PROTOCOL_LANMAN1,
+       PROTOCOL_LANMAN2,
+       PROTOCOL_NT1,
+       PROTOCOL_SMB2
+};
 
 /* security levels */
 enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER,SEC_DOMAIN,SEC_ADS};
@@ -1551,6 +1575,18 @@ 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};
 
+/*
+ * This should be under the HAVE_KRB5 flag but since they're used
+ * in lp_kerberos_method(), they ned to be always available
+ * If you add any entries to KERBEROS_VERIFY defines, please modify USE.*KEYTAB macros
+ * so they remain accurate.
+ */
+
+#define KERBEROS_VERIFY_SECRETS 0
+#define KERBEROS_VERIFY_SYSTEM_KEYTAB 1
+#define KERBEROS_VERIFY_DEDICATED_KEYTAB 2
+#define KERBEROS_VERIFY_SECRETS_AND_KEYTAB 3
+
 /* 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,
@@ -1761,15 +1797,6 @@ struct node_status_extra {
        /* There really is more here ... */ 
 };
 
-/* For split krb5 SPNEGO blobs. */
-struct pending_auth_data {
-       struct pending_auth_data *prev, *next;
-       uint16 vuid; /* Tag for this entry. */
-       uint16 smbpid; /* Alternate tag for this entry. */
-       size_t needed_len;
-       DATA_BLOB partial_data;
-};
-
 typedef struct user_struct {
        struct user_struct *next, *prev;
        uint16 vuid; /* Tag for this entry. */
@@ -1866,6 +1893,8 @@ struct ea_list {
 #define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB"
 /* Prefix for DosStreams in the vfs_streams_xattr module */
 #define SAMBA_XATTR_DOSSTREAM_PREFIX "user.DosStream."
+/* Prefix for xattrs storing streams. */
+#define SAMBA_XATTR_MARKER "user.SAMBA_STREAMS"
 
 #define UUID_SIZE 16
 
@@ -1890,7 +1919,9 @@ enum usershare_err {
                USERSHARE_PATH_IS_DENIED,
                USERSHARE_PATH_NOT_ALLOWED,
                USERSHARE_PATH_NOT_DIRECTORY,
-               USERSHARE_POSIX_ERR
+               USERSHARE_POSIX_ERR,
+               USERSHARE_MALFORMED_SHARENAME_DEF,
+               USERSHARE_BAD_SHARENAME
 };
 
 /* Different reasons for closing a file. */
@@ -1907,16 +1938,48 @@ struct smb_extended_info {
        char   samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
 };
 
-/*
- * create_file_flags
- */
-#define CFF_DOS_PATH           0x00000001
-
 /* time info */
 struct smb_file_time {
        struct timespec mtime;
        struct timespec atime;
+       struct timespec ctime;
        struct timespec create_time;
 };
 
+/*
+ * unix_convert_flags
+ */
+#define UCF_SAVE_LCOMP                 0x00000001
+#define UCF_ALWAYS_ALLOW_WCARD_LCOMP   0x00000002
+#define UCF_COND_ALLOW_WCARD_LCOMP     0x00000004
+#define UCF_POSIX_PATHNAMES            0x00000008
+
+/*
+ * smb_filename
+ */
+struct smb_filename {
+       char *base_name;
+       char *stream_name;
+       char *original_lcomp;
+       SMB_STRUCT_STAT st;
+};
+
+/* struct for maintaining the child processes that get spawned from smbd */
+struct child_pid {
+       struct child_pid *prev, *next;
+       pid_t pid;
+};
+
+/* Used to keep track of deferred opens. */
+struct deferred_open_record;
+
+/* Client-side offline caching policy types */
+#define CSC_POLICY_MANUAL 0
+#define CSC_POLICY_DOCUMENTS 1
+#define CSC_POLICY_PROGRAMS 2
+#define CSC_POLICY_DISABLE 3
+
+/* Used inside aio code. */
+struct aio_extra;
+
 #endif /* _SMB_H */