This is the 'multiple pdb backends' patch from ctrlsoft, aka Jelmer Vernooij
[kai/samba.git] / source3 / include / smb.h
index bdc718f57b03c86d61940258f862875a70e7effc..52b475ff272f57f440a51a68c9a3343773a1912e 100644 (file)
@@ -1,11 +1,13 @@
 /* 
-   Unix SMB/Netbios implementation.
-   Version 1.9.
-   SMB parameters and setup
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup, plus a whole lot more.
+   
    Copyright (C) Andrew Tridgell              1992-2000
    Copyright (C) John H Terpstra              1996-2000
    Copyright (C) Luke Kenneth Casson Leighton 1996-2000
    Copyright (C) Paul Ashton                  1998-2000
+   Copyright (C) Simo Sorce                   2001-2002
+   Copyright (C) Martin Pool                 2002
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef _SMB_H
 #define _SMB_H
 
+#if defined(LARGE_SMB_OFF_T)
+#define BUFFER_SIZE (128*1024)
+#else /* no large readwrite possible */
 #define BUFFER_SIZE (0xFFFF)
+#endif
+
 #define SAFETY_MARGIN 1024
 #define LARGE_WRITEX_HDR_SIZE 65
 
@@ -69,22 +76,15 @@ typedef int BOOL;
 #define READ_EOF 2
 #define READ_ERROR 3
 
-
 #define DIR_STRUCT_SIZE 43
 
-/* these define all the command types recognised by the server - there
-are lots of gaps so probably there are some rare commands that are not
-implemented */
-
-#define pSETDIR '\377'
-
 /* these define the attribute byte as seen by DOS */
-#define aRONLY (1L<<0)
-#define aHIDDEN (1L<<1)
-#define aSYSTEM (1L<<2)
-#define aVOLID (1L<<3)
-#define aDIR (1L<<4)
-#define aARCH (1L<<5)
+#define aRONLY (1L<<0)         /* 0x01 */
+#define aHIDDEN (1L<<1)                /* 0x02 */
+#define aSYSTEM (1L<<2)                /* 0x04 */
+#define aVOLID (1L<<3)         /* 0x08 */
+#define aDIR (1L<<4)           /* 0x10 */
+#define aARCH (1L<<5)          /* 0x20 */
 
 /* deny modes */
 #define DENY_DOS 0
@@ -123,11 +123,6 @@ implemented */
 #define GET_DELETE_ON_CLOSE_FLAG(x) (((x) & DELETE_ON_CLOSE_FLAG) ? True : False)
 #define SET_DELETE_ON_CLOSE_FLAG(x) ((x) ? DELETE_ON_CLOSE_FLAG : 0)
 
-/* was delete access requested in NT open ? */
-#define DELETE_ACCESS_REQUESTED (1<<17)
-#define GET_DELETE_ACCESS_REQUESTED(x) (((x) & DELETE_ACCESS_REQUESTED) ? True : False)
-#define SET_DELETE_ACCESS_REQUESTED(x) ((x) ? DELETE_ACCESS_REQUESTED : 0)
-
 /* open disposition values */
 #define FILE_EXISTS_FAIL 0
 #define FILE_EXISTS_OPEN 1
@@ -154,18 +149,6 @@ implemented */
 
 #include "doserr.h"
 
-#ifndef _PSTRING
-
-#define PSTRING_LEN 1024
-#define FSTRING_LEN 256
-
-typedef char pstring[PSTRING_LEN];
-typedef char fstring[FSTRING_LEN];
-
-#define _PSTRING
-
-#endif
-
 /*
  * SMB UCS2 (16-bit unicode) internal type.
  */
@@ -208,11 +191,18 @@ typedef struct nttime_info
 } NTTIME;
 
 
+/* The Splint code analysis tool doesn't like immediate structures. */
+
+#ifdef _SPLINT_                      /* http://www.splint.org */
+#undef HAVE_IMMEDIATE_STRUCTURES
+#endif
+
 /* the following rather strange looking definitions of NTSTATUS and WERROR
    and there in order to catch common coding errors where different error types
    are mixed up. This is especially important as we slowly convert Samba
    from using BOOL for internal functions 
 */
+
 #if defined(HAVE_IMMEDIATE_STRUCTURES)
 typedef struct {uint32 v;} NTSTATUS;
 #define NT_STATUS(x) ((NTSTATUS) { x })
@@ -254,29 +244,10 @@ typedef uint32 WERROR;
  
 #define MAX_HOURS_LEN 32
 
