minor fixes
[ira/wip.git] / source / include / smb.h
index a4887e15293f5a6eba0396221c8a4db1843ca800..4168e34d3f69aa703e29d8c7aa5f45f843f2953c 100644 (file)
@@ -1,11 +1,13 @@
 /* 
    Unix SMB/Netbios implementation.
-   Version 1.9.
-   SMB parameters and setup
+   SMB parameters and setup, plus a whole lot more.
+   
    Copyright (C) Andrew Tridgell              1992-2000
    Copyright (C) John H Terpstra              1996-2000
    Copyright (C) Luke Kenneth Casson Leighton 1996-2000
    Copyright (C) Paul Ashton                  1998-2000
+   Copyright (C) Simo Sorce                   2001-2002
+   Copyright (C) Martin Pool                 2002
    
    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
@@ -107,7 +109,7 @@ implemented */
 #define GET_OPEN_MODE(x) ((x) & OPEN_MODE_MASK)
 #define SET_OPEN_MODE(x) ((x) & OPEN_MODE_MASK)
 #define GET_DENY_MODE(x) (((x)>>SHARE_MODE_SHIFT) & SHARE_MODE_MASK)
-#define SET_DENY_MODE(x) ((x)<<SHARE_MODE_SHIFT)
+#define SET_DENY_MODE(x) (((x) & SHARE_MODE_MASK) <<SHARE_MODE_SHIFT)
 
 /* Sync on open file (not sure if used anymore... ?) */
 #define FILE_SYNC_OPENMODE (1<<14)
@@ -154,17 +156,11 @@ implemented */
 
 #include "doserr.h"
 
-#ifndef _PSTRING
 
-#define PSTRING_LEN 1024
-#define FSTRING_LEN 256
 
-typedef char pstring[PSTRING_LEN];
-typedef char fstring[FSTRING_LEN];
+#include "pstring.h"
 
-#define _PSTRING
 
-#endif
 
 /*
  * SMB UCS2 (16-bit unicode) internal type.
@@ -205,9 +201,40 @@ typedef struct nttime_info
 {
   uint32 low;
   uint32 high;
-
 } NTTIME;
 
+
+/* the following rather strange looking definitions of NTSTATUS and WERROR
+   and there in order to catch common coding errors where different error types
+   are mixed up. This is especially important as we slowly convert Samba
+   from using BOOL for internal functions 
+*/
+#if defined(HAVE_IMMEDIATE_STRUCTURES)
+typedef struct {uint32 v;} NTSTATUS;
+#define NT_STATUS(x) ((NTSTATUS) { x })
+#define NT_STATUS_V(x) ((x).v)
+#else
+typedef uint32 NTSTATUS;
+#define NT_STATUS(x) (x)
+#define NT_STATUS_V(x) (x)
+#endif
+
+#if defined(HAVE_IMMEDIATE_STRUCTURES)
+typedef struct {uint32 v;} WERROR;
+#define W_ERROR(x) ((WERROR) { x })
+#define W_ERROR_V(x) ((x).v)
+#else
+typedef uint32 WERROR;
+#define W_ERROR(x) (x)
+#define W_ERROR_V(x) (x)
+#endif
+
+#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0)
+#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000)
+#define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y))
+#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0)
+
+
 /* Allowable account control bits */
 #define ACB_DISABLED   0x0001  /* 1 = User account disabled */
 #define ACB_HOMDIRREQ  0x0002  /* 1 = Home directory required */
@@ -223,13 +250,6 @@ typedef struct nttime_info
  
 #define MAX_HOURS_LEN 32
 
