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 2 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, write to the Free Software 24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25*/ 26 27#ifndef _SMB_H 28#define _SMB_H 29 30#if defined(LARGE_SMB_OFF_T) 31#define BUFFER_SIZE (256*1024) 32#else /* no large readwrite possible */ 33#define BUFFER_SIZE (256*1024) /* wklin modified, 11/19/2009 */ 34/* #define BUFFER_SIZE (0xFFFF) */ 35#endif 36 37#define SAFETY_MARGIN 1024 38#define LARGE_WRITEX_HDR_SIZE 65 39 40#define NMB_PORT 137 41#define DGRAM_PORT 138 42#define SMB_PORT1 445 43#define SMB_PORT2 139 44#define SMB_PORTS "445 139" 45 46#define Undefined (-1) 47#define False (0) 48#define True (1) 49#define Auto (2) 50#define Required (3) 51 52#ifndef _BOOL 53typedef int BOOL; 54#define _BOOL /* So we don't typedef BOOL again in vfs.h */ 55#endif 56 57#define SIZEOFWORD 2 58 59#ifndef DEF_CREATE_MASK 60#define DEF_CREATE_MASK (0755) 61#endif 62 63/* string manipulation flags - see clistr.c and srvstr.c */ 64#define STR_TERMINATE 1 65#define STR_UPPER 2 66#define STR_ASCII 4 67#define STR_UNICODE 8 68#define STR_NOALIGN 16 69#define STR_TERMINATE_ASCII 128 70 71/* how long to wait for secondary SMB packets (milli-seconds) */ 72#define SMB_SECONDARY_WAIT (60*1000) 73 74/* Debugging stuff */ 75#include "debug.h" 76 77/* this defines the error codes that receive_smb can put in smb_read_error */ 78#define READ_TIMEOUT 1 79#define READ_EOF 2 80#define READ_ERROR 3 81#define WRITE_ERROR 4 /* This error code can go into the client smb_rw_error. */ 82#define READ_BAD_SIG 5 83#define DO_NOT_DO_TDIS 6 /* cli_close_connection() check for this when smbfs wants to keep tree connected */ 84 85#define DIR_STRUCT_SIZE 43 86 87/* these define the attribute byte as seen by DOS */ 88#define aRONLY (1L<<0) /* 0x01 */ 89#define aHIDDEN (1L<<1) /* 0x02 */ 90#define aSYSTEM (1L<<2) /* 0x04 */ 91#define aVOLID (1L<<3) /* 0x08 */ 92#define aDIR (1L<<4) /* 0x10 */ 93#define aARCH (1L<<5) /* 0x20 */ 94 95/* deny modes */ 96#define DENY_DOS 0 97#define DENY_ALL 1 98#define DENY_WRITE 2 99#define DENY_READ 3 100#define DENY_NONE 4 101#define DENY_FCB 7 102 103/* open modes */ 104#define DOS_OPEN_RDONLY 0 105#define DOS_OPEN_WRONLY 1 106#define DOS_OPEN_RDWR 2 107#define DOS_OPEN_FCB 0xF 108 109/* define shifts and masks for share and open modes. */ 110#define OPEN_MODE_MASK 0xF 111#define SHARE_MODE_SHIFT 4 112#define SHARE_MODE_MASK 0x7 113#define GET_OPEN_MODE(x) ((x) & OPEN_MODE_MASK) 114#define SET_OPEN_MODE(x) ((x) & OPEN_MODE_MASK) 115#define GET_DENY_MODE(x) (((x)>>SHARE_MODE_SHIFT) & SHARE_MODE_MASK) 116#define SET_DENY_MODE(x) (((x) & SHARE_MODE_MASK) <<SHARE_MODE_SHIFT) 117 118/* Sync on open file (not sure if used anymore... ?) */ 119#define FILE_SYNC_OPENMODE (1<<14) 120#define GET_FILE_SYNC_OPENMODE(x) (((x) & FILE_SYNC_OPENMODE) ? True : False) 121 122/* allow delete on open file mode (used by NT SMB's). */ 123#define ALLOW_SHARE_DELETE (1<<15) 124#define GET_ALLOW_SHARE_DELETE(x) (((x) & ALLOW_SHARE_DELETE) ? True : False) 125#define SET_ALLOW_SHARE_DELETE(x) ((x) ? ALLOW_SHARE_DELETE : 0) 126 127/* delete on close flag (used by NT SMB's). */ 128#define DELETE_ON_CLOSE_FLAG (1<<16) 129#define GET_DELETE_ON_CLOSE_FLAG(x) (((x) & DELETE_ON_CLOSE_FLAG) ? True : False) 130#define SET_DELETE_ON_CLOSE_FLAG(x) ((x) ? DELETE_ON_CLOSE_FLAG : 0) 131 132/* open disposition values */ 133#define FILE_EXISTS_FAIL 0 134#define FILE_EXISTS_OPEN 1 135#define FILE_EXISTS_TRUNCATE 2 136 137/* mask for open disposition. */ 138#define FILE_OPEN_MASK 0x3 139 140#define GET_FILE_OPEN_DISPOSITION(x) ((x) & FILE_OPEN_MASK) 141#define SET_FILE_OPEN_DISPOSITION(x) ((x) & FILE_OPEN_MASK) 142 143/* The above can be OR'ed with... */ 144#define FILE_CREATE_IF_NOT_EXIST 0x10 145#define FILE_FAIL_IF_NOT_EXIST 0 146 147#define GET_FILE_CREATE_DISPOSITION(x) ((x) & (FILE_CREATE_IF_NOT_EXIST|FILE_FAIL_IF_NOT_EXIST)) 148 149/* share types */ 150#define STYPE_DISKTREE 0 /* Disk drive */ 151#define STYPE_PRINTQ 1 /* Spooler queue */ 152#define STYPE_DEVICE 2 /* Serial device */ 153#define STYPE_IPC 3 /* Interprocess communication (IPC) */ 154#define STYPE_HIDDEN 0x80000000 /* share is a hidden one (ends with $) */ 155 156 157/* Foxconn, added by MJ., 2010.03.25, for making a shared memory. */ 158#ifdef MAX_USB_ACCESS 159 160#ifndef LINUX26 161#include <linux/spinlock.h> 162#endif 163#include <sys/shm.h> 164#include <sys/stat.h> 165#define MAX_CON_NUM 15 166typedef struct 167{ 168 int sem_id; 169 int num; 170 int ftp_num; 171 int wan_ftp_num; 172}CON_STATISTIC; 173 174//int segment_id; 175/* Foxconn, ended by MJ., 2010.03.25, */ 176 177/* Foxconn, added by MJ., 2010.03.25, for making a Semaphore. */ 178 179#include <sys/ipc.h> 180#include <sys/sem.h> 181#include <sys/types.h> 182#include <sys/wait.h> 183 184/* We must define union semun ourselves for using Semaphore. */ 185union semun { 186 int val; 187 struct semid_ds *buf; 188 unsigned short int *array; 189 struct seminfo *__buf; 190}; 191 192int binary_semaphore_allocation (key_t key, int sem_flags); 193int binary_semaphore_deallocate (int semid); 194int binary_semaphore_initialize (int semid); 195int binary_semaphore_wait (int semid); 196int binary_semaphore_post (int semid); 197 198 199#endif // End of MAX_USB_ACCESS 200/* Foxconn, ended by MJ., 2010.03.25, */ 201 202 203 204#include "doserr.h" 205 206typedef union unid_t { 207 uid_t uid; 208 gid_t gid; 209} unid_t; 210 211/* 212 * SMB UCS2 (16-bit unicode) internal type. 213 */ 214 215typedef uint16 smb_ucs2_t; 216 217/* ucs2 string types. */ 218typedef smb_ucs2_t wpstring[PSTRING_LEN]; 219typedef smb_ucs2_t wfstring[FSTRING_LEN]; 220 221#ifdef WORDS_BIGENDIAN 222#define UCS2_SHIFT 8 223#else 224#define UCS2_SHIFT 0 225#endif 226 227/* turn a 7 bit character into a ucs2 character */ 228#define UCS2_CHAR(c) ((c) << UCS2_SHIFT) 229 230/* pipe string names */ 231#define PIPE_LANMAN "\\PIPE\\LANMAN" 232#define PIPE_SRVSVC "\\PIPE\\srvsvc" 233#define PIPE_SAMR "\\PIPE\\samr" 234#define PIPE_WINREG "\\PIPE\\winreg" 235#define PIPE_WKSSVC "\\PIPE\\wkssvc" 236#define PIPE_NETLOGON "\\PIPE\\NETLOGON" 237#define PIPE_NTLSA "\\PIPE\\ntlsa" 238#define PIPE_NTSVCS "\\PIPE\\ntsvcs" 239#define PIPE_LSASS "\\PIPE\\lsass" 240#define PIPE_LSARPC "\\PIPE\\lsarpc" 241#define PIPE_SPOOLSS "\\PIPE\\spoolss" 242#define PIPE_NETDFS "\\PIPE\\netdfs" 243#define PIPE_ECHO "\\PIPE\\rpcecho" 244#define PIPE_SHUTDOWN "\\PIPE\\initshutdown" 245 246#define PIPE_NETLOGON_PLAIN "\\NETLOGON" 247 248#define PI_LSARPC 0 249#define PI_LSARPC_DS 1 250#define PI_SAMR 2 251#define PI_NETLOGON 3 252#define PI_SRVSVC 4 253#define PI_WKSSVC 5 254#define PI_WINREG 6 255#define PI_SPOOLSS 7 256#define PI_NETDFS 8 257#define PI_ECHO 9 258#define PI_SHUTDOWN 10 259#define PI_MAX_PIPES 11 260 261/* 64 bit time (100usec) since ????? - cifs6.txt, section 3.5, page 30 */ 262typedef struct nttime_info 263{ 264 uint32 low; 265 uint32 high; 266} NTTIME; 267 268 269/* Allowable account control bits */ 270#define ACB_DISABLED 0x0001 /* 1 = User account disabled */ 271#define ACB_HOMDIRREQ 0x0002 /* 1 = Home directory required */ 272#define ACB_PWNOTREQ 0x0004 /* 1 = User password not required */ 273#define ACB_TEMPDUP 0x0008 /* 1 = Temporary duplicate account */ 274#define ACB_NORMAL 0x0010 /* 1 = Normal user account */ 275#define ACB_MNS 0x0020 /* 1 = MNS logon user account */ 276#define ACB_DOMTRUST 0x0040 /* 1 = Interdomain trust account */ 277#define ACB_WSTRUST 0x0080 /* 1 = Workstation trust account */ 278#define ACB_SVRTRUST 0x0100 /* 1 = Server trust account (BDC) */ 279#define ACB_PWNOEXP 0x0200 /* 1 = User password does not expire */ 280#define ACB_AUTOLOCK 0x0400 /* 1 = Account auto locked */ 281 282#define MAX_HOURS_LEN 32 283 284/* 285 * window during which we must talk to the PDC to avoid 286 * sam sync delays; expressed in seconds (15 minutes is the 287 * default period for SAM replication under Windows NT 4.0 288 */ 289#define SAM_SYNC_WINDOW 900 290 291 292#ifndef MAXSUBAUTHS 293#define MAXSUBAUTHS 15 /* max sub authorities in a SID */ 294#endif 295 296#define SID_MAX_SIZE ((size_t)(8+(MAXSUBAUTHS*4))) 297 298/* SID Types */ 299enum SID_NAME_USE 300{ 301 SID_NAME_USE_NONE = 0, 302 SID_NAME_USER = 1, /* user */ 303 SID_NAME_DOM_GRP, /* domain group */ 304 SID_NAME_DOMAIN, /* domain sid */ 305 SID_NAME_ALIAS, /* local group */ 306 SID_NAME_WKN_GRP, /* well-known group */ 307 SID_NAME_DELETED, /* deleted account: needed for c2 rating */ 308 SID_NAME_INVALID, /* invalid account */ 309 SID_NAME_UNKNOWN, /* unknown sid type */ 310 SID_NAME_COMPUTER /* sid for a computer */ 311}; 312 313/** 314 * @brief Security Identifier 315 * 316 * @sa http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/accctrl_38yn.asp 317 **/ 318typedef struct sid_info 319{ 320 uint8 sid_rev_num; /**< SID revision number */ 321 uint8 num_auths; /**< Number of sub-authorities */ 322 uint8 id_auth[6]; /**< Identifier Authority */ 323 /* 324 * Pointer to sub-authorities. 325 * 326 * @note The values in these uint32's are in *native* byteorder, not 327 * neccessarily little-endian...... JRA. 328 */ 329 uint32 sub_auths[MAXSUBAUTHS]; 330 331} DOM_SID; 332 333typedef struct sid_list { 334 uint32 count; 335 DOM_SID *list; 336} SID_LIST; 337 338/* 339 * The complete list of SIDS belonging to this user. 340 * Created when a vuid is registered. 341 * The definition of the user_sids array is as follows : 342 * 343 * token->user_sids[0] = primary user SID. 344 * token->user_sids[1] = primary group SID. 345 * token->user_sids[2..num_sids] = supplementary group SIDS. 346 */ 347 348#define PRIMARY_USER_SID_INDEX 0 349#define PRIMARY_GROUP_SID_INDEX 1 350 351typedef struct _nt_user_token { 352 size_t num_sids; 353 DOM_SID *user_sids; 354 SE_PRIV privileges; 355} NT_USER_TOKEN; 356 357/*** query a local group, get a list of these: shows who is in that group ***/ 358 359/* local group member info */ 360typedef struct local_grp_member_info 361{ 362 DOM_SID sid ; /* matches with name */ 363 uint8 sid_use; /* usr=1 grp=2 dom=3 alias=4 wkng=5 del=6 inv=7 unk=8 */ 364 fstring name ; /* matches with sid: must be of the form "DOMAIN\account" */ 365 366} LOCAL_GRP_MEMBER; 367 368/* enumerate these to get list of local groups */ 369 370/* local group info */ 371typedef struct local_grp_info 372{ 373 fstring name; 374 fstring comment; 375 376} LOCAL_GRP; 377 378/*** enumerate these to get list of domain groups ***/ 379 380/* domain group member info */ 381typedef struct domain_grp_info 382{ 383 fstring name; 384 fstring comment; 385 uint32 rid; /* group rid */ 386 uint8 attr; /* attributes forced to be set to 0x7: SE_GROUP_xxx */ 387 388} DOMAIN_GRP; 389 390/*** query a domain group, get a list of these: shows who is in that group ***/ 391 392/* domain group info */ 393typedef struct domain_grp_member_info 394{ 395 fstring name; 396 uint8 attr; /* attributes forced to be set to 0x7: SE_GROUP_xxx */ 397 398} DOMAIN_GRP_MEMBER; 399 400/* 32 bit time (sec) since 01jan1970 - cifs6.txt, section 3.5, page 30 */ 401typedef struct time_info 402{ 403 uint32 time; 404} UTIME; 405 406/* Structure used when SMBwritebmpx is active */ 407typedef struct 408{ 409 size_t wr_total_written; /* So we know when to discard this */ 410 int32 wr_timeout; 411 int32 wr_errclass; 412 int32 wr_error; /* Cached errors */ 413 BOOL wr_mode; /* write through mode) */ 414 BOOL wr_discard; /* discard all further data */ 415} write_bmpx_struct; 416 417typedef struct write_cache 418{ 419 SMB_OFF_T file_size; 420 SMB_OFF_T offset; 421 size_t alloc_size; 422 size_t data_size; 423 char *data; 424} write_cache; 425 426typedef struct 427{ 428 smb_ucs2_t *origname; 429 smb_ucs2_t *filename; 430 SMB_STRUCT_STAT *statinfo; 431} smb_filename; 432 433#include "fake_file.h" 434 435typedef struct files_struct { 436 struct files_struct *next, *prev; 437 int fnum; 438 struct connection_struct *conn; 439 int fd; 440 uint16 rap_print_jobid; 441 SMB_DEV_T dev; 442 SMB_INO_T inode; 443 BOOL delete_on_close; 444 SMB_OFF_T pos; 445 SMB_BIG_UINT size; 446 SMB_BIG_UINT initial_allocation_size; /* Faked up initial allocation on disk. */ 447 SMB_BIG_UINT position_information; 448 mode_t mode; 449 uint16 file_pid; 450 uint16 vuid; 451 write_bmpx_struct *wbmpx_ptr; 452 write_cache *wcp; 453 struct timeval open_time; 454 int share_mode; 455 uint32 desired_access; 456 BOOL pending_modtime_owner; 457 time_t pending_modtime; 458 time_t last_write_time; 459 int oplock_type; 460 int sent_oplock_break; 461 unsigned long file_id; 462 BOOL can_lock; 463 BOOL can_read; 464 BOOL can_write; 465 BOOL print_file; 466 BOOL modified; 467 BOOL is_directory; 468 BOOL is_stat; 469 BOOL directory_delete_on_close; 470 char *fsp_name; 471 FAKE_FILE_HANDLE *fake_file_handle; 472} files_struct; 473 474#include "ntquotas.h" 475#include "sysquotas.h" 476 477/* used to hold an arbitrary blob of data */ 478typedef struct data_blob 479{ 480 uint8 *data; 481 size_t length; 482 void (*free)(struct data_blob *data_blob); 483} DATA_BLOB; 484 485/* 486 * Structure used to keep directory state information around. 487 * Used in NT change-notify code. 488 */ 489 490typedef struct 491{ 492 time_t modify_time; 493 time_t status_time; 494} dir_status_struct; 495 496struct vuid_cache_entry 497{ 498 uint16 vuid; 499 BOOL read_only; 500 BOOL admin_user; 501}; 502 503struct vuid_cache 504{ 505 unsigned int entries; 506 struct vuid_cache_entry array[VUID_CACHE_SIZE]; 507}; 508 509typedef struct 510{ 511 char *name; 512 BOOL is_wild; 513} name_compare_entry; 514 515/* Include VFS stuff */ 516 517#include "smb_acls.h" 518#include "vfs.h" 519 520struct dptr_struct; 521 522typedef struct connection_struct 523{ 524 struct connection_struct *next, *prev; 525 TALLOC_CTX *mem_ctx; 526 unsigned cnum; /* an index passed over the wire */ 527 int service; 528 BOOL force_user; 529 BOOL force_group; 530 struct vuid_cache vuid_cache; 531 struct dptr_struct *dirptr; 532 BOOL printer; 533 BOOL ipc; 534 BOOL read_only; /* Attributes for the current user of the share. */ 535 BOOL admin_user; /* Attributes for the current user of the share. */ 536 char *dirpath; 537 char *connectpath; 538 char *origpath; 539 540 struct vfs_ops vfs; /* Filesystem operations */ 541 struct vfs_ops vfs_opaque; /* OPAQUE Filesystem operations */ 542 struct vfs_handle_struct *vfs_handles; /* for the new plugins */ 543 544 char *user; /* name of user who *opened* this connection */ 545 uid_t uid; /* uid of user who *opened* this connection */ 546 gid_t gid; /* gid of user who *opened* this connection */ 547 char client_address[18]; /* String version of client IP address. */ 548 549 uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */ 550 551 /* following groups stuff added by ih */ 552 553 /* This groups info is valid for the user that *opened* the connection */ 554 int ngroups; 555 gid_t *groups; 556 NT_USER_TOKEN *nt_user_token; 557 558 time_t lastused; 559 BOOL used; 560 int num_files_open; 561 562 BOOL case_sensitive; 563 BOOL case_preserve; 564 BOOL short_case_preserve; 565 566 name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */ 567 name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */ 568 name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */ 569 570} connection_struct; 571 572struct current_user 573{ 574 connection_struct *conn; 575 uint16 vuid; 576 uid_t uid; 577 gid_t gid; 578 int ngroups; 579 gid_t *groups; 580 NT_USER_TOKEN *nt_user_token; 581}; 582 583/* Defines for the sent_oplock_break field above. */ 584#define NO_BREAK_SENT 0 585#define EXCLUSIVE_BREAK_SENT 1 586#define LEVEL_II_BREAK_SENT 2 587 588typedef struct { 589 fstring smb_name; /* user name from the client */ 590 fstring unix_name; /* unix user name of a validated user */ 591 fstring full_name; /* to store full name (such as "Joe Bloggs") from gecos field of password file */ 592 fstring domain; /* domain that the client specified */ 593} userdom_struct; 594 595/* Extra fields above "LPQ_PRINTING" are used to map extra NT status codes. */ 596 597enum {LPQ_QUEUED=0,LPQ_PAUSED,LPQ_SPOOLING,LPQ_PRINTING,LPQ_ERROR,LPQ_DELETING, 598 LPQ_OFFLINE,LPQ_PAPEROUT,LPQ_PRINTED,LPQ_DELETED,LPQ_BLOCKED,LPQ_USER_INTERVENTION}; 599 600typedef struct _print_queue_struct 601{ 602 int job; /* normally the UNIX jobid -- see note in 603 printing.c:traverse_fn_delete() */ 604 int size; 605 int page_count; 606 int status; 607 int priority; 608 time_t time; 609 fstring fs_user; 610 fstring fs_file; 611} print_queue_struct; 612 613enum {LPSTAT_OK, LPSTAT_STOPPED, LPSTAT_ERROR}; 614 615typedef struct 616{ 617 fstring message; 618 int qcount; 619 int status; 620} print_status_struct; 621 622/* used for server information: client, nameserv and ipc */ 623struct server_info_struct 624{ 625 fstring name; 626 uint32 type; 627 fstring comment; 628 fstring domain; /* used ONLY in ipc.c NOT namework.c */ 629 BOOL server_added; /* used ONLY in ipc.c NOT namework.c */ 630}; 631 632 633/* used for network interfaces */ 634struct interface 635{ 636 struct interface *next, *prev; 637 struct in_addr ip; 638 struct in_addr bcast; 639 struct in_addr nmask; 640}; 641 642/* struct used by share mode violation error processing */ 643typedef struct { 644 pid_t pid; 645 uint16 mid; 646 struct timeval time; 647 SMB_DEV_T dev; 648 SMB_INO_T inode; 649 uint16 port; 650} deferred_open_entry; 651 652/* Internal message queue for deferred opens. */ 653struct pending_message_list { 654 struct pending_message_list *next, *prev; 655 struct timeval msg_time; /* The timeout time */ 656 DATA_BLOB buf; 657 DATA_BLOB private_data; 658}; 659 660/* struct returned by get_share_modes */ 661typedef struct { 662 pid_t pid; 663 uint16 op_port; 664 uint16 op_type; 665 int share_mode; 666 uint32 desired_access; 667 struct timeval time; 668 SMB_DEV_T dev; 669 SMB_INO_T inode; 670 unsigned long share_file_id; 671} share_mode_entry; 672 673 674#define SHAREMODE_FN_CAST() \ 675 void (*)(share_mode_entry *, char*) 676 677#define SHAREMODE_FN(fn) \ 678 void (*fn)(share_mode_entry *, char*) 679 680#define NT_HASH_LEN 16 681#define LM_HASH_LEN 16 682 683/* Password history contants. */ 684#define PW_HISTORY_SALT_LEN 16 685#define SALTED_MD5_HASH_LEN 16 686#define PW_HISTORY_ENTRY_LEN (PW_HISTORY_SALT_LEN+SALTED_MD5_HASH_LEN) 687 688/* 689 * Flags for account policy. 690 */ 691#define AP_MIN_PASSWORD_LEN 1 692#define AP_PASSWORD_HISTORY 2 693#define AP_USER_MUST_LOGON_TO_CHG_PASS 3 694#define AP_MAX_PASSWORD_AGE 4 695#define AP_MIN_PASSWORD_AGE 5 696#define AP_LOCK_ACCOUNT_DURATION 6 697#define AP_RESET_COUNT_TIME 7 698#define AP_BAD_ATTEMPT_LOCKOUT 8 699#define AP_TIME_TO_LOGOUT 9 700#define AP_REFUSE_MACHINE_PW_CHANGE 10 701 702/* 703 * Flags for local user manipulation. 704 */ 705 706#define LOCAL_ADD_USER 0x1 707#define LOCAL_DELETE_USER 0x2 708#define LOCAL_DISABLE_USER 0x4 709#define LOCAL_ENABLE_USER 0x8 710#define LOCAL_TRUST_ACCOUNT 0x10 711#define LOCAL_SET_NO_PASSWORD 0x20 712#define LOCAL_SET_PASSWORD 0x40 713#define LOCAL_SET_LDAP_ADMIN_PW 0x80 714#define LOCAL_INTERDOM_ACCOUNT 0x100 715#define LOCAL_AM_ROOT 0x200 /* Act as root */ 716 717/* key and data in the connections database - used in smbstatus and smbd */ 718struct connections_key { 719 pid_t pid; 720 int cnum; 721 fstring name; 722}; 723 724struct connections_data { 725 int magic; 726 pid_t pid; 727 int cnum; 728 uid_t uid; 729 gid_t gid; 730 char name[24]; 731 char addr[24]; 732 char machine[FSTRING_LEN]; 733 time_t start; 734 uint32 bcast_msg_flags; 735}; 736 737 738/* key and data records in the tdb locking database */ 739struct locking_key { 740 SMB_DEV_T dev; 741 SMB_INO_T inode; 742}; 743 744/* the following are used by loadparm for option lists */ 745typedef enum { 746 P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST, 747 P_STRING,P_USTRING,P_GSTRING,P_UGSTRING,P_ENUM,P_SEP 748} parm_type; 749 750typedef enum { 751 P_LOCAL,P_GLOBAL,P_SEPARATOR,P_NONE 752} parm_class; 753 754/* passed to br lock code */ 755enum brl_type {READ_LOCK, WRITE_LOCK, PENDING_LOCK}; 756 757struct enum_list { 758 int value; 759 const char *name; 760}; 761 762#define BRLOCK_FN_CAST() \ 763 void (*)(SMB_DEV_T dev, SMB_INO_T ino, int pid, \ 764 enum brl_type lock_type, \ 765 br_off start, br_off size) 766#define BRLOCK_FN(fn) \ 767 void (*fn)(SMB_DEV_T dev, SMB_INO_T ino, int pid, \ 768 enum brl_type lock_type, \ 769 br_off start, br_off size) 770struct parm_struct 771{ 772 const char *label; 773 parm_type type; 774 parm_class class; 775 void *ptr; 776 BOOL (*special)(int snum, const char *, char **); 777 const struct enum_list *enum_list; 778 unsigned flags; 779 union { 780 BOOL bvalue; 781 int ivalue; 782 char *svalue; 783 char cvalue; 784 char **lvalue; 785 } def; 786}; 787 788struct bitmap { 789 uint32 *b; 790 unsigned int n; 791}; 792 793/* The following flags are used in SWAT */ 794#define FLAG_BASIC 0x0001 /* Display only in BASIC view */ 795#define FLAG_SHARE 0x0002 /* file sharing options */ 796#define FLAG_PRINT 0x0004 /* printing options */ 797#define FLAG_GLOBAL 0x0008 /* local options that should be globally settable in SWAT */ 798#define FLAG_WIZARD 0x0010 /* Parameters that the wizard will operate on */ 799#define FLAG_ADVANCED 0x0020 /* Parameters that will be visible in advanced view */ 800#define FLAG_DEVELOPER 0x0040 /* No longer used */ 801#define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */ 802#define FLAG_HIDE 0x2000 /* options that should be hidden in SWAT */ 803#define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */ 804 805#ifndef LOCKING_VERSION 806#define LOCKING_VERSION 4 807#endif /* LOCKING_VERSION */ 808 809 810/* the basic packet size, assuming no words or bytes */ 811#define smb_size 39 812 813/* offsets into message for common items */ 814#define smb_com 8 815#define smb_rcls 9 816#define smb_reh 10 817#define smb_err 11 818#define smb_flg 13 819#define smb_flg2 14 820#define smb_pidhigh 16 821#define smb_ss_field 18 822#define smb_tid 28 823#define smb_pid 30 824#define smb_uid 32 825#define smb_mid 34 826#define smb_wct 36 827#define smb_vwv 37 828#define smb_vwv0 37 829#define smb_vwv1 39 830#define smb_vwv2 41 831#define smb_vwv3 43 832#define smb_vwv4 45 833#define smb_vwv5 47 834#define smb_vwv6 49 835#define smb_vwv7 51 836#define smb_vwv8 53 837#define smb_vwv9 55 838#define smb_vwv10 57 839#define smb_vwv11 59 840#define smb_vwv12 61 841#define smb_vwv13 63 842#define smb_vwv14 65 843#define smb_vwv15 67 844#define smb_vwv16 69 845#define smb_vwv17 71 846 847/* flag defines. CIFS spec 3.1.1 */ 848#define FLAG_SUPPORT_LOCKREAD 0x01 849#define FLAG_CLIENT_BUF_AVAIL 0x02 850#define FLAG_RESERVED 0x04 851#define FLAG_CASELESS_PATHNAMES 0x08 852#define FLAG_CANONICAL_PATHNAMES 0x10 853#define FLAG_REQUEST_OPLOCK 0x20 854#define FLAG_REQUEST_BATCH_OPLOCK 0x40 855#define FLAG_REPLY 0x80 856 857/* the complete */ 858#define SMBmkdir 0x00 /* create directory */ 859#define SMBrmdir 0x01 /* delete directory */ 860#define SMBopen 0x02 /* open file */ 861#define SMBcreate 0x03 /* create file */ 862#define SMBclose 0x04 /* close file */ 863#define SMBflush 0x05 /* flush file */ 864#define SMBunlink 0x06 /* delete file */ 865#define SMBmv 0x07 /* rename file */ 866#define SMBgetatr 0x08 /* get file attributes */ 867#define SMBsetatr 0x09 /* set file attributes */ 868#define SMBread 0x0A /* read from file */ 869#define SMBwrite 0x0B /* write to file */ 870#define SMBlock 0x0C /* lock byte range */ 871#define SMBunlock 0x0D /* unlock byte range */ 872#define SMBctemp 0x0E /* create temporary file */ 873#define SMBmknew 0x0F /* make new file */ 874#define SMBchkpth 0x10 /* check directory path */ 875#define SMBexit 0x11 /* process exit */ 876#define SMBlseek 0x12 /* seek */ 877#define SMBtcon 0x70 /* tree connect */ 878#define SMBtconX 0x75 /* tree connect and X*/ 879#define SMBtdis 0x71 /* tree disconnect */ 880#define SMBnegprot 0x72 /* negotiate protocol */ 881#define SMBdskattr 0x80 /* get disk attributes */ 882#define SMBsearch 0x81 /* search directory */ 883#define SMBsplopen 0xC0 /* open print spool file */ 884#define SMBsplwr 0xC1 /* write to print spool file */ 885#define SMBsplclose 0xC2 /* close print spool file */ 886#define SMBsplretq 0xC3 /* return print queue */ 887#define SMBsends 0xD0 /* send single block message */ 888#define SMBsendb 0xD1 /* send broadcast message */ 889#define SMBfwdname 0xD2 /* forward user name */ 890#define SMBcancelf 0xD3 /* cancel forward */ 891#define SMBgetmac 0xD4 /* get machine name */ 892#define SMBsendstrt 0xD5 /* send start of multi-block message */ 893#define SMBsendend 0xD6 /* send end of multi-block message */ 894#define SMBsendtxt 0xD7 /* send text of multi-block message */ 895 896/* Core+ protocol */ 897#define SMBlockread 0x13 /* Lock a range and read */ 898#define SMBwriteunlock 0x14 /* Unlock a range then write */ 899#define SMBreadbraw 0x1a /* read a block of data with no smb header */ 900#define SMBwritebraw 0x1d /* write a block of data with no smb header */ 901#define SMBwritec 0x20 /* secondary write request */ 902#define SMBwriteclose 0x2c /* write a file then close it */ 903 904/* dos extended protocol */ 905#define SMBreadBraw 0x1A /* read block raw */ 906#define SMBreadBmpx 0x1B /* read block multiplexed */ 907#define SMBreadBs 0x1C /* read block (secondary response) */ 908#define SMBwriteBraw 0x1D /* write block raw */ 909#define SMBwriteBmpx 0x1E /* write block multiplexed */ 910#define SMBwriteBs 0x1F /* write block (secondary request) */ 911#define SMBwriteC 0x20 /* write complete response */ 912#define SMBsetattrE 0x22 /* set file attributes expanded */ 913#define SMBgetattrE 0x23 /* get file attributes expanded */ 914#define SMBlockingX 0x24 /* lock/unlock byte ranges and X */ 915#define SMBtrans 0x25 /* transaction - name, bytes in/out */ 916#define SMBtranss 0x26 /* transaction (secondary request/response) */ 917#define SMBioctl 0x27 /* IOCTL */ 918#define SMBioctls 0x28 /* IOCTL (secondary request/response) */ 919#define SMBcopy 0x29 /* copy */ 920#define SMBmove 0x2A /* move */ 921#define SMBecho 0x2B /* echo */ 922#define SMBopenX 0x2D /* open and X */ 923#define SMBreadX 0x2E /* read and X */ 924#define SMBwriteX 0x2F /* write and X */ 925#define SMBsesssetupX 0x73 /* Session Set Up & X (including User Logon) */ 926#define SMBffirst 0x82 /* find first */ 927#define SMBfunique 0x83 /* find unique */ 928#define SMBfclose 0x84 /* find close */ 929#define SMBkeepalive 0x85 /* keepalive */ 930#define SMBinvalid 0xFE /* invalid command */ 931 932/* Extended 2.0 protocol */ 933#define SMBtrans2 0x32 /* TRANS2 protocol set */ 934#define SMBtranss2 0x33 /* TRANS2 protocol set, secondary command */ 935#define SMBfindclose 0x34 /* Terminate a TRANSACT2_FINDFIRST */ 936#define SMBfindnclose 0x35 /* Terminate a TRANSACT2_FINDNOTIFYFIRST */ 937#define SMBulogoffX 0x74 /* user logoff */ 938 939/* NT SMB extensions. */ 940#define SMBnttrans 0xA0 /* NT transact */ 941#define SMBnttranss 0xA1 /* NT transact secondary */ 942#define SMBntcreateX 0xA2 /* NT create and X */ 943#define SMBntcancel 0xA4 /* NT cancel */ 944#define SMBntrename 0xA5 /* NT rename */ 945 946/* These are the trans subcommands */ 947#define TRANSACT_SETNAMEDPIPEHANDLESTATE 0x01 948#define TRANSACT_DCERPCCMD 0x26 949#define TRANSACT_WAITNAMEDPIPEHANDLESTATE 0x53 950 951/* These are the TRANS2 sub commands */ 952#define TRANSACT2_OPEN 0x00 953#define TRANSACT2_FINDFIRST 0x01 954#define TRANSACT2_FINDNEXT 0x02 955#define TRANSACT2_QFSINFO 0x03 956#define TRANSACT2_SETFSINFO 0x04 957#define TRANSACT2_QPATHINFO 0x05 958#define TRANSACT2_SETPATHINFO 0x06 959#define TRANSACT2_QFILEINFO 0x07 960#define TRANSACT2_SETFILEINFO 0x08 961#define TRANSACT2_FSCTL 0x09 962#define TRANSACT2_IOCTL 0x0A 963#define TRANSACT2_FINDNOTIFYFIRST 0x0B 964#define TRANSACT2_FINDNOTIFYNEXT 0x0C 965#define TRANSACT2_MKDIR 0x0D 966#define TRANSACT2_SESSION_SETUP 0x0E 967#define TRANSACT2_GET_DFS_REFERRAL 0x10 968#define TRANSACT2_REPORT_DFS_INCONSISTANCY 0x11 969 970/* These are the NT transact sub commands. */ 971#define NT_TRANSACT_CREATE 1 972#define NT_TRANSACT_IOCTL 2 973#define NT_TRANSACT_SET_SECURITY_DESC 3 974#define NT_TRANSACT_NOTIFY_CHANGE 4 975#define NT_TRANSACT_RENAME 5 976#define NT_TRANSACT_QUERY_SECURITY_DESC 6 977#define NT_TRANSACT_GET_USER_QUOTA 7 978#define NT_TRANSACT_SET_USER_QUOTA 8 979 980/* These are the NT transact_get_user_quota sub commands */ 981#define TRANSACT_GET_USER_QUOTA_LIST_CONTINUE 0x0000 982#define TRANSACT_GET_USER_QUOTA_LIST_START 0x0100 983#define TRANSACT_GET_USER_QUOTA_FOR_SID 0x0101 984 985/* Relevant IOCTL codes */ 986#define IOCTL_QUERY_JOB_INFO 0x530060 987 988/* these are the trans2 sub fields for primary requests */ 989#define smb_tpscnt smb_vwv0 990#define smb_tdscnt smb_vwv1 991#define smb_mprcnt smb_vwv2 992#define smb_mdrcnt smb_vwv3 993#define smb_msrcnt smb_vwv4 994#define smb_flags smb_vwv5 995#define smb_timeout smb_vwv6 996#define smb_pscnt smb_vwv9 997#define smb_psoff smb_vwv10 998#define smb_dscnt smb_vwv11 999#define smb_dsoff smb_vwv12 1000#define smb_suwcnt smb_vwv13 1001#define smb_setup smb_vwv14 1002#define smb_setup0 smb_setup 1003#define smb_setup1 (smb_setup+2) 1004#define smb_setup2 (smb_setup+4) 1005 1006/* these are for the secondary requests */ 1007#define smb_spscnt smb_vwv2 1008#define smb_spsoff smb_vwv3 1009#define smb_spsdisp smb_vwv4 1010#define smb_sdscnt smb_vwv5 1011#define smb_sdsoff smb_vwv6 1012#define smb_sdsdisp smb_vwv7 1013#define smb_sfid smb_vwv8 1014 1015/* and these for responses */ 1016#define smb_tprcnt smb_vwv0 1017#define smb_tdrcnt smb_vwv1 1018#define smb_prcnt smb_vwv3 1019#define smb_proff smb_vwv4 1020#define smb_prdisp smb_vwv5 1021#define smb_drcnt smb_vwv6 1022#define smb_droff smb_vwv7 1023#define smb_drdisp smb_vwv8 1024 1025/* these are for the NT trans primary request. */ 1026#define smb_nt_MaxSetupCount smb_vwv0 1027#define smb_nt_Flags (smb_vwv0 + 1) 1028#define smb_nt_TotalParameterCount (smb_vwv0 + 3) 1029#define smb_nt_TotalDataCount (smb_vwv0 + 7) 1030#define smb_nt_MaxParameterCount (smb_vwv0 + 11) 1031#define smb_nt_MaxDataCount (smb_vwv0 + 15) 1032#define smb_nt_ParameterCount (smb_vwv0 + 19) 1033#define smb_nt_ParameterOffset (smb_vwv0 + 23) 1034#define smb_nt_DataCount (smb_vwv0 + 27) 1035#define smb_nt_DataOffset (smb_vwv0 + 31) 1036#define smb_nt_SetupCount (smb_vwv0 + 35) 1037#define smb_nt_Function (smb_vwv0 + 36) 1038#define smb_nt_SetupStart (smb_vwv0 + 38) 1039 1040/* these are for the NT trans secondary request. */ 1041#define smb_nts_TotalParameterCount (smb_vwv0 + 3) 1042#define smb_nts_TotalDataCount (smb_vwv0 + 7) 1043#define smb_nts_ParameterCount (smb_vwv0 + 11) 1044#define smb_nts_ParameterOffset (smb_vwv0 + 15) 1045#define smb_nts_ParameterDisplacement (smb_vwv0 + 19) 1046#define smb_nts_DataCount (smb_vwv0 + 23) 1047#define smb_nts_DataOffset (smb_vwv0 + 27) 1048#define smb_nts_DataDisplacement (smb_vwv0 + 31) 1049 1050/* these are for the NT trans reply. */ 1051#define smb_ntr_TotalParameterCount (smb_vwv0 + 3) 1052#define smb_ntr_TotalDataCount (smb_vwv0 + 7) 1053#define smb_ntr_ParameterCount (smb_vwv0 + 11) 1054#define smb_ntr_ParameterOffset (smb_vwv0 + 15) 1055#define smb_ntr_ParameterDisplacement (smb_vwv0 + 19) 1056#define smb_ntr_DataCount (smb_vwv0 + 23) 1057#define smb_ntr_DataOffset (smb_vwv0 + 27) 1058#define smb_ntr_DataDisplacement (smb_vwv0 + 31) 1059 1060/* these are for the NT create_and_X */ 1061#define smb_ntcreate_NameLength (smb_vwv0 + 5) 1062#define smb_ntcreate_Flags (smb_vwv0 + 7) 1063#define smb_ntcreate_RootDirectoryFid (smb_vwv0 + 11) 1064#define smb_ntcreate_DesiredAccess (smb_vwv0 + 15) 1065#define smb_ntcreate_AllocationSize (smb_vwv0 + 19) 1066#define smb_ntcreate_FileAttributes (smb_vwv0 + 27) 1067#define smb_ntcreate_ShareAccess (smb_vwv0 + 31) 1068#define smb_ntcreate_CreateDisposition (smb_vwv0 + 35) 1069#define smb_ntcreate_CreateOptions (smb_vwv0 + 39) 1070#define smb_ntcreate_ImpersonationLevel (smb_vwv0 + 43) 1071#define smb_ntcreate_SecurityFlags (smb_vwv0 + 47) 1072 1073/* this is used on a TConX. I'm not sure the name is very helpful though */ 1074#define SMB_SUPPORT_SEARCH_BITS 0x0001 1075#define SMB_SHARE_IN_DFS 0x0002 1076 1077/* Named pipe write mode flags. Used in writeX calls. */ 1078#define PIPE_RAW_MODE 0x4 1079#define PIPE_START_MESSAGE 0x8 1080 1081/* File Specific access rights */ 1082#define FILE_READ_DATA 0x00000001 1083#define FILE_WRITE_DATA 0x00000002 1084#define FILE_APPEND_DATA 0x00000004 1085#define FILE_READ_EA 0x00000008 /* File and directory */ 1086#define FILE_WRITE_EA 0x00000010 /* File and directory */ 1087#define FILE_EXECUTE 0x00000020 1088#define FILE_DELETE_CHILD 0x00000040 1089#define FILE_READ_ATTRIBUTES 0x00000080 1090#define FILE_WRITE_ATTRIBUTES 0x00000100 1091 1092#define FILE_ALL_ACCESS 0x000001FF 1093 1094/* Directory specific access rights */ 1095#define FILE_LIST_DIRECTORY 0x00000001 1096#define FILE_ADD_FILE 0x00000002 1097#define FILE_ADD_SUBDIRECTORY 0x00000004 1098#define FILE_TRAVERSE 0x00000020 1099#define FILE_DELETE_CHILD 0x00000040 1100 1101/* the desired access to use when opening a pipe */ 1102#define DESIRED_ACCESS_PIPE 0x2019f 1103 1104/* Generic access masks & rights. */ 1105#define DELETE_ACCESS (1L<<16) /* 0x00010000 */ 1106#define READ_CONTROL_ACCESS (1L<<17) /* 0x00020000 */ 1107#define WRITE_DAC_ACCESS (1L<<18) /* 0x00040000 */ 1108#define WRITE_OWNER_ACCESS (1L<<19) /* 0x00080000 */ 1109#define SYNCHRONIZE_ACCESS (1L<<20) /* 0x00100000 */ 1110 1111#define SYSTEM_SECURITY_ACCESS (1L<<24) /* 0x01000000 */ 1112#define MAXIMUM_ALLOWED_ACCESS (1L<<25) /* 0x02000000 */ 1113#define GENERIC_ALL_ACCESS (1<<28) /* 0x10000000 */ 1114#define GENERIC_EXECUTE_ACCESS (1<<29) /* 0x20000000 */ 1115#define GENERIC_WRITE_ACCESS (1<<30) /* 0x40000000 */ 1116#define GENERIC_READ_ACCESS (((unsigned)1)<<31) /* 0x80000000 */ 1117 1118/* Mapping of generic access rights for files to specific rights. */ 1119 1120#define FILE_GENERIC_ALL (STANDARD_RIGHTS_REQUIRED_ACCESS| SYNCHRONIZE_ACCESS|FILE_ALL_ACCESS) 1121 1122#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ_ACCESS|FILE_READ_DATA|FILE_READ_ATTRIBUTES|\ 1123 FILE_READ_EA|SYNCHRONIZE_ACCESS) 1124 1125#define FILE_GENERIC_WRITE (STD_RIGHT_READ_CONTROL_ACCESS|FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|\ 1126 FILE_WRITE_EA|FILE_APPEND_DATA|SYNCHRONIZE_ACCESS) 1127 1128#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE_ACCESS|\ 1129 FILE_EXECUTE|SYNCHRONIZE_ACCESS) 1130 1131/* Mapping of access rights to UNIX perms. */ 1132#define UNIX_ACCESS_RWX FILE_GENERIC_ALL 1133#define UNIX_ACCESS_R FILE_GENERIC_READ 1134#define UNIX_ACCESS_W FILE_GENERIC_WRITE 1135#define UNIX_ACCESS_X FILE_GENERIC_EXECUTE 1136 1137#if 0 1138/* 1139 * This is the old mapping we used to use. To get W2KSP2 profiles 1140 * working we need to map to the canonical file perms. 1141 */ 1142#define UNIX_ACCESS_RWX (UNIX_ACCESS_R|UNIX_ACCESS_W|UNIX_ACCESS_X) 1143#define UNIX_ACCESS_R (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\ 1144 FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_READ_DATA) 1145#define UNIX_ACCESS_W (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\ 1146 FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|\ 1147 FILE_APPEND_DATA|FILE_WRITE_DATA) 1148#define UNIX_ACCESS_X (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\ 1149 FILE_EXECUTE|FILE_READ_ATTRIBUTES) 1150#endif 1151 1152#define UNIX_ACCESS_NONE (WRITE_OWNER_ACCESS) 1153 1154/* Flags field. */ 1155#define REQUEST_OPLOCK 2 1156#define REQUEST_BATCH_OPLOCK 4 1157#define OPEN_DIRECTORY 8 1158#define EXTENDED_RESPONSE_REQUIRED 0x10 1159 1160/* ShareAccess field. */ 1161#define FILE_SHARE_NONE 0 /* Cannot be used in bitmask. */ 1162#define FILE_SHARE_READ 1 1163#define FILE_SHARE_WRITE 2 1164#define FILE_SHARE_DELETE 4 1165 1166/* FileAttributesField */ 1167#define FILE_ATTRIBUTE_READONLY 0x001L 1168#define FILE_ATTRIBUTE_HIDDEN 0x002L 1169#define FILE_ATTRIBUTE_SYSTEM 0x004L 1170#define FILE_ATTRIBUTE_DIRECTORY 0x010L 1171#define FILE_ATTRIBUTE_ARCHIVE 0x020L 1172#define FILE_ATTRIBUTE_NORMAL 0x080L 1173#define FILE_ATTRIBUTE_TEMPORARY 0x100L 1174#define FILE_ATTRIBUTE_SPARSE 0x200L 1175#define FILE_ATTRIBUTE_REPARSE_POINT 0x400L 1176#define FILE_ATTRIBUTE_COMPRESSED 0x800L 1177#define FILE_ATTRIBUTE_OFFLINE 0x1000L 1178#define FILE_ATTRIBUTE_NONINDEXED 0x2000L 1179#define FILE_ATTRIBUTE_ENCRYPTED 0x4000L 1180#define SAMBA_ATTRIBUTES_MASK 0x7F 1181 1182/* Flags - combined with attributes. */ 1183#define FILE_FLAG_WRITE_THROUGH 0x80000000L 1184#define FILE_FLAG_NO_BUFFERING 0x20000000L 1185#define FILE_FLAG_RANDOM_ACCESS 0x10000000L 1186#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000L 1187#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000L 1188#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000L 1189#define FILE_FLAG_POSIX_SEMANTICS 0x01000000L 1190 1191/* CreateDisposition field. */ 1192#define FILE_SUPERSEDE 0 1193#define FILE_OPEN 1 1194#define FILE_CREATE 2 1195#define FILE_OPEN_IF 3 1196#define FILE_OVERWRITE 4 1197#define FILE_OVERWRITE_IF 5 1198 1199/* CreateOptions field. */ 1200#define FILE_DIRECTORY_FILE 0x0001 1201#define FILE_WRITE_THROUGH 0x0002 1202#define FILE_SEQUENTIAL_ONLY 0x0004 1203#define FILE_NON_DIRECTORY_FILE 0x0040 1204#define FILE_NO_EA_KNOWLEDGE 0x0200 1205#define FILE_EIGHT_DOT_THREE_ONLY 0x0400 1206#define FILE_RANDOM_ACCESS 0x0800 1207#define FILE_DELETE_ON_CLOSE 0x1000 1208#define FILE_OPEN_BY_FILE_ID 0x2000 1209 1210/* Responses when opening a file. */ 1211#define FILE_WAS_SUPERSEDED 0 1212#define FILE_WAS_OPENED 1 1213#define FILE_WAS_CREATED 2 1214#define FILE_WAS_OVERWRITTEN 3 1215 1216/* File type flags */ 1217#define FILE_TYPE_DISK 0 1218#define FILE_TYPE_BYTE_MODE_PIPE 1 1219#define FILE_TYPE_MESSAGE_MODE_PIPE 2 1220#define FILE_TYPE_PRINTER 3 1221#define FILE_TYPE_COMM_DEVICE 4 1222#define FILE_TYPE_UNKNOWN 0xFFFF 1223 1224/* Flag for NT transact rename call. */ 1225#define RENAME_REPLACE_IF_EXISTS 1 1226 1227/* flags for SMBntrename call (from Samba4) */ 1228#define RENAME_FLAG_MOVE_CLUSTER_INFORMATION 0x102 /* ???? */ 1229#define RENAME_FLAG_HARD_LINK 0x103 1230#define RENAME_FLAG_RENAME 0x104 1231#define RENAME_FLAG_COPY 0x105 1232 1233/* Filesystem Attributes. */ 1234#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 1235#define FILE_CASE_PRESERVED_NAMES 0x00000002 1236#define FILE_UNICODE_ON_DISK 0x00000004 1237/* According to cifs9f, this is 4, not 8 */ 1238/* Acconding to testing, this actually sets the security attribute! */ 1239#define FILE_PERSISTENT_ACLS 0x00000008 1240#define FILE_FILE_COMPRESSION 0x00000010 1241#define FILE_VOLUME_QUOTAS 0x00000020 1242#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 1243#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 1244#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 1245#define FS_LFN_APIS 0x00004000 1246#define FILE_VOLUME_IS_COMPRESSED 0x00008000 1247#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 1248#define FILE_SUPPORTS_ENCRYPTION 0x00020000 1249#define FILE_NAMED_STREAMS 0x00040000 1250#define FILE_READ_ONLY_VOLUME 0x00080000 1251 1252/* ChangeNotify flags. */ 1253#define FILE_NOTIFY_CHANGE_FILE 0x001 1254#define FILE_NOTIFY_CHANGE_DIR_NAME 0x002 1255#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x004 1256#define FILE_NOTIFY_CHANGE_SIZE 0x008 1257#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x010 1258#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x020 1259#define FILE_NOTIFY_CHANGE_CREATION 0x040 1260#define FILE_NOTIFY_CHANGE_EA 0x080 1261#define FILE_NOTIFY_CHANGE_SECURITY 0x100 1262#define FILE_NOTIFY_CHANGE_FILE_NAME 0x200 1263 1264/* where to find the base of the SMB packet proper */ 1265#define smb_base(buf) (((char *)(buf))+4) 1266 1267/* we don't allow server strings to be longer than 48 characters as 1268 otherwise NT will not honour the announce packets */ 1269#define MAX_SERVER_STRING_LENGTH 48 1270 1271 1272#define SMB_SUCCESS 0 /* The request was successful. */ 1273 1274#ifdef WITH_DFS 1275void dfs_unlogin(void); 1276extern int dcelogin_atmost_once; 1277#endif 1278 1279#ifdef NOSTRDUP 1280char *strdup(char *s); 1281#endif 1282 1283#ifndef SIGNAL_CAST 1284#define SIGNAL_CAST (RETSIGTYPE (*)(int)) 1285#endif 1286 1287#ifndef SELECT_CAST 1288#define SELECT_CAST 1289#endif 1290 1291/* these are used in NetServerEnum to choose what to receive */ 1292#define SV_TYPE_WORKSTATION 0x00000001 1293#define SV_TYPE_SERVER 0x00000002 1294#define SV_TYPE_SQLSERVER 0x00000004 1295#define SV_TYPE_DOMAIN_CTRL 0x00000008 1296#define SV_TYPE_DOMAIN_BAKCTRL 0x00000010 1297#define SV_TYPE_TIME_SOURCE 0x00000020 1298#define SV_TYPE_AFP 0x00000040 1299#define SV_TYPE_NOVELL 0x00000080 1300#define SV_TYPE_DOMAIN_MEMBER 0x00000100 1301#define SV_TYPE_PRINTQ_SERVER 0x00000200 1302#define SV_TYPE_DIALIN_SERVER 0x00000400 1303#define SV_TYPE_SERVER_UNIX 0x00000800 1304#define SV_TYPE_NT 0x00001000 1305#define SV_TYPE_WFW 0x00002000 1306#define SV_TYPE_SERVER_MFPN 0x00004000 1307#define SV_TYPE_SERVER_NT 0x00008000 1308#define SV_TYPE_POTENTIAL_BROWSER 0x00010000 1309#define SV_TYPE_BACKUP_BROWSER 0x00020000 1310#define SV_TYPE_MASTER_BROWSER 0x00040000 1311#define SV_TYPE_DOMAIN_MASTER 0x00080000 1312#define SV_TYPE_SERVER_OSF 0x00100000 1313#define SV_TYPE_SERVER_VMS 0x00200000 1314#define SV_TYPE_WIN95_PLUS 0x00400000 1315#define SV_TYPE_DFS_SERVER 0x00800000 1316#define SV_TYPE_ALTERNATE_XPORT 0x20000000 1317#define SV_TYPE_LOCAL_LIST_ONLY 0x40000000 1318#define SV_TYPE_DOMAIN_ENUM 0x80000000 1319#define SV_TYPE_ALL 0xFFFFFFFF 1320 1321/* This was set by JHT in liaison with Jeremy Allison early 1997 1322 * History: 1323 * Version 4.0 - never made public 1324 * Version 4.10 - New to 1.9.16p2, lost in space 1.9.16p3 to 1.9.16p9 1325 * - Reappeared in 1.9.16p11 with fixed smbd services 1326 * Version 4.20 - To indicate that nmbd and browsing now works better 1327 * Version 4.50 - Set at release of samba-2.2.0 by JHT 1328 * 1329 * Note: In the presence of NT4.X do not set above 4.9 1330 * Setting this above 4.9 can have undesired side-effects. 1331 * This may change again in Samba-3.0 after further testing. JHT 1332 */ 1333 1334#define DEFAULT_MAJOR_VERSION 0x04 1335#define DEFAULT_MINOR_VERSION 0x09 1336 1337/* Browser Election Values */ 1338#define BROWSER_ELECTION_VERSION 0x010f 1339#define BROWSER_CONSTANT 0xaa55 1340 1341/* Sercurity mode bits. */ 1342#define NEGOTIATE_SECURITY_USER_LEVEL 0x01 1343#define NEGOTIATE_SECURITY_CHALLENGE_RESPONSE 0x02 1344#define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04 1345#define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08 1346 1347/* NT Flags2 bits - cifs6.txt section 3.1.2 */ 1348 1349#define FLAGS2_LONG_PATH_COMPONENTS 0x0001 1350#define FLAGS2_EXTENDED_ATTRIBUTES 0x0002 1351#define FLAGS2_SMB_SECURITY_SIGNATURES 0x0004 1352#define FLAGS2_IS_LONG_NAME 0x0040 1353#define FLAGS2_EXTENDED_SECURITY 0x0800 1354#define FLAGS2_DFS_PATHNAMES 0x1000 1355#define FLAGS2_READ_PERMIT_NO_EXECUTE 0x2000 1356#define FLAGS2_32_BIT_ERROR_CODES 0x4000 1357#define FLAGS2_UNICODE_STRINGS 0x8000 1358 1359#define FLAGS2_WIN2K_SIGNATURE 0xC852 /* Hack alert ! For now... JRA. */ 1360 1361/* Capabilities. see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */ 1362 1363#define CAP_RAW_MODE 0x0001 1364#define CAP_MPX_MODE 0x0002 1365#define CAP_UNICODE 0x0004 1366#define CAP_LARGE_FILES 0x0008 1367#define CAP_NT_SMBS 0x0010 1368#define CAP_RPC_REMOTE_APIS 0x0020 1369#define CAP_STATUS32 0x0040 1370#define CAP_LEVEL_II_OPLOCKS 0x0080 1371#define CAP_LOCK_AND_READ 0x0100 1372#define CAP_NT_FIND 0x0200 1373#define CAP_DFS 0x1000 1374#define CAP_W2K_SMBS 0x2000 1375#define CAP_LARGE_READX 0x4000 1376#define CAP_LARGE_WRITEX 0x8000 1377#define CAP_UNIX 0x800000 /* Capabilities for UNIX extensions. Created by HP. */ 1378#define CAP_EXTENDED_SECURITY 0x80000000 1379 1380/* protocol types. It assumes that higher protocols include lower protocols 1381 as subsets */ 1382enum protocol_types {PROTOCOL_NONE,PROTOCOL_CORE,PROTOCOL_COREPLUS,PROTOCOL_LANMAN1,PROTOCOL_LANMAN2,PROTOCOL_NT1}; 1383 1384/* security levels */ 1385enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER,SEC_DOMAIN,SEC_ADS}; 1386 1387/* server roles */ 1388enum server_types 1389{ 1390 ROLE_STANDALONE, 1391 ROLE_DOMAIN_MEMBER, 1392 ROLE_DOMAIN_BDC, 1393 ROLE_DOMAIN_PDC 1394}; 1395 1396/* printing types */ 1397enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX, 1398 PRINT_QNX,PRINT_PLP,PRINT_LPRNG,PRINT_SOFTQ, 1399 PRINT_CUPS,PRINT_LPRNT,PRINT_LPROS2 1400#ifdef DEVELOPER 1401,PRINT_TEST,PRINT_VLP 1402#endif /* DEVELOPER */ 1403}; 1404 1405/* LDAP schema types */ 1406enum schema_types {SCHEMA_COMPAT, SCHEMA_AD, SCHEMA_SAMBA}; 1407 1408/* LDAP SSL options */ 1409enum ldap_ssl_types {LDAP_SSL_ON, LDAP_SSL_OFF, LDAP_SSL_START_TLS}; 1410 1411/* LDAP PASSWD SYNC methods */ 1412enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PASSWD_SYNC_ONLY}; 1413 1414/* Remote architectures we know about. */ 1415enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT, 1416 RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_SAMBA, RA_CIFSFS}; 1417 1418/* case handling */ 1419enum case_handling {CASE_LOWER,CASE_UPPER}; 1420 1421/* 1422 * Global value meaing that the smb_uid field should be 1423 * ingored (in share level security and protocol level == CORE) 1424 */ 1425 1426#define UID_FIELD_INVALID 0 1427#define VUID_OFFSET 100 /* Amount to bias returned vuid numbers */ 1428 1429/* 1430 * Size of buffer to use when moving files across filesystems. 1431 */ 1432#define COPYBUF_SIZE (8*1024) 1433 1434/* 1435 * Values used to override error codes. 1436 */ 1437extern int unix_ERR_class; 1438extern int unix_ERR_code; 1439extern NTSTATUS unix_ERR_ntstatus; 1440 1441/* 1442 * Used in chaining code. 1443 */ 1444extern int chain_size; 1445 1446/* 1447 * Map the Core and Extended Oplock requesst bits down 1448 * to common bits (EXCLUSIVE_OPLOCK & BATCH_OPLOCK). 1449 */ 1450 1451/* 1452 * Core protocol. 1453 */ 1454#define CORE_OPLOCK_REQUEST(inbuf) \ 1455 ((CVAL(inbuf,smb_flg)&(FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK))>>5) 1456 1457/* 1458 * Extended protocol. 1459 */ 1460#define EXTENDED_OPLOCK_REQUEST(inbuf) ((SVAL(inbuf,smb_vwv2)&((1<<1)|(1<<2)))>>1) 1461 1462/* Lock types. */ 1463#define LOCKING_ANDX_SHARED_LOCK 0x1 1464#define LOCKING_ANDX_OPLOCK_RELEASE 0x2 1465#define LOCKING_ANDX_CHANGE_LOCKTYPE 0x4 1466#define LOCKING_ANDX_CANCEL_LOCK 0x8 1467#define LOCKING_ANDX_LARGE_FILES 0x10 1468 1469/* Oplock levels */ 1470#define OPLOCKLEVEL_NONE 0 1471#define OPLOCKLEVEL_II 1 1472 1473/* 1474 * Bits we test with. 1475 */ 1476 1477#define NO_OPLOCK 0 1478#define EXCLUSIVE_OPLOCK 1 1479#define BATCH_OPLOCK 2 1480#define LEVEL_II_OPLOCK 4 1481#define INTERNAL_OPEN_ONLY 8 1482 1483#define EXCLUSIVE_OPLOCK_TYPE(lck) ((lck) & (EXCLUSIVE_OPLOCK|BATCH_OPLOCK)) 1484#define BATCH_OPLOCK_TYPE(lck) ((lck) & BATCH_OPLOCK) 1485#define LEVEL_II_OPLOCK_TYPE(lck) ((lck) & LEVEL_II_OPLOCK) 1486 1487#define CORE_OPLOCK_GRANTED (1<<5) 1488#define EXTENDED_OPLOCK_GRANTED (1<<15) 1489 1490/* 1491 * Return values for oplock types. 1492 */ 1493 1494#define NO_OPLOCK_RETURN 0 1495#define EXCLUSIVE_OPLOCK_RETURN 1 1496#define BATCH_OPLOCK_RETURN 2 1497#define LEVEL_II_OPLOCK_RETURN 3 1498 1499/* 1500 * Loopback command offsets. 1501 */ 1502 1503#define OPBRK_CMD_LEN_OFFSET 0 1504#define OPBRK_CMD_PORT_OFFSET 4 1505#define OPBRK_CMD_HEADER_LEN 6 1506 1507#define OPBRK_MESSAGE_CMD_OFFSET 0 1508 1509/* 1510 * Oplock break command code to send over the udp socket. 1511 * The same message is sent for both exlusive and level II breaks. 1512 * 1513 * The form of this is : 1514 * 1515 * 0 2 2+pid 2+pid+dev 2+pid+dev+ino 1516 * +----+--------+-------+--------+---------+ 1517 * | cmd| pid | dev | inode | fileid | 1518 * +----+--------+-------+--------+---------+ 1519 */ 1520 1521#define OPLOCK_BREAK_PID_OFFSET 2 1522#define OPLOCK_BREAK_DEV_OFFSET (OPLOCK_BREAK_PID_OFFSET + sizeof(pid_t)) 1523#define OPLOCK_BREAK_INODE_OFFSET (OPLOCK_BREAK_DEV_OFFSET + sizeof(SMB_DEV_T)) 1524#define OPLOCK_BREAK_FILEID_OFFSET (OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T)) 1525#define OPLOCK_BREAK_MSG_LEN (OPLOCK_BREAK_FILEID_OFFSET + sizeof(unsigned long)) 1526 1527/* Message types */ 1528#define OPLOCK_BREAK_CMD 0x1 1529#define KERNEL_OPLOCK_BREAK_CMD 0x2 1530#define LEVEL_II_OPLOCK_BREAK_CMD 0x3 1531#define ASYNC_LEVEL_II_OPLOCK_BREAK_CMD 0x4 1532 1533/* Add the "deferred open" message. */ 1534#define RETRY_DEFERRED_OPEN_CMD 0x5 1535 1536/* 1537 * And the message format for it. Keep the same message length. 1538 * 1539 * 0 2 2+pid 2+pid+dev 2+pid+dev+ino 1540 * +----+--------+-------+--------+---------+ 1541 * | cmd| pid | dev | inode | mid | 1542 * +----+--------+-------+--------+---------+ 1543 */ 1544 1545#define DEFERRED_OPEN_CMD_OFFSET 0 1546#define DEFERRED_OPEN_PID_OFFSET 2 /* pid we're *sending* from. */ 1547#define DEFERRED_OPEN_DEV_OFFSET (DEFERRED_OPEN_PID_OFFSET + sizeof(pid_t)) 1548#define DEFERRED_OPEN_INODE_OFFSET (DEFERRED_OPEN_DEV_OFFSET + sizeof(SMB_DEV_T)) 1549#define DEFERRED_OPEN_MID_OFFSET (DEFERRED_OPEN_INODE_OFFSET + sizeof(SMB_INO_T)) 1550#define DEFERRED_OPEN_MSG_LEN OPLOCK_BREAK_MSG_LEN 1551 1552/* 1553 * Capabilities abstracted for different systems. 1554 */ 1555 1556#define KERNEL_OPLOCK_CAPABILITY 0x1 1557 1558/* 1559 * Oplock break command code sent via the kernel interface (if it exists). 1560 * 1561 * Form of this is : 1562 * 1563 * 0 2 2+devsize 2+devsize+inodesize 1564 * +----+--------+--------+----------+ 1565 * | cmd| dev | inode | fileid | 1566 * +----+--------+--------+----------+ 1567 */ 1568#define KERNEL_OPLOCK_BREAK_DEV_OFFSET 2 1569#define KERNEL_OPLOCK_BREAK_INODE_OFFSET (KERNEL_OPLOCK_BREAK_DEV_OFFSET + sizeof(SMB_DEV_T)) 1570#define KERNEL_OPLOCK_BREAK_FILEID_OFFSET (KERNEL_OPLOCK_BREAK_INODE_OFFSET + sizeof(SMB_INO_T)) 1571#define KERNEL_OPLOCK_BREAK_MSG_LEN (KERNEL_OPLOCK_BREAK_FILEID_OFFSET + sizeof(unsigned long)) 1572 1573 1574/* if a kernel does support oplocks then a structure of the following 1575 typee is used to describe how to interact with the kernel */ 1576struct kernel_oplocks { 1577 BOOL (*receive_message)(fd_set *fds, char *buffer, int buffer_len); 1578 BOOL (*set_oplock)(files_struct *fsp, int oplock_type); 1579 void (*release_oplock)(files_struct *fsp); 1580 BOOL (*parse_message)(char *msg_start, int msg_len, SMB_INO_T *inode, SMB_DEV_T *dev, unsigned long *file_id); 1581 BOOL (*msg_waiting)(fd_set *fds); 1582 int notification_fd; 1583}; 1584 1585 1586#define CMD_REPLY 0x8000 1587 1588/* this structure defines the functions for doing change notify in 1589 various implementations */ 1590struct cnotify_fns { 1591 void * (*register_notify)(connection_struct *conn, char *path, uint32 flags); 1592 BOOL (*check_notify)(connection_struct *conn, uint16 vuid, char *path, uint32 flags, void *data, time_t t); 1593 void (*remove_notify)(void *data); 1594 int select_time; 1595}; 1596 1597 1598 1599#include "smb_macros.h" 1600 1601#define MAX_NETBIOSNAME_LEN 16 1602/* DOS character, NetBIOS namestring. Type used on the wire. */ 1603typedef char nstring[MAX_NETBIOSNAME_LEN]; 1604/* Unix character, NetBIOS namestring. Type used to manipulate name in nmbd. */ 1605typedef char unstring[MAX_NETBIOSNAME_LEN*4]; 1606 1607/* A netbios name structure. */ 1608struct nmb_name { 1609 nstring name; 1610 char scope[64]; 1611 unsigned int name_type; 1612}; 1613 1614 1615/* A netbios node status array element. */ 1616struct node_status { 1617 nstring name; 1618 unsigned char type; 1619 unsigned char flags; 1620}; 1621 1622/* The extra info from a NetBIOS node status query */ 1623struct node_status_extra { 1624 unsigned char mac_addr[6]; 1625 /* There really is more here ... */ 1626}; 1627 1628struct pwd_info 1629{ 1630 BOOL null_pwd; 1631 BOOL cleartext; 1632 1633 fstring password; 1634 1635}; 1636 1637typedef struct user_struct 1638{ 1639 struct user_struct *next, *prev; 1640 uint16 vuid; /* Tag for this entry. */ 1641 uid_t uid; /* uid of a validated user */ 1642 gid_t gid; /* gid of a validated user */ 1643 1644 userdom_struct user; 1645 char *homedir; 1646 char *unix_homedir; 1647 char *logon_script; 1648 1649 BOOL guest; 1650 1651 /* following groups stuff added by ih */ 1652 /* This groups info is needed for when we become_user() for this uid */ 1653 int n_groups; 1654 gid_t *groups; 1655 1656 NT_USER_TOKEN *nt_user_token; 1657 1658 DATA_BLOB session_key; 1659 1660 char *session_keystr; /* used by utmp and pam session code. 1661 TDB key string */ 1662 int homes_snum; 1663 1664 struct auth_serversupplied_info *server_info; 1665 1666} user_struct; 1667 1668 1669struct unix_error_map { 1670 int unix_error; 1671 int dos_class; 1672 int dos_code; 1673 NTSTATUS nt_error; 1674}; 1675 1676/* 1677#include "ntdomain.h" 1678 1679#include "client.h" 1680*/ 1681 1682/* 1683 * Size of new password account encoding string. This is enough space to 1684 * hold 11 ACB characters, plus the surrounding [] and a terminating null. 1685 * Do not change unless you are adding new ACB bits! 1686 */ 1687 1688#define NEW_PW_FORMAT_SPACE_PADDED_LEN 14 1689 1690/* 1691 Do you want session setups at user level security with a invalid 1692 password to be rejected or allowed in as guest? WinNT rejects them 1693 but it can be a pain as it means "net view" needs to use a password 1694 1695 You have 3 choices in the setting of map_to_guest: 1696 1697 "NEVER_MAP_TO_GUEST" means session setups with an invalid password 1698 are rejected. This is the default. 1699 1700 "MAP_TO_GUEST_ON_BAD_USER" means session setups with an invalid password 1701 are rejected, unless the username does not exist, in which case it 1702 is treated as a guest login 1703 1704 "MAP_TO_GUEST_ON_BAD_PASSWORD" means session setups with an invalid password 1705 are treated as a guest login 1706 1707 Note that map_to_guest only has an effect in user or server 1708 level security. 1709*/ 1710 1711#define NEVER_MAP_TO_GUEST 0 1712#define MAP_TO_GUEST_ON_BAD_USER 1 1713#define MAP_TO_GUEST_ON_BAD_PASSWORD 2 1714 1715#define SAFE_NETBIOS_CHARS ". -_" 1716 1717/* generic iconv conversion structure */ 1718typedef struct _smb_iconv_t { 1719 size_t (*direct)(void *cd, const char **inbuf, size_t *inbytesleft, 1720 char **outbuf, size_t *outbytesleft); 1721 size_t (*pull)(void *cd, const char **inbuf, size_t *inbytesleft, 1722 char **outbuf, size_t *outbytesleft); 1723 size_t (*push)(void *cd, const char **inbuf, size_t *inbytesleft, 1724 char **outbuf, size_t *outbytesleft); 1725 void *cd_direct, *cd_pull, *cd_push; 1726 char *from_name, *to_name; 1727} *smb_iconv_t; 1728 1729/* The maximum length of a trust account password. 1730 Used when we randomly create it, 15 char passwords 1731 exceed NT4's max password length */ 1732 1733#define DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH 14 1734 1735#include "popt_common.h" 1736 1737#define PORT_NONE 0 1738#ifndef LDAP_PORT 1739#define LDAP_PORT 389 1740#endif 1741 1742/* used by the IP comparison function */ 1743struct ip_service { 1744 struct in_addr ip; 1745 unsigned port; 1746}; 1747 1748/* Used by the SMB signing functions. */ 1749 1750typedef struct smb_sign_info { 1751 void (*sign_outgoing_message)(char *outbuf, struct smb_sign_info *si); 1752 BOOL (*check_incoming_message)(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok); 1753 void (*free_signing_context)(struct smb_sign_info *si); 1754 void *signing_context; 1755 1756 BOOL negotiated_smb_signing; 1757 BOOL allow_smb_signing; 1758 BOOL doing_signing; 1759 BOOL mandatory_signing; 1760 BOOL seen_valid; /* Have I ever seen a validly signed packet? */ 1761} smb_sign_info; 1762 1763struct ea_struct { 1764 uint8 flags; 1765 char *name; 1766 DATA_BLOB value; 1767}; 1768 1769/* EA names used internally in Samba. KEEP UP TO DATE with prohibited_ea_names in trans2.c !. */ 1770#define SAMBA_POSIX_INHERITANCE_EA_NAME "user.SAMBA_PAI" 1771/* EA to use for DOS attributes */ 1772#define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB" 1773 1774#endif /* _SMB_H */ 1775