X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=blobdiff_plain;f=source3%2Finclude%2Fsmb.h;h=3c3ced6baf713785d495132487134844df912b57;hp=b441b3476a94729b6ccfb148bede05bac721ae8d;hb=ca2c93b9e578fd9cd565f934b8910d6c738d787b;hpb=553818add80818909268557665e2760a16f2d8a0 diff --git a/source3/include/smb.h b/source3/include/smb.h index b441b3476a9..3c3ced6baf7 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -149,8 +149,6 @@ typedef union unid_t { * smb_ucs2_t is *always* in little endian format. */ -typedef uint16 smb_ucs2_t; - #ifdef WORDS_BIGENDIAN #define UCS2_SHIFT 8 #else @@ -167,10 +165,6 @@ typedef uint16 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)) -/* Large data type for manipulating uint32 unicode codepoints */ -typedef uint32 codepoint_t; -#define INVALID_CODEPOINT ((codepoint_t)-1) - /* pipe string names */ #define PIPE_LANMAN "\\PIPE\\LANMAN" @@ -188,9 +182,8 @@ typedef uint32 codepoint_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 */ @@ -257,6 +250,10 @@ struct id_map { #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" +#include "librpc/gen_ndr/ndr_dcerpc.h" +#include "librpc/gen_ndr/ntlmssp.h" struct lsa_dom_info { bool valid; @@ -338,12 +335,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 { @@ -368,11 +359,14 @@ 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; struct vfs_handle_struct *owner; - /* NOTE: This structure contains two pointers so that we can guarantee + void (*destroy)(void *p_data); + void *_dummy_; + /* NOTE: This structure contains four pointers so that we can guarantee * that the end of the structure is always both 4-byte and 8-byte aligned. */ }; @@ -458,7 +452,7 @@ typedef struct files_struct { bool lockdb_clean; bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */ bool posix_open; - char *fsp_name; + struct smb_filename *fsp_name; struct vfs_fsp_data *vfs_extension; struct fake_file_handle *fake_file_handle; @@ -466,6 +460,8 @@ typedef struct files_struct { struct notify_change_buf *notify; struct files_struct *base_fsp; /* placeholder for delete on close */ + + struct dptr_struct *dptr; } files_struct; #include "ntquotas.h" @@ -553,21 +549,22 @@ 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 */ /* @@ -576,6 +573,12 @@ typedef struct connection_struct { */ struct auth_serversupplied_info *server_info; + /* + * If the "force group" parameter is set, this is the primary gid that + * may be used in the users token, depending on the vuid using this tid. + */ + 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 */ @@ -612,11 +615,13 @@ struct current_user { NT_USER_TOKEN *nt_user_token; }; + struct smb_request { uint8_t cmd; uint16 flags2; uint16 smbpid; uint16 mid; + uint32_t seqnum; uint16 vuid; uint16 tid; uint8 wct; @@ -639,6 +644,7 @@ struct smb_request { size_t unread_bytes; bool encrypted; connection_struct *conn; + struct smb_perfcount_data pcd; /* * Chained request handling @@ -654,6 +660,8 @@ struct smb_request { * state information for async smb handling */ void *async_priv; + + bool done; }; /* Defines for the sent_oplock_break field above. */ @@ -716,6 +724,8 @@ 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; DATA_BLOB buf; DATA_BLOB private_data; @@ -752,23 +762,25 @@ Offset Data length. 16 uint32 private_options 4 20 uint32 time sec 4 24 uint32 time usec 4 -28 SMB_DEV_T dev 8 bytes. -36 SMB_INO_T inode 8 bytes -44 unsigned long file_id 4 bytes -48 uint32 uid 4 bytes -52 uint16 flags 2 bytes -54 +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 */ #ifdef CLUSTER_SUPPORT -#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 58 +#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 66 #else -#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 54 +#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 62 #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; @@ -826,20 +838,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. */ @@ -919,6 +917,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; @@ -1233,18 +1232,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 (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) /* Share specific rights. */ #define SHARE_ALL_ACCESS FILE_GENERIC_ALL @@ -1328,12 +1338,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) @@ -1490,6 +1511,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 @@ -1511,7 +1541,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}; @@ -1614,48 +1652,43 @@ enum acl_compatibility {ACL_COMPAT_AUTO, ACL_COMPAT_WINNT, ACL_COMPAT_WIN2K}; #define BATCH_OPLOCK_TYPE(lck) ((lck) & (unsigned int)BATCH_OPLOCK) #define LEVEL_II_OPLOCK_TYPE(lck) ((lck) & ((unsigned int)LEVEL_II_OPLOCK|(unsigned int)FAKE_LEVEL_II_OPLOCK)) -struct inform_level2_message { - SMB_DEV_T dev; - SMB_INO_T inode; - uint16 mid; - unsigned long target_file_id; - unsigned long source_file_id; -}; - /* kernel_oplock_message definition. struct kernel_oplock_message { - SMB_DEV_T dev; - SMB_INO_T inode; + uint64_t dev; + uint64_t inode; + unit64_t extid; unsigned long file_id; }; Offset Data length. -0 SMB_DEV_T dev 8 bytes. -8 SMB_INO_T inode 8 bytes -16 unsigned long file_id 4 bytes -20 +0 uint64_t dev 8 bytes +8 uint64_t inode 8 bytes +16 uint64_t extid 8 bytes +24 unsigned long file_id 4 bytes +28 */ -#define MSG_SMB_KERNEL_BREAK_SIZE 20 +#define MSG_SMB_KERNEL_BREAK_SIZE 28 /* file_renamed_message definition. struct file_renamed_message { - SMB_DEV_T dev; - SMB_INO_T inode; + uint64_t dev; + uint64_t inode; char names[1]; A variable area containing sharepath and filename. }; Offset Data length. -0 SMB_DEV_T dev 8 bytes. -8 SMB_INO_T inode 8 bytes -16 char [] name zero terminated namelen bytes -minimum length == 18. +0 uint64_t dev 8 bytes +8 uint64_t inode 8 bytes +16 unit64_t extid 8 bytes +24 char [] name zero terminated namelen bytes +minimum length == 24. */ -#define MSG_FILE_RENAMED_MIN_SIZE 16 +#define MSG_FILE_RENAMED_MIN_SIZE 24 /* * On the wire return values for oplock types. @@ -1683,19 +1716,50 @@ enum smbd_capability { LEASE_CAPABILITY }; +/* + * Kernel oplocks capability flags. + */ + +/* Level 2 oplocks are supported natively by kernel oplocks. */ +#define KOPLOCKS_LEVEL2_SUPPORTED 0x1 + +/* The kernel notifies deferred openers when they can retry the open. */ +#define KOPLOCKS_DEFERRED_OPEN_NOTIFICATION 0x2 + +/* The kernel notifies smbds when an oplock break times out. */ +#define KOPLOCKS_TIMEOUT_NOTIFICATION 0x4 + +/* The kernel notifies smbds when an oplock is broken. */ +#define KOPLOCKS_OPLOCK_BROKEN_NOTIFICATION 0x8 + struct kernel_oplocks_ops; struct kernel_oplocks { const struct kernel_oplocks_ops *ops; + uint32_t flags; void *private_data; }; +enum level2_contention_type { + LEVEL2_CONTEND_ALLOC_SHRINK, + LEVEL2_CONTEND_ALLOC_GROW, + LEVEL2_CONTEND_SET_FILE_LEN, + LEVEL2_CONTEND_FILL_SPARSE, + LEVEL2_CONTEND_WRITE, + LEVEL2_CONTEND_WINDOWS_BRL, + LEVEL2_CONTEND_POSIX_BRL +}; + /* 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_ops { bool (*set_oplock)(struct kernel_oplocks *ctx, files_struct *fsp, int oplock_type); void (*release_oplock)(struct kernel_oplocks *ctx, - files_struct *fsp); + files_struct *fsp, int oplock_type); + void (*contend_level2_oplocks_begin)(files_struct *fsp, + enum level2_contention_type type); + void (*contend_level2_oplocks_end)(files_struct *fsp, + enum level2_contention_type type); }; #include "smb_macros.h" @@ -1726,22 +1790,6 @@ struct node_status_extra { /* There really is more here ... */ }; -struct pwd_info { - bool null_pwd; - bool cleartext; - - fstring password; -}; - -/* 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. */ @@ -1798,18 +1846,6 @@ struct unix_error_map { #define SAFE_NETBIOS_CHARS ". -_" -/* generic iconv conversion structure */ -typedef struct _smb_iconv_t { - size_t (*direct)(void *cd, const char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft); - size_t (*pull)(void *cd, const char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft); - size_t (*push)(void *cd, const 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 */ @@ -1833,21 +1869,6 @@ struct ip_service { /* Special name type used to cause a _kerberos DNS lookup. */ #define KDC_NAME_TYPE 0xDCDC -/* Used by the SMB signing functions. */ - -typedef struct smb_sign_info { - void (*sign_outgoing_message)(char *outbuf, struct smb_sign_info *si); - 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? */ -} smb_sign_info; - struct ea_struct { uint8 flags; char *name; @@ -1865,6 +1886,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 DOS timestamps. */ +#define SAMBA_XATTR_DOSTIMESTAMPS "user.DosTimestamps" #define UUID_SIZE 16 @@ -1906,16 +1929,35 @@ 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 + +/* + * 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; +}; + #endif /* _SMB_H */