-typedef struct
-{
-        uint32 pid;
-        uint16 vuid;
-
-}
-vuser_key;
-
-
-struct use_info
-{
-       BOOL connected;
-       char *srv_name;
-       vuser_key key;
-       char *user_name;
-       char *domain;
-};
-
 #ifndef MAXSUBAUTHS
 #define MAXSUBAUTHS 15 /* max sub authorities in a SID */
 #endif
 
-#ifndef _DOM_SID
 /**
  * @brief Security Identifier
  *
@@ -296,8 +267,6 @@ typedef struct sid_info
   uint32 sub_auths[MAXSUBAUTHS];  
 
 } DOM_SID;
-#define _DOM_SID
-#endif
 
 /*
  * The complete list of SIDS belonging to this user.
@@ -312,13 +281,10 @@ typedef struct sid_info
 #define PRIMARY_USER_SID_INDEX 0
 #define PRIMARY_GROUP_SID_INDEX 1
 
-#ifndef _NT_USER_TOKEN
 typedef struct _nt_user_token {
        size_t num_sids;
        DOM_SID *user_sids;
 } NT_USER_TOKEN;
-#define _NT_USER_TOKEN
-#endif
 
 /*** query a local group, get a list of these: shows who is in that group ***/
 
@@ -391,10 +357,8 @@ typedef struct write_cache
 
 typedef struct
 {
-       smb_ucs2_t *path;
-       smb_ucs2_t *name;
-       smb_ucs2_t *unixname;
-       smb_ucs2_t *dosname;
+       smb_ucs2_t *origname;
+       smb_ucs2_t *filename;
        SMB_STRUCT_STAT *statinfo;
 } smb_filename;
 
@@ -417,6 +381,7 @@ typedef struct files_struct
        write_cache *wcp;
        struct timeval open_time;
        int share_mode;
+       uint32 desired_access;
        time_t pending_modtime;
        int oplock_type;
        int sent_oplock_break;
@@ -428,7 +393,6 @@ typedef struct files_struct
        BOOL modified;
        BOOL is_directory;
        BOOL directory_delete_on_close;
-       BOOL stat_open;
        char *fsp_name;
 } files_struct;
 
@@ -463,6 +427,7 @@ typedef struct
 
 /* Include VFS stuff */
 
+#include "smb_acls.h"
 #include "vfs.h"
 
 typedef struct connection_struct
@@ -484,6 +449,7 @@ typedef struct connection_struct
        struct vfs_ops vfs_ops;                   /* Filesystem operations */
        /* Handle on dlopen() call */
        void *dl_handle;
+       void *vfs_private;
 
        char *user; /* name of user who *opened* this connection */
        uid_t uid; /* uid of user who *opened* this connection */
@@ -540,11 +506,12 @@ typedef struct _print_queue_struct
 {
   int job;
   int size;
+  int page_count;
   int status;
   int priority;
   time_t time;
-  fstring user;
-  fstring file;
+  fstring fs_user;
+  fstring fs_file;
 } print_queue_struct;
 
 enum {LPSTAT_OK, LPSTAT_STOPPED, LPSTAT_ERROR};
