[GLUE] Rsync SAMBA_3_2_0 SVN r25598 in order to create the v3-2-test branch.
[jpeach/samba.git] / source / include / client.h
index 1296b0337069c670a0e3d4b37c7da647e2135e92..5165b85df11e2af0f7223d8d80d6242165b71ff0 100644 (file)
@@ -1,6 +1,5 @@
 /*
 /*
-   Unix SMB/Netbios implementation.
-   Version 1.9.
+   Unix SMB/CIFS implementation.
    SMB parameters and setup
    Copyright (C) Andrew Tridgell 1992-1998
    Copyright (C) Luke Kenneth Casson Leighton 1996-1998
    SMB parameters and setup
    Copyright (C) Andrew Tridgell 1992-1998
    Copyright (C) Luke Kenneth Casson Leighton 1996-1998
@@ -8,7 +7,7 @@
 
    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
 
    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
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -17,8 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #ifndef _CLIENT_H
 */
 
 #ifndef _CLIENT_H
    overlap on the wire. This size gives us a nice read/write size, which
    will be a multiple of the page size on almost any system */
 #define CLI_BUFFER_SIZE (0xFFFF)
    overlap on the wire. This size gives us a nice read/write size, which
    will be a multiple of the page size on almost any system */
 #define CLI_BUFFER_SIZE (0xFFFF)
-
-
-/* clistr flags - see clistr.c */
-#define CLISTR_TERMINATE 1
-#define CLISTR_CONVERT 2
-#define CLISTR_UPPER 4
-#define CLISTR_ASCII 8
+#define CLI_SAMBA_MAX_LARGE_READX_SIZE (127*1024) /* Works for Samba servers */
+#define CLI_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
+#define CLI_SAMBA_MAX_POSIX_LARGE_READX_SIZE (0xFFFF00) /* 24-bit len. */
 
 /*
  * These definitions depend on smb.h
  */
 
 
 /*
  * These definitions depend on smb.h
  */
 
-typedef struct file_info
-{
-       SMB_OFF_T size;
-       uint16 mode;
-       uid_t uid;
-       gid_t gid;
-       /* these times are normally kept in GMT */
-       time_t mtime;
-       time_t atime;
-       time_t ctime;
-       pstring name;
-       char short_name[13];
-} file_info;
-
-struct print_job_info
-{
+struct print_job_info {
        uint16 id;
        uint16 priority;
        size_t size;
        uint16 id;
        uint16 priority;
        size_t size;
@@ -64,9 +43,45 @@ struct print_job_info
        time_t t;
 };
 
        time_t t;
 };
 
