1 | /*
|
---|
2 | Unix SMB/CIFS implementation.
|
---|
3 | SMB parameters and setup
|
---|
4 | Copyright (C) Andrew Tridgell 1992-1998
|
---|
5 | Copyright (C) Luke Kenneth Casson Leighton 1996-1998
|
---|
6 | Copyright (C) Jeremy Allison 1998
|
---|
7 |
|
---|
8 | This program is free software; you can redistribute it and/or modify
|
---|
9 | it under the terms of the GNU General Public License as published by
|
---|
10 | the Free Software Foundation; either version 2 of the License, or
|
---|
11 | (at your option) any later version.
|
---|
12 |
|
---|
13 | This program is distributed in the hope that it will be useful,
|
---|
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
16 | GNU General Public License for more details.
|
---|
17 |
|
---|
18 | You should have received a copy of the GNU General Public License
|
---|
19 | along with this program; if not, write to the Free Software
|
---|
20 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
---|
21 | */
|
---|
22 |
|
---|
23 | #ifndef _CLIENT_H
|
---|
24 | #define _CLIENT_H
|
---|
25 |
|
---|
26 | /* the client asks for a smaller buffer to save ram and also to get more
|
---|
27 | overlap on the wire. This size gives us a nice read/write size, which
|
---|
28 | will be a multiple of the page size on almost any system */
|
---|
29 | #define CLI_BUFFER_SIZE (0xFFFF)
|
---|
30 | #define CLI_SAMBA_MAX_LARGE_READX_SIZE (127*1024) /* Works for Samba servers */
|
---|
31 | #define CLI_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
|
---|
32 |
|
---|
33 | /*
|
---|
34 | * These definitions depend on smb.h
|
---|
35 | */
|
---|
36 |
|
---|
37 | typedef struct file_info
|
---|
38 | {
|
---|
39 | SMB_BIG_UINT size;
|
---|
40 | uint16 mode;
|
---|
41 | uid_t uid;
|
---|
42 | gid_t gid;
|
---|
43 | /* these times are normally kept in GMT */
|
---|
44 | struct timespec mtime_ts;
|
---|
45 | struct timespec atime_ts;
|
---|
46 | struct timespec ctime_ts;
|
---|
47 | pstring name;
|
---|
48 | pstring dir;
|
---|
49 | char short_name[13*3]; /* the *3 is to cope with multi-byte */
|
---|
50 | } file_info;
|
---|
51 |
|
---|
52 | struct print_job_info
|
---|
53 | {
|
---|
54 | uint16 id;
|
---|
55 | uint16 priority;
|
---|
56 | size_t size;
|
---|
57 | fstring user;
|
---|
58 | fstring name;
|
---|
59 | time_t t;
|
---|
60 | };
|
---|
61 |
|
---|
62 | struct cli_pipe_auth_data {
|
---|
63 | enum pipe_auth_type auth_type; /* switch for the union below. Defined in ntdomain.h */
|
---|
64 | enum pipe_auth_level auth_level; /* defined in ntdomain.h */
|
---|
65 | union {
|
---|
66 | struct schannel_auth_struct *schannel_auth;
|
---|
67 | NTLMSSP_STATE *ntlmssp_state;
|
---|
68 | struct kerberos_auth_struct *kerberos_auth;
|
---|
69 | } a_u;
|
---|
70 | void (*cli_auth_data_free_func)(struct cli_pipe_auth_data *);
|
---|
71 | };
|
---|
72 |
|
---|
73 | struct rpc_pipe_client {
|
---|
74 | struct rpc_pipe_client *prev, *next;
|
---|
75 |
|
---|
76 | TALLOC_CTX *mem_ctx;
|
---|
77 |
|
---|
78 | struct cli_state *cli;
|
---|
79 |
|
---|
80 | int pipe_idx;
|
---|
81 | const char *pipe_name;
|
---|
82 | uint16 fnum;
|
---|
83 |
|
---|
84 | const char *domain;
|
---|
85 | const char *user_name;
|
---|
86 | struct pwd_info pwd;
|
---|
87 |
|
---|
88 | uint16 max_xmit_frag;
|
---|
89 | uint16 max_recv_frag;
|
---|
90 |
|
---|
91 | struct cli_pipe_auth_data auth;
|
---|
92 |
|
---|
93 | /* The following is only non-null on a netlogon pipe. */
|
---|
94 | struct dcinfo *dc;
|
---|
95 | };
|
---|
96 |
|
---|
97 | struct cli_state {
|
---|
98 | int port;
|
---|
99 | int fd;
|
---|
100 | int smb_rw_error; /* Copy of last read or write error. */
|
---|
101 | uint16 cnum;
|
---|
102 | uint16 pid;
|
---|
103 | uint16 mid;
|
---|
104 | uint16 vuid;
|
---|
105 | int protocol;
|
---|
106 | int sec_mode;
|
---|
107 | int rap_error;
|
---|
108 | int privileges;
|
---|
109 |
|
---|
110 | fstring desthost;
|
---|
111 |
|
---|
112 | /* The credentials used to open the cli_state connection. */
|
---|
113 | fstring domain;
|
---|
114 | fstring user_name;
|
---|
115 | struct pwd_info pwd;
|
---|
116 |
|
---|
117 | /*
|
---|
118 | * The following strings are the
|
---|
119 | * ones returned by the server if
|
---|
120 | * the protocol > NT1.
|
---|
121 | */
|
---|
122 | fstring server_type;
|
---|
123 | fstring server_os;
|
---|
124 | fstring server_domain;
|
---|
125 |
|
---|
126 | fstring share;
|
---|
127 | fstring dev;
|
---|
128 | struct nmb_name called;
|
---|
129 | struct nmb_name calling;
|
---|
130 | fstring full_dest_host_name;
|
---|
131 | struct in_addr dest_ip;
|
---|
132 |
|
---|
133 | DATA_BLOB secblob; /* cryptkey or negTokenInit */
|
---|
134 | uint32 sesskey;
|
---|
135 | int serverzone;
|
---|
136 | uint32 servertime;
|
---|
137 | int readbraw_supported;
|
---|
138 | int writebraw_supported;
|
---|
139 | int timeout; /* in milliseconds. */
|
---|
140 | size_t max_xmit;
|
---|
141 | size_t max_mux;
|
---|
142 | char *outbuf;
|
---|
143 | char *inbuf;
|
---|
144 | unsigned int bufsize;
|
---|
145 | int initialised;
|
---|
146 | int win95;
|
---|
147 | BOOL is_samba;
|
---|
148 | uint32 capabilities;
|
---|
149 | BOOL dfsroot;
|
---|
150 |
|
---|
151 | TALLOC_CTX *mem_ctx;
|
---|
152 |
|
---|
153 | smb_sign_info sign_info;
|
---|
154 |
|
---|
155 | /* the session key for this CLI, outside
|
---|
156 | any per-pipe authenticaion */
|
---|
157 | DATA_BLOB user_session_key;
|
---|
158 |
|
---|
159 | /* The list of pipes currently open on this connection. */
|
---|
160 | struct rpc_pipe_client *pipe_list;
|
---|
161 |
|
---|
162 | BOOL use_kerberos;
|
---|
163 | BOOL fallback_after_kerberos;
|
---|
164 | BOOL use_spnego;
|
---|
165 |
|
---|
166 | BOOL use_oplocks; /* should we use oplocks? */
|
---|
167 | BOOL use_level_II_oplocks; /* should we use level II oplocks? */
|
---|
168 |
|
---|
169 | /* a oplock break request handler */
|
---|
170 | BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
|
---|
171 |
|
---|
172 | BOOL force_dos_errors;
|
---|
173 | BOOL case_sensitive; /* False by default. */
|
---|
174 | };
|
---|
175 |
|
---|
176 | #define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
|
---|
177 | #define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
|
---|
178 | #define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
|
---|
179 |
|
---|
180 | #endif /* _CLIENT_H */
|
---|