-struct sam_disp_info
-{
-       uint32 user_rid;      /* Primary User ID */
-       char *smb_name;     /* username string */
-       char *full_name;    /* user's full name string */
-};
-
 typedef struct
 {
         uint32 pid;
@@ -253,17 +273,23 @@ struct use_info
 #endif
 
 #ifndef _DOM_SID
-/* DOM_SID - security id */
+/**
+ * @brief Security Identifier
+ *
+ * @sa http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/accctrl_38yn.asp
+ **/
 typedef struct sid_info
 {
-  uint8  sid_rev_num;             /* SID revision number */
-  uint8  num_auths;               /* number of sub-authorities */
-  uint8  id_auth[6];              /* Identifier Authority */
+  uint8  sid_rev_num;             /**< SID revision number */
+  uint8  num_auths;               /**< Number of sub-authorities */
+  uint8  id_auth[6];              /**< Identifier Authority */
   /*
-   * Note that the values in these uint32's are in *native* byteorder,
-   * not neccessarily little-endian...... JRA.
+   *  Pointer to sub-authorities.
+   *
+   * @note The values in these uint32's are in *native* byteorder, not
+   * neccessarily little-endian...... JRA.
    */
-  uint32 sub_auths[MAXSUBAUTHS];  /* pointer to sub-authorities. */
+  uint32 sub_auths[MAXSUBAUTHS];  
 
 } DOM_SID;
 #define _DOM_SID
@@ -276,9 +302,12 @@ typedef struct sid_info
  *
  * token->user_sids[0] = primary user SID.
  * token->user_sids[1] = primary group SID.
- * token->user_sids[2-num_sids] = supplementary group SIDS.
+ * token->user_sids[2..num_sids] = supplementary group SIDS.
  */
 
+#define PRIMARY_USER_SID_INDEX 0
+#define PRIMARY_GROUP_SID_INDEX 1
+
 #ifndef _NT_USER_TOKEN
 typedef struct _nt_user_token {
        size_t num_sids;
@@ -356,6 +385,14 @@ typedef struct write_cache
     char *data;
 } write_cache;
 
+typedef struct
+{
+       smb_ucs2_t *origname;
+       smb_ucs2_t *filename;
+       SMB_STRUCT_STAT *statinfo;
+} smb_filename;
+
+
 typedef struct files_struct
 {
        struct files_struct *next, *prev;
@@ -377,6 +414,7 @@ typedef struct files_struct
        time_t pending_modtime;
        int oplock_type;
        int sent_oplock_break;
+       unsigned long file_id;
        BOOL can_lock;
        BOOL can_read;
        BOOL can_write;
@@ -388,6 +426,13 @@ typedef struct files_struct
        char *fsp_name;
 } files_struct;
 
+/* 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.
@@ -526,13 +571,15 @@ struct interface
 };
 
 /* struct returned by get_share_modes */
-typedef struct
-{
-  pid_t pid;
-  uint16 op_port;
-  uint16 op_type;
-  int share_mode;
-  struct timeval time;
+typedef struct {
+       pid_t pid;
+       uint16 op_port;
+       uint16 op_type;
+       int share_mode;
+       struct timeval time;
+       SMB_DEV_T dev;
+       SMB_INO_T inode;
+       unsigned long share_file_id;
 } share_mode_entry;
 
 
@@ -542,48 +589,93 @@ typedef struct
 #define SHAREMODE_FN(fn) \
        void (*fn)(share_mode_entry *, char*)
 
+#define NT_HASH_LEN 16
+#define LM_HASH_LEN 16
+
+/*
+ * bit flags representing initialized fields in SAM_ACCOUNT
+ */
+#define FLAG_SAM_UNINIT                0x00000000
+#define FLAG_SAM_UID           0x00000001
+#define FLAG_SAM_GID           0x00000002
+#define FLAG_SAM_SMBHOME       0x00000004
+#define FLAG_SAM_PROFILE       0x00000008
+#define FLAG_SAM_LOGONSCRIPT   0x00000010
+#define FLAG_SAM_DRIVE         0x00000020
+
+#define IS_SAM_UNIX_USER(x) \
+       ((pdb_get_init_flag(x) & FLAG_SAM_UID) \
+        && (pdb_get_init_flag(x) & FLAG_SAM_GID))
+
+#define IS_SAM_SET(x, flag)    ((x)->private.init_flag & (flag))
+               
 typedef struct sam_passwd
 {
-       time_t logon_time;            /* logon time */
-       time_t logoff_time;           /* logoff time */
-       time_t kickoff_time;          /* kickoff time */
-       time_t pass_last_set_time;    /* password last set time */
-       time_t pass_can_change_time;  /* password can change time */
-       time_t pass_must_change_time; /* password must change time */
-
-       pstring username;     /* UNIX username string */
-       pstring domain;       /* Windows Domain name */
-       pstring nt_username;  /* Windows username string */
-       pstring full_name;    /* user's full name string */
-       pstring home_dir;     /* home directory string */
-       pstring dir_drive;    /* home directory drive string */
-       pstring logon_script; /* logon script string */
-       pstring profile_path; /* profile path string */
-       pstring acct_desc  ;  /* user description string */
-       pstring workstations; /* login from workstations string */
-       pstring unknown_str ; /* don't know what this is, yet. */
-       pstring munged_dial ; /* munged path name and dial-back tel number */
-
-        uid_t uid;          /* this is actually the unix uid_t */
-        gid_t gid;          /* this is actually the unix gid_t */
-        uint32 user_rid;    /* Primary User ID */
-        uint32 group_rid;   /* Primary Group ID */
-
-        unsigned char *lm_pw; /* Null if no password */
-        unsigned char *nt_pw; /* Null if no password */
-
-        uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */
-        uint32 unknown_3; /* 0x00ff ffff */
-
-        uint16 logon_divs; /* 168 - number of hours in a week */
-        uint32 hours_len; /* normally 21 bytes */
-        uint8 hours[MAX_HOURS_LEN];
-
-        uint32 unknown_5; /* 0x0002 0000 */
-        uint32 unknown_6; /* 0x0000 04ec */
+       TALLOC_CTX *mem_ctx;
+       
+       void (*free_fn)(struct sam_passwd **);
+
+       struct user_data {
+               /* initiailization flags */
+               uint32 init_flag;
+               
+               time_t logon_time;            /* logon time */
+               time_t logoff_time;           /* logoff time */
+               time_t kickoff_time;          /* kickoff time */
+               time_t pass_last_set_time;    /* password last set time */
+               time_t pass_can_change_time;  /* password can change time */
+               time_t pass_must_change_time; /* password must change time */
+               
+               char * username;     /* UNIX username string */
+               char * domain;       /* Windows Domain name */
+               char * nt_username;  /* Windows username string */
+               char * full_name;    /* user's full name string */
+               char * home_dir;     /* home directory string */
+               char * dir_drive;    /* home directory drive string */
+               char * logon_script; /* logon script string */
+               char * profile_path; /* profile path string */
+               char * acct_desc  ;  /* user description string */
+               char * workstations; /* login from workstations string */
+               char * unknown_str ; /* don't know what this is, yet. */
+               char * munged_dial ; /* munged path name and dial-back tel number */
+               
+               uid_t uid;          /* this is a unix uid_t */
+               gid_t gid;          /* this is a unix gid_t */
+               uint32 user_rid;    /* Primary User ID */
+               uint32 group_rid;   /* Primary Group ID */
+               
+               DATA_BLOB lm_pw; /* .data is Null if no password */
+               DATA_BLOB nt_pw; /* .data is Null if no password */
+               
+               uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */
+               uint32 unknown_3; /* 0x00ff ffff */
+               
+               uint16 logon_divs; /* 168 - number of hours in a week */
+               uint32 hours_len; /* normally 21 bytes */
+               uint8 hours[MAX_HOURS_LEN];
+               
+               uint32 unknown_5; /* 0x0002 0000 */
+               uint32 unknown_6; /* 0x0000 04ec */
+       } private;
+       /* Lets see if the remaining code can get the hint that you
+          are meant to use the pdb_...() functions. */
        
 } SAM_ACCOUNT;
 
+/*
+ * 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
+
+
 /*
  * Flags for local user manipulation.
  */
@@ -594,6 +686,9 @@ typedef struct sam_passwd
 #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
 
 /* key and data in the connections database - used in smbstatus and smbd */
 struct connections_key {
@@ -622,7 +717,10 @@ struct locking_key {
 };
 
 struct locking_data {
-       int num_share_mode_entries;
+       union {
+               int num_share_mode_entries;
+               share_mode_entry dummy; /* Needed for alignment. */
+       } u;
        /* the following two entries are implicit 
           share_mode_entry modes[num_share_mode_entries];
            char file_name[];
@@ -811,6 +909,7 @@ struct bitmap {
 #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 */
@@ -970,11 +1069,11 @@ struct bitmap {
 /* Generic access masks & rights. */
 #define SPECIFIC_RIGHTS_MASK 0x00FFFFL
 #define STANDARD_RIGHTS_MASK 0xFF0000L
-#define DELETE_ACCESS        (1L<<16)
-#define READ_CONTROL_ACCESS  (1L<<17)
-#define WRITE_DAC_ACCESS     (1L<<18)
-#define WRITE_OWNER_ACCESS   (1L<<19)
-#define SYNCHRONIZE_ACCESS   (1L<<20)
+#define DELETE_ACCESS        (1L<<16) /* 0x00010000 */
+#define READ_CONTROL_ACCESS  (1L<<17) /* 0x00020000 */
+#define WRITE_DAC_ACCESS     (1L<<18) /* 0x00040000 */
+#define WRITE_OWNER_ACCESS   (1L<<19) /* 0x00080000 */
+#define SYNCHRONIZE_ACCESS   (1L<<20) /* 0x00100000 */
 
 /* Combinations of standard masks. */
 #define STANDARD_RIGHTS_ALL_ACCESS (DELETE_ACCESS|READ_CONTROL_ACCESS|WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS|SYNCHRONIZE_ACCESS)
@@ -983,12 +1082,12 @@ struct bitmap {
 #define STANDARD_RIGHTS_REQUIRED_ACCESS (DELETE_ACCESS|READ_CONTROL_ACCESS|WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS)
 #define STANDARD_RIGHTS_WRITE_ACCESS (READ_CONTROL_ACCESS)
 
-#define SYSTEM_SECURITY_ACCESS (1L<<24)
-#define MAXIMUM_ALLOWED_ACCESS (1L<<25)
-#define GENERIC_ALL_ACCESS   (1<<28)
-#define GENERIC_EXECUTE_ACCESS  (1<<29)
-#define GENERIC_WRITE_ACCESS   (1<<30)
-#define GENERIC_READ_ACCESS   (((unsigned)1)<<31)
+#define SYSTEM_SECURITY_ACCESS (1L<<24)                  /* 0x01000000 */
+#define MAXIMUM_ALLOWED_ACCESS (1L<<25)                  /* 0x02000000 */
+#define GENERIC_ALL_ACCESS     (1<<28)            /* 0x10000000 */
+#define GENERIC_EXECUTE_ACCESS (1<<29)            /* 0x20000000 */
+#define GENERIC_WRITE_ACCESS   (1<<30)            /* 0x40000000 */
+#define GENERIC_READ_ACCESS   (((unsigned)1)<<31) /* 0x80000000 */
 
 /* Mapping of generic access rights for files to specific rights. */
 
@@ -1045,7 +1144,9 @@ struct bitmap {
 #define FILE_ATTRIBUTE_ARCHIVE aARCH
 #define FILE_ATTRIBUTE_NORMAL 0x80L
 #define FILE_ATTRIBUTE_TEMPORARY 0x100L
+#define FILE_ATTRIBUTE_SPARSE 0x200L
 #define FILE_ATTRIBUTE_COMPRESSED 0x800L
+#define FILE_ATTRIBUTE_NONINDEXED 0x2000L
 #define SAMBA_ATTRIBUTES_MASK 0x7F
 
 /* Flags - combined with attributes. */
@@ -1099,9 +1200,10 @@ struct bitmap {
 /* Acconding to testing, this actually sets the security attribute! */
 #define FILE_PERSISTENT_ACLS 0x08
 /* These entries added from cifs9f --tsb */
-#define FILE_FILE_COMPRESSION 0x08
-#define FILE_VOLUME_QUOTAS 0x10
-#define FILE_DEVICE_IS_MOUNTED 0x20
+#define FILE_FILE_COMPRESSION 0x10
+#define FILE_VOLUME_QUOTAS 0x20
+/* I think this is wrong. JRA #define FILE_DEVICE_IS_MOUNTED 0x20 */
+#define FILE_VOLUME_SPARSE_FILE 0x40
 #define FILE_VOLUME_IS_COMPRESSED 0x8000
 
 /* ChangeNotify flags. */
@@ -1197,6 +1299,7 @@ char *strdup(char *s);
    
 #define FLAGS2_LONG_PATH_COMPONENTS   0x0001
 #define FLAGS2_EXTENDED_ATTRIBUTES    0x0002
+#define FLAGS2_EXTENDED_SECURITY      0x0800 
 #define FLAGS2_DFS_PATHNAMES          0x1000
 #define FLAGS2_READ_PERMIT_NO_EXECUTE 0x2000
 #define FLAGS2_32_BIT_ERROR_CODES     0x4000 
@@ -1220,6 +1323,7 @@ char *strdup(char *s);
 #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
@@ -1227,7 +1331,7 @@ char *strdup(char *s);
 enum protocol_types {PROTOCOL_NONE,PROTOCOL_CORE,PROTOCOL_COREPLUS,PROTOCOL_LANMAN1,PROTOCOL_LANMAN2,PROTOCOL_NT1};
 
 /* security levels */
-enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER,SEC_DOMAIN};
+enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER,SEC_DOMAIN,SEC_ADS};
 
 /* server roles */
 enum server_types
@@ -1247,6 +1351,12 @@ 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_ON, LDAP_SSL_OFF, LDAP_SSL_START_TLS};
+
 /* Remote architectures we know about. */
 enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT, RA_WIN2K, RA_SAMBA};
 
@@ -1374,19 +1484,18 @@ extern int chain_size;
  * 
  * The form of this is :
  *
- *  0     2       6        10       14    14+devsize 14+devsize+inodesize
- *  +----+--------+--------+--------+-------+--------+
- *  | cmd| pid    | sec    | usec   | dev   |  inode |
- *  +----+--------+--------+--------+-------+--------+
+ *  0     2       2+pid   2+pid+dev 2+pid+dev+ino
+ *  +----+--------+-------+--------+---------+
+ *  | cmd| pid    | dev   |  inode | fileid  |
+ *  +----+--------+-------+--------+---------+
  */
 
 #define OPLOCK_BREAK_CMD 0x1
 #define OPLOCK_BREAK_PID_OFFSET 2
-#define OPLOCK_BREAK_SEC_OFFSET (OPLOCK_BREAK_PID_OFFSET + sizeof(pid_t))
-#define OPLOCK_BREAK_USEC_OFFSET (OPLOCK_BREAK_SEC_OFFSET + sizeof(time_t))
-#define OPLOCK_BREAK_DEV_OFFSET (OPLOCK_BREAK_USEC_OFFSET + sizeof(long))
+#define OPLOCK_BREAK_DEV_OFFSET (OPLOCK_BREAK_PID_OFFSET + sizeof(pid_t))
 #define OPLOCK_BREAK_INODE_OFFSET (OPLOCK_BREAK_DEV_OFFSET + sizeof(SMB_DEV_T))
-#define OPLOCK_BREAK_MSG_LEN (OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T))
+#define OPLOCK_BREAK_FILEID_OFFSET (OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T))
+#define OPLOCK_BREAK_MSG_LEN (OPLOCK_BREAK_FILEID_OFFSET + sizeof(unsigned long))
 
 #define KERNEL_OPLOCK_BREAK_CMD 0x2
 #define LEVEL_II_OPLOCK_BREAK_CMD 0x3
@@ -1403,13 +1512,14 @@ extern int chain_size;
  * Form of this is :
  *
  *  0     2       2+devsize 2+devsize+inodesize
- *  +----+--------+--------+
- *  | cmd| dev    |  inode |
- *  +----+--------+--------+
+ *  +----+--------+--------+----------+
+ *  | cmd| dev    |  inode |  fileid  |
+ *  +----+--------+--------+----------+
  */
 #define KERNEL_OPLOCK_BREAK_DEV_OFFSET 2
 #define KERNEL_OPLOCK_BREAK_INODE_OFFSET (KERNEL_OPLOCK_BREAK_DEV_OFFSET + sizeof(SMB_DEV_T))
-#define KERNEL_OPLOCK_BREAK_MSG_LEN (KERNEL_OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T))
+#define KERNEL_OPLOCK_BREAK_FILEID_OFFSET (KERNEL_OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T))
+#define KERNEL_OPLOCK_BREAK_MSG_LEN (KERNEL_OPLOCK_BREAK_FILEID_OFFSET + sizeof(unsigned long))
 
 
 /* if a kernel does support oplocks then a structure of the following
@@ -1418,7 +1528,7 @@ struct kernel_oplocks {
        BOOL (*receive_message)(fd_set *fds, char *buffer, int buffer_len);
        BOOL (*set_oplock)(files_struct *fsp, int oplock_type);
        void (*release_oplock)(files_struct *fsp);
-       BOOL (*parse_message)(char *msg_start, int msg_len, SMB_INO_T *inode, SMB_DEV_T *dev);
+       BOOL (*parse_message)(char *msg_start, int msg_len, SMB_INO_T *inode, SMB_DEV_T *dev, unsigned long *file_id);
        BOOL (*msg_waiting)(fd_set *fds);
        int notification_fd;
 };
@@ -1507,6 +1617,8 @@ typedef struct user_struct
        gid_t gid; /* gid of a validated user */
 
        userdom_struct user;
+       char *homedir;
+       
        BOOL guest;
 
        /* following groups stuff added by ih */
@@ -1516,16 +1628,27 @@ typedef struct user_struct
 
        NT_USER_TOKEN *nt_user_token;
 
+       uint8 session_key[16];
+
        int session_id; /* used by utmp and pam session code */
 } user_struct;
 
+
+struct unix_error_map {
+       int unix_error;
+       int dos_class;
+       int dos_code;
+       NTSTATUS nt_error;
+};
+
 #include "ntdomain.h"
 
 #include "client.h"
-#include "rpcclient.h"
 
 /*
- * Size of new password account encoding string. DO NOT CHANGE.
+ * 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
@@ -1560,15 +1683,6 @@ typedef struct user_struct
 #include "nsswitch/winbindd_nss.h"
 #include "smb_acls.h"
 
-/* Used by winbindd_glue functions */
-
-typedef struct {
-       struct cli_state *cli;
-       POLICY_HND handle;
-       TALLOC_CTX *mem_ctx;
-} CLI_POLICY_HND;
-
-
 /* generic iconv conversion structure */
 typedef struct {
        size_t (*direct)(void *cd, char **inbuf, size_t *inbytesleft,
@@ -1578,6 +1692,13 @@ typedef struct {
        size_t (*push)(void *cd, char **inbuf, size_t *inbytesleft,
                       char **outbuf, size_t *outbytesleft);
        void *cd_direct, *cd_pull, *cd_push;
+       char *from_name, *to_name;
 } *smb_iconv_t;
 
+/* The maximum length of a trust account password.
+   Used when we randomly create it, 15 char passwords
+   exceed NT4's max password length */
+
+#define DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH 14
+
 #endif /* _SMB_H */