s3-auth rename auth_ntlmssp_state -> auth_generic_state
[mat/samba.git] / source3 / include / smb.h
index de104a51eb9286ecded23d78b60437b26230cb70..1a116103f43732857d9a357a55039d6138d63aed 100644 (file)
 #ifndef _SMB_H
 #define _SMB_H
 
+#include "libcli/smb/smb_common.h"
+#include "libds/common/roles.h"
+
 /* logged when starting the various Samba daemons */
-#define COPYRIGHT_STARTUP_MESSAGE      "Copyright Andrew Tridgell and the Samba Team 1992-2010"
+#define COPYRIGHT_STARTUP_MESSAGE      "Copyright Andrew Tridgell and the Samba Team 1992-2011"
 
 
 #if defined(LARGE_SMB_OFF_T)
 /* how long to wait for secondary SMB packets (milli-seconds) */
 #define SMB_SECONDARY_WAIT (60*1000)
 
-/* Debugging stuff */
-#include "debug.h"
-
-/* this defines the error codes that receive_smb can put in smb_read_error */
-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
 
-/* these define the attribute byte as seen by DOS */
-#define aRONLY (1L<<0)         /* 0x01 */
-#define aHIDDEN (1L<<1)                /* 0x02 */
-#define aSYSTEM (1L<<2)                /* 0x04 */
-#define aVOLID (1L<<3)         /* 0x08 */
-#define aDIR (1L<<4)           /* 0x10 */
-#define aARCH (1L<<5)          /* 0x20 */
-
 /* deny modes */
 #define DENY_DOS 0
 #define DENY_ALL 1
