comparison mupdf-source/thirdparty/curl/lib/smb.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 #ifndef HEADER_CURL_SMB_H
2 #define HEADER_CURL_SMB_H
3 /***************************************************************************
4 * _ _ ____ _
5 * Project ___| | | | _ \| |
6 * / __| | | | |_) | |
7 * | (__| |_| | _ <| |___
8 * \___|\___/|_| \_\_____|
9 *
10 * Copyright (C) 2014, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
11 * Copyright (C) 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
12 *
13 * This software is licensed as described in the file COPYING, which
14 * you should have received as part of this distribution. The terms
15 * are also available at https://curl.haxx.se/docs/copyright.html.
16 *
17 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
18 * copies of the Software, and permit persons to whom the Software is
19 * furnished to do so, under the terms of the COPYING file.
20 *
21 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
22 * KIND, either express or implied.
23 *
24 ***************************************************************************/
25
26 enum smb_conn_state {
27 SMB_NOT_CONNECTED = 0,
28 SMB_CONNECTING,
29 SMB_NEGOTIATE,
30 SMB_SETUP,
31 SMB_CONNECTED
32 };
33
34 struct smb_conn {
35 enum smb_conn_state state;
36 char *user;
37 char *domain;
38 char *share;
39 unsigned char challenge[8];
40 unsigned int session_key;
41 unsigned short uid;
42 char *recv_buf;
43 size_t upload_size;
44 size_t send_size;
45 size_t sent;
46 size_t got;
47 };
48
49 /*
50 * Definitions for SMB protocol data structures
51 */
52 #ifdef BUILDING_CURL_SMB_C
53
54 #if defined(_MSC_VER) || defined(__ILEC400__)
55 # define PACK
56 # pragma pack(push)
57 # pragma pack(1)
58 #elif defined(__GNUC__)
59 # define PACK __attribute__((packed))
60 #else
61 # define PACK
62 #endif
63
64 #define SMB_COM_CLOSE 0x04
65 #define SMB_COM_READ_ANDX 0x2e
66 #define SMB_COM_WRITE_ANDX 0x2f
67 #define SMB_COM_TREE_DISCONNECT 0x71
68 #define SMB_COM_NEGOTIATE 0x72
69 #define SMB_COM_SETUP_ANDX 0x73
70 #define SMB_COM_TREE_CONNECT_ANDX 0x75
71 #define SMB_COM_NT_CREATE_ANDX 0xa2
72 #define SMB_COM_NO_ANDX_COMMAND 0xff
73
74 #define SMB_WC_CLOSE 0x03
75 #define SMB_WC_READ_ANDX 0x0c
76 #define SMB_WC_WRITE_ANDX 0x0e
77 #define SMB_WC_SETUP_ANDX 0x0d
78 #define SMB_WC_TREE_CONNECT_ANDX 0x04
79 #define SMB_WC_NT_CREATE_ANDX 0x18
80
81 #define SMB_FLAGS_CANONICAL_PATHNAMES 0x10
82 #define SMB_FLAGS_CASELESS_PATHNAMES 0x08
83 #define SMB_FLAGS2_UNICODE_STRINGS 0x8000
84 #define SMB_FLAGS2_IS_LONG_NAME 0x0040
85 #define SMB_FLAGS2_KNOWS_LONG_NAME 0x0001
86
87 #define SMB_CAP_LARGE_FILES 0x08
88 #define SMB_GENERIC_WRITE 0x40000000
89 #define SMB_GENERIC_READ 0x80000000
90 #define SMB_FILE_SHARE_ALL 0x07
91 #define SMB_FILE_OPEN 0x01
92 #define SMB_FILE_OVERWRITE_IF 0x05
93
94 #define SMB_ERR_NOACCESS 0x00050001
95
96 struct smb_header {
97 unsigned char nbt_type;
98 unsigned char nbt_flags;
99 unsigned short nbt_length;
100 unsigned char magic[4];
101 unsigned char command;
102 unsigned int status;
103 unsigned char flags;
104 unsigned short flags2;
105 unsigned short pid_high;
106 unsigned char signature[8];
107 unsigned short pad;
108 unsigned short tid;
109 unsigned short pid;
110 unsigned short uid;
111 unsigned short mid;
112 } PACK;
113
114 struct smb_negotiate_response {
115 struct smb_header h;
116 unsigned char word_count;
117 unsigned short dialect_index;
118 unsigned char security_mode;
119 unsigned short max_mpx_count;
120 unsigned short max_number_vcs;
121 unsigned int max_buffer_size;
122 unsigned int max_raw_size;
123 unsigned int session_key;
124 unsigned int capabilities;
125 unsigned int system_time_low;
126 unsigned int system_time_high;
127 unsigned short server_time_zone;
128 unsigned char encryption_key_length;
129 unsigned short byte_count;
130 char bytes[1];
131 } PACK;
132
133 struct andx {
134 unsigned char command;
135 unsigned char pad;
136 unsigned short offset;
137 } PACK;
138
139 struct smb_setup {
140 unsigned char word_count;
141 struct andx andx;
142 unsigned short max_buffer_size;
143 unsigned short max_mpx_count;
144 unsigned short vc_number;
145 unsigned int session_key;
146 unsigned short lengths[2];
147 unsigned int pad;
148 unsigned int capabilities;
149 unsigned short byte_count;
150 char bytes[1024];
151 } PACK;
152
153 struct smb_tree_connect {
154 unsigned char word_count;
155 struct andx andx;
156 unsigned short flags;
157 unsigned short pw_len;
158 unsigned short byte_count;
159 char bytes[1024];
160 } PACK;
161
162 struct smb_nt_create {
163 unsigned char word_count;
164 struct andx andx;
165 unsigned char pad;
166 unsigned short name_length;
167 unsigned int flags;
168 unsigned int root_fid;
169 unsigned int access;
170 curl_off_t allocation_size;
171 unsigned int ext_file_attributes;
172 unsigned int share_access;
173 unsigned int create_disposition;
174 unsigned int create_options;
175 unsigned int impersonation_level;
176 unsigned char security_flags;
177 unsigned short byte_count;
178 char bytes[1024];
179 } PACK;
180
181 struct smb_nt_create_response {
182 struct smb_header h;
183 unsigned char word_count;
184 struct andx andx;
185 unsigned char op_lock_level;
186 unsigned short fid;
187 unsigned int create_disposition;
188
189 curl_off_t create_time;
190 curl_off_t last_access_time;
191 curl_off_t last_write_time;
192 curl_off_t last_change_time;
193 unsigned int ext_file_attributes;
194 curl_off_t allocation_size;
195 curl_off_t end_of_file;
196
197 } PACK;
198
199 struct smb_read {
200 unsigned char word_count;
201 struct andx andx;
202 unsigned short fid;
203 unsigned int offset;
204 unsigned short max_bytes;
205 unsigned short min_bytes;
206 unsigned int timeout;
207 unsigned short remaining;
208 unsigned int offset_high;
209 unsigned short byte_count;
210 } PACK;
211
212 struct smb_write {
213 struct smb_header h;
214 unsigned char word_count;
215 struct andx andx;
216 unsigned short fid;
217 unsigned int offset;
218 unsigned int timeout;
219 unsigned short write_mode;
220 unsigned short remaining;
221 unsigned short pad;
222 unsigned short data_length;
223 unsigned short data_offset;
224 unsigned int offset_high;
225 unsigned short byte_count;
226 unsigned char pad2;
227 } PACK;
228
229 struct smb_close {
230 unsigned char word_count;
231 unsigned short fid;
232 unsigned int last_mtime;
233 unsigned short byte_count;
234 } PACK;
235
236 struct smb_tree_disconnect {
237 unsigned char word_count;
238 unsigned short byte_count;
239 } PACK;
240
241 #if defined(_MSC_VER) || defined(__ILEC400__)
242 # pragma pack(pop)
243 #endif
244
245 #endif /* BUILDING_CURL_SMB_C */
246
247 #if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
248 (CURL_SIZEOF_CURL_OFF_T > 4)
249
250 #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)
251
252 extern const struct Curl_handler Curl_handler_smb;
253 extern const struct Curl_handler Curl_handler_smbs;
254
255 #endif /* !USE_WINDOWS_SSPI || USE_WIN32_CRYPTO */
256
257 #endif /* CURL_DISABLE_SMB && USE_NTLM && CURL_SIZEOF_CURL_OFF_T > 4 */
258
259 #endif /* HEADER_CURL_SMB_H */