+struct cli_pipe_auth_data {
+       enum pipe_auth_type auth_type; /* switch for the union below. Defined in ntdomain.h */
+       enum pipe_auth_level auth_level; /* defined in ntdomain.h */
+       union {
+               struct schannel_auth_struct *schannel_auth;
+               NTLMSSP_STATE *ntlmssp_state;
+               struct kerberos_auth_struct *kerberos_auth;
+       } a_u;
+       void (*cli_auth_data_free_func)(struct cli_pipe_auth_data *);
+};
+
+struct rpc_pipe_client {
+       struct rpc_pipe_client *prev, *next;
+
+       TALLOC_CTX *mem_ctx;
+
+       struct cli_state *cli;
+
+       int pipe_idx;
+       const char *pipe_name;
+       uint16 fnum;
+
+       const char *domain;
+       const char *user_name;
+       struct pwd_info pwd;
+
+       uint16 max_xmit_frag;
+       uint16 max_recv_frag;
+
+       struct cli_pipe_auth_data auth;
+
+       /* The following is only non-null on a netlogon pipe. */
+       struct dcinfo *dc;
+};
+
 struct cli_state {
        int port;
        int fd;
 struct cli_state {
        int port;
        int fd;
+       int smb_rw_error; /* Copy of last read or write error. */
        uint16 cnum;
        uint16 pid;
        uint16 mid;
        uint16 cnum;
        uint16 pid;
        uint16 mid;
@@ -76,10 +91,12 @@ struct cli_state {
        int rap_error;
        int privileges;
 
        int rap_error;
        int privileges;
 
-       fstring eff_name;
        fstring desthost;
        fstring desthost;
-       fstring user_name;
+
+       /* The credentials used to open the cli_state connection. */
        fstring domain;
        fstring domain;
+       fstring user_name;
+       struct pwd_info pwd;
 
        /*
         * The following strings are the
 
        /*
         * The following strings are the
@@ -97,47 +114,67 @@ struct cli_state {
        fstring full_dest_host_name;
        struct in_addr dest_ip;
 
        fstring full_dest_host_name;
        struct in_addr dest_ip;
 
-       struct pwd_info pwd;
-       unsigned char cryptkey[8];
+       DATA_BLOB secblob; /* cryptkey or negTokenInit */
        uint32 sesskey;
        int serverzone;
        uint32 servertime;
        int readbraw_supported;
        int writebraw_supported;
        int timeout; /* in milliseconds. */
        uint32 sesskey;
        int serverzone;
        uint32 servertime;
        int readbraw_supported;
        int writebraw_supported;
        int timeout; /* in milliseconds. */
-       int max_xmit;
-       int max_mux;
+       size_t max_xmit;
+       size_t max_mux;
        char *outbuf;
        char *inbuf;
        char *outbuf;
        char *inbuf;
-       int bufsize;
+       unsigned int bufsize;
        int initialised;
        int win95;
        int initialised;
        int win95;
+       BOOL is_samba;
        uint32 capabilities;
        uint32 capabilities;
+       uint32 posix_capabilities;
+       BOOL dfsroot;
 
        TALLOC_CTX *mem_ctx;
 
 
        TALLOC_CTX *mem_ctx;
 
-       /*
-        * Only used in NT domain calls.
-        */
+       smb_sign_info sign_info;
 
 
-       uint32 nt_error;                   /* NT RPC error code. */
-       uint16 nt_pipe_fnum;               /* Pipe handle. */
-       unsigned char sess_key[16];        /* Current session key. */
-       unsigned char ntlmssp_hash[258];   /* ntlmssp data. */
-       uint32 ntlmssp_cli_flgs;           /* ntlmssp client flags */
-       uint32 ntlmssp_srv_flgs;           /* ntlmssp server flags */
-       uint32 ntlmssp_seq_num;            /* ntlmssp sequence number */
-       DOM_CRED clnt_cred;                /* Client credential. */
-       fstring mach_acct;                 /* MYNAME$. */
-       fstring srv_name_slash;            /* \\remote server. */
-       fstring clnt_name_slash;           /* \\local client. */
-       uint16 max_xmit_frag;
-       uint16 max_recv_frag;
-       vuser_key key;
-       uint32 ntlmssp_flags;
+       /* the session key for this CLI, outside 
+          any per-pipe authenticaion */
+       DATA_BLOB user_session_key;
+
+       /* The list of pipes currently open on this connection. */
+       struct rpc_pipe_client *pipe_list;
+
+       BOOL use_kerberos;
+       BOOL fallback_after_kerberos;
+       BOOL use_spnego;
 
        BOOL use_oplocks; /* should we use oplocks? */
        BOOL use_level_II_oplocks; /* should we use level II oplocks? */
 
        BOOL use_oplocks; /* should we use oplocks? */
        BOOL use_level_II_oplocks; /* should we use level II oplocks? */
+
+       /* a oplock break request handler */
+       BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
+
+       BOOL force_dos_errors;
+       BOOL case_sensitive; /* False by default. */
 };
 
 };
 
+typedef struct file_info {
+       struct cli_state *cli;
+       SMB_BIG_UINT size;
+       uint16 mode;
+       uid_t uid;
+       gid_t gid;
+       /* these times are normally kept in GMT */
+       struct timespec mtime_ts;
+       struct timespec atime_ts;
+       struct timespec ctime_ts;
+       pstring name;
+       pstring dir;
+       char short_name[13*3]; /* the *3 is to cope with multi-byte */
+} file_info;
+
+#define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
+#define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
+#define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
+
 #endif /* _CLIENT_H */
 #endif /* _CLIENT_H */