1 /* 2 Unix SMB/CIFS implementation. 3 SMB parameters and setup, plus a whole lot more. 4 5 Copyright (C) Andrew Tridgell 1992-2000 6 Copyright (C) John H Terpstra 1996-2002 7 Copyright (C) Luke Kenneth Casson Leighton 1996-2000 8 Copyright (C) Paul Ashton 1998-2000 9 Copyright (C) Simo Sorce 2001-2002 10 Copyright (C) Martin Pool 2002 11 12 This program is free software; you can redistribute it and/or modify 13 it under the terms of the GNU General Public License as published by 14 the Free Software Foundation; either version 3 of the License, or 15 (at your option) any later version. 16 17 This program is distributed in the hope that it will be useful, 18 but WITHOUT ANY WARRANTY; without even the implied warranty of 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 GNU General Public License for more details. 21 22 You should have received a copy of the GNU General Public License 23 along with this program. If not, see <http://www.gnu.org/licenses/>. 24 */ 25 26 #ifndef _RAW_SMB_H 27 #define _RAW_SMB_H 28 29 /* deny modes */ 30 #define DENY_DOS 0 31 #define DENY_ALL 1 32 #define DENY_WRITE 2 33 #define DENY_READ 3 34 #define DENY_NONE 4 35 #define DENY_FCB 7 36 37 /* open modes */ 38 #define DOS_OPEN_RDONLY 0 39 #define DOS_OPEN_WRONLY 1 40 #define DOS_OPEN_RDWR 2 41 #define DOS_OPEN_FCB 0xF 42 43 44 /**********************************/ 45 /* SMBopen field definitions */ 46 #define OPEN_FLAGS_DENY_MASK 0x70 47 #define OPEN_FLAGS_DENY_DOS 0x00 48 #define OPEN_FLAGS_DENY_ALL 0x10 49 #define OPEN_FLAGS_DENY_WRITE 0x20 50 #define OPEN_FLAGS_DENY_READ 0x30 51 #define OPEN_FLAGS_DENY_NONE 0x40 52 53 #define OPEN_FLAGS_MODE_MASK 0x0F 54 #define OPEN_FLAGS_OPEN_READ 0 55 #define OPEN_FLAGS_OPEN_WRITE 1 56 #define OPEN_FLAGS_OPEN_RDWR 2 57 #define OPEN_FLAGS_FCB 0xFF 58 59 60 /**********************************/ 61 /* SMBopenX field definitions */ 62 63 /* OpenX Flags field. */ 64 #define OPENX_FLAGS_ADDITIONAL_INFO 0x01 65 #define OPENX_FLAGS_REQUEST_OPLOCK 0x02 66 #define OPENX_FLAGS_REQUEST_BATCH_OPLOCK 0x04 67 #define OPENX_FLAGS_EA_LEN 0x08 68 #define OPENX_FLAGS_EXTENDED_RETURN 0x10 69 70 /* desired access (open_mode), split info 4 4-bit nibbles */ 71 #define OPENX_MODE_ACCESS_MASK 0x000F 72 #define OPENX_MODE_ACCESS_READ 0x0000 73 #define OPENX_MODE_ACCESS_WRITE 0x0001 74 #define OPENX_MODE_ACCESS_RDWR 0x0002 75 #define OPENX_MODE_ACCESS_EXEC 0x0003 76 #define OPENX_MODE_ACCESS_FCB 0x000F 77 78 #define OPENX_MODE_DENY_SHIFT 4 79 #define OPENX_MODE_DENY_MASK (0xF << OPENX_MODE_DENY_SHIFT) 80 #define OPENX_MODE_DENY_DOS (DENY_DOS << OPENX_MODE_DENY_SHIFT) 81 #define OPENX_MODE_DENY_ALL (DENY_ALL << OPENX_MODE_DENY_SHIFT) 82 #define OPENX_MODE_DENY_WRITE (DENY_WRITE << OPENX_MODE_DENY_SHIFT) 83 #define OPENX_MODE_DENY_READ (DENY_READ << OPENX_MODE_DENY_SHIFT) 84 #define OPENX_MODE_DENY_NONE (DENY_NONE << OPENX_MODE_DENY_SHIFT) 85 #define OPENX_MODE_DENY_FCB (0xF << OPENX_MODE_DENY_SHIFT) 86 87 #define OPENX_MODE_LOCALITY_MASK 0x0F00 /* what does this do? */ 88 89 #define OPENX_MODE_NO_CACHE 0x1000 90 #define OPENX_MODE_WRITE_THRU 0x4000 91 92 /* open function values */ 93 #define OPENX_OPEN_FUNC_MASK 0x3 94 #define OPENX_OPEN_FUNC_FAIL 0x0 95 #define OPENX_OPEN_FUNC_OPEN 0x1 96 #define OPENX_OPEN_FUNC_TRUNC 0x2 97 98 /* The above can be OR'ed with... */ 99 #define OPENX_OPEN_FUNC_CREATE 0x10 100 101 /* openx action in reply */ 102 #define OPENX_ACTION_EXISTED 1 103 #define OPENX_ACTION_CREATED 2 104 #define OPENX_ACTION_TRUNCATED 3 105 106 107 /**********************************/ 108 /* SMBntcreateX field definitions */ 109 110 /* ntcreatex flags field. */ 111 #define NTCREATEX_FLAGS_REQUEST_OPLOCK 0x02 112 #define NTCREATEX_FLAGS_REQUEST_BATCH_OPLOCK 0x04 113 #define NTCREATEX_FLAGS_OPEN_DIRECTORY 0x08 /* TODO: opens parent? we need 114 a test suite for this */ 115 #define NTCREATEX_FLAGS_EXTENDED 0x10 116 117 /* the ntcreatex access_mask field 118 this is split into 4 pieces 119 AAAABBBBCCCCCCCCDDDDDDDDDDDDDDDD 120 A -> GENERIC_RIGHT_* 121 B -> SEC_RIGHT_* 122 C -> STD_RIGHT_* 123 D -> SA_RIGHT_* 124 125 which set of SA_RIGHT_* bits is applicable depends on the type 126 of object. 127 */ 128 129 130 131 /* ntcreatex share_access field */ 132 #define NTCREATEX_SHARE_ACCESS_NONE 0 133 #define NTCREATEX_SHARE_ACCESS_READ 1 134 #define NTCREATEX_SHARE_ACCESS_WRITE 2 135 #define NTCREATEX_SHARE_ACCESS_DELETE 4 136 #define NTCREATEX_SHARE_ACCESS_MASK 7 137 138 /* ntcreatex open_disposition field */ 139 #define NTCREATEX_DISP_SUPERSEDE 0 /* supersede existing file (if it exists) */ 140 #define NTCREATEX_DISP_OPEN 1 /* if file exists open it, else fail */ 141 #define NTCREATEX_DISP_CREATE 2 /* if file exists fail, else create it */ 142 #define NTCREATEX_DISP_OPEN_IF 3 /* if file exists open it, else create it */ 143 #define NTCREATEX_DISP_OVERWRITE 4 /* if exists overwrite, else fail */ 144 #define NTCREATEX_DISP_OVERWRITE_IF 5 /* if exists overwrite, else create */ 145 146 /* ntcreatex create_options field */ 147 #define NTCREATEX_OPTIONS_DIRECTORY 0x0001 148 #define NTCREATEX_OPTIONS_WRITE_THROUGH 0x0002 149 #define NTCREATEX_OPTIONS_SEQUENTIAL_ONLY 0x0004 150 #define NTCREATEX_OPTIONS_NO_INTERMEDIATE_BUFFERING 0x0008 151 #define NTCREATEX_OPTIONS_SYNC_ALERT 0x0010 152 #define NTCREATEX_OPTIONS_ASYNC_ALERT 0x0020 153 #define NTCREATEX_OPTIONS_NON_DIRECTORY_FILE 0x0040 154 #define NTCREATEX_OPTIONS_TREE_CONNECTION 0x0080 155 #define NTCREATEX_OPTIONS_COMPLETE_IF_OPLOCKED 0x0100 156 #define NTCREATEX_OPTIONS_NO_EA_KNOWLEDGE 0x0200 157 #define NTCREATEX_OPTIONS_OPEN_FOR_RECOVERY 0x0400 158 #define NTCREATEX_OPTIONS_RANDOM_ACCESS 0x0800 159 #define NTCREATEX_OPTIONS_DELETE_ON_CLOSE 0x1000 160 #define NTCREATEX_OPTIONS_OPEN_BY_FILE_ID 0x2000 161 #define NTCREATEX_OPTIONS_BACKUP_INTENT 0x4000 162 #define NTCREATEX_OPTIONS_NO_COMPRESSION 0x8000 163 /* Must be ignored by the server, per MS-SMB 2.2.8 */ 164 #define NTCREATEX_OPTIONS_OPFILTER 0x00100000 165 #define NTCREATEX_OPTIONS_REPARSE_POINT 0x00200000 166 /* Don't pull this file off tape in a HSM system */ 167 #define NTCREATEX_OPTIONS_NO_RECALL 0x00400000 168 /* Must be ignored by the server, per MS-SMB 2.2.8 */ 169 #define NTCREATEX_OPTIONS_FREE_SPACE_QUERY 0x00800000 170 171 #define NTCREATEX_OPTIONS_MUST_IGNORE_MASK (NTCREATEX_OPTIONS_TREE_CONNECTION | \ 172 NTCREATEX_OPTIONS_OPEN_FOR_RECOVERY | \ 173 NTCREATEX_OPTIONS_FREE_SPACE_QUERY | \ 174 0x000F0000) 175 176 #define NTCREATEX_OPTIONS_NOT_SUPPORTED_MASK (NTCREATEX_OPTIONS_OPEN_BY_FILE_ID) 177 178 #define NTCREATEX_OPTIONS_INVALID_PARAM_MASK (NTCREATEX_OPTIONS_OPFILTER | \ 179 NTCREATEX_OPTIONS_SYNC_ALERT | \ 180 NTCREATEX_OPTIONS_ASYNC_ALERT | \ 181 0xFF000000) 182 183 /* 184 * private_flags field in ntcreatex 185 * This values have different meaning for some ntvfs backends. 186 */ 187 #define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS 0x0001 188 #define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB 0x0002 189 190 191 /* ntcreatex impersonation field */ 192 #define NTCREATEX_IMPERSONATION_ANONYMOUS 0 193 #define NTCREATEX_IMPERSONATION_IDENTIFICATION 1 194 #define NTCREATEX_IMPERSONATION_IMPERSONATION 2 195 #define NTCREATEX_IMPERSONATION_DELEGATION 3 196 197 /* ntcreatex security flags bit field */ 198 #define NTCREATEX_SECURITY_DYNAMIC 1 199 #define NTCREATEX_SECURITY_ALL 2 200 201 /* ntcreatex create_action in reply */ 202 #define NTCREATEX_ACTION_EXISTED 1 203 #define NTCREATEX_ACTION_CREATED 2 204 #define NTCREATEX_ACTION_TRUNCATED 3 205 /* the value 5 can also be returned when you try to create a directory with 206 incorrect parameters - what does it mean? maybe created temporary file? */ 207 #define NTCREATEX_ACTION_UNKNOWN 5 208 209 /* Named pipe write mode flags. Used in writeX calls. */ 210 #define PIPE_RAW_MODE 0x4 211 #define PIPE_START_MESSAGE 0x8 212 213 /* the desired access to use when opening a pipe */ 214 #define DESIRED_ACCESS_PIPE 0x2019f 215 216 /* Flag for NT transact rename call. */ 217 #define RENAME_REPLACE_IF_EXISTS 1 218 219 /* flags for SMBntrename call */ 220 #define RENAME_FLAG_MOVE_CLUSTER_INFORMATION 0x102 /* ???? */ 221 #define RENAME_FLAG_HARD_LINK 0x103 222 #define RENAME_FLAG_RENAME 0x104 223 #define RENAME_FLAG_COPY 0x105 224 225 /* ChangeNotify flags. */ 226 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 227 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 228 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 229 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008 230 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 231 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 232 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040 233 #define FILE_NOTIFY_CHANGE_EA 0x00000080 234 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 235 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 236 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 237 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 238 239 #define FILE_NOTIFY_CHANGE_NAME \ 240 (FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME) 241 242 #define FILE_NOTIFY_CHANGE_ALL \ 243 (FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | \ 244 FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | \ 245 FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_LAST_ACCESS | \ 246 FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_EA | \ 247 FILE_NOTIFY_CHANGE_SECURITY | FILE_NOTIFY_CHANGE_STREAM_NAME | \ 248 FILE_NOTIFY_CHANGE_STREAM_SIZE | FILE_NOTIFY_CHANGE_STREAM_WRITE) 249 250 /* change notify action results */ 251 #define NOTIFY_ACTION_ADDED 1 252 #define NOTIFY_ACTION_REMOVED 2 253 #define NOTIFY_ACTION_MODIFIED 3 254 #define NOTIFY_ACTION_OLD_NAME 4 255 #define NOTIFY_ACTION_NEW_NAME 5 256 #define NOTIFY_ACTION_ADDED_STREAM 6 257 #define NOTIFY_ACTION_REMOVED_STREAM 7 258 #define NOTIFY_ACTION_MODIFIED_STREAM 8 259 260 /* seek modes for smb_seek */ 261 #define SEEK_MODE_START 0 262 #define SEEK_MODE_CURRENT 1 263 #define SEEK_MODE_END 2 264 265 /* where to find the base of the SMB packet proper */ 266 /* REWRITE TODO: smb_base needs to be removed */ 267 #define smb_base(buf) (((const char *)(buf))+4) 268 269 /* we don't allow server strings to be longer than 48 characters as 270 otherwise NT will not honour the announce packets */ 271 #define MAX_SERVER_STRING_LENGTH 48 272 273 /* This was set by JHT in liaison with Jeremy Allison early 1997 274 * History: 275 * Version 4.0 - never made public 276 * Version 4.10 - New to 1.9.16p2, lost in space 1.9.16p3 to 1.9.16p9 277 * - Reappeared in 1.9.16p11 with fixed smbd services 278 * Version 4.20 - To indicate that nmbd and browsing now works better 279 * Version 4.50 - Set at release of samba-2.2.0 by JHT 280 * 281 * Note: In the presence of NT4.X do not set above 4.9 282 * Setting this above 4.9 can have undesired side-effects. 283 * This may change again in Samba-3.0 after further testing. JHT 284 */ 285 286 #define DEFAULT_MAJOR_VERSION 0x04 287 #define DEFAULT_MINOR_VERSION 0x09 288 289 /* Browser Election Values */ 290 #define BROWSER_ELECTION_VERSION 0x010f 291 #define BROWSER_CONSTANT 0xaa55 292 293 /* 294 * Global value meaning that the smb_uid field should be 295 * ingored (in share level security and protocol level == CORE) 296 */ 297 298 #define UID_FIELD_INVALID 0 299 300 /* 301 filesystem attribute bits 302 */ 303 #define FS_ATTR_CASE_SENSITIVE_SEARCH 0x00000001 304 #define FS_ATTR_CASE_PRESERVED_NAMES 0x00000002 305 #define FS_ATTR_UNICODE_ON_DISK 0x00000004 306 #define FS_ATTR_PERSISTANT_ACLS 0x00000008 307 #define FS_ATTR_COMPRESSION 0x00000010 308 #define FS_ATTR_QUOTAS 0x00000020 309 #define FS_ATTR_SPARSE_FILES 0x00000040 310 #define FS_ATTR_REPARSE_POINTS 0x00000080 311 #define FS_ATTR_REMOTE_STORAGE 0x00000100 312 #define FS_ATTR_LFN_SUPPORT 0x00004000 313 #define FS_ATTR_IS_COMPRESSED 0x00008000 314 #define FS_ATTR_OBJECT_IDS 0x00010000 315 #define FS_ATTR_ENCRYPTION 0x00020000 316 #define FS_ATTR_NAMED_STREAMS 0x00040000 317 318 #include "source4/libcli/raw/trans2.h" 319 #include "libcli/raw/interfaces.h" 320 #include "libcli/smb/smb_common.h" 321 322 #endif /* _RAW_SMB_H */ 323