#include "libds/common/roles.h"
/* logged when starting the various Samba daemons */
-#define COPYRIGHT_STARTUP_MESSAGE "Copyright Andrew Tridgell and the Samba Team 1992-2011"
-
-
-#if defined(LARGE_SMB_OFF_T)
-#define BUFFER_SIZE (128*1024)
-#else /* no large readwrite possible */
-#define BUFFER_SIZE (0xFFFF)
-#endif
+#define COPYRIGHT_STARTUP_MESSAGE "Copyright Andrew Tridgell and the Samba Team 1992-2018"
#define SAFETY_MARGIN 1024
#define LARGE_WRITEX_HDR_SIZE 65
+#define LARGE_WRITEX_BUFFER_SIZE (128*1024)
#define NMB_PORT 137
#define DGRAM_PORT 138
-#define SMB_PORT1 445
-#define SMB_PORT2 139
+#define NBT_SMB_PORT 139 /* Port for SMB over NBT transport (IETF STD#19). */
+#define TCP_SMB_PORT 445 /* Port for SMB over naked TCP transport. */
#define SMB_PORTS "445 139"
#define Undefined (-1)
#define SIZEOFWORD 2
-#ifndef DEF_CREATE_MASK
-#define DEF_CREATE_MASK (0755)
-#endif
-
/* string manipulation flags - see clistr.c and srvstr.c */
#define STR_TERMINATE 1
#define STR_UPPER 2
#define OPENX_FILE_CREATE_IF_NOT_EXIST 0x10
#define OPENX_FILE_FAIL_IF_NOT_EXIST 0
-typedef union unid_t {
- uid_t uid;
- gid_t gid;
-} unid_t;
-
/* pipe string names */
#ifndef MAXSUBAUTHS
#include "librpc/gen_ndr/security.h"
-/*
- * 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 write_cache {
- SMB_OFF_T file_size;
- SMB_OFF_T offset;
- size_t alloc_size;
- size_t data_size;
- char *data;
-} write_cache;
-
-struct fd_handle {
- size_t ref_count;
- int fd;
- uint64_t position_information;
- SMB_OFF_T pos;
- uint32 private_options; /* NT Create options, but we only look at
- * NTCREATEX_OPTIONS_PRIVATE_DENY_DOS and
- * 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.
- */
- unsigned long gen_id;
-};
-
-struct idle_event;
struct share_mode_entry;
struct uuid;
struct named_mutex;
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;
- 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.
- */
-};
/* the basic packet size, assuming no words or bytes */
#define smb_size 39
};
struct notify_mid_map;
-struct notify_entry;
+struct notify_db_entry;
struct notify_event;
struct notify_change_request;
struct sys_notify_backend;
struct sys_notify_context {
- struct event_context *ev;
- struct connection_struct *conn;
+ struct tevent_context *ev;
void *private_data; /* For use by the system backend */
};
-struct notify_change_buf {
- /*
- * If no requests are pending, changes are queued here. Simple array,
- * we only append.
- */
-
- /*
- * num_changes == -1 means that we have got a catch-all change, when
- * asked we just return NT_STATUS_OK without specific changes.
- */
- int num_changes;
- struct notify_change *changes;
-
- /*
- * If no changes are around requests are queued here. Using a linked
- * list, because we have to append at the end and delete from the top.
- */
- 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;
- struct file_id file_id;
- uint64_t initial_allocation_size; /* Faked up initial allocation on disk. */
- mode_t mode;
- uint16 file_pid;
- uint16 vuid;
- write_cache *wcp;
- struct timeval open_time;
- uint32 access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */
- uint32 share_access; /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
-
- bool update_write_time_triggered;
- struct timed_event *update_write_time_event;
- bool update_write_time_on_close;
- struct timespec close_write_time;
- bool write_time_forced;
-
- int oplock_type;
- int sent_oplock_break;
- struct timed_event *oplock_timeout;
- struct lock_struct last_lock_failure;
- int current_lock_count; /* Count the number of outstanding locks and pending locks. */
-
- struct share_mode_entry *pending_break_messages;
- int num_pending_break_messages;
-
- bool can_lock;
- bool can_read;
- bool can_write;
- bool 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;
- 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;
-
- 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"
#include "sysquotas.h"
-struct vuid_cache_entry {
- struct auth_session_info *session_info;
- uint16_t vuid;
- bool read_only;
-};
-
-struct vuid_cache {
- unsigned int next_entry;
- struct vuid_cache_entry array[VUID_CACHE_SIZE];
-};
-
-typedef struct {
- char *name;
- bool is_wild;
-} name_compare_entry;
-
-struct trans_state {
- struct trans_state *next, *prev;
- uint16 vuid;
- uint64_t mid;
-
- uint32 max_param_return;
- uint32 max_data_return;
- uint32 max_setup_return;
-
- uint8 cmd; /* SMBtrans or SMBtrans2 */
-
- char *name; /* for trans requests */
- uint16 call; /* for trans2 and nttrans requests */
-
- bool close_on_completion;
- bool one_way;
-
- unsigned int setup_count;
- uint16 *setup;
-
- size_t received_data;
- size_t received_param;
-
- size_t total_param;
- char *param;
-
- size_t total_data;
- char *data;
-};
-
-/*
- * Info about an alternate data stream
- */
-
-struct stream_struct {
- SMB_OFF_T size;
- SMB_OFF_T alloc_size;
- char *name;
-};
-
/* Include VFS stuff */
#include "smb_acls.h"
+#include "lib/readdir_attr.h"
#include "vfs.h"
-struct dfree_cached_info {
- time_t last_dfree_time;
- uint64_t dfree_ret;
- uint64_t bsize;
- uint64_t dfree;
- uint64_t dsize;
-};
-
-struct dptr_struct;
-
-struct share_params {
- int service;
-};
-
-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;
- 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 ? */
- enum timestamp_set_resolution ts_res;
- char *connectpath;
- char *origpath;
-
- struct vfs_handle_struct *vfs_handles; /* for the new plugins */
-
- /*
- * This represents the user information on this connection. Depending
- * on the vuid using this tid, this might change per SMB request.
- */
- struct auth_session_info *session_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;
-
- uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
-
- time_t lastused;
- time_t lastused_count;
- bool used;
- int num_files_open;
- unsigned int num_smb_operations; /* Count of smb operations on this tree. */
- int encrypt_level;
- bool encrypted_tid;
-
- /* Semantics requested by the client or forced by the server config. */
- bool case_sensitive;
- bool case_preserve;
- bool short_case_preserve;
-
- /* 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). */
- name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */
- name_compare_entry *aio_write_behind_list; /* Per-share list of files to use aio write behind on. */
- struct dfree_cached_info *dfree_info;
- struct trans_state *pending_trans;
- struct notify_context *notify_ctx;
-
- struct rpc_pipe_client *spoolss_pipe;
-
-} connection_struct;
-
struct current_user {
- connection_struct *conn;
- uint16 vuid;
+ struct connection_struct *conn;
+ uint64_t vuid; /* SMB2 compat */
+ bool need_chdir;
+ bool done_chdir;
struct security_unix_token ut;
struct security_token *nt_user_token;
};
-struct smbd_smb2_request;
-
-struct smb_request {
- uint8_t cmd;
- uint16 flags2;
- uint16 smbpid;
- uint64_t mid; /* For compatibility with SMB2. */
- uint32_t seqnum;
- uint16 vuid;
- uint16 tid;
- uint8 wct;
- uint16_t *vwv;
- uint16_t buflen;
- const uint8_t *buf;
- const uint8 *inbuf;
-
- /*
- * Async handling in the main smb processing loop is directed by
- * outbuf: reply_xxx routines indicate sync behaviour by putting their
- * reply into "outbuf". If they leave it as NULL, they take of it
- * themselves, possibly later.
- *
- * If async handling is wanted, the reply_xxx routine must make sure
- * that it talloc_move()s the smb_req somewhere else.
- */
- uint8 *outbuf;
-
- size_t unread_bytes;
- bool encrypted;
- connection_struct *conn;
- struct smbd_server_connection *sconn;
- struct smb_perfcount_data pcd;
-
- /*
- * Chained request handling
- */
- struct files_struct *chain_fsp;
-
- /*
- * Here we collect the outbufs from the chain handlers
- */
- uint8_t *chain_outbuf;
-
- /*
- * 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. */
#define NO_BREAK_SENT 0
#define BREAK_TO_NONE_SENT 1
struct sockaddr_storage ip;
struct sockaddr_storage netmask;
struct sockaddr_storage bcast;
-};
-
-/* Internal message queue for deferred opens. */
-struct pending_message_list {
- struct pending_message_list *next, *prev;
- struct timeval request_time; /* When was this first issued? */
- struct timed_event *te;
- struct smb_perfcount_data pcd;
- uint32_t seqnum;
- bool encrypted;
- bool processed;
- DATA_BLOB buf;
- DATA_BLOB private_data;
+ uint32_t if_index;
+ uint64_t linkspeed;
+ uint32_t capability;
};
#define SHARE_MODE_FLAG_POSIX_OPEN 0x1
Offset Data length.
0 struct server_id pid 4
-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
+4 uint16_t op_mid 8
+12 uint16_t op_type 2
+14 uint32_t access_mask 4
+18 uint32_t share_access 4
+22 uint32_t private_options 4
+26 uint32_t time sec 4
+30 uint32_t time usec 4
+34 uint64_t dev 8 bytes
+42 uint64_t inode 8 bytes
+50 uint64_t extid 8 bytes
58 unsigned long file_id 4 bytes
-62 uint32 uid 4 bytes
-66 uint16 flags 2 bytes
-68 uint32 name_hash 4 bytes
+62 uint32_t uid 4 bytes
+66 uint16_t flags 2 bytes
+68 uint32_t name_hash 4 bytes
72
*/
#define NT_HASH_LEN 16
#define LM_HASH_LEN 16
-/* key and data in the connections database - used in smbstatus and smbd */
-struct connections_key {
- struct server_id pid;
- int cnum;
- fstring name;
-};
-
-struct connections_data {
- int magic;
- struct server_id pid;
- int cnum;
- uid_t uid;
- gid_t gid;
- char servicename[FSTRING_LEN];
- char addr[24];
- char machine[FSTRING_LEN];
- time_t start;
-
- /*
- * 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;
-};
-
/* offsets into message for common items */
#define smb_com (NBT_HDR_SIZE+HDR_COM)
#define smb_rcls (NBT_HDR_SIZE+HDR_RCLS)
#define smb_vwv16 (smb_vwv+(16*2))
#define smb_vwv17 (smb_vwv+(17*2))
-/* These are the trans subcommands */
-#define TRANSACT_SETNAMEDPIPEHANDLESTATE 0x01
-#define TRANSACT_DCERPCCMD 0x26
-#define TRANSACT_WAITNAMEDPIPEHANDLESTATE 0x53
-
-/* These are the TRANS2 sub commands */
-#define TRANSACT2_OPEN 0x00
-#define TRANSACT2_FINDFIRST 0x01
-#define TRANSACT2_FINDNEXT 0x02
-#define TRANSACT2_QFSINFO 0x03
-#define TRANSACT2_SETFSINFO 0x04
-#define TRANSACT2_QPATHINFO 0x05
-#define TRANSACT2_SETPATHINFO 0x06
-#define TRANSACT2_QFILEINFO 0x07
-#define TRANSACT2_SETFILEINFO 0x08
-#define TRANSACT2_FSCTL 0x09
-#define TRANSACT2_IOCTL 0x0A
-#define TRANSACT2_FINDNOTIFYFIRST 0x0B
-#define TRANSACT2_FINDNOTIFYNEXT 0x0C
-#define TRANSACT2_MKDIR 0x0D
-#define TRANSACT2_SESSION_SETUP 0x0E
-#define TRANSACT2_GET_DFS_REFERRAL 0x10
-#define TRANSACT2_REPORT_DFS_INCONSISTANCY 0x11
-
-/* These are the NT transact sub commands. */
-#define NT_TRANSACT_CREATE 1
-#define NT_TRANSACT_IOCTL 2
-#define NT_TRANSACT_SET_SECURITY_DESC 3
-#define NT_TRANSACT_NOTIFY_CHANGE 4
-#define NT_TRANSACT_RENAME 5
-#define NT_TRANSACT_QUERY_SECURITY_DESC 6
-#define NT_TRANSACT_GET_USER_QUOTA 7
-#define NT_TRANSACT_SET_USER_QUOTA 8
-
/* These are the NT transact_get_user_quota sub commands */
#define TRANSACT_GET_USER_QUOTA_LIST_CONTINUE 0x0000
#define TRANSACT_GET_USER_QUOTA_LIST_START 0x0100
#define smb_ntcreate_ImpersonationLevel (smb_vwv0 + 43)
#define smb_ntcreate_SecurityFlags (smb_vwv0 + 47)
-/* this is used on a TConX. I'm not sure the name is very helpful though */
-#define SMB_SUPPORT_SEARCH_BITS 0x0001
-#define SMB_SHARE_IN_DFS 0x0002
-
/* Named pipe write mode flags. Used in writeX calls. */
#define PIPE_RAW_MODE 0x4
#define PIPE_START_MESSAGE 0x8
#define OPEN_DIRECTORY 8
#define EXTENDED_RESPONSE_REQUIRED 0x10
-/* ShareAccess field. */
-#define FILE_SHARE_NONE 0 /* Cannot be used in bitmask. */
-#define FILE_SHARE_READ 1
-#define FILE_SHARE_WRITE 2
-#define FILE_SHARE_DELETE 4
-
-/* Flags - combined with attributes. */
-#define FILE_FLAG_WRITE_THROUGH 0x80000000L
-#define FILE_FLAG_NO_BUFFERING 0x20000000L
-#define FILE_FLAG_RANDOM_ACCESS 0x10000000L
-#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000L
-#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000L
-#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000L
-#define FILE_FLAG_POSIX_SEMANTICS 0x01000000L
-
-/* CreateDisposition field. */
-#define FILE_SUPERSEDE 0 /* File exists overwrite/supersede. File not exist create. */
-#define FILE_OPEN 1 /* File exists open. File not exist fail. */
-#define FILE_CREATE 2 /* File exists fail. File not exist create. */
-#define FILE_OPEN_IF 3 /* File exists open. File not exist create. */
-#define FILE_OVERWRITE 4 /* File exists overwrite. File not exist fail. */
-#define FILE_OVERWRITE_IF 5 /* File exists overwrite. File not exist create. */
-
-/* CreateOptions field. */
-#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 /* 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)
#define NTCREATEX_OPTIONS_INVALID_PARAM_MASK (0xFF100030)
/* Private options for printer support */
#define NTCREATEX_OPTIONS_PRIVATE_DELETE_ON_CLOSE 0x0008
-/* Responses when opening a file. */
-#define FILE_WAS_SUPERSEDED 0
-#define FILE_WAS_OPENED 1
-#define FILE_WAS_CREATED 2
-#define FILE_WAS_OVERWRITTEN 3
+/* Private option for streams support */
+#define NTCREATEX_OPTIONS_PRIVATE_STREAM_BASEOPEN 0x0010
/* Flag for NT transact rename call. */
#define RENAME_REPLACE_IF_EXISTS 1
#define RENAME_FLAG_RENAME 0x104
#define RENAME_FLAG_COPY 0x105
-/* Filesystem Attributes. */
-#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
-#define FILE_CASE_PRESERVED_NAMES 0x00000002
-#define FILE_UNICODE_ON_DISK 0x00000004
-/* According to cifs9f, this is 4, not 8 */
-/* Acconding to testing, this actually sets the security attribute! */
-#define FILE_PERSISTENT_ACLS 0x00000008
-#define FILE_FILE_COMPRESSION 0x00000010
-#define FILE_VOLUME_QUOTAS 0x00000020
-#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
-#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
-#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
-#define FS_LFN_APIS 0x00004000
-#define FILE_VOLUME_IS_COMPRESSED 0x00008000
-#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
-#define FILE_SUPPORTS_ENCRYPTION 0x00020000
-#define FILE_NAMED_STREAMS 0x00040000
-#define FILE_READ_ONLY_VOLUME 0x00080000
-
/* ChangeNotify flags. */
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x001
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x002
#define FILE_NOTIFY_CHANGE_NAME \
(FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME)
+#define FILE_NOTIFY_CHANGE_ALL \
+ (FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | \
+ FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | \
+ FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_LAST_ACCESS | \
+ FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_EA | \
+ FILE_NOTIFY_CHANGE_SECURITY | FILE_NOTIFY_CHANGE_STREAM_NAME | \
+ FILE_NOTIFY_CHANGE_STREAM_SIZE | FILE_NOTIFY_CHANGE_STREAM_WRITE)
+
/* change notify action results */
#define NOTIFY_ACTION_ADDED 1
#define NOTIFY_ACTION_REMOVED 2
#define NOTIFY_ACTION_REMOVED_STREAM 7
#define NOTIFY_ACTION_MODIFIED_STREAM 8
+/*
+ * Timestamp format used in "previous versions":
+ * This is the windows-level format of the @GMT- token.
+ * It is a fixed format not to be confused with the
+ * format for the POSIX-Level token of the shadow_copy2
+ * VFS module that can be configured via the "shadow:format"
+ * configuration option but defaults to the same format.
+ * See the shadow_copy2 module.
+ */
+#define GMT_NAME_LEN 24 /* length of a @GMT- name */
+#define GMT_FORMAT "@GMT-%Y.%m.%d-%H.%M.%S"
/* where to find the base of the SMB packet proper */
#define smb_base(buf) (((const char *)(buf))+4)
otherwise NT will not honour the announce packets */
#define MAX_SERVER_STRING_LENGTH 48
-
-#define SMB_SUCCESS 0 /* The request was successful. */
-
-#ifdef WITH_DFS
-void dfs_unlogin(void);
-extern int dcelogin_atmost_once;
-#endif
-
#ifdef NOSTRDUP
char *strdup(char *s);
#endif
* Note: In the presence of NT4.X do not set above 4.9
* Setting this above 4.9 can have undesired side-effects.
* This may change again in Samba-3.0 after further testing. JHT
+ *
+ * Version 6.1 - For older smb server versions, MMC doesn't let offline
+ * settings to be configured during share creation. Changing
+ * it to 6.1 to mimic Win2K8R2.
+ *
*/
-#define SAMBA_MAJOR_NBT_ANNOUNCE_VERSION 0x04
-#define SAMBA_MINOR_NBT_ANNOUNCE_VERSION 0x09
+#define SAMBA_MAJOR_NBT_ANNOUNCE_VERSION 0x06
+#define SAMBA_MINOR_NBT_ANNOUNCE_VERSION 0x01
/* Browser Election Values */
#define BROWSER_ELECTION_VERSION 0x010f
#define BROWSER_CONSTANT 0xaa55
-/* 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_SUBSTREAMS 0x2
#define NO_REPARSETAG 0x4
-/* printing types */
-enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,
- PRINT_QNX,PRINT_PLP,PRINT_LPRNG,PRINT_SOFTQ,
- PRINT_CUPS,PRINT_LPRNT,PRINT_LPROS2,PRINT_IPRINT
-#if defined(DEVELOPER) || defined(ENABLE_BUILD_FARM_HACKS)
-,PRINT_TEST,PRINT_VLP
-#endif /* DEVELOPER */
-};
-
-/* LDAP SSL options */
-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. */
+/* Remote architectures we know about, keep in sync with remote_arch_strings */
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_OSX};
-/* case handling */
-enum case_handling {CASE_LOWER,CASE_UPPER};
-
-/* ACL compatibility */
-enum acl_compatibility {ACL_COMPAT_AUTO, ACL_COMPAT_WINNT, ACL_COMPAT_WIN2K};
/*
- * Global value meaing that the smb_uid field should be
+ * Global value meaning that the smb_uid field should be
* ingored (in share level security and protocol level == CORE)
*/
#define UID_FIELD_INVALID 0
#define VUID_OFFSET 100 /* Amount to bias returned vuid numbers */
-/*
- * Size of buffer to use when moving files across filesystems.
- */
-#define COPYBUF_SIZE (8*1024)
+#define TID_FIELD_INVALID 0
+
+#define FNUM_FIELD_INVALID 0
/*
- * Map the Core and Extended Oplock requesst bits down
+ * Map the Core and Extended Oplock request bits down
* to common bits (EXCLUSIVE_OPLOCK & BATCH_OPLOCK).
*/
#define EXCLUSIVE_OPLOCK OPLOCK_EXCLUSIVE
#define BATCH_OPLOCK OPLOCK_BATCH
#define LEVEL_II_OPLOCK OPLOCK_LEVEL_II
+#define LEASE_OPLOCK 0x100
/* The following are Samba-private. */
#define INTERNAL_OPEN_ONLY 0x8
-#define FAKE_LEVEL_II_OPLOCK 0x10 /* Client requested no_oplock, but we have to
+/* #define FAKE_LEVEL_II_OPLOCK 0x10 */ /* Not used anymore */
+ /* Client requested no_oplock, but we have to
* inform potential level2 holders on
* write. */
-#define DEFERRED_OPEN_ENTRY 0x20
-#define UNUSED_SHARE_MODE_ENTRY 0x40
-#define FORCE_OPLOCK_BREAK_TO_NONE 0x80
+/* #define DEFERRED_OPEN_ENTRY 0x20 */ /* Not used anymore */
+/* #define UNUSED_SHARE_MODE_ENTRY 0x40 */ /* Not used anymore */
+/* #define FORCE_OPLOCK_BREAK_TO_NONE 0x80 */ /* Not used anymore */
/* 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)
#define EXCLUSIVE_OPLOCK_TYPE(lck) ((lck) & ((unsigned int)EXCLUSIVE_OPLOCK|(unsigned int)BATCH_OPLOCK))
#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))
+#define LEVEL_II_OPLOCK_TYPE(lck) ((lck) & (unsigned int)LEVEL_II_OPLOCK)
/* kernel_oplock_message definition.
enum smbd_capability {
KERNEL_OPLOCK_CAPABILITY,
DMAPI_ACCESS_CAPABILITY,
- LEASE_CAPABILITY
+ LEASE_CAPABILITY,
+ DAC_OVERRIDE_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;
};
files_struct *fsp, int oplock_type);
void (*release_oplock)(struct kernel_oplocks *ctx,
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"
/* There really is more here ... */
};
-typedef struct user_struct {
- struct user_struct *next, *prev;
- uint16 vuid; /* Tag for this entry. */
-
- char *session_keystr; /* used by utmp and pam session code.
- TDB key string */
- int homes_snum;
-
- struct auth_session_info *session_info;
-
- struct auth_ntlmssp_state *auth_ntlmssp_state;
-} user_struct;
-
-/*
- Do you want session setups at user level security with a invalid
- password to be rejected or allowed in as guest? WinNT rejects them
- but it can be a pain as it means "net view" needs to use a password
-
- You have 3 choices in the setting of map_to_guest:
-
- "NEVER_MAP_TO_GUEST" means session setups with an invalid password
- are rejected. This is the default.
-
- "MAP_TO_GUEST_ON_BAD_USER" means session setups with an invalid password
- are rejected, unless the username does not exist, in which case it
- is treated as a guest login
-
- "MAP_TO_GUEST_ON_BAD_PASSWORD" means session setups with an invalid password
- are treated as a guest login
-
- Note that map_to_guest only has an effect in user or server
- level security.
-*/
-
-#define NEVER_MAP_TO_GUEST 0
-#define MAP_TO_GUEST_ON_BAD_USER 1
-#define MAP_TO_GUEST_ON_BAD_PASSWORD 2
-#define MAP_TO_GUEST_ON_BAD_UID 3
-
#define SAFE_NETBIOS_CHARS ". -_"
-/* 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
-
#define PORT_NONE 0
#ifndef LDAP_PORT
#define LDAP_PORT 389
};
struct ea_struct {
- uint8 flags;
+ uint8_t flags;
char *name;
DATA_BLOB value;
};
/* Prefix for xattrs storing streams. */
#define SAMBA_XATTR_MARKER "user.SAMBA_STREAMS"
-/* map readonly options */
-enum mapreadonly_options {MAP_READONLY_NO, MAP_READONLY_YES, MAP_READONLY_PERMISSIONS};
-
/* usershare error codes. */
enum usershare_err {
USERSHARE_OK=0,
#define SAMBA_EXTENDED_INFO_MAGIC 0x536d4261 /* "SmBa" */
#define SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH 28
struct smb_extended_info {
- uint32 samba_magic; /* Always SAMBA_EXTRA_INFO_MAGIC */
- uint32 samba_version; /* Major/Minor/Release/Revision */
- uint32 samba_subversion; /* Prerelease/RC/Vendor patch */
+ uint32_t samba_magic; /* Always SAMBA_EXTRA_INFO_MAGIC */
+ uint32_t samba_version; /* Major/Minor/Release/Revision */
+ uint32_t samba_subversion; /* Prerelease/RC/Vendor patch */
NTTIME samba_gitcommitdate;
char samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
};
-/* 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
-#define UCF_UNIX_NAME_LOOKUP 0x00000010
-
-/*
- * 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;
-
-/* 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};
+ SAMBA_SEEK_FLUSH,
+ SAMBA_READ_FLUSH,
+ SAMBA_WRITE_FLUSH,
+ SAMBA_READRAW_FLUSH,
+ SAMBA_OPLOCK_RELEASE_FLUSH,
+ SAMBA_CLOSE_FLUSH,
+ SAMBA_SYNC_FLUSH,
+ SAMBA_SIZECHANGE_FLUSH,
+};
#endif /* _SMB_H */