@@ -582,6 +549,7 @@ typedef struct {
        uint16 op_port;
        uint16 op_type;
        int share_mode;
+       uint32 desired_access;
        struct timeval time;
        SMB_DEV_T dev;
        SMB_INO_T inode;
@@ -606,8 +574,14 @@ typedef struct {
 #define FLAG_SAM_GID           0x00000002
 #define FLAG_SAM_SMBHOME       0x00000004
 #define FLAG_SAM_PROFILE       0x00000008
-#define FLAG_SAM_LOGONSCRIPT   0x00000010
-#define FLAG_SAM_DRIVE         0x00000020
+#define FLAG_SAM_DRIVE          0x00000010
+#define FLAG_SAM_LOGONSCRIPT   0x00000020
+#define FLAG_SAM_LOGONTIME     0x00000040
+#define FLAG_SAM_LOGOFFTIME    0x00000080
+#define FLAG_SAM_KICKOFFTIME   0x00000100
+#define FLAG_SAM_CANCHANGETIME 0x00000200
+#define FLAG_SAM_MUSTCHANGETIME        0x00000400
+
 
 #define IS_SAM_UNIX_USER(x) \
        ((pdb_get_init_flag(x) & FLAG_SAM_UID) \
@@ -617,7 +591,13 @@ typedef struct {
                
 typedef struct sam_passwd
 {
-       struct {
+       TALLOC_CTX *mem_ctx;
+       
+       void (*free_fn)(struct sam_passwd **);
+
+    struct pdb_methods *methods;
+
+       struct user_data {
                /* initiailization flags */
                uint32 init_flag;
                
@@ -628,18 +608,18 @@ typedef struct sam_passwd
                time_t pass_can_change_time;  /* password can change time */
                time_t pass_must_change_time; /* password must change time */
                
-               pstring username;     /* UNIX username string */
-               pstring domain;       /* Windows Domain name */
-               pstring nt_username;  /* Windows username string */
-               pstring full_name;    /* user's full name string */
-               pstring home_dir;     /* home directory string */
-               pstring dir_drive;    /* home directory drive string */
-               pstring logon_script; /* logon script string */
-               pstring profile_path; /* profile path string */
-               pstring acct_desc  ;  /* user description string */
-               pstring workstations; /* login from workstations string */
-               pstring unknown_str ; /* don't know what this is, yet. */
-               pstring munged_dial ; /* munged path name and dial-back tel number */
+               char * username;     /* UNIX username string */
+               char * domain;       /* Windows Domain name */
+               char * nt_username;  /* Windows username string */
+               char * full_name;    /* user's full name string */
+               char * home_dir;     /* home directory string */
+               char * dir_drive;    /* home directory drive string */
+               char * logon_script; /* logon script string */
+               char * profile_path; /* profile path string */
+               char * acct_desc  ;  /* user description string */
+               char * workstations; /* login from workstations string */
+               char * unknown_str ; /* don't know what this is, yet. */
+               char * munged_dial ; /* munged path name and dial-back tel number */
                
                uid_t uid;          /* this is a unix uid_t */
                gid_t gid;          /* this is a unix gid_t */
@@ -1301,6 +1281,7 @@ char *strdup(char *s);
    
 #define FLAGS2_LONG_PATH_COMPONENTS   0x0001
 #define FLAGS2_EXTENDED_ATTRIBUTES    0x0002
+#define FLAGS2_IS_LONG_NAME           0x0040
 #define FLAGS2_EXTENDED_SECURITY      0x0800 
 #define FLAGS2_DFS_PATHNAMES          0x1000
 #define FLAGS2_READ_PERMIT_NO_EXECUTE 0x2000
@@ -1325,6 +1306,7 @@ char *strdup(char *s);
 #define CAP_W2K_SMBS         0x2000
 #define CAP_LARGE_READX      0x4000
 #define CAP_LARGE_WRITEX     0x8000
+#define CAP_UNIX                0x800000 /* Capabilities for UNIX extensions. Created by HP. */
 #define CAP_EXTENDED_SECURITY 0x80000000
 
 /* protocol types. It assumes that higher protocols include lower protocols
@@ -1407,7 +1389,7 @@ extern int global_is_multibyte_codepage;
 #define COPYBUF_SIZE (8*1024)
 
 /* 
- * Integers used to override error codes. 
+ * Values used to override error codes. 
  */
 extern int unix_ERR_class;
 extern int unix_ERR_code;
@@ -1565,12 +1547,6 @@ struct node_status {
        unsigned char flags;
 };
 
-
-
-#define AGENT_CMD_CON       0
-#define AGENT_CMD_CON_ANON  2
-#define AGENT_CMD_CON_REUSE 1
-
 struct pwd_info
 {
        BOOL null_pwd;
@@ -1593,18 +1569,6 @@ struct pwd_info
        uchar sess_key[16];
 };
 
-/*
- * Network Computing Architechture Context Name Named Pipe
- * See MSDN docs for more information
- */
-struct ncacn_np
-{
-        fstring pipe_name;
-        struct cli_state *smb;
-        uint16 fnum;
-        BOOL initialised;
-};
-
 #include "rpc_creds.h"
 #include "rpc_misc.h"
 #include "rpc_secdes.h"
@@ -1618,6 +1582,8 @@ typedef struct user_struct
        gid_t gid; /* gid of a validated user */
 
        userdom_struct user;
+       char *homedir;
+       
        BOOL guest;
 
        /* following groups stuff added by ih */
@@ -1627,10 +1593,19 @@ typedef struct user_struct
 
        NT_USER_TOKEN *nt_user_token;
 
+       uint8 session_key[16];
+
        int session_id; /* used by utmp and pam session code */
 } user_struct;
 
 
+struct unix_error_map {
+       int unix_error;
+       int dos_class;
+       int dos_code;
+       NTSTATUS nt_error;
+};
+
 #include "ntdomain.h"
 
 #include "client.h"
@@ -1671,7 +1646,6 @@ typedef struct user_struct
 #define SAFE_NETBIOS_CHARS ". -_"
 
 #include "nsswitch/winbindd_nss.h"
-#include "smb_acls.h"
 
 /* generic iconv conversion structure */
 typedef struct {