Annotation of embedaddon/curl/lib/smb.h, revision 1.1.1.1
1.1 misho 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 - 2020, 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: } PACK;
197:
198: struct smb_read {
199: unsigned char word_count;
200: struct andx andx;
201: unsigned short fid;
202: unsigned int offset;
203: unsigned short max_bytes;
204: unsigned short min_bytes;
205: unsigned int timeout;
206: unsigned short remaining;
207: unsigned int offset_high;
208: unsigned short byte_count;
209: } PACK;
210:
211: struct smb_write {
212: struct smb_header h;
213: unsigned char word_count;
214: struct andx andx;
215: unsigned short fid;
216: unsigned int offset;
217: unsigned int timeout;
218: unsigned short write_mode;
219: unsigned short remaining;
220: unsigned short pad;
221: unsigned short data_length;
222: unsigned short data_offset;
223: unsigned int offset_high;
224: unsigned short byte_count;
225: unsigned char pad2;
226: } PACK;
227:
228: struct smb_close {
229: unsigned char word_count;
230: unsigned short fid;
231: unsigned int last_mtime;
232: unsigned short byte_count;
233: } PACK;
234:
235: struct smb_tree_disconnect {
236: unsigned char word_count;
237: unsigned short byte_count;
238: } PACK;
239:
240: #if defined(_MSC_VER) || defined(__ILEC400__)
241: # pragma pack(pop)
242: #endif
243:
244: #endif /* BUILDING_CURL_SMB_C */
245:
246: #if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
247: (CURL_SIZEOF_CURL_OFF_T > 4)
248:
249: #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)
250:
251: extern const struct Curl_handler Curl_handler_smb;
252: extern const struct Curl_handler Curl_handler_smbs;
253:
254: #endif /* !USE_WINDOWS_SSPI || USE_WIN32_CRYPTO */
255:
256: #endif /* CURL_DISABLE_SMB && USE_NTLM && CURL_SIZEOF_CURL_OFF_T > 4 */
257:
258: #endif /* HEADER_CURL_SMB_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>