@@ -137,17 +116,12 @@ enum smb_read_errors {
 #define OPENX_FILE_CREATE_IF_NOT_EXIST 0x10
 #define OPENX_FILE_FAIL_IF_NOT_EXIST 0
 
-#include "../libcli/util/doserr.h"
-
 typedef union unid_t {
        uid_t uid;
        gid_t gid;
 } unid_t;
 
 /* pipe string names */
-#define PIPE_LANMAN   "\\PIPE\\LANMAN"
-
-#define MAX_HOURS_LEN 32
 
 #ifndef MAXSUBAUTHS
 #define MAXSUBAUTHS 15 /* max sub authorities in a SID */
@@ -155,97 +129,7 @@ typedef union unid_t {
 
 #define SID_MAX_SIZE ((size_t)(8+(MAXSUBAUTHS*4)))
 
-#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_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 */
-#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)
-
-#include "librpc/gen_ndr/idmap.h"
-#include "librpc/gen_ndr/epmapper.h"
-#include "librpc/gen_ndr/dcerpc.h"
-
-struct lsa_dom_info {
-       bool valid;
-       struct dom_sid sid;
-       const char *name;
-       int num_idxs;
-       int *idxs;
-};
-
-struct lsa_name_info {
-       uint32 rid;
-       enum lsa_SidType type;
-       const char *name;
-       int dom_idx;
-};
-
-/* Some well-known SIDs */
-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.
- * Created when a vuid is registered.
- * The definition of the user_sids array is as follows :
- *
- * token->user_sids[0] = primary user SID.
- * token->user_sids[1] = primary group SID.
- * token->user_sids[2..num_sids] = supplementary group SIDS.
- */
-
-#define PRIMARY_USER_SID_INDEX 0
-#define PRIMARY_GROUP_SID_INDEX 1
-
-typedef struct nt_user_token {
-       size_t num_sids;
-       struct dom_sid *user_sids;
-       SE_PRIV privileges;
-} NT_USER_TOKEN;
-
-typedef struct unix_user_token {
-       uid_t uid;
-       gid_t gid;
-       size_t ngroups;
-       gid_t *groups;
-} UNIX_USER_TOKEN;
+#include "librpc/gen_ndr/security.h"
 
 typedef struct write_cache {
        SMB_OFF_T file_size;
@@ -255,8 +139,6 @@ typedef struct write_cache {
        char *data;
 } write_cache;
 
-#include "fake_file.h"
-
 struct fd_handle {
        size_t ref_count;
        int fd;
@@ -380,7 +262,9 @@ typedef struct files_struct {
        bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */
        bool delete_on_close;
        bool posix_open;
+       bool is_sparse;
        struct smb_filename *fsp_name;
+       uint32_t name_hash;             /* Jenkins hash of full pathname. */
 
        struct vfs_fsp_data *vfs_extension;
        struct fake_file_handle *fake_file_handle;
@@ -408,7 +292,7 @@ typedef struct files_struct {
 #include "sysquotas.h"
 
 struct vuid_cache_entry {
-       struct auth_serversupplied_info *server_info;
+       struct auth_session_info *session_info;
        uint16_t vuid;
        bool read_only;
 };
@@ -482,10 +366,6 @@ struct share_params {
        int service;
 };
 
-struct share_iterator {
-       int next_id;
-};
-
 typedef struct connection_struct {
        struct connection_struct *next, *prev;
        struct smbd_server_connection *sconn; /* can be NULL */
@@ -496,6 +376,7 @@ typedef struct connection_struct {
        bool printer;
        bool ipc;
        bool read_only; /* Attributes for the current user of the share. */
+       uint32_t share_access;
        /* Does this filesystem honor
           sub second timestamps on files
           and directories when setting time ? */
@@ -509,7 +390,7 @@ typedef struct connection_struct {
         * 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;
+       struct auth_session_info *session_info;
 
        /*
         * If the "force group" parameter is set, this is the primary gid that
@@ -517,8 +398,6 @@ typedef struct connection_struct {
         */
        gid_t force_group_gid;
 
-       char client_address[INET6_ADDRSTRLEN]; /* String version of client IP address. */
-
        uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
 
        time_t lastused;
@@ -555,8 +434,8 @@ typedef struct connection_struct {
 struct current_user {
        connection_struct *conn;
        uint16 vuid;
-       UNIX_USER_TOKEN ut;
-       NT_USER_TOKEN *nt_user_token;
+       struct security_unix_token ut;
+       struct security_token *nt_user_token;
 };
 
 struct smbd_smb2_request;
@@ -626,55 +505,6 @@ typedef struct {
        fstring domain; /* domain that the client specified */
 } userdom_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,
-
-       /* 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 
-                                  printing.c:traverse_fn_delete() */
-       int size;
-       int page_count;
-       int status;
-       int priority;
-       time_t time;
-       fstring fs_user;
-       fstring fs_file;
-} print_queue_struct;
-
-enum {LPSTAT_OK, LPSTAT_STOPPED, LPSTAT_ERROR};
-
-typedef struct {
-       fstring message;
-       int qcount;
-       int status;
-}  print_status_struct;
-
-/* used for server information: client, nameserv and ipc */
-struct server_info_struct {
-       fstring name;
-       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 */
-};
-
 /* used for network interfaces */
 struct interface {
        struct interface *next, *prev;
@@ -685,38 +515,9 @@ struct interface {
        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 timed_event *te;
-       struct smb_perfcount_data pcd;
-       uint32_t seqnum;
-       bool encrypted;
-       bool processed;
-       DATA_BLOB buf;
-       DATA_BLOB private_data;
-};
-
 #define SHARE_MODE_FLAG_POSIX_OPEN     0x1
 
-/* struct returned by get_share_modes */
-struct share_mode_entry {
-       struct server_id pid;
-       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). */
-       uint32 private_options; /* NT Create options, but we only look at
-                                * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
-                                * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB for
-                                * smbstatus and swat */
-       struct timeval time;
-       struct file_id id;
-       unsigned long share_file_id;
-       uint32 uid;             /* uid of file opener. */
-       uint16 flags;           /* See SHARE_MODE_XX above. */
-};
+#include "librpc/gen_ndr/server_id.h"
 
 /* oplock break message definition - linearization of share_mode_entry.
 
@@ -735,7 +536,8 @@ Offset  Data                        length.
 58     unsigned long file_id   4 bytes
 62     uint32 uid              4 bytes
 66     uint16 flags            2 bytes
-68
+68     uint32 name_hash        4 bytes
+72
 
 */
 
@@ -753,90 +555,14 @@ Offset  Data                      length.
 #define OP_BREAK_MSG_FILE_ID_OFFSET 58
 #define OP_BREAK_MSG_UID_OFFSET 62
 #define OP_BREAK_MSG_FLAGS_OFFSET 66
+#define OP_BREAK_MSG_NAME_HASH_OFFSET 68
 
-#ifdef CLUSTER_SUPPORT
-#define OP_BREAK_MSG_VNN_OFFSET 68
-#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 72
-#else
-#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 68
-#endif
-
-struct share_mode_lock {
-       const char *servicepath; /* canonicalized. */
-       const char *base_name;
-       const char *stream_name;
-       struct file_id id;
-       int num_share_modes;
-       struct share_mode_entry *share_modes;
-       UNIX_USER_TOKEN *delete_token;
-       bool delete_on_close;
-       struct timespec old_write_time;
-       struct timespec changed_write_time;
-       bool fresh;
-       bool modified;
-       struct db_record *record;
-};
-
-/*
- * Internal structure of locking.tdb share mode db.
- * Used by locking.c and libsmbsharemodes.c
- */
-
-struct locking_data {
-       union {
-               struct {
-                       int num_share_mode_entries;
-                       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. */
-               } s;
-               struct share_mode_entry dummy; /* Needed for alignment. */
-       } u;
-       /* The following four entries are implicit
-          struct share_mode_entry modes[num_share_mode_entries];
-          char unix_token[delete_token_size] (divisible by 4).
-          char share_name[];
-          char file_name[];
-        */
-};
-
-/* Used to store pipe open records for NetFileEnum() */
-
-struct pipe_open_rec {
-       struct server_id pid;
-       uid_t uid;
-       int pnum;
-       fstring name;
-};
-
+#define OP_BREAK_MSG_VNN_OFFSET 72
+#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 76
 
 #define NT_HASH_LEN 16
 #define LM_HASH_LEN 16
 
-/* Password history contants. */
-#define PW_HISTORY_SALT_LEN 16
-#define SALTED_MD5_HASH_LEN 16
-#define PW_HISTORY_ENTRY_LEN (PW_HISTORY_SALT_LEN+SALTED_MD5_HASH_LEN)
-#define MAX_PW_HISTORY_LEN 24
-
-/*
- * Flags for local user manipulation.
- */
-
-#define LOCAL_ADD_USER 0x1
-#define LOCAL_DELETE_USER 0x2
-#define LOCAL_DISABLE_USER 0x4
-#define LOCAL_ENABLE_USER 0x8
-#define LOCAL_TRUST_ACCOUNT 0x10
-#define LOCAL_SET_NO_PASSWORD 0x20
-#define LOCAL_SET_PASSWORD 0x40
-#define LOCAL_SET_LDAP_ADMIN_PW 0x80
-#define LOCAL_INTERDOM_ACCOUNT 0x100
-#define LOCAL_AM_ROOT 0x200  /* Act as root */
-
 /* key and data in the connections database - used in smbstatus and smbd */
 struct connections_key {
        struct server_id pid;
@@ -862,189 +588,39 @@ struct connections_data {
        uint32 unused_compatitibility_field;
 };
 
-
-/* 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_ENUM,P_SEP
-} parm_type;
-
-typedef enum {
-       P_LOCAL,P_GLOBAL,P_SEPARATOR,P_NONE
-} parm_class;
-
-struct enum_list {
-       int value;
-       const char *name;
-};
-
-struct parm_struct {
-       const char *label;
-       parm_type type;
-       parm_class p_class;
-       void *ptr;
-       bool (*special)(int snum, const char *, char **);
-       const struct enum_list *enum_list;
-       unsigned flags;
-       union {
-               bool bvalue;
-               int ivalue;
-               char *svalue;
-               char cvalue;
-               char **lvalue;
-       } def;
-};
-
-/* The following flags are used in SWAT */
-#define FLAG_BASIC     0x0001 /* Display only in BASIC view */
-#define FLAG_SHARE     0x0002 /* file sharing options */
-#define FLAG_PRINT     0x0004 /* printing options */
-#define FLAG_GLOBAL    0x0008 /* local options that should be globally settable in SWAT */
-#define FLAG_WIZARD    0x0010 /* Parameters that the wizard will operate on */
-#define FLAG_ADVANCED  0x0020 /* Parameters that will be visible in advanced view */
-#define FLAG_DEVELOPER         0x0040 /* No longer used */
-#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;
-       unsigned int n;
-};
-
 /* offsets into message for common items */
-#define smb_com 8
-#define smb_rcls 9
-#define smb_reh 10
-#define smb_err 11
-#define smb_flg 13
-#define smb_flg2 14
-#define smb_pidhigh 16
-#define smb_ss_field 18
-#define smb_tid 28
-#define smb_pid 30
-#define smb_uid 32
-#define smb_mid 34
-#define smb_wct 36
-#define smb_vwv 37
-#define smb_vwv0 37
-#define smb_vwv1 39
-#define smb_vwv2 41
-#define smb_vwv3 43
-#define smb_vwv4 45
-#define smb_vwv5 47
-#define smb_vwv6 49
-#define smb_vwv7 51
-#define smb_vwv8 53
-#define smb_vwv9 55
-#define smb_vwv10 57
-#define smb_vwv11 59
-#define smb_vwv12 61
-#define smb_vwv13 63
-#define smb_vwv14 65
-#define smb_vwv15 67
-#define smb_vwv16 69
-#define smb_vwv17 71
-
-/* flag defines. CIFS spec 3.1.1 */
-#define FLAG_SUPPORT_LOCKREAD       0x01
-#define FLAG_CLIENT_BUF_AVAIL       0x02
-#define FLAG_RESERVED               0x04
-#define FLAG_CASELESS_PATHNAMES     0x08
-#define FLAG_CANONICAL_PATHNAMES    0x10
-#define FLAG_REQUEST_OPLOCK         0x20
-#define FLAG_REQUEST_BATCH_OPLOCK   0x40
-#define FLAG_REPLY                  0x80
-
-/* the complete */
-#define SMBmkdir      0x00   /* create directory */
-#define SMBrmdir      0x01   /* delete directory */
-#define SMBopen       0x02   /* open file */
-#define SMBcreate     0x03   /* create file */
-#define SMBclose      0x04   /* close file */
-#define SMBflush      0x05   /* flush file */
-#define SMBunlink     0x06   /* delete file */
-#define SMBmv         0x07   /* rename file */
-#define SMBgetatr     0x08   /* get file attributes */
-#define SMBsetatr     0x09   /* set file attributes */
-#define SMBread       0x0A   /* read from file */
-#define SMBwrite      0x0B   /* write to file */
-#define SMBlock       0x0C   /* lock byte range */
-#define SMBunlock     0x0D   /* unlock byte range */
-#define SMBctemp      0x0E   /* create temporary file */
-#define SMBmknew      0x0F   /* make new file */
-#define SMBcheckpath  0x10   /* check directory path */
-#define SMBexit       0x11   /* process exit */
-#define SMBlseek      0x12   /* seek */
-#define SMBtcon       0x70   /* tree connect */
-#define SMBtconX      0x75   /* tree connect and X*/
-#define SMBtdis       0x71   /* tree disconnect */
-#define SMBnegprot    0x72   /* negotiate protocol */
-#define SMBdskattr    0x80   /* get disk attributes */
-#define SMBsearch     0x81   /* search directory */
-#define SMBsplopen    0xC0   /* open print spool file */
-#define SMBsplwr      0xC1   /* write to print spool file */
-#define SMBsplclose   0xC2   /* close print spool file */
-#define SMBsplretq    0xC3   /* return print queue */
-#define SMBsends      0xD0   /* send single block message */
-#define SMBsendb      0xD1   /* send broadcast message */
-#define SMBfwdname    0xD2   /* forward user name */
-#define SMBcancelf    0xD3   /* cancel forward */
-#define SMBgetmac     0xD4   /* get machine name */
-#define SMBsendstrt   0xD5   /* send start of multi-block message */
-#define SMBsendend    0xD6   /* send end of multi-block message */
-#define SMBsendtxt    0xD7   /* send text of multi-block message */
-
-/* Core+ protocol */
-#define SMBlockread      0x13   /* Lock a range and read */
-#define SMBwriteunlock 0x14 /* Unlock a range then write */
-#define SMBreadbraw   0x1a  /* read a block of data with no smb header */
-#define SMBwritebraw  0x1d  /* write a block of data with no smb header */
-#define SMBwritec     0x20  /* secondary write request */
-#define SMBwriteclose 0x2c  /* write a file then close it */
-
-/* dos extended protocol */
-#define SMBreadBraw      0x1A   /* read block raw */
-#define SMBreadBmpx      0x1B   /* read block multiplexed */
-#define SMBreadBs        0x1C   /* read block (secondary response) */
-#define SMBwriteBraw     0x1D   /* write block raw */
-#define SMBwriteBmpx     0x1E   /* write block multiplexed */
-#define SMBwriteBs       0x1F   /* write block (secondary request) */
-#define SMBwriteC        0x20   /* write complete response */
-#define SMBsetattrE      0x22   /* set file attributes expanded */
-#define SMBgetattrE      0x23   /* get file attributes expanded */
-#define SMBlockingX      0x24   /* lock/unlock byte ranges and X */
-#define SMBtrans         0x25   /* transaction - name, bytes in/out */
-#define SMBtranss        0x26   /* transaction (secondary request/response) */
-#define SMBioctl         0x27   /* IOCTL */
-#define SMBioctls        0x28   /* IOCTL  (secondary request/response) */
-#define SMBcopy          0x29   /* copy */
-#define SMBmove          0x2A   /* move */
-#define SMBecho          0x2B   /* echo */
-#define SMBopenX         0x2D   /* open and X */
-#define SMBreadX         0x2E   /* read and X */
-#define SMBwriteX        0x2F   /* write and X */
-#define SMBsesssetupX    0x73   /* Session Set Up & X (including User Logon) */
-#define SMBffirst        0x82   /* find first */
-#define SMBfunique       0x83   /* find unique */
-#define SMBfclose        0x84   /* find close */
-#define SMBkeepalive     0x85   /* keepalive */
-#define SMBinvalid       0xFE   /* invalid command */
-
-/* Extended 2.0 protocol */
-#define SMBtrans2        0x32   /* TRANS2 protocol set */
-#define SMBtranss2       0x33   /* TRANS2 protocol set, secondary command */
-#define SMBfindclose     0x34   /* Terminate a TRANSACT2_FINDFIRST */
-#define SMBfindnclose    0x35   /* Terminate a TRANSACT2_FINDNOTIFYFIRST */
-#define SMBulogoffX      0x74   /* user logoff */
-
-/* NT SMB extensions. */
-#define SMBnttrans       0xA0   /* NT transact */
-#define SMBnttranss      0xA1   /* NT transact secondary */
-#define SMBntcreateX     0xA2   /* NT create and X */
-#define SMBntcancel      0xA4   /* NT cancel */
-#define SMBntrename      0xA5   /* NT rename */
+#define smb_com                (NBT_HDR_SIZE+HDR_COM)
+#define smb_rcls       (NBT_HDR_SIZE+HDR_RCLS)
+#define smb_reh                (NBT_HDR_SIZE+HDR_REH)
+#define smb_err                (NBT_HDR_SIZE+HDR_ERR)
+#define smb_flg                (NBT_HDR_SIZE+HDR_FLG)
+#define smb_flg2       (NBT_HDR_SIZE+HDR_FLG2)
+#define smb_pidhigh    (NBT_HDR_SIZE+HDR_PIDHIGH)
+#define smb_ss_field   (NBT_HDR_SIZE+HDR_SS_FIELD)
+#define smb_tid                (NBT_HDR_SIZE+HDR_TID)
+#define smb_pid                (NBT_HDR_SIZE+HDR_PID)
+#define smb_uid                (NBT_HDR_SIZE+HDR_UID)
+#define smb_mid                (NBT_HDR_SIZE+HDR_MID)
+#define smb_wct                (NBT_HDR_SIZE+HDR_WCT)
+#define smb_vwv                (NBT_HDR_SIZE+HDR_VWV)
+#define smb_vwv0       (smb_vwv+( 0*2))
+#define smb_vwv1       (smb_vwv+( 1*2))
+#define smb_vwv2       (smb_vwv+( 2*2))
+#define smb_vwv3       (smb_vwv+( 3*2))
+#define smb_vwv4       (smb_vwv+( 4*2))
+#define smb_vwv5       (smb_vwv+( 5*2))
+#define smb_vwv6       (smb_vwv+( 6*2))
+#define smb_vwv7       (smb_vwv+( 7*2))
+#define smb_vwv8       (smb_vwv+( 8*2))
+#define smb_vwv9       (smb_vwv+( 9*2))
+#define smb_vwv10      (smb_vwv+(10*2))
+#define smb_vwv11      (smb_vwv+(11*2))
+#define smb_vwv12      (smb_vwv+(12*2))
+#define smb_vwv13      (smb_vwv+(13*2))
+#define smb_vwv14      (smb_vwv+(14*2))
+#define smb_vwv15      (smb_vwv+(15*2))
+#define smb_vwv16      (smb_vwv+(16*2))
+#define smb_vwv17      (smb_vwv+(17*2))
 
 /* These are the trans subcommands */
 #define TRANSACT_SETNAMEDPIPEHANDLESTATE  0x01 
@@ -1181,74 +757,9 @@ struct bitmap {
 #define PIPE_RAW_MODE 0x4
 #define PIPE_START_MESSAGE 0x8
 
-/* File Specific access rights */
-#define FILE_READ_DATA        0x00000001
-#define FILE_WRITE_DATA       0x00000002
-#define FILE_APPEND_DATA      0x00000004
-#define FILE_READ_EA          0x00000008 /* File and directory */
-#define FILE_WRITE_EA         0x00000010 /* File and directory */
-#define FILE_EXECUTE          0x00000020
-#define FILE_DELETE_CHILD     0x00000040
-#define FILE_READ_ATTRIBUTES  0x00000080
-#define FILE_WRITE_ATTRIBUTES 0x00000100
-
-#define FILE_ALL_ACCESS       0x000001FF
-
-/* Directory specific access rights */
-#define FILE_LIST_DIRECTORY   0x00000001
-#define FILE_ADD_FILE         0x00000002
-#define FILE_ADD_SUBDIRECTORY 0x00000004
-#define FILE_TRAVERSE         0x00000020
-#define FILE_DELETE_CHILD     0x00000040
-
 /* the desired access to use when opening a pipe */
 #define DESIRED_ACCESS_PIPE 0x2019f
  
-/* Generic access masks & rights. */
-#define DELETE_ACCESS        0x00010000 /* (1L<<16) */
-#define READ_CONTROL_ACCESS  0x00020000 /* (1L<<17) */
-#define WRITE_DAC_ACCESS     0x00040000 /* (1L<<18) */
-#define WRITE_OWNER_ACCESS   0x00080000 /* (1L<<19) */
-#define SYNCHRONIZE_ACCESS   0x00100000 /* (1L<<20) */
-
-#define SYSTEM_SECURITY_ACCESS 0x01000000 /* (1L<<24) */
-#define MAXIMUM_ALLOWED_ACCESS 0x02000000 /* (1L<<25) */
-#define GENERIC_ALL_ACCESS     0x10000000 /* (1<<28) */
-#define GENERIC_EXECUTE_ACCESS 0x20000000 /* (1<<29) */
-#define GENERIC_WRITE_ACCESS   0x40000000 /* (1<<30) */
-#define GENERIC_READ_ACCESS    ((unsigned)0x80000000) /* (((unsigned)1)<<31) */
-
-/* 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 (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
-#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
@@ -1290,22 +801,6 @@ struct bitmap {
 #define FILE_SHARE_WRITE 2
 #define FILE_SHARE_DELETE 4
 
-/* FileAttributesField */
-#define FILE_ATTRIBUTE_READONLY                0x001L
-#define FILE_ATTRIBUTE_HIDDEN          0x002L
-#define FILE_ATTRIBUTE_SYSTEM          0x004L
-#define FILE_ATTRIBUTE_DIRECTORY       0x010L
-#define FILE_ATTRIBUTE_ARCHIVE         0x020L
-#define FILE_ATTRIBUTE_NORMAL          0x080L
-#define FILE_ATTRIBUTE_TEMPORARY       0x100L
-#define FILE_ATTRIBUTE_SPARSE          0x200L
-#define FILE_ATTRIBUTE_REPARSE_POINT    0x400L
-#define FILE_ATTRIBUTE_COMPRESSED      0x800L
-#define FILE_ATTRIBUTE_OFFLINE          0x1000L
-#define FILE_ATTRIBUTE_NONINDEXED      0x2000L
-#define FILE_ATTRIBUTE_ENCRYPTED        0x4000L
-#define SAMBA_ATTRIBUTES_MASK          0x7F
-
 /* Flags - combined with attributes. */
 #define FILE_FLAG_WRITE_THROUGH    0x80000000L
 #define FILE_FLAG_NO_BUFFERING     0x20000000L
@@ -1369,14 +864,6 @@ struct bitmap {
 #define FILE_WAS_CREATED 2
 #define FILE_WAS_OVERWRITTEN 3
 
-/* File type flags */
-#define FILE_TYPE_DISK  0
-#define FILE_TYPE_BYTE_MODE_PIPE 1
-#define FILE_TYPE_MESSAGE_MODE_PIPE 2
-#define FILE_TYPE_PRINTER 3
-#define FILE_TYPE_COMM_DEVICE 4
-#define FILE_TYPE_UNKNOWN 0xFFFF
-
 /* Flag for NT transact rename call. */
 #define RENAME_REPLACE_IF_EXISTS 1
 
@@ -1434,7 +921,7 @@ struct bitmap {
 
 
 /* where to find the base of the SMB packet proper */
-#define smb_base(buf) (((char *)(buf))+4)
+#define smb_base(buf) (((const char *)(buf))+4)
 
 /* we don't allow server strings to be longer than 48 characters as
    otherwise NT will not honour the announce packets */
@@ -1469,34 +956,13 @@ char *strdup(char *s);
  *        This may change again in Samba-3.0 after further testing. JHT
  */
  
-#define DEFAULT_MAJOR_VERSION 0x04
-#define DEFAULT_MINOR_VERSION 0x09
+#define SAMBA_MAJOR_NBT_ANNOUNCE_VERSION 0x04
+#define SAMBA_MINOR_NBT_ANNOUNCE_VERSION 0x09
 
 /* Browser Election Values */
 #define BROWSER_ELECTION_VERSION       0x010f
 #define BROWSER_CONSTANT       0xaa55
 
-/* Sercurity mode bits. */
-#define NEGOTIATE_SECURITY_USER_LEVEL          0x01
-#define NEGOTIATE_SECURITY_CHALLENGE_RESPONSE  0x02
-#define NEGOTIATE_SECURITY_SIGNATURES_ENABLED  0x04
-#define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
-
-/* NT Flags2 bits - cifs6.txt section 3.1.2 */
-   
-#define FLAGS2_LONG_PATH_COMPONENTS    0x0001
-#define FLAGS2_EXTENDED_ATTRIBUTES     0x0002
-#define FLAGS2_SMB_SECURITY_SIGNATURES 0x0004
-#define FLAGS2_UNKNOWN_BIT4            0x0010
-#define FLAGS2_IS_LONG_NAME            0x0040
-#define FLAGS2_EXTENDED_SECURITY       0x0800 
-#define FLAGS2_DFS_PATHNAMES           0x1000
-#define FLAGS2_READ_PERMIT_EXECUTE     0x2000
-#define FLAGS2_32_BIT_ERROR_CODES      0x4000 
-#define FLAGS2_UNICODE_STRINGS         0x8000
-
-#define FLAGS2_WIN2K_SIGNATURE         0xC852 /* Hack alert ! For now... JRA. */
-
 /* TCONX Flag (smb_vwv2). */
 #define TCONX_FLAG_EXTENDED_RESPONSE   0x8
 
@@ -1509,48 +975,6 @@ http://msdn.microsoft.com/en-us/library/cc246334(PROT.13).aspx
 #define NO_SUBSTREAMS          0x2
 #define NO_REPARSETAG          0x4
 
-/* Capabilities.  see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */
-
-#define CAP_RAW_MODE         0x0001
-#define CAP_MPX_MODE         0x0002
-#define CAP_UNICODE          0x0004
-#define CAP_LARGE_FILES      0x0008
-#define CAP_NT_SMBS          0x0010
-#define CAP_RPC_REMOTE_APIS  0x0020
-#define CAP_STATUS32         0x0040
-#define CAP_LEVEL_II_OPLOCKS 0x0080
-#define CAP_LOCK_AND_READ    0x0100
-#define CAP_NT_FIND          0x0200
-#define CAP_DFS              0x1000
-#define CAP_W2K_SMBS         0x2000
-#define CAP_LARGE_READX      0x4000
-#define CAP_LARGE_WRITEX     0x8000
-#define CAP_UNIX             0x800000 /* Capabilities for UNIX extensions. Created by HP. */
-#define CAP_EXTENDED_SECURITY 0x80000000
-
-/* 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,
-       PROTOCOL_SMB2
-};
-
-/* security levels */
-enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER,SEC_DOMAIN,SEC_ADS};
-
-/* server roles */
-enum server_types {
-       ROLE_STANDALONE,
-       ROLE_DOMAIN_MEMBER,
-       ROLE_DOMAIN_BDC,
-       ROLE_DOMAIN_PDC
-};
-
 /* printing types */
 enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,
                     PRINT_QNX,PRINT_PLP,PRINT_LPRNG,PRINT_SOFTQ,
@@ -1560,9 +984,6 @@ enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,
 #endif /* DEVELOPER */
 };
 
-/* LDAP schema types */
-enum schema_types {SCHEMA_COMPAT, SCHEMA_AD, SCHEMA_SAMBA};
-
 /* LDAP SSL options */
 enum ldap_ssl_types {LDAP_SSL_OFF, LDAP_SSL_START_TLS};
 
@@ -1584,7 +1005,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_WINXP64};
+                       RA_SAMBA, RA_CIFSFS, RA_WINXP64, RA_OSX};
 
 /* case handling */
 enum case_handling {CASE_LOWER,CASE_UPPER};
@@ -1620,22 +1041,15 @@ enum acl_compatibility {ACL_COMPAT_AUTO, ACL_COMPAT_WINNT, ACL_COMPAT_WIN2K};
  */
 #define EXTENDED_OPLOCK_REQUEST(inbuf) ((SVAL(inbuf,smb_vwv2)&((1<<1)|(1<<2)))>>1)
 
-/* Lock types. */
-#define LOCKING_ANDX_SHARED_LOCK 0x1
-#define LOCKING_ANDX_OPLOCK_RELEASE 0x2
-#define LOCKING_ANDX_CHANGE_LOCKTYPE 0x4
-#define LOCKING_ANDX_CANCEL_LOCK 0x8
-#define LOCKING_ANDX_LARGE_FILES 0x10
-
 /*
  * Bits we test with.
  * Note these must fit into 16-bits.
  */
 
-#define NO_OPLOCK                      0x0
-#define EXCLUSIVE_OPLOCK               0x1
-#define BATCH_OPLOCK                   0x2
-#define LEVEL_II_OPLOCK                0x4
+#define NO_OPLOCK                      OPLOCK_NONE
+#define EXCLUSIVE_OPLOCK               OPLOCK_EXCLUSIVE
+#define BATCH_OPLOCK                   OPLOCK_BATCH
+#define LEVEL_II_OPLOCK                OPLOCK_LEVEL_II
 
 /* The following are Samba-private. */
 #define INTERNAL_OPEN_ONLY             0x8
@@ -1643,11 +1057,11 @@ enum acl_compatibility {ACL_COMPAT_AUTO, ACL_COMPAT_WINNT, ACL_COMPAT_WIN2K};
                                 * inform potential level2 holders on
                                 * write. */
 #define DEFERRED_OPEN_ENTRY            0x20
-#define UNUSED_SHARE_MODE_ENTRY        0x40
+/* #define UNUSED_SHARE_MODE_ENTRY     0x40 */   /* Not used anymore */
 #define FORCE_OPLOCK_BREAK_TO_NONE     0x80
 
 /* None of the following should ever appear in fsp->oplock_request. */
-#define SAMBA_PRIVATE_OPLOCK_MASK (INTERNAL_OPEN_ONLY|DEFERRED_OPEN_ENTRY|UNUSED_SHARE_MODE_ENTRY|FORCE_OPLOCK_BREAK_TO_NONE)
+#define SAMBA_PRIVATE_OPLOCK_MASK (INTERNAL_OPEN_ONLY|DEFERRED_OPEN_ENTRY|FORCE_OPLOCK_BREAK_TO_NONE)
 
 #define EXCLUSIVE_OPLOCK_TYPE(lck) ((lck) & ((unsigned int)EXCLUSIVE_OPLOCK|(unsigned int)BATCH_OPLOCK))
 #define BATCH_OPLOCK_TYPE(lck) ((lck) & (unsigned int)BATCH_OPLOCK)
@@ -1779,11 +1193,11 @@ struct nmb_name {
 };
 
 /* A netbios node status array element. */
-typedef struct node_status_ {
+struct node_status {
        nstring name;
        unsigned char type;
        unsigned char flags;
-} NODE_STATUS_STRUCT;
+};
 
 /* The extra info from a NetBIOS node status query */
 struct node_status_extra {
@@ -1799,26 +1213,11 @@ typedef struct user_struct {
                                 TDB key string */
        int homes_snum;
 
-       struct auth_serversupplied_info *server_info;
+       struct auth_session_info *session_info;
 
-       struct auth_ntlmssp_state *auth_ntlmssp_state;
+       struct auth_generic_state *auth_ntlmssp_state;
 } user_struct;
 
-struct unix_error_map {
-       int unix_error;
-       int dos_class;
-       int dos_code;
-       NTSTATUS nt_error;
-};
-
-/*
- * Size of new password account encoding string.  This is enough space to
- * hold 11 ACB characters, plus the surrounding [] and a terminating null.
- * Do not change unless you are adding new ACB bits!
- */
-
-#define NEW_PW_FORMAT_SPACE_PADDED_LEN 14
-
 /*
    Do you want session setups at user level security with a invalid
    password to be rejected or allowed in as guest? WinNT rejects them
@@ -1865,9 +1264,6 @@ struct ip_service {
        unsigned port;
 };
 
-/* Special name type used to cause a _kerberos DNS lookup. */
-#define KDC_NAME_TYPE 0xDCDC
-
 struct ea_struct {
        uint8 flags;
        char *name;
@@ -1888,13 +1284,6 @@ struct ea_list {
 /* Prefix for xattrs storing streams. */
 #define SAMBA_XATTR_MARKER "user.SAMBA_STREAMS"
 
-#define UUID_SIZE 16
-
-#define UUID_FLAT_SIZE 16
-typedef struct uuid_flat {
-       uint8 info[UUID_FLAT_SIZE];
-} UUID_FLAT;
-
 /* map readonly options */
 enum mapreadonly_options {MAP_READONLY_NO, MAP_READONLY_YES, MAP_READONLY_PERMISSIONS};
 
@@ -1945,6 +1334,7 @@ struct smb_file_time {
 #define UCF_ALWAYS_ALLOW_WCARD_LCOMP   0x00000002
 #define UCF_COND_ALLOW_WCARD_LCOMP     0x00000004
 #define UCF_POSIX_PATHNAMES            0x00000008
+#define UCF_UNIX_NAME_LOOKUP           0x00000010
 
 /*
  * smb_filename
@@ -1956,22 +1346,26 @@ struct smb_filename {
        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;
 
+/*
+ * Reasons for cache flush.
+ */
+
+enum flush_reason_enum {
+    SEEK_FLUSH,
+    READ_FLUSH,
+    WRITE_FLUSH,
+    READRAW_FLUSH,
+    OPLOCK_RELEASE_FLUSH,
+    CLOSE_FLUSH,
+    SYNC_FLUSH,
+    SIZECHANGE_FLUSH,
+    /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */
+    NUM_FLUSH_REASONS};
+
 #endif /* _SMB_H */