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 | struct print_job_info
|
---|
38 | {
|
---|
39 | uint16 id;
|
---|
40 | uint16 priority;
|
---|
41 | size_t size;
|
---|
42 | fstring user;
|
---|
43 | fstring name;
|
---|
44 | time_t t;
|
---|
45 | };
|
---|
46 |
|
---|
47 | struct cli_pipe_auth_data {
|
---|
48 | enum pipe_auth_type auth_type; /* switch for the union below. Defined in ntdomain.h */
|
---|
49 | enum pipe_auth_level auth_level; /* defined in ntdomain.h */
|
---|
50 | union {
|
---|
51 | struct schannel_auth_struct *schannel_auth;
|
---|
52 | NTLMSSP_STATE *ntlmssp_state;
|
---|
53 | struct kerberos_auth_struct *kerberos_auth;
|
---|
54 | } a_u;
|
---|
55 | void (*cli_auth_data_free_func)(struct cli_pipe_auth_data *);
|
---|
56 | };
|
---|
57 |
|
---|
58 | struct rpc_pipe_client {
|
---|
59 | struct rpc_pipe_client *prev, *next;
|
---|
60 |
|
---|
61 | TALLOC_CTX *mem_ctx;
|
---|
62 |
|
---|
63 | struct cli_state *cli;
|
---|
64 |
|
---|
65 | int pipe_idx;
|
---|
66 | const char *pipe_name;
|
---|
67 | uint16 fnum;
|
---|
68 |
|
---|
69 | const char *domain;
|
---|
70 | const char *user_name;
|
---|
71 | struct pwd_info pwd;
|
---|
72 |
|
---|
73 | uint16 max_xmit_frag;
|
---|
74 | uint16 max_recv_frag;
|
---|
75 |
|
---|
76 | struct cli_pipe_auth_data auth;
|
---|
77 |
|
---|
78 | /* The following is only non-null on a netlogon pipe. */
|
---|
79 | struct dcinfo *dc;
|
---|
80 | };
|
---|
81 |
|
---|
82 | struct cli_state {
|
---|
83 | int port;
|
---|
84 | int fd;
|
---|
85 | int smb_rw_error; /* Copy of last read or write error. */
|
---|
86 | uint16 cnum;
|
---|
87 | uint16 pid;
|
---|
88 | uint16 mid;
|
---|
89 | uint16 vuid;
|
---|
90 | int protocol;
|
---|
91 | int sec_mode;
|
---|
92 | int rap_error;
|
---|
93 | int privileges;
|
---|
94 |
|
---|
95 | fstring desthost;
|
---|
96 |
|
---|
97 | /* The credentials used to open the cli_state connection. */
|
---|
98 | fstring domain;
|
---|
99 | fstring user_name;
|
---|
100 | struct pwd_info pwd;
|
---|
101 |
|
---|
102 | /*
|
---|
103 | * The following strings are the
|
---|
104 | * ones returned by the server if
|
---|
105 | * the protocol > NT1.
|
---|
106 | */
|
---|
107 | fstring server_type;
|
---|
108 | fstring server_os;
|
---|
109 | fstring server_domain;
|
---|
110 |
|
---|
111 | fstring share;
|
---|
112 | fstring dev;
|
---|
113 | struct nmb_name called;
|
---|
114 | struct nmb_name calling;
|
---|
115 | fstring full_dest_host_name;
|
---|
116 | struct in_addr dest_ip;
|
---|
117 |
|
---|
118 | DATA_BLOB secblob; /* cryptkey or negTokenInit */
|
---|
119 | uint32 sesskey;
|
---|
120 | int serverzone;
|
---|
121 | uint32 servertime;
|
---|
122 | int readbraw_supported;
|
---|
123 | int writebraw_supported;
|
---|
124 | int timeout; /* in milliseconds. */
|
---|
125 | size_t max_xmit;
|
---|
126 | size_t max_mux;
|
---|
127 | char *outbuf;
|
---|
128 | char *inbuf;
|
---|
129 | unsigned int bufsize;
|
---|
130 | int initialised;
|
---|
131 | int win95;
|
---|
132 | BOOL is_samba;
|
---|
133 | uint32 capabilities;
|
---|
134 | BOOL dfsroot;
|
---|
135 |
|
---|
136 | TALLOC_CTX *mem_ctx;
|
---|
137 |
|
---|
138 | smb_sign_info sign_info;
|
---|
139 |
|
---|
140 | /* the session key for this CLI, outside
|
---|
141 | any per-pipe authenticaion */
|
---|
142 | DATA_BLOB user_session_key;
|
---|
143 |
|
---|
144 | /* The list of pipes currently open on this connection. */
|
---|
145 | struct rpc_pipe_client *pipe_list;
|
---|
146 |
|
---|
147 | BOOL use_kerberos;
|
---|
148 | BOOL fallback_after_kerberos;
|
---|
149 | BOOL use_spnego;
|
---|
150 |
|
---|
151 | BOOL use_oplocks; /* should we use oplocks? */
|
---|
152 | BOOL use_level_II_oplocks; /* should we use level II oplocks? */
|
---|
153 |
|
---|
154 | /* a oplock break request handler */
|
---|
155 | BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
|
---|
156 |
|
---|
157 | BOOL force_dos_errors;
|
---|
158 | BOOL case_sensitive; /* False by default. */
|
---|
159 | };
|
---|
160 |
|
---|
161 | typedef struct file_info {
|
---|
162 | struct cli_state *cli;
|
---|
163 | SMB_BIG_UINT size;
|
---|
164 | uint16 mode;
|
---|
165 | uid_t uid;
|
---|
166 | gid_t gid;
|
---|
167 | /* these times are normally kept in GMT */
|
---|
168 | struct timespec mtime_ts;
|
---|
169 | struct timespec atime_ts;
|
---|
170 | struct timespec ctime_ts;
|
---|
171 | pstring name;
|
---|
172 | pstring dir;
|
---|
173 | char short_name[13*3]; /* the *3 is to cope with multi-byte */
|
---|
174 | } file_info;
|
---|
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 */
|
---|