File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / lib / smb.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:15 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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>