@zerodensity/smb-cpp 0.0.0-bootstrap.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -3
- package/darwin_arm64/libsmb2.1.dylib +0 -0
- package/darwin_arm64/libsmb2.6.1.0.dylib +0 -0
- package/darwin_arm64/libsmb2.dylib +0 -0
- package/darwin_arm64/smb_server_cpp_darwin_arm64 +0 -0
- package/darwin_arm64/third-party/libsmb2/COPYING +24 -0
- package/darwin_arm64/third-party/libsmb2/LICENCE-LGPL-2.1.txt +502 -0
- package/darwin_arm64/third-party/libsmb2/NOTICE.txt +13 -0
- package/darwin_arm64/third-party/libsmb2/README +413 -0
- package/darwin_arm64/third-party/libsmb2/source/CMakeLists.txt +205 -0
- package/darwin_arm64/third-party/libsmb2/source/COPYING +24 -0
- package/darwin_arm64/third-party/libsmb2/source/LICENCE-LGPL-2.1.txt +502 -0
- package/darwin_arm64/third-party/libsmb2/source/Makefile.am +15 -0
- package/darwin_arm64/third-party/libsmb2/source/Makefile.platform +112 -0
- package/darwin_arm64/third-party/libsmb2/source/README +413 -0
- package/darwin_arm64/third-party/libsmb2/source/Xbox/libsmb2.sln +25 -0
- package/darwin_arm64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj +248 -0
- package/darwin_arm64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj.filters +304 -0
- package/darwin_arm64/third-party/libsmb2/source/Xbox 360/libsmb2.sln +32 -0
- package/darwin_arm64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj +327 -0
- package/darwin_arm64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj.filters +268 -0
- package/darwin_arm64/third-party/libsmb2/source/bootstrap +2 -0
- package/darwin_arm64/third-party/libsmb2/source/cmake/ConfigureChecks.cmake +63 -0
- package/darwin_arm64/third-party/libsmb2/source/cmake/FindSMB2.cmake +37 -0
- package/darwin_arm64/third-party/libsmb2/source/cmake/Modules/FindGSSAPI.cmake +30 -0
- package/darwin_arm64/third-party/libsmb2/source/cmake/Modules/FindLibKrb5.cmake +44 -0
- package/darwin_arm64/third-party/libsmb2/source/cmake/config.h.cmake +126 -0
- package/darwin_arm64/third-party/libsmb2/source/cmake/libsmb2.pc.cmake +14 -0
- package/darwin_arm64/third-party/libsmb2/source/component.mk +5 -0
- package/darwin_arm64/third-party/libsmb2/source/configure.ac +184 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareAdd.yaml +9 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareCheck.yaml +4 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDel.yaml +5 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDelSticky.yaml +5 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareEnum.yaml +7 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareGetInfo.yaml +6 -0
- package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareSetInfo.yaml +11 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/CMakeLists.txt +28 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/Makefile.am +54 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/dcerpc.c +254 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/picow/CMakeLists.txt +72 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/picow/README.md +2 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/picow/main.cpp +119 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/picow/smb-ls-sync.c +0 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-CMD-FIND.c +335 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-cat-async.c +183 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-cat-sync.c +105 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-ftruncate-sync.c +87 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-ls-async.c +185 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-ls-epoll.c +234 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-lsa-lookupsids.c +292 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-lseek-sync.c +101 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-notify.c +183 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-put-async.c +175 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-put-sync.c +100 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-raw-fsstat-async.c +353 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-raw-getsd-async.c +401 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-raw-stat-async.c +448 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-readlink.c +80 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-rename-sync.c +80 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-server-sync.c +497 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-share-enum-sync.c +146 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-share-enum.c +208 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-share-info.c +255 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-stat-sync.c +103 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-statvfs-sync.c +85 -0
- package/darwin_arm64/third-party/libsmb2/source/examples/smb2-truncate-sync.c +78 -0
- package/darwin_arm64/third-party/libsmb2/source/idf_component.yml +5 -0
- package/darwin_arm64/third-party/libsmb2/source/include/Makefile.am +15 -0
- package/darwin_arm64/third-party/libsmb2/source/include/amiga_os/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/include/apple/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/include/asprintf.h +65 -0
- package/darwin_arm64/third-party/libsmb2/source/include/esp/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/include/libsmb2-private.h +670 -0
- package/darwin_arm64/third-party/libsmb2/source/include/module.modulemap +21 -0
- package/darwin_arm64/third-party/libsmb2/source/include/picow/FreeRTOSConfig.h +143 -0
- package/darwin_arm64/third-party/libsmb2/source/include/picow/README.md +2 -0
- package/darwin_arm64/third-party/libsmb2/source/include/picow/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/include/picow/lwipopts.h +27 -0
- package/darwin_arm64/third-party/libsmb2/source/include/picow/lwipopts_examples_common.h +90 -0
- package/darwin_arm64/third-party/libsmb2/source/include/portable-endian.h +377 -0
- package/darwin_arm64/third-party/libsmb2/source/include/ps3/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/include/slist.h +63 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-lsa.h +172 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-srvsvc.h +276 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc.h +203 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-raw.h +497 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2.h +1409 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/smb2-errors.h +549 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/smb2-ioctl.h +83 -0
- package/darwin_arm64/third-party/libsmb2/source/include/smb2/smb2.h +1251 -0
- package/darwin_arm64/third-party/libsmb2/source/include/xbox/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/include/xbox 360/config.h +139 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/CMakeLists.txt +260 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.AMIGA +46 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.AMIGA_AROS +59 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.AMIGA_OS3 +59 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.PS3_PPU +100 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.am +85 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes.c +33 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes.h +29 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes128ccm.c +185 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes128ccm.h +28 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes_apple.c +70 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes_apple.h +34 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes_reference.c +560 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/aes_reference.h +49 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/alloc.c +154 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/asn1-ber.c +1078 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/asn1-ber.h +161 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/compat.c +599 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/compat.h +829 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/dcerpc-lsa.c +641 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/dcerpc-srvsvc.c +885 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/dcerpc.c +2513 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/dreamcast/vfs.c +328 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/dreamcast/vfs.h +15 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/errors.c +1192 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/hmac-md5.c +84 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/hmac-md5.h +42 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/hmac.c +245 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/init.c +778 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/krb5-wrapper.c +1072 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/krb5-wrapper.h +134 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/libsmb2.c +4292 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/libsmb2.syms +168 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/md4.h +43 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/md4c.c +289 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/md5.c +249 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/md5.h +76 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ntlmssp.c +1380 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ntlmssp.h +84 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/pdu.c +1159 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/TODO +6 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/imports.lst +84 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/irx_imports.h +28 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/ps2smb2.h +35 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/smb2_fio.c +816 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/smb2_fio.h +15 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/ps2/smb2man.c +69 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/sha-private.h +28 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/sha.h +334 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/sha1.c +450 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/sha224-256.c +611 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/sha384-512.c +1059 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-close.c +240 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-create.c +508 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-echo.c +202 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-error.c +157 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-flush.c +207 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-ioctl.c +445 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-lock.c +312 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-logoff.c +190 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-negotiate.c +646 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-notify-change.c +278 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-oplock-break.c +543 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-query-directory.c +580 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-query-info.c +753 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-read.c +391 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-session-setup.c +331 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-set-info.c +361 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-tree-connect.c +278 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-tree-disconnect.c +171 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-write.c +319 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-file-info.c +537 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-filesystem-info.c +384 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-reparse-point.c +117 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-security-descriptor.c +361 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-share-enum.c +181 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-signing.c +279 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb2-signing.h +51 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb3-seal.c +165 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/smb3-seal.h +43 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/socket.c +1502 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/spnego-wrapper.c +634 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/spnego-wrapper.h +74 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/sync.c +988 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/timestamps.c +70 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/unicode.c +307 -0
- package/darwin_arm64/third-party/libsmb2/source/lib/usha.c +345 -0
- package/darwin_arm64/third-party/libsmb2/source/libsmb2.pc.in +14 -0
- package/darwin_arm64/third-party/libsmb2/source/packaging/RPM/libsmb2.spec.in +135 -0
- package/darwin_arm64/third-party/libsmb2/source/packaging/RPM/makerpms.sh +114 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/Makefile.am +34 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/README +28 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/aes128ccm-test.c +119 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/functions.sh +11 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/ld_sockerr.c +58 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/metastat-0202-censored.c +136 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/ntlmssp_generate_blob.c +123 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/prog_cat.c +188 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/prog_cat_cancel.c +203 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/prog_ls.c +189 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/prog_mkdir.c +85 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/prog_rmdir.c +84 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/smb2-dcerpc-coder-test.c +635 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0100_ls_basic.sh +22 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0101_ls_basic_valgrind.sh +23 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0102_ls_basic_socket_error.sh +16 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0103_ls_basic_valgrind_malloc_error.sh +25 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0200_mkdir.sh +15 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0201_mkdir_valgrind.sh +15 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0210_cp_basic.sh +25 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0211_cp_valgrind.sh +26 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0212_cp_valgrind_socket_error.sh +29 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0300_cat_basic.sh +13 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0301_cat_valgrind.sh +13 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0302_cat_valgrind_socket_error.sh +18 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0310_cancel_pdu.sh +13 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_0400_overdrawn_0202.sh +25 -0
- package/darwin_arm64/third-party/libsmb2/source/tests/test_900_dcerpc.sh +10 -0
- package/darwin_arm64/third-party/libsmb2/source/utils/Makefile.am +11 -0
- package/darwin_arm64/third-party/libsmb2/source/utils/smb2-cp.c +265 -0
- package/darwin_arm64/third-party/libsmb2/source/utils/smb2-ls.c +135 -0
- package/linux_x64/libsmb2.so +0 -0
- package/linux_x64/libsmb2.so.1 +0 -0
- package/linux_x64/libsmb2.so.6.1.0 +0 -0
- package/linux_x64/smb_server_cpp_linux_x64 +0 -0
- package/linux_x64/third-party/libsmb2/COPYING +24 -0
- package/linux_x64/third-party/libsmb2/LICENCE-LGPL-2.1.txt +502 -0
- package/linux_x64/third-party/libsmb2/NOTICE.txt +13 -0
- package/linux_x64/third-party/libsmb2/README +413 -0
- package/linux_x64/third-party/libsmb2/source/CMakeLists.txt +205 -0
- package/linux_x64/third-party/libsmb2/source/COPYING +24 -0
- package/linux_x64/third-party/libsmb2/source/LICENCE-LGPL-2.1.txt +502 -0
- package/linux_x64/third-party/libsmb2/source/Makefile.am +15 -0
- package/linux_x64/third-party/libsmb2/source/Makefile.platform +112 -0
- package/linux_x64/third-party/libsmb2/source/README +413 -0
- package/linux_x64/third-party/libsmb2/source/Xbox/libsmb2.sln +25 -0
- package/linux_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj +248 -0
- package/linux_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj.filters +304 -0
- package/linux_x64/third-party/libsmb2/source/Xbox 360/libsmb2.sln +32 -0
- package/linux_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj +327 -0
- package/linux_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj.filters +268 -0
- package/linux_x64/third-party/libsmb2/source/bootstrap +2 -0
- package/linux_x64/third-party/libsmb2/source/cmake/ConfigureChecks.cmake +63 -0
- package/linux_x64/third-party/libsmb2/source/cmake/FindSMB2.cmake +37 -0
- package/linux_x64/third-party/libsmb2/source/cmake/Modules/FindGSSAPI.cmake +30 -0
- package/linux_x64/third-party/libsmb2/source/cmake/Modules/FindLibKrb5.cmake +44 -0
- package/linux_x64/third-party/libsmb2/source/cmake/config.h.cmake +126 -0
- package/linux_x64/third-party/libsmb2/source/cmake/libsmb2.pc.cmake +14 -0
- package/linux_x64/third-party/libsmb2/source/component.mk +5 -0
- package/linux_x64/third-party/libsmb2/source/configure.ac +184 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareAdd.yaml +9 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareCheck.yaml +4 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDel.yaml +5 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDelSticky.yaml +5 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareEnum.yaml +7 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareGetInfo.yaml +6 -0
- package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareSetInfo.yaml +11 -0
- package/linux_x64/third-party/libsmb2/source/examples/CMakeLists.txt +28 -0
- package/linux_x64/third-party/libsmb2/source/examples/Makefile.am +54 -0
- package/linux_x64/third-party/libsmb2/source/examples/dcerpc.c +254 -0
- package/linux_x64/third-party/libsmb2/source/examples/picow/CMakeLists.txt +72 -0
- package/linux_x64/third-party/libsmb2/source/examples/picow/README.md +2 -0
- package/linux_x64/third-party/libsmb2/source/examples/picow/main.cpp +119 -0
- package/linux_x64/third-party/libsmb2/source/examples/picow/smb-ls-sync.c +0 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-CMD-FIND.c +335 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-cat-async.c +183 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-cat-sync.c +105 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-ftruncate-sync.c +87 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-ls-async.c +185 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-ls-epoll.c +234 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-lsa-lookupsids.c +292 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-lseek-sync.c +101 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-notify.c +183 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-put-async.c +175 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-put-sync.c +100 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-raw-fsstat-async.c +353 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-raw-getsd-async.c +401 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-raw-stat-async.c +448 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-readlink.c +80 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-rename-sync.c +80 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-server-sync.c +497 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-share-enum-sync.c +146 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-share-enum.c +208 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-share-info.c +255 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-stat-sync.c +103 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-statvfs-sync.c +85 -0
- package/linux_x64/third-party/libsmb2/source/examples/smb2-truncate-sync.c +78 -0
- package/linux_x64/third-party/libsmb2/source/idf_component.yml +5 -0
- package/linux_x64/third-party/libsmb2/source/include/Makefile.am +15 -0
- package/linux_x64/third-party/libsmb2/source/include/amiga_os/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/include/apple/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/include/asprintf.h +65 -0
- package/linux_x64/third-party/libsmb2/source/include/esp/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/include/libsmb2-private.h +670 -0
- package/linux_x64/third-party/libsmb2/source/include/module.modulemap +21 -0
- package/linux_x64/third-party/libsmb2/source/include/picow/FreeRTOSConfig.h +143 -0
- package/linux_x64/third-party/libsmb2/source/include/picow/README.md +2 -0
- package/linux_x64/third-party/libsmb2/source/include/picow/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/include/picow/lwipopts.h +27 -0
- package/linux_x64/third-party/libsmb2/source/include/picow/lwipopts_examples_common.h +90 -0
- package/linux_x64/third-party/libsmb2/source/include/portable-endian.h +377 -0
- package/linux_x64/third-party/libsmb2/source/include/ps3/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/include/slist.h +63 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-lsa.h +172 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-srvsvc.h +276 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc.h +203 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-raw.h +497 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2.h +1409 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/smb2-errors.h +549 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/smb2-ioctl.h +83 -0
- package/linux_x64/third-party/libsmb2/source/include/smb2/smb2.h +1251 -0
- package/linux_x64/third-party/libsmb2/source/include/xbox/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/include/xbox 360/config.h +139 -0
- package/linux_x64/third-party/libsmb2/source/lib/CMakeLists.txt +260 -0
- package/linux_x64/third-party/libsmb2/source/lib/Makefile.AMIGA +46 -0
- package/linux_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_AROS +59 -0
- package/linux_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_OS3 +59 -0
- package/linux_x64/third-party/libsmb2/source/lib/Makefile.PS3_PPU +100 -0
- package/linux_x64/third-party/libsmb2/source/lib/Makefile.am +85 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes.c +33 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes.h +29 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes128ccm.c +185 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes128ccm.h +28 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes_apple.c +70 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes_apple.h +34 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes_reference.c +560 -0
- package/linux_x64/third-party/libsmb2/source/lib/aes_reference.h +49 -0
- package/linux_x64/third-party/libsmb2/source/lib/alloc.c +154 -0
- package/linux_x64/third-party/libsmb2/source/lib/asn1-ber.c +1078 -0
- package/linux_x64/third-party/libsmb2/source/lib/asn1-ber.h +161 -0
- package/linux_x64/third-party/libsmb2/source/lib/compat.c +599 -0
- package/linux_x64/third-party/libsmb2/source/lib/compat.h +829 -0
- package/linux_x64/third-party/libsmb2/source/lib/dcerpc-lsa.c +641 -0
- package/linux_x64/third-party/libsmb2/source/lib/dcerpc-srvsvc.c +885 -0
- package/linux_x64/third-party/libsmb2/source/lib/dcerpc.c +2513 -0
- package/linux_x64/third-party/libsmb2/source/lib/dreamcast/vfs.c +328 -0
- package/linux_x64/third-party/libsmb2/source/lib/dreamcast/vfs.h +15 -0
- package/linux_x64/third-party/libsmb2/source/lib/errors.c +1192 -0
- package/linux_x64/third-party/libsmb2/source/lib/hmac-md5.c +84 -0
- package/linux_x64/third-party/libsmb2/source/lib/hmac-md5.h +42 -0
- package/linux_x64/third-party/libsmb2/source/lib/hmac.c +245 -0
- package/linux_x64/third-party/libsmb2/source/lib/init.c +778 -0
- package/linux_x64/third-party/libsmb2/source/lib/krb5-wrapper.c +1072 -0
- package/linux_x64/third-party/libsmb2/source/lib/krb5-wrapper.h +134 -0
- package/linux_x64/third-party/libsmb2/source/lib/libsmb2.c +4292 -0
- package/linux_x64/third-party/libsmb2/source/lib/libsmb2.syms +168 -0
- package/linux_x64/third-party/libsmb2/source/lib/md4.h +43 -0
- package/linux_x64/third-party/libsmb2/source/lib/md4c.c +289 -0
- package/linux_x64/third-party/libsmb2/source/lib/md5.c +249 -0
- package/linux_x64/third-party/libsmb2/source/lib/md5.h +76 -0
- package/linux_x64/third-party/libsmb2/source/lib/ntlmssp.c +1380 -0
- package/linux_x64/third-party/libsmb2/source/lib/ntlmssp.h +84 -0
- package/linux_x64/third-party/libsmb2/source/lib/pdu.c +1159 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/TODO +6 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/imports.lst +84 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/irx_imports.h +28 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/ps2smb2.h +35 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.c +816 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.h +15 -0
- package/linux_x64/third-party/libsmb2/source/lib/ps2/smb2man.c +69 -0
- package/linux_x64/third-party/libsmb2/source/lib/sha-private.h +28 -0
- package/linux_x64/third-party/libsmb2/source/lib/sha.h +334 -0
- package/linux_x64/third-party/libsmb2/source/lib/sha1.c +450 -0
- package/linux_x64/third-party/libsmb2/source/lib/sha224-256.c +611 -0
- package/linux_x64/third-party/libsmb2/source/lib/sha384-512.c +1059 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-close.c +240 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-create.c +508 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-echo.c +202 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-error.c +157 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-flush.c +207 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-ioctl.c +445 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-lock.c +312 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-logoff.c +190 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-negotiate.c +646 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-notify-change.c +278 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-oplock-break.c +543 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-query-directory.c +580 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-query-info.c +753 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-read.c +391 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-session-setup.c +331 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-set-info.c +361 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-connect.c +278 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-disconnect.c +171 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-write.c +319 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-data-file-info.c +537 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-data-filesystem-info.c +384 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-data-reparse-point.c +117 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-data-security-descriptor.c +361 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-share-enum.c +181 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-signing.c +279 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb2-signing.h +51 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb3-seal.c +165 -0
- package/linux_x64/third-party/libsmb2/source/lib/smb3-seal.h +43 -0
- package/linux_x64/third-party/libsmb2/source/lib/socket.c +1502 -0
- package/linux_x64/third-party/libsmb2/source/lib/spnego-wrapper.c +634 -0
- package/linux_x64/third-party/libsmb2/source/lib/spnego-wrapper.h +74 -0
- package/linux_x64/third-party/libsmb2/source/lib/sync.c +988 -0
- package/linux_x64/third-party/libsmb2/source/lib/timestamps.c +70 -0
- package/linux_x64/third-party/libsmb2/source/lib/unicode.c +307 -0
- package/linux_x64/third-party/libsmb2/source/lib/usha.c +345 -0
- package/linux_x64/third-party/libsmb2/source/libsmb2.pc.in +14 -0
- package/linux_x64/third-party/libsmb2/source/packaging/RPM/libsmb2.spec.in +135 -0
- package/linux_x64/third-party/libsmb2/source/packaging/RPM/makerpms.sh +114 -0
- package/linux_x64/third-party/libsmb2/source/tests/Makefile.am +34 -0
- package/linux_x64/third-party/libsmb2/source/tests/README +28 -0
- package/linux_x64/third-party/libsmb2/source/tests/aes128ccm-test.c +119 -0
- package/linux_x64/third-party/libsmb2/source/tests/functions.sh +11 -0
- package/linux_x64/third-party/libsmb2/source/tests/ld_sockerr.c +58 -0
- package/linux_x64/third-party/libsmb2/source/tests/metastat-0202-censored.c +136 -0
- package/linux_x64/third-party/libsmb2/source/tests/ntlmssp_generate_blob.c +123 -0
- package/linux_x64/third-party/libsmb2/source/tests/prog_cat.c +188 -0
- package/linux_x64/third-party/libsmb2/source/tests/prog_cat_cancel.c +203 -0
- package/linux_x64/third-party/libsmb2/source/tests/prog_ls.c +189 -0
- package/linux_x64/third-party/libsmb2/source/tests/prog_mkdir.c +85 -0
- package/linux_x64/third-party/libsmb2/source/tests/prog_rmdir.c +84 -0
- package/linux_x64/third-party/libsmb2/source/tests/smb2-dcerpc-coder-test.c +635 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0100_ls_basic.sh +22 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0101_ls_basic_valgrind.sh +23 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0102_ls_basic_socket_error.sh +16 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0103_ls_basic_valgrind_malloc_error.sh +25 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0200_mkdir.sh +15 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0201_mkdir_valgrind.sh +15 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0210_cp_basic.sh +25 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0211_cp_valgrind.sh +26 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0212_cp_valgrind_socket_error.sh +29 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0300_cat_basic.sh +13 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0301_cat_valgrind.sh +13 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0302_cat_valgrind_socket_error.sh +18 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0310_cancel_pdu.sh +13 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_0400_overdrawn_0202.sh +25 -0
- package/linux_x64/third-party/libsmb2/source/tests/test_900_dcerpc.sh +10 -0
- package/linux_x64/third-party/libsmb2/source/utils/Makefile.am +11 -0
- package/linux_x64/third-party/libsmb2/source/utils/smb2-cp.c +265 -0
- package/linux_x64/third-party/libsmb2/source/utils/smb2-ls.c +135 -0
- package/package.json +10 -4
- package/smb2.proto +164 -0
- package/win32_x64/smb2.dll +0 -0
- package/win32_x64/smb_server_cpp_win32_x64.exe +0 -0
- package/win32_x64/third-party/libsmb2/COPYING +24 -0
- package/win32_x64/third-party/libsmb2/LICENCE-LGPL-2.1.txt +502 -0
- package/win32_x64/third-party/libsmb2/NOTICE.txt +13 -0
- package/win32_x64/third-party/libsmb2/README +413 -0
- package/win32_x64/third-party/libsmb2/source/CMakeLists.txt +205 -0
- package/win32_x64/third-party/libsmb2/source/COPYING +24 -0
- package/win32_x64/third-party/libsmb2/source/LICENCE-LGPL-2.1.txt +502 -0
- package/win32_x64/third-party/libsmb2/source/Makefile.am +15 -0
- package/win32_x64/third-party/libsmb2/source/Makefile.platform +112 -0
- package/win32_x64/third-party/libsmb2/source/README +413 -0
- package/win32_x64/third-party/libsmb2/source/Xbox/libsmb2.sln +25 -0
- package/win32_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj +248 -0
- package/win32_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj.filters +304 -0
- package/win32_x64/third-party/libsmb2/source/Xbox 360/libsmb2.sln +32 -0
- package/win32_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj +327 -0
- package/win32_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj.filters +268 -0
- package/win32_x64/third-party/libsmb2/source/bootstrap +2 -0
- package/win32_x64/third-party/libsmb2/source/cmake/ConfigureChecks.cmake +63 -0
- package/win32_x64/third-party/libsmb2/source/cmake/FindSMB2.cmake +37 -0
- package/win32_x64/third-party/libsmb2/source/cmake/Modules/FindGSSAPI.cmake +30 -0
- package/win32_x64/third-party/libsmb2/source/cmake/Modules/FindLibKrb5.cmake +44 -0
- package/win32_x64/third-party/libsmb2/source/cmake/config.h.cmake +126 -0
- package/win32_x64/third-party/libsmb2/source/cmake/libsmb2.pc.cmake +14 -0
- package/win32_x64/third-party/libsmb2/source/component.mk +5 -0
- package/win32_x64/third-party/libsmb2/source/configure.ac +184 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareAdd.yaml +9 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareCheck.yaml +4 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDel.yaml +5 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDelSticky.yaml +5 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareEnum.yaml +7 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareGetInfo.yaml +6 -0
- package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareSetInfo.yaml +11 -0
- package/win32_x64/third-party/libsmb2/source/examples/CMakeLists.txt +28 -0
- package/win32_x64/third-party/libsmb2/source/examples/Makefile.am +54 -0
- package/win32_x64/third-party/libsmb2/source/examples/dcerpc.c +254 -0
- package/win32_x64/third-party/libsmb2/source/examples/picow/CMakeLists.txt +72 -0
- package/win32_x64/third-party/libsmb2/source/examples/picow/README.md +2 -0
- package/win32_x64/third-party/libsmb2/source/examples/picow/main.cpp +119 -0
- package/win32_x64/third-party/libsmb2/source/examples/picow/smb-ls-sync.c +0 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-CMD-FIND.c +335 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-cat-async.c +183 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-cat-sync.c +105 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-ftruncate-sync.c +87 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-ls-async.c +185 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-ls-epoll.c +234 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-lsa-lookupsids.c +292 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-lseek-sync.c +101 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-notify.c +183 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-put-async.c +175 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-put-sync.c +100 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-raw-fsstat-async.c +353 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-raw-getsd-async.c +401 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-raw-stat-async.c +448 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-readlink.c +80 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-rename-sync.c +80 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-server-sync.c +497 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-share-enum-sync.c +146 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-share-enum.c +208 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-share-info.c +255 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-stat-sync.c +103 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-statvfs-sync.c +85 -0
- package/win32_x64/third-party/libsmb2/source/examples/smb2-truncate-sync.c +78 -0
- package/win32_x64/third-party/libsmb2/source/idf_component.yml +5 -0
- package/win32_x64/third-party/libsmb2/source/include/Makefile.am +15 -0
- package/win32_x64/third-party/libsmb2/source/include/amiga_os/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/include/apple/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/include/asprintf.h +65 -0
- package/win32_x64/third-party/libsmb2/source/include/esp/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/include/libsmb2-private.h +670 -0
- package/win32_x64/third-party/libsmb2/source/include/module.modulemap +21 -0
- package/win32_x64/third-party/libsmb2/source/include/picow/FreeRTOSConfig.h +143 -0
- package/win32_x64/third-party/libsmb2/source/include/picow/README.md +2 -0
- package/win32_x64/third-party/libsmb2/source/include/picow/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/include/picow/lwipopts.h +27 -0
- package/win32_x64/third-party/libsmb2/source/include/picow/lwipopts_examples_common.h +90 -0
- package/win32_x64/third-party/libsmb2/source/include/portable-endian.h +377 -0
- package/win32_x64/third-party/libsmb2/source/include/ps3/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/include/slist.h +63 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-lsa.h +172 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-srvsvc.h +276 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc.h +203 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-raw.h +497 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2.h +1409 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/smb2-errors.h +549 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/smb2-ioctl.h +83 -0
- package/win32_x64/third-party/libsmb2/source/include/smb2/smb2.h +1251 -0
- package/win32_x64/third-party/libsmb2/source/include/xbox/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/include/xbox 360/config.h +139 -0
- package/win32_x64/third-party/libsmb2/source/lib/CMakeLists.txt +260 -0
- package/win32_x64/third-party/libsmb2/source/lib/Makefile.AMIGA +46 -0
- package/win32_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_AROS +59 -0
- package/win32_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_OS3 +59 -0
- package/win32_x64/third-party/libsmb2/source/lib/Makefile.PS3_PPU +100 -0
- package/win32_x64/third-party/libsmb2/source/lib/Makefile.am +85 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes.c +33 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes.h +29 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes128ccm.c +185 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes128ccm.h +28 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes_apple.c +70 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes_apple.h +34 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes_reference.c +560 -0
- package/win32_x64/third-party/libsmb2/source/lib/aes_reference.h +49 -0
- package/win32_x64/third-party/libsmb2/source/lib/alloc.c +154 -0
- package/win32_x64/third-party/libsmb2/source/lib/asn1-ber.c +1078 -0
- package/win32_x64/third-party/libsmb2/source/lib/asn1-ber.h +161 -0
- package/win32_x64/third-party/libsmb2/source/lib/compat.c +599 -0
- package/win32_x64/third-party/libsmb2/source/lib/compat.h +829 -0
- package/win32_x64/third-party/libsmb2/source/lib/dcerpc-lsa.c +641 -0
- package/win32_x64/third-party/libsmb2/source/lib/dcerpc-srvsvc.c +885 -0
- package/win32_x64/third-party/libsmb2/source/lib/dcerpc.c +2513 -0
- package/win32_x64/third-party/libsmb2/source/lib/dreamcast/vfs.c +328 -0
- package/win32_x64/third-party/libsmb2/source/lib/dreamcast/vfs.h +15 -0
- package/win32_x64/third-party/libsmb2/source/lib/errors.c +1192 -0
- package/win32_x64/third-party/libsmb2/source/lib/hmac-md5.c +84 -0
- package/win32_x64/third-party/libsmb2/source/lib/hmac-md5.h +42 -0
- package/win32_x64/third-party/libsmb2/source/lib/hmac.c +245 -0
- package/win32_x64/third-party/libsmb2/source/lib/init.c +778 -0
- package/win32_x64/third-party/libsmb2/source/lib/krb5-wrapper.c +1072 -0
- package/win32_x64/third-party/libsmb2/source/lib/krb5-wrapper.h +134 -0
- package/win32_x64/third-party/libsmb2/source/lib/libsmb2.c +4292 -0
- package/win32_x64/third-party/libsmb2/source/lib/libsmb2.syms +168 -0
- package/win32_x64/third-party/libsmb2/source/lib/md4.h +43 -0
- package/win32_x64/third-party/libsmb2/source/lib/md4c.c +289 -0
- package/win32_x64/third-party/libsmb2/source/lib/md5.c +249 -0
- package/win32_x64/third-party/libsmb2/source/lib/md5.h +76 -0
- package/win32_x64/third-party/libsmb2/source/lib/ntlmssp.c +1380 -0
- package/win32_x64/third-party/libsmb2/source/lib/ntlmssp.h +84 -0
- package/win32_x64/third-party/libsmb2/source/lib/pdu.c +1159 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/TODO +6 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/imports.lst +84 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/irx_imports.h +28 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/ps2smb2.h +35 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.c +816 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.h +15 -0
- package/win32_x64/third-party/libsmb2/source/lib/ps2/smb2man.c +69 -0
- package/win32_x64/third-party/libsmb2/source/lib/sha-private.h +28 -0
- package/win32_x64/third-party/libsmb2/source/lib/sha.h +334 -0
- package/win32_x64/third-party/libsmb2/source/lib/sha1.c +450 -0
- package/win32_x64/third-party/libsmb2/source/lib/sha224-256.c +611 -0
- package/win32_x64/third-party/libsmb2/source/lib/sha384-512.c +1059 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-close.c +240 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-create.c +508 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-echo.c +202 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-error.c +157 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-flush.c +207 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-ioctl.c +445 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-lock.c +312 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-logoff.c +190 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-negotiate.c +646 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-notify-change.c +278 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-oplock-break.c +543 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-query-directory.c +580 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-query-info.c +753 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-read.c +391 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-session-setup.c +331 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-set-info.c +361 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-connect.c +278 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-disconnect.c +171 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-write.c +319 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-data-file-info.c +537 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-data-filesystem-info.c +384 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-data-reparse-point.c +117 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-data-security-descriptor.c +361 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-share-enum.c +181 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-signing.c +279 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb2-signing.h +51 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb3-seal.c +165 -0
- package/win32_x64/third-party/libsmb2/source/lib/smb3-seal.h +43 -0
- package/win32_x64/third-party/libsmb2/source/lib/socket.c +1502 -0
- package/win32_x64/third-party/libsmb2/source/lib/spnego-wrapper.c +634 -0
- package/win32_x64/third-party/libsmb2/source/lib/spnego-wrapper.h +74 -0
- package/win32_x64/third-party/libsmb2/source/lib/sync.c +988 -0
- package/win32_x64/third-party/libsmb2/source/lib/timestamps.c +70 -0
- package/win32_x64/third-party/libsmb2/source/lib/unicode.c +307 -0
- package/win32_x64/third-party/libsmb2/source/lib/usha.c +345 -0
- package/win32_x64/third-party/libsmb2/source/libsmb2.pc.in +14 -0
- package/win32_x64/third-party/libsmb2/source/packaging/RPM/libsmb2.spec.in +135 -0
- package/win32_x64/third-party/libsmb2/source/packaging/RPM/makerpms.sh +114 -0
- package/win32_x64/third-party/libsmb2/source/tests/Makefile.am +34 -0
- package/win32_x64/third-party/libsmb2/source/tests/README +28 -0
- package/win32_x64/third-party/libsmb2/source/tests/aes128ccm-test.c +119 -0
- package/win32_x64/third-party/libsmb2/source/tests/functions.sh +11 -0
- package/win32_x64/third-party/libsmb2/source/tests/ld_sockerr.c +58 -0
- package/win32_x64/third-party/libsmb2/source/tests/metastat-0202-censored.c +136 -0
- package/win32_x64/third-party/libsmb2/source/tests/ntlmssp_generate_blob.c +123 -0
- package/win32_x64/third-party/libsmb2/source/tests/prog_cat.c +188 -0
- package/win32_x64/third-party/libsmb2/source/tests/prog_cat_cancel.c +203 -0
- package/win32_x64/third-party/libsmb2/source/tests/prog_ls.c +189 -0
- package/win32_x64/third-party/libsmb2/source/tests/prog_mkdir.c +85 -0
- package/win32_x64/third-party/libsmb2/source/tests/prog_rmdir.c +84 -0
- package/win32_x64/third-party/libsmb2/source/tests/smb2-dcerpc-coder-test.c +635 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0100_ls_basic.sh +22 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0101_ls_basic_valgrind.sh +23 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0102_ls_basic_socket_error.sh +16 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0103_ls_basic_valgrind_malloc_error.sh +25 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0200_mkdir.sh +15 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0201_mkdir_valgrind.sh +15 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0210_cp_basic.sh +25 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0211_cp_valgrind.sh +26 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0212_cp_valgrind_socket_error.sh +29 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0300_cat_basic.sh +13 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0301_cat_valgrind.sh +13 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0302_cat_valgrind_socket_error.sh +18 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0310_cancel_pdu.sh +13 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_0400_overdrawn_0202.sh +25 -0
- package/win32_x64/third-party/libsmb2/source/tests/test_900_dcerpc.sh +10 -0
- package/win32_x64/third-party/libsmb2/source/utils/Makefile.am +11 -0
- package/win32_x64/third-party/libsmb2/source/utils/smb2-cp.c +265 -0
- package/win32_x64/third-party/libsmb2/source/utils/smb2-ls.c +135 -0
|
@@ -0,0 +1,1502 @@
|
|
|
1
|
+
/* -*- mode:c; tab-width:8; c-basic-offset:8; indent-tabs-mode:nil; -*- */
|
|
2
|
+
/*
|
|
3
|
+
Copyright (C) 2016 by Ronnie Sahlberg <ronniesahlberg@gmail.com>
|
|
4
|
+
|
|
5
|
+
This program is free software; you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation; either version 2.1 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
#ifdef HAVE_CONFIG_H
|
|
19
|
+
#include "config.h"
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#ifndef _GNU_SOURCE
|
|
23
|
+
#define _GNU_SOURCE
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
#ifdef HAVE_ARPA_INET_H
|
|
27
|
+
#include <arpa/inet.h>
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifdef HAVE_NETDB_H
|
|
31
|
+
#include <netdb.h>
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
#ifdef HAVE_NETINET_TCP_H
|
|
35
|
+
#include <netinet/tcp.h>
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
#ifdef HAVE_NETINET_IN_H
|
|
39
|
+
#include <netinet/in.h>
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
#ifdef HAVE_SYS_POLL_H
|
|
43
|
+
#include <sys/poll.h>
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#ifdef HAVE_POLL_H
|
|
47
|
+
#include <poll.h>
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
#ifdef HAVE_STDLIB_H
|
|
51
|
+
#include <stdlib.h>
|
|
52
|
+
#endif
|
|
53
|
+
|
|
54
|
+
#ifdef HAVE_STDIO_H
|
|
55
|
+
#include <stdio.h>
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
#ifdef HAVE_STRING_H
|
|
59
|
+
#include <string.h>
|
|
60
|
+
#endif
|
|
61
|
+
|
|
62
|
+
#ifdef HAVE_SYS_IOCTL_H
|
|
63
|
+
#include <sys/ioctl.h>
|
|
64
|
+
#endif
|
|
65
|
+
|
|
66
|
+
#ifdef HAVE_SYS_TYPES_H
|
|
67
|
+
#include <sys/types.h>
|
|
68
|
+
#endif
|
|
69
|
+
|
|
70
|
+
#ifdef HAVE_SYS_UIO_H
|
|
71
|
+
#include <sys/uio.h>
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
#ifdef HAVE_SYS__IOVEC_H
|
|
75
|
+
#include <sys/_iovec.h>
|
|
76
|
+
#endif
|
|
77
|
+
|
|
78
|
+
#ifdef HAVE_UNISTD_H
|
|
79
|
+
#include <unistd.h>
|
|
80
|
+
#endif
|
|
81
|
+
|
|
82
|
+
#ifdef HAVE_SYS_UNISTD_H
|
|
83
|
+
#include <sys/unistd.h>
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
#ifdef HAVE_STDINT_H
|
|
87
|
+
#include <stdint.h>
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
#ifdef HAVE_FCNTL_H
|
|
91
|
+
#include <fcntl.h>
|
|
92
|
+
#endif
|
|
93
|
+
|
|
94
|
+
#ifdef HAVE_SYS_FCNTL_H
|
|
95
|
+
#include <sys/fcntl.h>
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
#ifdef HAVE_SYS_SOCKET_H
|
|
99
|
+
#include <sys/socket.h>
|
|
100
|
+
#endif
|
|
101
|
+
|
|
102
|
+
#include <errno.h>
|
|
103
|
+
|
|
104
|
+
#include "compat.h"
|
|
105
|
+
|
|
106
|
+
#include "slist.h"
|
|
107
|
+
#include "smb2.h"
|
|
108
|
+
#include "libsmb2.h"
|
|
109
|
+
#include "smb3-seal.h"
|
|
110
|
+
#include "libsmb2-private.h"
|
|
111
|
+
#include "portable-endian.h"
|
|
112
|
+
#include <errno.h>
|
|
113
|
+
|
|
114
|
+
#define MAX_URL_SIZE 1024
|
|
115
|
+
|
|
116
|
+
/* Timeout in ms between 2 consecutive socket connection.
|
|
117
|
+
* The rfc8305 recommends a timeout of 250ms and a minimum timeout of 100ms.
|
|
118
|
+
* Since the smb is most likely used on local network, use an aggressive
|
|
119
|
+
* timeout of 100ms. */
|
|
120
|
+
#define HAPPY_EYEBALLS_TIMEOUT 100
|
|
121
|
+
#if !defined(HAVE_LINGER)
|
|
122
|
+
struct linger
|
|
123
|
+
{
|
|
124
|
+
int l_onoff; /* Linger active */
|
|
125
|
+
int l_linger; /* How long to linger for */
|
|
126
|
+
};
|
|
127
|
+
#endif
|
|
128
|
+
static int
|
|
129
|
+
smb2_connect_async_next_addr(struct smb2_context *smb2, const struct addrinfo *base);
|
|
130
|
+
|
|
131
|
+
void
|
|
132
|
+
smb2_close_connecting_fds(struct smb2_context *smb2)
|
|
133
|
+
{
|
|
134
|
+
size_t i;
|
|
135
|
+
for (i = 0; i < smb2->connecting_fds_count; ++i) {
|
|
136
|
+
t_socket fd = smb2->connecting_fds[i];
|
|
137
|
+
|
|
138
|
+
/* Don't close the connected fd */
|
|
139
|
+
if (fd == smb2->fd || !SMB2_VALID_SOCKET(fd))
|
|
140
|
+
continue;
|
|
141
|
+
|
|
142
|
+
if (smb2->change_fd) {
|
|
143
|
+
smb2->change_fd(smb2, fd, SMB2_DEL_FD);
|
|
144
|
+
}
|
|
145
|
+
close(fd);
|
|
146
|
+
}
|
|
147
|
+
free(smb2->connecting_fds);
|
|
148
|
+
smb2->connecting_fds = NULL;
|
|
149
|
+
smb2->connecting_fds_count = 0;
|
|
150
|
+
|
|
151
|
+
if (smb2->addrinfos != NULL) {
|
|
152
|
+
freeaddrinfo(smb2->addrinfos);
|
|
153
|
+
smb2->addrinfos = NULL;
|
|
154
|
+
}
|
|
155
|
+
smb2->next_addrinfo = NULL;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
static int
|
|
159
|
+
smb2_get_real_credit_charge_for_one_pdu(struct smb2_context *smb2, struct smb2_header *hdr)
|
|
160
|
+
{
|
|
161
|
+
int credits;
|
|
162
|
+
|
|
163
|
+
credits = hdr->credit_charge;
|
|
164
|
+
if (hdr->command == SMB2_NEGOTIATE) {
|
|
165
|
+
/* Mirror the special case in smb2_allocate_pdu. */
|
|
166
|
+
} else if (smb2->dialect <= SMB2_VERSION_0202) {
|
|
167
|
+
++ credits;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return credits;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static int
|
|
174
|
+
smb2_get_credit_charge(struct smb2_context *smb2, struct smb2_pdu *pdu)
|
|
175
|
+
{
|
|
176
|
+
int credits = 0;
|
|
177
|
+
|
|
178
|
+
while (pdu) {
|
|
179
|
+
credits += smb2_get_real_credit_charge_for_one_pdu(smb2, &pdu->header);
|
|
180
|
+
pdu = pdu->next_compound;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return credits;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
int
|
|
187
|
+
smb2_which_events(struct smb2_context *smb2)
|
|
188
|
+
{
|
|
189
|
+
int events = SMB2_VALID_SOCKET(smb2->fd) ? POLLIN : POLLOUT;
|
|
190
|
+
|
|
191
|
+
if (smb2->outqueue != NULL &&
|
|
192
|
+
smb2_get_credit_charge(smb2, smb2->outqueue) <= smb2->credits) {
|
|
193
|
+
events |= POLLOUT;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return events;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
t_socket smb2_get_fd(struct smb2_context *smb2)
|
|
200
|
+
{
|
|
201
|
+
if (SMB2_VALID_SOCKET(smb2->fd)) {
|
|
202
|
+
return smb2->fd;
|
|
203
|
+
} else if (smb2->connecting_fds_count > 0) {
|
|
204
|
+
return smb2->connecting_fds[0];
|
|
205
|
+
} else {
|
|
206
|
+
return -1;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const t_socket *
|
|
211
|
+
smb2_get_fds(struct smb2_context *smb2, size_t *fd_count, int *timeout)
|
|
212
|
+
{
|
|
213
|
+
if (SMB2_VALID_SOCKET(smb2->fd)) {
|
|
214
|
+
*fd_count = 1;
|
|
215
|
+
*timeout = -1;
|
|
216
|
+
return &smb2->fd;
|
|
217
|
+
} else {
|
|
218
|
+
*fd_count = smb2->connecting_fds_count;
|
|
219
|
+
*timeout = smb2->next_addrinfo != NULL ? HAPPY_EYEBALLS_TIMEOUT : -1;
|
|
220
|
+
return smb2->connecting_fds;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
int
|
|
225
|
+
smb2_write_to_socket(struct smb2_context *smb2)
|
|
226
|
+
{
|
|
227
|
+
struct smb2_pdu *pdu;
|
|
228
|
+
|
|
229
|
+
if (!SMB2_VALID_SOCKET(smb2->fd)) {
|
|
230
|
+
smb2_set_error(smb2, "trying to write but not connected");
|
|
231
|
+
return -1;
|
|
232
|
+
}
|
|
233
|
+
while ((pdu = smb2->outqueue) != NULL) {
|
|
234
|
+
struct iovec iov[SMB2_MAX_VECTORS] _U_;
|
|
235
|
+
struct iovec *tmpiov;
|
|
236
|
+
struct smb2_pdu *tmp_pdu;
|
|
237
|
+
size_t num_done = pdu->out.num_done;
|
|
238
|
+
int i, niov = 1;
|
|
239
|
+
ssize_t count;
|
|
240
|
+
uint32_t spl = 0, tmp_spl, credit_charge;
|
|
241
|
+
|
|
242
|
+
credit_charge = smb2_get_credit_charge(smb2, pdu);
|
|
243
|
+
if (credit_charge > (uint32_t)smb2->credits) {
|
|
244
|
+
return 0;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (pdu->seal) {
|
|
248
|
+
niov = 2;
|
|
249
|
+
spl = pdu->crypt_len;
|
|
250
|
+
iov[1].iov_base = pdu->crypt;
|
|
251
|
+
iov[1].iov_len = pdu->crypt_len;
|
|
252
|
+
} else {
|
|
253
|
+
/* Copy all the vectors from all PDUs in the
|
|
254
|
+
* compound set.
|
|
255
|
+
*/
|
|
256
|
+
for (tmp_pdu = pdu; tmp_pdu;
|
|
257
|
+
tmp_pdu = tmp_pdu->next_compound) {
|
|
258
|
+
for (i = 0; i < tmp_pdu->out.niov;
|
|
259
|
+
i++, niov++) {
|
|
260
|
+
iov[niov].iov_base = tmp_pdu->out.iov[i].buf;
|
|
261
|
+
#if defined(_WIN32) || defined(_XBOX)
|
|
262
|
+
iov[niov].iov_len = (unsigned long)tmp_pdu->out.iov[i].len;
|
|
263
|
+
#else
|
|
264
|
+
iov[niov].iov_len = (size_t)tmp_pdu->out.iov[i].len;
|
|
265
|
+
#endif
|
|
266
|
+
spl += (uint32_t)tmp_pdu->out.iov[i].len;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/* Add the SPL vector as the first vector */
|
|
272
|
+
tmp_spl = htobe32(spl);
|
|
273
|
+
iov[0].iov_base = &tmp_spl;
|
|
274
|
+
iov[0].iov_len = SMB2_SPL_SIZE;
|
|
275
|
+
|
|
276
|
+
tmpiov = iov;
|
|
277
|
+
|
|
278
|
+
/* Skip the vectors we have already written */
|
|
279
|
+
while (num_done >= tmpiov->iov_len) {
|
|
280
|
+
num_done -= tmpiov->iov_len;
|
|
281
|
+
tmpiov++;
|
|
282
|
+
niov--;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* Adjust the first vector to send */
|
|
286
|
+
tmpiov->iov_base = (char *)tmpiov->iov_base + num_done;
|
|
287
|
+
#if defined(_WIN32) || defined(_XBOX)
|
|
288
|
+
tmpiov->iov_len -= (unsigned long)num_done;
|
|
289
|
+
#else
|
|
290
|
+
tmpiov->iov_len -= (size_t)num_done;
|
|
291
|
+
#endif
|
|
292
|
+
count = writev(smb2->fd, tmpiov, niov);
|
|
293
|
+
|
|
294
|
+
if (count == -1) {
|
|
295
|
+
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
|
296
|
+
return 0;
|
|
297
|
+
}
|
|
298
|
+
smb2_set_error(smb2, "Error when writing to "
|
|
299
|
+
"socket :%d %s", errno,
|
|
300
|
+
smb2_get_error(smb2));
|
|
301
|
+
return -1;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
pdu->out.num_done += (size_t)count;
|
|
305
|
+
|
|
306
|
+
if (pdu->out.num_done == SMB2_SPL_SIZE + spl) {
|
|
307
|
+
SMB2_LIST_REMOVE(&smb2->outqueue, pdu);
|
|
308
|
+
smb2_change_events(smb2, smb2->fd, smb2_which_events(smb2));
|
|
309
|
+
while (pdu) {
|
|
310
|
+
tmp_pdu = pdu->next_compound;
|
|
311
|
+
|
|
312
|
+
/* As we have now sent all the PDUs we
|
|
313
|
+
* can remove the chaining.
|
|
314
|
+
* On the receive side we will treat all
|
|
315
|
+
* PDUs as individual PDUs.
|
|
316
|
+
*/
|
|
317
|
+
pdu->next_compound = NULL;
|
|
318
|
+
|
|
319
|
+
if (!smb2_is_server(smb2)) {
|
|
320
|
+
smb2->credits -= smb2_get_real_credit_charge_for_one_pdu(smb2, &pdu->header);
|
|
321
|
+
/* queue requests we send to correlate replies with */
|
|
322
|
+
SMB2_LIST_ADD_END(&smb2->waitqueue, pdu);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
/* alway allow writing replies */
|
|
326
|
+
smb2->credits = 128;
|
|
327
|
+
/* no longer need this reply we've sent */
|
|
328
|
+
smb2_free_pdu(smb2, pdu);
|
|
329
|
+
}
|
|
330
|
+
pdu = tmp_pdu;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return 0;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
typedef ssize_t (*read_func)(struct smb2_context *smb2,
|
|
338
|
+
const struct iovec *iov, int iovcnt);
|
|
339
|
+
|
|
340
|
+
static int smb2_read_data(struct smb2_context *smb2, read_func func,
|
|
341
|
+
int has_xfrmhdr)
|
|
342
|
+
{
|
|
343
|
+
struct iovec iov[SMB2_MAX_VECTORS] _U_;
|
|
344
|
+
struct iovec *tmpiov;
|
|
345
|
+
int i, niov, is_chained;
|
|
346
|
+
size_t num_done;
|
|
347
|
+
size_t iov_offset = 0;
|
|
348
|
+
static char smb3tfrm[4] = {0xFD, 'S', 'M', 'B'};
|
|
349
|
+
struct smb2_pdu *pdu = smb2->pdu;
|
|
350
|
+
ssize_t count;
|
|
351
|
+
int len;
|
|
352
|
+
|
|
353
|
+
read_more_data:
|
|
354
|
+
num_done = smb2->in.num_done;
|
|
355
|
+
|
|
356
|
+
/* Copy all the current vectors to our work vector */
|
|
357
|
+
niov = smb2->in.niov;
|
|
358
|
+
for (i = 0; i < niov; i++) {
|
|
359
|
+
iov[i].iov_base = smb2->in.iov[i].buf;
|
|
360
|
+
#if defined(_WIN32) || defined(_XBOX)
|
|
361
|
+
iov[i].iov_len = (unsigned long)smb2->in.iov[i].len;
|
|
362
|
+
#else
|
|
363
|
+
iov[i].iov_len = (size_t)smb2->in.iov[i].len;
|
|
364
|
+
#endif
|
|
365
|
+
}
|
|
366
|
+
tmpiov = iov;
|
|
367
|
+
|
|
368
|
+
/* Skip the vectors we have already read */
|
|
369
|
+
while (num_done >= tmpiov->iov_len) {
|
|
370
|
+
num_done -= tmpiov->iov_len;
|
|
371
|
+
tmpiov++;
|
|
372
|
+
niov--;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* Adjust the first vector to read */
|
|
376
|
+
tmpiov->iov_base = (char *)tmpiov->iov_base + num_done;
|
|
377
|
+
#if defined(_WIN32) || defined(_XBOX)
|
|
378
|
+
tmpiov->iov_len -= (unsigned long)num_done;
|
|
379
|
+
#else
|
|
380
|
+
tmpiov->iov_len -= (size_t)num_done;
|
|
381
|
+
#endif
|
|
382
|
+
/* Read into our trimmed iovectors */
|
|
383
|
+
count = func(smb2, tmpiov, niov);
|
|
384
|
+
if (count < 0) {
|
|
385
|
+
#if defined(_WIN32) || defined(_XBOX)
|
|
386
|
+
int err = WSAGetLastError();
|
|
387
|
+
if (err == WSAEINTR || err == WSAEWOULDBLOCK) {
|
|
388
|
+
#else
|
|
389
|
+
int err = errno;
|
|
390
|
+
if (err == EINTR || err == EAGAIN || err == EWOULDBLOCK) {
|
|
391
|
+
#endif
|
|
392
|
+
return -EAGAIN;
|
|
393
|
+
}
|
|
394
|
+
smb2_set_error(smb2, "Read from socket failed, "
|
|
395
|
+
"errno:%d. Closing socket.", err);
|
|
396
|
+
return -1;
|
|
397
|
+
}
|
|
398
|
+
if (count == 0) {
|
|
399
|
+
/* remote side has closed the socket. */
|
|
400
|
+
smb2_set_error(smb2, "Read from socket failed, "
|
|
401
|
+
"remote closed connection.");
|
|
402
|
+
return -1;
|
|
403
|
+
}
|
|
404
|
+
smb2->in.num_done += (size_t)count;
|
|
405
|
+
|
|
406
|
+
if (smb2->in.num_done < smb2->in.total_size) {
|
|
407
|
+
goto read_more_data;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/* At this point we have all the data we need for the current phase */
|
|
411
|
+
switch (smb2->recv_state) {
|
|
412
|
+
case SMB2_RECV_SPL:
|
|
413
|
+
smb2->spl = be32toh(smb2->spl);
|
|
414
|
+
smb2->recv_state = SMB2_RECV_HEADER;
|
|
415
|
+
if (smb2_add_iovector(smb2, &smb2->in, &smb2->header[0],
|
|
416
|
+
SMB2_HEADER_SIZE, NULL) == NULL) {
|
|
417
|
+
smb2_set_error(smb2, "Too many I/O vectors when adding header");
|
|
418
|
+
return -1;
|
|
419
|
+
}
|
|
420
|
+
goto read_more_data;
|
|
421
|
+
case SMB2_RECV_HEADER:
|
|
422
|
+
if (!memcmp(smb2->in.iov[smb2->in.niov - 1].buf, smb3tfrm, 4)) {
|
|
423
|
+
smb2->in.iov[smb2->in.niov - 1].len = 52;
|
|
424
|
+
len = smb2->spl - 52;
|
|
425
|
+
smb2->in.total_size -= 12;
|
|
426
|
+
{
|
|
427
|
+
uint8_t *tmp = malloc(len);
|
|
428
|
+
if (tmp == NULL) {
|
|
429
|
+
smb2_set_error(smb2, "malloc failed while adding TRFM payload");
|
|
430
|
+
return -1;
|
|
431
|
+
}
|
|
432
|
+
if (smb2_add_iovector(smb2, &smb2->in,tmp,len, free) == NULL) {
|
|
433
|
+
smb2_set_error(smb2, "Failed to add iovector for TRFM payload");
|
|
434
|
+
return -1;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
memcpy(smb2->in.iov[smb2->in.niov - 1].buf,
|
|
438
|
+
&smb2->in.iov[smb2->in.niov - 2].buf[52], 12);
|
|
439
|
+
smb2->recv_state = SMB2_RECV_TRFM;
|
|
440
|
+
goto read_more_data;
|
|
441
|
+
}
|
|
442
|
+
if (smb2_decode_header(smb2, &smb2->in.iov[smb2->in.niov - 1],
|
|
443
|
+
&smb2->hdr) != 0) {
|
|
444
|
+
smb2_set_error(smb2, "Failed to decode smb2 "
|
|
445
|
+
"header: %s", smb2_get_error(smb2));
|
|
446
|
+
return -1;
|
|
447
|
+
}
|
|
448
|
+
/* if serving, and this is an smb1 negotiate, just short-circuit and flush
|
|
449
|
+
* any remaining data on input and call the callback */
|
|
450
|
+
if (smb2_is_server(smb2) && smb2->hdr.command == SMB1_NEGOTIATE) {
|
|
451
|
+
uint8_t flusher[32];
|
|
452
|
+
struct iovec fiov;
|
|
453
|
+
fiov.iov_base = (char *)flusher;
|
|
454
|
+
fiov.iov_len = sizeof(flusher);
|
|
455
|
+
do {
|
|
456
|
+
count = func(smb2, &fiov, 1);
|
|
457
|
+
if (count < 0) {
|
|
458
|
+
#if defined(_WIN32) || defined(_XBOX)
|
|
459
|
+
int err = WSAGetLastError();
|
|
460
|
+
if (err == WSAEINTR || err == WSAEWOULDBLOCK) {
|
|
461
|
+
#else
|
|
462
|
+
int err = errno;
|
|
463
|
+
if (err == EINTR || err == EAGAIN || err == EWOULDBLOCK) {
|
|
464
|
+
#endif
|
|
465
|
+
count = 0;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
while (count > 0);
|
|
470
|
+
|
|
471
|
+
/* put on wait queue so queue_pdu doesn't complain */
|
|
472
|
+
SMB2_LIST_ADD_END(&smb2->waitqueue, pdu);
|
|
473
|
+
|
|
474
|
+
smb2->in.num_done = 0;
|
|
475
|
+
pdu->cb(smb2, smb2->hdr.status, pdu->payload, pdu->cb_data);
|
|
476
|
+
smb2->pdu = NULL;
|
|
477
|
+
smb2->pdu = smb2->next_pdu;
|
|
478
|
+
smb2->next_pdu = NULL;
|
|
479
|
+
return 0;
|
|
480
|
+
}
|
|
481
|
+
/* Record the offset for the start of payload data. */
|
|
482
|
+
smb2->payload_offset = smb2->in.num_done;
|
|
483
|
+
|
|
484
|
+
if (!smb2_is_server(smb2)) {
|
|
485
|
+
smb2->credits += smb2->hdr.credit_request_response;
|
|
486
|
+
/* Got credit, recheck if there are pending pdu to be sent. */
|
|
487
|
+
smb2_change_events(smb2, smb2->fd, smb2_which_events(smb2));
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (!smb2_is_server(smb2) && !(smb2->hdr.flags & SMB2_FLAGS_SERVER_TO_REDIR)) {
|
|
491
|
+
smb2_set_error(smb2, "received non-reply");
|
|
492
|
+
return -1;
|
|
493
|
+
}
|
|
494
|
+
else if (smb2_is_server(smb2) && (smb2->hdr.flags & SMB2_FLAGS_SERVER_TO_REDIR)) {
|
|
495
|
+
smb2_set_error(smb2, "received non-request");
|
|
496
|
+
return -1;
|
|
497
|
+
}
|
|
498
|
+
if (smb2->hdr.status == SMB2_STATUS_PENDING) {
|
|
499
|
+
/* Pending. Just treat the rest of the data as
|
|
500
|
+
* padding then check for and skip processing below.
|
|
501
|
+
* We will eventually receive a proper reply for this
|
|
502
|
+
* request sometime later.
|
|
503
|
+
*/
|
|
504
|
+
|
|
505
|
+
len = smb2->spl - smb2->in.num_done;
|
|
506
|
+
/* If we don't have a transform header we are reading
|
|
507
|
+
* straight from the socket, and not a buffer,
|
|
508
|
+
* so we need to take the SPL size into account.
|
|
509
|
+
*/
|
|
510
|
+
if (!has_xfrmhdr) {
|
|
511
|
+
len += SMB2_SPL_SIZE;
|
|
512
|
+
}
|
|
513
|
+
/* Add padding before the next PDU */
|
|
514
|
+
smb2->recv_state = SMB2_RECV_PAD;
|
|
515
|
+
{
|
|
516
|
+
uint8_t *tmp = malloc(len);
|
|
517
|
+
if (tmp == NULL) {
|
|
518
|
+
smb2_set_error(smb2, "malloc failed while adding PENDING padding");
|
|
519
|
+
return -1;
|
|
520
|
+
}
|
|
521
|
+
if (smb2_add_iovector(smb2, &smb2->in,tmp, len, free) == NULL) {
|
|
522
|
+
return -1;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
goto read_more_data;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
if (smb2_is_server(smb2)) {
|
|
529
|
+
pdu = smb2->pdu;
|
|
530
|
+
if (!pdu) {
|
|
531
|
+
smb2_set_error(smb2, "no pdu for request");
|
|
532
|
+
return -1;
|
|
533
|
+
}
|
|
534
|
+
/* set the pdu header's message id to the request's id and
|
|
535
|
+
* the tree id to the request's tree id
|
|
536
|
+
*/
|
|
537
|
+
pdu->header.message_id = smb2->hdr.message_id;
|
|
538
|
+
if (!(smb2->hdr.flags & SMB2_FLAGS_ASYNC_COMMAND)) {
|
|
539
|
+
pdu->header.sync.tree_id = smb2->hdr.sync.tree_id;
|
|
540
|
+
}
|
|
541
|
+
/* if the session is properly opened then we could get
|
|
542
|
+
* any request from the client, so use the header's command
|
|
543
|
+
* not the pdu's command for the rest of input
|
|
544
|
+
*/
|
|
545
|
+
if (smb2->hdr.command > SMB2_SESSION_SETUP) {
|
|
546
|
+
pdu->header.command = smb2->hdr.command;
|
|
547
|
+
}
|
|
548
|
+
pdu->header.credit_charge = smb2->hdr.credit_charge;
|
|
549
|
+
pdu->header.credit_request_response = smb2->hdr.credit_request_response;
|
|
550
|
+
} else {
|
|
551
|
+
if ((smb2->hdr.command != SMB2_OPLOCK_BREAK) ||
|
|
552
|
+
(smb2->hdr.message_id != 0xffffffffffffffffULL)) {
|
|
553
|
+
if (smb2->pdu) {
|
|
554
|
+
smb2_free_pdu(smb2, smb2->pdu);
|
|
555
|
+
smb2->pdu = NULL;
|
|
556
|
+
}
|
|
557
|
+
pdu = smb2->pdu = smb2_find_pdu(smb2, smb2->hdr.message_id);
|
|
558
|
+
if (pdu == NULL) {
|
|
559
|
+
len = smb2->spl - smb2->in.num_done;
|
|
560
|
+
if (!has_xfrmhdr) {
|
|
561
|
+
len += SMB2_SPL_SIZE;
|
|
562
|
+
}
|
|
563
|
+
if (len > SMB2_MAX_PDU_SIZE) {
|
|
564
|
+
smb2_set_error(smb2, "no matching PDU found");
|
|
565
|
+
return -1;
|
|
566
|
+
}
|
|
567
|
+
smb2->recv_state = SMB2_RECV_UNKNOWN;
|
|
568
|
+
{
|
|
569
|
+
uint8_t *tmp = malloc(len);
|
|
570
|
+
if (tmp == NULL) {
|
|
571
|
+
smb2_set_error(smb2, "malloc failed while adding UNKNOWN padding");
|
|
572
|
+
return -1;
|
|
573
|
+
}
|
|
574
|
+
if (smb2_add_iovector(smb2, &smb2->in, tmp, len, free) == NULL) {
|
|
575
|
+
return -1;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
goto read_more_data;
|
|
579
|
+
}
|
|
580
|
+
/*
|
|
581
|
+
* If part of a compound chain, verify that
|
|
582
|
+
* the previous command has been processed.
|
|
583
|
+
*/
|
|
584
|
+
if (pdu->prev_compound_mid &&
|
|
585
|
+
smb2_find_pdu(smb2, pdu->prev_compound_mid)) {
|
|
586
|
+
smb2_set_error(smb2, "compound reply received out of order");
|
|
587
|
+
return -1;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
SMB2_LIST_REMOVE(&smb2->waitqueue, pdu);
|
|
591
|
+
} else {
|
|
592
|
+
/* oplock and lease break notifications won't have a pdu so make one
|
|
593
|
+
* oplock replies (that are NOT notifications, i.e. have a valid message_id)
|
|
594
|
+
* are normal replies handled above */
|
|
595
|
+
pdu = smb2->pdu;
|
|
596
|
+
if (!pdu) {
|
|
597
|
+
pdu = smb2->pdu = smb2_allocate_pdu(smb2, SMB2_OPLOCK_BREAK,
|
|
598
|
+
smb2_oplock_break_notify, NULL);
|
|
599
|
+
}
|
|
600
|
+
if (pdu == NULL) {
|
|
601
|
+
smb2_set_error(smb2, "can not alloc pdu");
|
|
602
|
+
return -1;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
len = smb2_get_fixed_size(smb2, pdu);
|
|
608
|
+
if (((int)len) < 0) {
|
|
609
|
+
smb2_set_error(smb2, "can not determine fixed size");
|
|
610
|
+
return -1;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
smb2->recv_state = SMB2_RECV_FIXED;
|
|
614
|
+
{
|
|
615
|
+
size_t alen = len & 0xfffe;
|
|
616
|
+
uint8_t *tmp = malloc(alen);
|
|
617
|
+
if (tmp == NULL) {
|
|
618
|
+
smb2_set_error(smb2, "malloc failed while adding FIXED payload");
|
|
619
|
+
return -1;
|
|
620
|
+
}
|
|
621
|
+
if (smb2_add_iovector(smb2, &smb2->in,
|
|
622
|
+
tmp,
|
|
623
|
+
alen, free) == NULL) {
|
|
624
|
+
return -1;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
goto read_more_data;
|
|
628
|
+
case SMB2_RECV_FIXED:
|
|
629
|
+
len = smb2_process_payload_fixed(smb2, pdu);
|
|
630
|
+
if (len < 0) {
|
|
631
|
+
smb2_set_error(smb2, "Failed to parse fixed part of "
|
|
632
|
+
"command payload. %s",
|
|
633
|
+
smb2_get_error(smb2));
|
|
634
|
+
return -1;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/* Add application provided iovectors */
|
|
638
|
+
if (len) {
|
|
639
|
+
for (i = 0; i < pdu->in.niov; i++) {
|
|
640
|
+
size_t num = pdu->in.iov[i].len;
|
|
641
|
+
|
|
642
|
+
if (num > (size_t)len) {
|
|
643
|
+
num = (size_t)len;
|
|
644
|
+
}
|
|
645
|
+
if (smb2_add_iovector(smb2, &smb2->in,
|
|
646
|
+
pdu->in.iov[i].buf,
|
|
647
|
+
num, NULL) == NULL) {
|
|
648
|
+
return -1;
|
|
649
|
+
}
|
|
650
|
+
len -= num;
|
|
651
|
+
|
|
652
|
+
if (len == 0) {
|
|
653
|
+
smb2->recv_state = SMB2_RECV_VARIABLE;
|
|
654
|
+
goto read_more_data;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
if (len > 0) {
|
|
658
|
+
smb2->recv_state = SMB2_RECV_VARIABLE;
|
|
659
|
+
{
|
|
660
|
+
uint8_t *tmp = malloc(len);
|
|
661
|
+
if (tmp == NULL) {
|
|
662
|
+
smb2_set_error(smb2, "malloc failed while adding VARIABLE tail");
|
|
663
|
+
return -1;
|
|
664
|
+
}
|
|
665
|
+
if (smb2_add_iovector(smb2, &smb2->in,
|
|
666
|
+
tmp,
|
|
667
|
+
len, free) == NULL) {
|
|
668
|
+
return -1;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
goto read_more_data;
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/* Check for padding */
|
|
676
|
+
if (smb2->hdr.next_command) {
|
|
677
|
+
len = smb2->hdr.next_command - (SMB2_HEADER_SIZE +
|
|
678
|
+
smb2->in.num_done - smb2->payload_offset);
|
|
679
|
+
} else {
|
|
680
|
+
len = smb2->spl + SMB2_SPL_SIZE - smb2->in.num_done;
|
|
681
|
+
/*
|
|
682
|
+
* We never read the SPL when handling decrypted
|
|
683
|
+
* payloads.
|
|
684
|
+
*/
|
|
685
|
+
if (smb2->enc) {
|
|
686
|
+
len -= SMB2_SPL_SIZE;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
if (len < 0) {
|
|
690
|
+
smb2_set_error(smb2, "Negative number of PAD bytes "
|
|
691
|
+
"encountered during PDU decode of"
|
|
692
|
+
"fixed payload");
|
|
693
|
+
return -1;
|
|
694
|
+
}
|
|
695
|
+
if (len > 0) {
|
|
696
|
+
/* Add padding before the next PDU */
|
|
697
|
+
smb2->recv_state = SMB2_RECV_PAD;
|
|
698
|
+
{
|
|
699
|
+
uint8_t *tmp = malloc(len);
|
|
700
|
+
if (tmp == NULL) {
|
|
701
|
+
smb2_set_error(smb2, "malloc failed while adding PAD");
|
|
702
|
+
return -1;
|
|
703
|
+
}
|
|
704
|
+
if (smb2_add_iovector(smb2, &smb2->in,
|
|
705
|
+
tmp,
|
|
706
|
+
len, free) == NULL) {
|
|
707
|
+
return -1;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
goto read_more_data;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/* If len == 0 it means there is no padding and we are finished
|
|
714
|
+
* reading this PDU */
|
|
715
|
+
break;
|
|
716
|
+
case SMB2_RECV_VARIABLE:
|
|
717
|
+
if (smb2_process_payload_variable(smb2, pdu) < 0) {
|
|
718
|
+
smb2_set_error(smb2, "Failed to parse variable part of "
|
|
719
|
+
"command payload. %s",
|
|
720
|
+
smb2_get_error(smb2));
|
|
721
|
+
return -1;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/* Check for padding */
|
|
725
|
+
if (smb2->hdr.next_command) {
|
|
726
|
+
len = smb2->hdr.next_command - (SMB2_HEADER_SIZE +
|
|
727
|
+
smb2->in.num_done - smb2->payload_offset);
|
|
728
|
+
} else {
|
|
729
|
+
len = smb2->spl + SMB2_SPL_SIZE - smb2->in.num_done;
|
|
730
|
+
/*
|
|
731
|
+
* We never read the SPL when handling decrypted
|
|
732
|
+
* payloads.
|
|
733
|
+
*/
|
|
734
|
+
if (smb2->enc) {
|
|
735
|
+
len -= SMB2_SPL_SIZE;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
if (len < 0) {
|
|
739
|
+
smb2_set_error(smb2, "Negative number of PAD bytes "
|
|
740
|
+
"encountered during PDU decode of"
|
|
741
|
+
"variable payload");
|
|
742
|
+
return -1;
|
|
743
|
+
}
|
|
744
|
+
if (len > 0) {
|
|
745
|
+
/* Add padding before the next PDU */
|
|
746
|
+
smb2->recv_state = SMB2_RECV_PAD;
|
|
747
|
+
uint8_t * tmp = malloc(len);
|
|
748
|
+
if (tmp == NULL) {
|
|
749
|
+
smb2_set_error(smb2, "malloc failed while adding PAD");
|
|
750
|
+
return -1;
|
|
751
|
+
}
|
|
752
|
+
if (smb2_add_iovector(smb2, &smb2->in,
|
|
753
|
+
tmp,
|
|
754
|
+
len, free) == NULL) {
|
|
755
|
+
smb2_set_error(smb2, "Failed to add iovector for PAD");
|
|
756
|
+
return -1;
|
|
757
|
+
}
|
|
758
|
+
goto read_more_data;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/* If len == 0 it means there is no padding and we are finished
|
|
762
|
+
* reading this PDU */
|
|
763
|
+
break;
|
|
764
|
+
case SMB2_RECV_PAD:
|
|
765
|
+
/* We are finished reading all the data and padding for this
|
|
766
|
+
* PDU. Break out of the switch and invoke the callback.
|
|
767
|
+
*/
|
|
768
|
+
break;
|
|
769
|
+
case SMB2_RECV_TRFM:
|
|
770
|
+
/* We are finished reading the full payload for the
|
|
771
|
+
* encrypted packet.
|
|
772
|
+
*/
|
|
773
|
+
smb2->in.num_done = 0;
|
|
774
|
+
if (smb3_decrypt_pdu(smb2)) {
|
|
775
|
+
smb2_set_error(smb2, "Failed to decrypyt pdu");
|
|
776
|
+
return -1;
|
|
777
|
+
}
|
|
778
|
+
/* We are all done now with this PDU. Reset num_done to 0
|
|
779
|
+
* and restart with a new SPL for the next chain.
|
|
780
|
+
*/
|
|
781
|
+
return 0;
|
|
782
|
+
case SMB2_RECV_UNKNOWN:
|
|
783
|
+
/* We have finished reading the payload the the unknown reply we
|
|
784
|
+
* just received. As it is not matching anything we are waiting on
|
|
785
|
+
* there is no PDU associated with this and thus nothing else we need
|
|
786
|
+
* to do.
|
|
787
|
+
*/
|
|
788
|
+
smb2->in.num_done = 0;
|
|
789
|
+
return 0;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
if (smb2->in.niov < 2) {
|
|
793
|
+
smb2_set_error(smb2, "Too few io vectors in received PDU.");
|
|
794
|
+
return -1;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
if (smb2->hdr.status == SMB2_STATUS_PENDING) {
|
|
798
|
+
/* This was a pending command. Just ignore it and proceed
|
|
799
|
+
* to read the next chain.
|
|
800
|
+
*/
|
|
801
|
+
if (smb2->passthrough) {
|
|
802
|
+
pdu = smb2_find_pdu(smb2, smb2->hdr.message_id);
|
|
803
|
+
if (pdu == NULL) {
|
|
804
|
+
smb2_set_error(smb2, "no matching PDU found");
|
|
805
|
+
/* ignore this error for now, it might be OK
|
|
806
|
+
* to not pass the pending reply along */
|
|
807
|
+
/*return -1;*/
|
|
808
|
+
}
|
|
809
|
+
else
|
|
810
|
+
{
|
|
811
|
+
/* need to pass all pdus through note we do not free
|
|
812
|
+
* the pdu or delist the request */
|
|
813
|
+
pdu->cb(smb2, smb2->hdr.status, pdu->payload, pdu->cb_data);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
smb2->in.num_done = 0;
|
|
817
|
+
return 0;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
/* We don't yet have the signing key until later, once session
|
|
821
|
+
* setup has completed, so we can not yet verify the signature
|
|
822
|
+
* of the final leg of session setup.
|
|
823
|
+
*/
|
|
824
|
+
if (smb2->sign &&
|
|
825
|
+
(smb2->hdr.flags & SMB2_FLAGS_SIGNED) &&
|
|
826
|
+
(smb2->hdr.command != SMB2_SESSION_SETUP) ) {
|
|
827
|
+
uint8_t signature[16] _U_;
|
|
828
|
+
memcpy(&signature[0], &smb2->in.iov[1 + iov_offset].buf[48], 16);
|
|
829
|
+
if (smb2_calc_signature(smb2, &smb2->in.iov[1 + iov_offset].buf[48],
|
|
830
|
+
&smb2->in.iov[1 + iov_offset],
|
|
831
|
+
smb2->in.niov - 1 - iov_offset) < 0) {
|
|
832
|
+
smb2_set_error(smb2, "Signature calc failed.");
|
|
833
|
+
return -1;
|
|
834
|
+
}
|
|
835
|
+
if (memcmp(&signature[0], &smb2->in.iov[1 + iov_offset].buf[48], 16)) {
|
|
836
|
+
smb2_set_error(smb2, "Wrong signature in received "
|
|
837
|
+
"PDU");
|
|
838
|
+
return -1;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
is_chained = smb2->hdr.next_command;
|
|
843
|
+
|
|
844
|
+
if (smb2_is_server(smb2)) {
|
|
845
|
+
/* queue requests to correlate our replies we send back later */
|
|
846
|
+
SMB2_LIST_ADD_END(&smb2->waitqueue, pdu);
|
|
847
|
+
pdu->cb(smb2, smb2->hdr.status, pdu->payload, pdu->cb_data);
|
|
848
|
+
smb2->pdu = smb2->next_pdu;
|
|
849
|
+
smb2->next_pdu = NULL;
|
|
850
|
+
} else {
|
|
851
|
+
pdu->cb(smb2, smb2->hdr.status, pdu->payload, pdu->cb_data);
|
|
852
|
+
if (!pdu->caller_frees_pdu) {
|
|
853
|
+
smb2_free_pdu(smb2, pdu);
|
|
854
|
+
}
|
|
855
|
+
smb2->pdu = NULL;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
if (is_chained) {
|
|
859
|
+
/* Record at which iov we ended in this loop so we know where to start in the next */
|
|
860
|
+
iov_offset = smb2->in.niov - 1;
|
|
861
|
+
smb2->recv_state = SMB2_RECV_HEADER;
|
|
862
|
+
if (smb2_add_iovector(smb2, &smb2->in, &smb2->header[0],
|
|
863
|
+
SMB2_HEADER_SIZE, NULL) == NULL) {
|
|
864
|
+
smb2_set_error(smb2, "Too many I/O vectors when adding chained header");
|
|
865
|
+
return -1;
|
|
866
|
+
}
|
|
867
|
+
goto read_more_data;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
/* We are all done now with this chain. Reset num_done to 0
|
|
871
|
+
* and restart with a new SPL for the next chain.
|
|
872
|
+
*/
|
|
873
|
+
smb2->in.num_done = 0;
|
|
874
|
+
|
|
875
|
+
return 0;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
static ssize_t smb2_readv_from_socket(struct smb2_context *smb2,
|
|
879
|
+
const struct iovec *iov, int iovcnt)
|
|
880
|
+
{
|
|
881
|
+
ssize_t rc = readv(smb2->fd, (struct iovec*) iov, iovcnt);
|
|
882
|
+
return rc;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
static int
|
|
886
|
+
smb2_read_from_socket(struct smb2_context *smb2)
|
|
887
|
+
{
|
|
888
|
+
int count;
|
|
889
|
+
|
|
890
|
+
while(1) {
|
|
891
|
+
/* initialize the input vectors to the spl and the header
|
|
892
|
+
* which are both static data in the smb2 context.
|
|
893
|
+
* additional vectors will be added when we can map this to
|
|
894
|
+
* the corresponding pdu.
|
|
895
|
+
*/
|
|
896
|
+
if (smb2->in.num_done == 0) {
|
|
897
|
+
smb2->recv_state = SMB2_RECV_SPL;
|
|
898
|
+
smb2->spl = 0;
|
|
899
|
+
|
|
900
|
+
smb2_free_iovector(smb2, &smb2->in);
|
|
901
|
+
if (smb2_add_iovector(smb2, &smb2->in, (uint8_t *)&smb2->spl,
|
|
902
|
+
SMB2_SPL_SIZE, NULL) == NULL) {
|
|
903
|
+
smb2_set_error(smb2, "Too many I/O vectors when adding SPL");
|
|
904
|
+
return -1;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
count = smb2_read_data(smb2, smb2_readv_from_socket, 0);
|
|
909
|
+
if (count == -EAGAIN) {
|
|
910
|
+
return 0;
|
|
911
|
+
}
|
|
912
|
+
if (count) {
|
|
913
|
+
return count;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
static ssize_t smb2_readv_from_buf(struct smb2_context *smb2,
|
|
919
|
+
const struct iovec *iov, int iovcnt)
|
|
920
|
+
{
|
|
921
|
+
size_t i, len;
|
|
922
|
+
ssize_t count = 0;
|
|
923
|
+
|
|
924
|
+
for (i=0;(int)i<iovcnt;i++){
|
|
925
|
+
len = iov[i].iov_len;
|
|
926
|
+
if (len > smb2->enc_len - smb2->enc_pos) {
|
|
927
|
+
len = smb2->enc_len - smb2->enc_pos;
|
|
928
|
+
}
|
|
929
|
+
memcpy(iov[i].iov_base, &smb2->enc[smb2->enc_pos], len);
|
|
930
|
+
smb2->enc_pos += (int)len;
|
|
931
|
+
count += len;
|
|
932
|
+
}
|
|
933
|
+
return count;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
int
|
|
937
|
+
smb2_read_from_buf(struct smb2_context *smb2)
|
|
938
|
+
{
|
|
939
|
+
return smb2_read_data(smb2, smb2_readv_from_buf, 1);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
static void
|
|
943
|
+
smb2_close_connecting_fd(struct smb2_context *smb2, t_socket fd)
|
|
944
|
+
{
|
|
945
|
+
size_t i;
|
|
946
|
+
|
|
947
|
+
close(fd);
|
|
948
|
+
/* Remove the fd from the connecting_fds array */
|
|
949
|
+
for (i = 0; i < smb2->connecting_fds_count; ++i) {
|
|
950
|
+
if (fd == smb2->connecting_fds[i]) {
|
|
951
|
+
memmove(&smb2->connecting_fds[i],
|
|
952
|
+
&smb2->connecting_fds[i + 1],
|
|
953
|
+
smb2->connecting_fds_count - i - 1);
|
|
954
|
+
smb2->connecting_fds_count--;
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
int
|
|
961
|
+
smb2_service_fd(struct smb2_context *smb2, t_socket fd, int revents)
|
|
962
|
+
{
|
|
963
|
+
int ret = 0;
|
|
964
|
+
|
|
965
|
+
if (!SMB2_VALID_SOCKET(fd)) {
|
|
966
|
+
/* Connect to a new addr in parallel */
|
|
967
|
+
if (smb2->next_addrinfo != NULL) {
|
|
968
|
+
int err = smb2_connect_async_next_addr(smb2,
|
|
969
|
+
smb2->next_addrinfo);
|
|
970
|
+
return err == 0 ? 0 : -1;
|
|
971
|
+
}
|
|
972
|
+
goto out;
|
|
973
|
+
} else if (fd != smb2->fd) {
|
|
974
|
+
int fd_found = 0;
|
|
975
|
+
size_t i;
|
|
976
|
+
for (i = 0; i < smb2->connecting_fds_count; ++i) {
|
|
977
|
+
if (fd == smb2->connecting_fds[i])
|
|
978
|
+
{
|
|
979
|
+
fd_found = 1;
|
|
980
|
+
break;
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
if (fd_found == 0) {
|
|
984
|
+
/* Not an error, this can happen if more than one
|
|
985
|
+
* connecting fds had POLLOUT events. In that case,
|
|
986
|
+
* only the first one is connected and all other FDs
|
|
987
|
+
* are dropped. */
|
|
988
|
+
return 0;
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
if (revents & POLLERR) {
|
|
993
|
+
int err = 0;
|
|
994
|
+
socklen_t err_size = sizeof(err);
|
|
995
|
+
|
|
996
|
+
if (!SMB2_VALID_SOCKET(smb2->fd) && smb2->next_addrinfo != NULL) {
|
|
997
|
+
/* Connecting fd failed, try to connect to the next addr */
|
|
998
|
+
smb2_close_connecting_fd(smb2, fd);
|
|
999
|
+
|
|
1000
|
+
err = smb2_connect_async_next_addr(smb2, smb2->next_addrinfo);
|
|
1001
|
+
/* error already set by connect_async_ai() */
|
|
1002
|
+
if (err == 0) {
|
|
1003
|
+
return 0;
|
|
1004
|
+
}
|
|
1005
|
+
} else if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (char *)&err, &err_size) != 0 || err != 0) {
|
|
1006
|
+
if (err == 0) {
|
|
1007
|
+
err = errno;
|
|
1008
|
+
}
|
|
1009
|
+
smb2_set_error(smb2, "smb2_service: socket error "
|
|
1010
|
+
"%s(%d).",
|
|
1011
|
+
strerror(err), err);
|
|
1012
|
+
} else {
|
|
1013
|
+
smb2_set_error(smb2, "smb2_service: POLLERR, "
|
|
1014
|
+
"Unknown socket error.");
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
if (smb2->connect_cb) {
|
|
1018
|
+
smb2->connect_cb(smb2, err, NULL, smb2->connect_data);
|
|
1019
|
+
smb2->connect_cb = NULL;
|
|
1020
|
+
}
|
|
1021
|
+
ret = -1;
|
|
1022
|
+
goto out;
|
|
1023
|
+
}
|
|
1024
|
+
if (revents & POLLHUP) {
|
|
1025
|
+
smb2_set_error(smb2, "smb2_service: POLLHUP, "
|
|
1026
|
+
"socket error.");
|
|
1027
|
+
ret = -1;
|
|
1028
|
+
goto out;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
if (!SMB2_VALID_SOCKET(smb2->fd) && revents & POLLOUT) {
|
|
1032
|
+
int err = 0;
|
|
1033
|
+
socklen_t err_size = sizeof(err);
|
|
1034
|
+
|
|
1035
|
+
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (char *)&err, &err_size) != 0 || err != 0) {
|
|
1036
|
+
if (err == 0) {
|
|
1037
|
+
err = errno;
|
|
1038
|
+
}
|
|
1039
|
+
if (smb2->next_addrinfo != NULL) {
|
|
1040
|
+
/* Connecting fd failed, try to connect to the next addr */
|
|
1041
|
+
smb2_close_connecting_fd(smb2, fd);
|
|
1042
|
+
|
|
1043
|
+
err = smb2_connect_async_next_addr(smb2, smb2->next_addrinfo);
|
|
1044
|
+
/* error already set by connect_async_ai() */
|
|
1045
|
+
if (err == 0) {
|
|
1046
|
+
return 0;
|
|
1047
|
+
}
|
|
1048
|
+
} else {
|
|
1049
|
+
smb2_set_error(smb2, "smb2_service: socket error "
|
|
1050
|
+
"%s(%d) while connecting.",
|
|
1051
|
+
strerror(err), err);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
if (smb2->connect_cb) {
|
|
1055
|
+
smb2->connect_cb(smb2, err,
|
|
1056
|
+
NULL, smb2->connect_data);
|
|
1057
|
+
smb2->connect_cb = NULL;
|
|
1058
|
+
}
|
|
1059
|
+
ret = -1;
|
|
1060
|
+
goto out;
|
|
1061
|
+
}
|
|
1062
|
+
smb2->fd = fd;
|
|
1063
|
+
|
|
1064
|
+
smb2_close_connecting_fds(smb2);
|
|
1065
|
+
|
|
1066
|
+
smb2_change_events(smb2, smb2->fd, smb2_which_events(smb2));
|
|
1067
|
+
if (smb2->connect_cb) {
|
|
1068
|
+
smb2->connect_cb(smb2, 0, NULL, smb2->connect_data);
|
|
1069
|
+
smb2->connect_cb = NULL;
|
|
1070
|
+
}
|
|
1071
|
+
goto out;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
if (revents & POLLIN) {
|
|
1075
|
+
if (smb2_read_from_socket(smb2) != 0) {
|
|
1076
|
+
ret = -1;
|
|
1077
|
+
goto out;
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
if (revents & POLLOUT && smb2->outqueue != NULL) {
|
|
1082
|
+
if (smb2_write_to_socket(smb2) != 0) {
|
|
1083
|
+
ret = -1;
|
|
1084
|
+
goto out;
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
out:
|
|
1089
|
+
if (smb2->timeout) {
|
|
1090
|
+
smb2_timeout_pdus(smb2);
|
|
1091
|
+
}
|
|
1092
|
+
return ret;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
int
|
|
1096
|
+
smb2_service(struct smb2_context *smb2, int revents)
|
|
1097
|
+
{
|
|
1098
|
+
if (smb2->connecting_fds_count > 0) {
|
|
1099
|
+
return smb2_service_fd(smb2, smb2->connecting_fds[0], revents);
|
|
1100
|
+
} else {
|
|
1101
|
+
return smb2_service_fd(smb2, smb2->fd, revents);
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
static void
|
|
1106
|
+
set_nonblocking(t_socket fd)
|
|
1107
|
+
{
|
|
1108
|
+
#if defined(WIN32) || defined(_XBOX)
|
|
1109
|
+
unsigned long opt = 1;
|
|
1110
|
+
ioctlsocket(fd, FIONBIO, &opt);
|
|
1111
|
+
#elif (defined(__AMIGA__) || defined(__AROS__)) && !defined(__amigaos4__) && !defined(__amigaos3__)
|
|
1112
|
+
unsigned long opt = 0;
|
|
1113
|
+
IoctlSocket(fd, FIONBIO, (char *)&opt);
|
|
1114
|
+
#else
|
|
1115
|
+
unsigned v;
|
|
1116
|
+
v = fcntl(fd, F_GETFL, 0);
|
|
1117
|
+
fcntl(fd, F_SETFL, v | O_NONBLOCK);
|
|
1118
|
+
#endif
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
static int
|
|
1122
|
+
set_tcp_sockopt(t_socket sockfd, int optname, int value)
|
|
1123
|
+
{
|
|
1124
|
+
int level;
|
|
1125
|
+
#if !defined(SOL_TCP)
|
|
1126
|
+
struct protoent *buf;
|
|
1127
|
+
if ((buf = getprotobyname("tcp")) != NULL) {
|
|
1128
|
+
level = buf->p_proto;
|
|
1129
|
+
} else {
|
|
1130
|
+
return -1;
|
|
1131
|
+
}
|
|
1132
|
+
#else
|
|
1133
|
+
level = SOL_TCP;
|
|
1134
|
+
#endif
|
|
1135
|
+
|
|
1136
|
+
return setsockopt(sockfd, level, optname, (char *)&value, sizeof(value));
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
static int
|
|
1140
|
+
connect_async_ai(struct smb2_context *smb2, const struct addrinfo *ai, int *fd_out)
|
|
1141
|
+
{
|
|
1142
|
+
int family;
|
|
1143
|
+
t_socket fd;
|
|
1144
|
+
socklen_t socksize;
|
|
1145
|
+
struct sockaddr_storage ss;
|
|
1146
|
+
#if 0 == CONFIGURE_OPTION_TCP_LINGER
|
|
1147
|
+
int const yes = 1;
|
|
1148
|
+
struct linger const lin = { 1, 0 }; /* if l_linger is zero, sends RST after FIN */
|
|
1149
|
+
#endif
|
|
1150
|
+
#ifdef _XBOX
|
|
1151
|
+
BOOL bBroadcast = TRUE;
|
|
1152
|
+
#endif
|
|
1153
|
+
memset(&ss, 0, sizeof(ss));
|
|
1154
|
+
switch (ai->ai_family) {
|
|
1155
|
+
case AF_INET:
|
|
1156
|
+
socksize = sizeof(struct sockaddr_in);
|
|
1157
|
+
memcpy(&ss, ai->ai_addr, socksize);
|
|
1158
|
+
#ifdef HAVE_SOCK_SIN_LEN
|
|
1159
|
+
((struct sockaddr_in *)&ss)->sin_len = socksize;
|
|
1160
|
+
#endif
|
|
1161
|
+
break;
|
|
1162
|
+
#ifdef AF_INET6
|
|
1163
|
+
case AF_INET6:
|
|
1164
|
+
#if !defined(PICO_PLATFORM) || defined(LWIP_INETV6)
|
|
1165
|
+
socksize = sizeof(struct sockaddr_in6);
|
|
1166
|
+
memcpy(&ss, ai->ai_addr, socksize);
|
|
1167
|
+
#ifdef HAVE_SOCK_SIN_LEN
|
|
1168
|
+
((struct sockaddr_in6 *)&ss)->sin6_len = socksize;
|
|
1169
|
+
#endif
|
|
1170
|
+
#endif
|
|
1171
|
+
break;
|
|
1172
|
+
#endif
|
|
1173
|
+
default:
|
|
1174
|
+
smb2_set_error(smb2, "Unknown address family :%d. "
|
|
1175
|
+
"Only IPv4/IPv6 supported so far.",
|
|
1176
|
+
ai->ai_family);
|
|
1177
|
+
return -EINVAL;
|
|
1178
|
+
|
|
1179
|
+
}
|
|
1180
|
+
family = ai->ai_family;
|
|
1181
|
+
|
|
1182
|
+
fd = socket(family, SOCK_STREAM, 0);
|
|
1183
|
+
if (!SMB2_VALID_SOCKET(fd)) {
|
|
1184
|
+
smb2_set_error(smb2, "Failed to open smb2 socket. "
|
|
1185
|
+
"Errno:%s(%d).", strerror(errno), errno);
|
|
1186
|
+
return -EIO;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
#ifdef _XBOX
|
|
1190
|
+
if(setsockopt(fd, SOL_SOCKET, 0x5801, (PCSTR)&bBroadcast, sizeof(BOOL) ) != 0 )
|
|
1191
|
+
{
|
|
1192
|
+
#if 0
|
|
1193
|
+
return 0;
|
|
1194
|
+
#endif
|
|
1195
|
+
}
|
|
1196
|
+
if(setsockopt(fd, SOL_SOCKET, 0x5802, (PCSTR)&bBroadcast, sizeof(BOOL)) != 0)
|
|
1197
|
+
{
|
|
1198
|
+
#if 0
|
|
1199
|
+
return 0;
|
|
1200
|
+
#endif
|
|
1201
|
+
}
|
|
1202
|
+
#endif
|
|
1203
|
+
|
|
1204
|
+
set_nonblocking(fd);
|
|
1205
|
+
set_tcp_sockopt(fd, TCP_NODELAY, 1);
|
|
1206
|
+
#if 0 == CONFIGURE_OPTION_TCP_LINGER
|
|
1207
|
+
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void*)&yes, sizeof yes);
|
|
1208
|
+
setsockopt(fd, SOL_SOCKET, SO_LINGER, (const void*)&lin, sizeof lin);
|
|
1209
|
+
#endif
|
|
1210
|
+
|
|
1211
|
+
if (connect(fd, (struct sockaddr *)&ss, socksize) != 0
|
|
1212
|
+
#if defined(_WIN32) || defined(_MSC_VER)
|
|
1213
|
+
&& WSAGetLastError() != WSAEWOULDBLOCK) {
|
|
1214
|
+
#else
|
|
1215
|
+
&& errno != EINPROGRESS) {
|
|
1216
|
+
#endif
|
|
1217
|
+
smb2_set_error(smb2, "Connect failed with errno : "
|
|
1218
|
+
"%s(%d)", strerror(errno), errno);
|
|
1219
|
+
close(fd);
|
|
1220
|
+
return -EIO;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
*fd_out = (int)fd;
|
|
1224
|
+
return 0;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
static int
|
|
1228
|
+
smb2_connect_async_next_addr(struct smb2_context *smb2, const struct addrinfo *base)
|
|
1229
|
+
{
|
|
1230
|
+
int err = -1;
|
|
1231
|
+
const struct addrinfo *ai;
|
|
1232
|
+
for (ai = base; ai != NULL; ai = ai->ai_next) {
|
|
1233
|
+
int fd;
|
|
1234
|
+
err = connect_async_ai(smb2, ai, &fd);
|
|
1235
|
+
|
|
1236
|
+
if (err == 0) {
|
|
1237
|
+
/* clear the error that could be set by a previous ai
|
|
1238
|
+
* connection */
|
|
1239
|
+
smb2_set_error(smb2, "");
|
|
1240
|
+
smb2->connecting_fds[smb2->connecting_fds_count++] = fd;
|
|
1241
|
+
if (smb2->change_fd) {
|
|
1242
|
+
smb2->change_fd(smb2, fd, SMB2_ADD_FD);
|
|
1243
|
+
smb2_change_events(smb2, fd, POLLOUT);
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
smb2->next_addrinfo = ai->ai_next;
|
|
1247
|
+
break;
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
return err;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
/* Copied from FFmpeg: libavformat/network.c */
|
|
1255
|
+
static void interleave_addrinfo(struct addrinfo *base)
|
|
1256
|
+
{
|
|
1257
|
+
struct addrinfo **next = &base->ai_next;
|
|
1258
|
+
while (*next) {
|
|
1259
|
+
struct addrinfo *cur = *next;
|
|
1260
|
+
/* Iterate forward until we find an entry of a different family. */
|
|
1261
|
+
if (cur->ai_family == base->ai_family) {
|
|
1262
|
+
next = &cur->ai_next;
|
|
1263
|
+
continue;
|
|
1264
|
+
}
|
|
1265
|
+
if (cur == base->ai_next) {
|
|
1266
|
+
/*
|
|
1267
|
+
** If the first one following base is of a different family, just
|
|
1268
|
+
** move base forward one step and continue.
|
|
1269
|
+
*/
|
|
1270
|
+
base = cur;
|
|
1271
|
+
next = &base->ai_next;
|
|
1272
|
+
continue;
|
|
1273
|
+
}
|
|
1274
|
+
/* Unchain cur from the rest of the list from its current spot. */
|
|
1275
|
+
*next = cur->ai_next;
|
|
1276
|
+
/* Hook in cur directly after base. */
|
|
1277
|
+
cur->ai_next = base->ai_next;
|
|
1278
|
+
base->ai_next = cur;
|
|
1279
|
+
/*
|
|
1280
|
+
** Restart with a new base. We know that before moving the cur element,
|
|
1281
|
+
** everything between the previous base and cur had the same family,
|
|
1282
|
+
** different from cur->ai_family. Therefore, we can keep next pointing
|
|
1283
|
+
** where it was, and continue from there with base at the one after
|
|
1284
|
+
** cur.
|
|
1285
|
+
*/
|
|
1286
|
+
base = cur->ai_next;
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
int
|
|
1291
|
+
smb2_connect_async(struct smb2_context *smb2, const char *server,
|
|
1292
|
+
smb2_command_cb cb, void *private_data)
|
|
1293
|
+
{
|
|
1294
|
+
char *addr, *host, *port;
|
|
1295
|
+
int err;
|
|
1296
|
+
size_t addr_count = 0;
|
|
1297
|
+
const struct addrinfo *ai;
|
|
1298
|
+
|
|
1299
|
+
if (SMB2_VALID_SOCKET(smb2->fd)) {
|
|
1300
|
+
smb2_set_error(smb2, "Trying to connect but already "
|
|
1301
|
+
"connected.");
|
|
1302
|
+
return -EINVAL;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
addr = strdup(server);
|
|
1306
|
+
if (addr == NULL) {
|
|
1307
|
+
smb2_set_error(smb2, "Out-of-memory: "
|
|
1308
|
+
"Failed to strdup server address.");
|
|
1309
|
+
return -ENOMEM;
|
|
1310
|
+
}
|
|
1311
|
+
host = addr;
|
|
1312
|
+
port = host;
|
|
1313
|
+
|
|
1314
|
+
/* ipv6 in [...] form ? */
|
|
1315
|
+
if (host[0] == '[') {
|
|
1316
|
+
char *str;
|
|
1317
|
+
|
|
1318
|
+
host++;
|
|
1319
|
+
str = strchr(host, ']');
|
|
1320
|
+
if (str == NULL) {
|
|
1321
|
+
free(addr);
|
|
1322
|
+
smb2_set_error(smb2, "Invalid address:%s "
|
|
1323
|
+
"Missing ']' in IPv6 address", server);
|
|
1324
|
+
return -EINVAL;
|
|
1325
|
+
}
|
|
1326
|
+
*str = 0;
|
|
1327
|
+
port = str + 1;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
port = strchr(port, ':');
|
|
1331
|
+
if (port != NULL) {
|
|
1332
|
+
*port++ = 0;
|
|
1333
|
+
} else {
|
|
1334
|
+
port = (char*)"445";
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
/* is it a hostname ? */
|
|
1338
|
+
err = getaddrinfo(host, port, NULL, &smb2->addrinfos);
|
|
1339
|
+
if (err != 0) {
|
|
1340
|
+
free(addr);
|
|
1341
|
+
#if defined(_WINDOWS) || defined(_XBOX)
|
|
1342
|
+
if (err == WSANOTINITIALISED)
|
|
1343
|
+
{
|
|
1344
|
+
smb2_set_error(smb2, "Winsock was not initialized. "
|
|
1345
|
+
"Please call WSAStartup().");
|
|
1346
|
+
return -WSANOTINITIALISED;
|
|
1347
|
+
}
|
|
1348
|
+
else
|
|
1349
|
+
#endif
|
|
1350
|
+
{
|
|
1351
|
+
smb2_set_error(smb2, "Invalid address:%s "
|
|
1352
|
+
"Can not resolve into IPv4/v6.", server);
|
|
1353
|
+
}
|
|
1354
|
+
switch (err) {
|
|
1355
|
+
case EAI_AGAIN:
|
|
1356
|
+
return -EAGAIN;
|
|
1357
|
+
case EAI_NONAME:
|
|
1358
|
+
#ifdef EAI_NODATA
|
|
1359
|
+
#if EAI_NODATA != EAI_NONAME /* Equal in MSVC */
|
|
1360
|
+
case EAI_NODATA:
|
|
1361
|
+
#endif
|
|
1362
|
+
#endif
|
|
1363
|
+
case EAI_SERVICE:
|
|
1364
|
+
case EAI_FAIL:
|
|
1365
|
+
#ifdef EAI_ADDRFAMILY /* Not available in MSVC */
|
|
1366
|
+
case EAI_ADDRFAMILY:
|
|
1367
|
+
#endif
|
|
1368
|
+
return -EIO;
|
|
1369
|
+
case EAI_MEMORY:
|
|
1370
|
+
return -ENOMEM;
|
|
1371
|
+
#ifdef EAI_SYSTEM /* Not available in MSVC */
|
|
1372
|
+
case EAI_SYSTEM:
|
|
1373
|
+
return -errno;
|
|
1374
|
+
#endif
|
|
1375
|
+
default:
|
|
1376
|
+
return -EINVAL;
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
free(addr);
|
|
1380
|
+
|
|
1381
|
+
interleave_addrinfo(smb2->addrinfos);
|
|
1382
|
+
|
|
1383
|
+
/* Allocate connecting fds array */
|
|
1384
|
+
for (ai = smb2->addrinfos; ai != NULL; ai = ai->ai_next)
|
|
1385
|
+
addr_count++;
|
|
1386
|
+
smb2->connecting_fds = malloc(sizeof(t_socket) * addr_count);
|
|
1387
|
+
if (smb2->connecting_fds == NULL) {
|
|
1388
|
+
freeaddrinfo(smb2->addrinfos);
|
|
1389
|
+
smb2->addrinfos = NULL;
|
|
1390
|
+
return -ENOMEM;
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
err = smb2_connect_async_next_addr(smb2, smb2->addrinfos);
|
|
1394
|
+
|
|
1395
|
+
if (err == 0) {
|
|
1396
|
+
smb2->connect_cb = cb;
|
|
1397
|
+
smb2->connect_data = private_data;
|
|
1398
|
+
} else {
|
|
1399
|
+
free(smb2->connecting_fds);
|
|
1400
|
+
smb2->connecting_fds = NULL;
|
|
1401
|
+
freeaddrinfo(smb2->addrinfos);
|
|
1402
|
+
smb2->addrinfos = NULL;
|
|
1403
|
+
smb2->next_addrinfo = NULL;
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
return err;
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
int
|
|
1410
|
+
smb2_bind_and_listen(const uint16_t port, const int max_connections, int *out_fd)
|
|
1411
|
+
{
|
|
1412
|
+
t_socket fd;
|
|
1413
|
+
socklen_t socksize;
|
|
1414
|
+
struct sockaddr_in serv_addr;
|
|
1415
|
+
|
|
1416
|
+
*out_fd = -1;
|
|
1417
|
+
|
|
1418
|
+
fd = socket(AF_INET, SOCK_STREAM, 0);
|
|
1419
|
+
if (!SMB2_VALID_SOCKET(fd)) {
|
|
1420
|
+
return -EIO;
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
set_nonblocking(fd);
|
|
1424
|
+
set_tcp_sockopt(fd, TCP_NODELAY, 1);
|
|
1425
|
+
|
|
1426
|
+
serv_addr.sin_port = htons(port);
|
|
1427
|
+
serv_addr.sin_family = AF_INET;
|
|
1428
|
+
serv_addr.sin_addr.s_addr = INADDR_ANY;
|
|
1429
|
+
socksize = sizeof(serv_addr);
|
|
1430
|
+
|
|
1431
|
+
if (bind(fd, (struct sockaddr *)&serv_addr, socksize) != 0
|
|
1432
|
+
#if defined(_WIN32) || defined(_MSC_VER)
|
|
1433
|
+
&& WSAGetLastError() != WSAEWOULDBLOCK) {
|
|
1434
|
+
#else
|
|
1435
|
+
&& errno != EINPROGRESS) {
|
|
1436
|
+
#endif
|
|
1437
|
+
close(fd);
|
|
1438
|
+
return -EIO;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
if (listen(fd, max_connections) != 0) {
|
|
1442
|
+
close(fd);
|
|
1443
|
+
return -EIO;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
*out_fd = (int)fd;
|
|
1447
|
+
return 0;
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
int smb2_accept_connection_async(const int fd, const int to_msec, smb2_accepted_cb cb, void *cb_data)
|
|
1451
|
+
{
|
|
1452
|
+
int err = -1;
|
|
1453
|
+
struct sockaddr_in client_addr;
|
|
1454
|
+
socklen_t socklen;
|
|
1455
|
+
t_socket clientfd;
|
|
1456
|
+
struct pollfd pfd;
|
|
1457
|
+
#if 0 == CONFIGURE_OPTION_TCP_LINGER
|
|
1458
|
+
int const yes = 1;
|
|
1459
|
+
struct linger const lin = { 1, 0 }; /* if l_linger is zero, sends RST after FIN */
|
|
1460
|
+
#endif
|
|
1461
|
+
|
|
1462
|
+
if (!SMB2_VALID_SOCKET(fd)) {
|
|
1463
|
+
return -EINVAL;
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
memset(&pfd, 0, sizeof(struct pollfd));
|
|
1467
|
+
pfd.fd = fd;
|
|
1468
|
+
pfd.events = POLLIN;
|
|
1469
|
+
|
|
1470
|
+
err = poll(&pfd, 1, to_msec);
|
|
1471
|
+
if (err > 0) {
|
|
1472
|
+
socklen = sizeof(client_addr);
|
|
1473
|
+
clientfd = accept(fd, (struct sockaddr *)&client_addr, &socklen);
|
|
1474
|
+
|
|
1475
|
+
if (clientfd >= 0) {
|
|
1476
|
+
set_nonblocking(clientfd);
|
|
1477
|
+
set_tcp_sockopt(clientfd, TCP_NODELAY, 1);
|
|
1478
|
+
#if 0 == CONFIGURE_OPTION_TCP_LINGER
|
|
1479
|
+
setsockopt(clientfd, SOL_SOCKET, SO_REUSEADDR, (const void*)&yes, sizeof yes);
|
|
1480
|
+
setsockopt(clientfd, SOL_SOCKET, SO_LINGER, (const void*)&lin, sizeof lin);
|
|
1481
|
+
#endif
|
|
1482
|
+
err = cb(clientfd, cb_data);
|
|
1483
|
+
}
|
|
1484
|
+
else {
|
|
1485
|
+
err = -EIO;
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
return err;
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
void smb2_change_events(struct smb2_context *smb2, t_socket fd, int events)
|
|
1493
|
+
{
|
|
1494
|
+
if (smb2->events == events) {
|
|
1495
|
+
return;
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
if (smb2->change_events) {
|
|
1499
|
+
smb2->change_events(smb2, fd, events);
|
|
1500
|
+
smb2->events = events;
|
|
1501
|
+
}
|
|
1502
|
+
}
|