@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.
Files changed (640) hide show
  1. package/README.md +54 -3
  2. package/darwin_arm64/libsmb2.1.dylib +0 -0
  3. package/darwin_arm64/libsmb2.6.1.0.dylib +0 -0
  4. package/darwin_arm64/libsmb2.dylib +0 -0
  5. package/darwin_arm64/smb_server_cpp_darwin_arm64 +0 -0
  6. package/darwin_arm64/third-party/libsmb2/COPYING +24 -0
  7. package/darwin_arm64/third-party/libsmb2/LICENCE-LGPL-2.1.txt +502 -0
  8. package/darwin_arm64/third-party/libsmb2/NOTICE.txt +13 -0
  9. package/darwin_arm64/third-party/libsmb2/README +413 -0
  10. package/darwin_arm64/third-party/libsmb2/source/CMakeLists.txt +205 -0
  11. package/darwin_arm64/third-party/libsmb2/source/COPYING +24 -0
  12. package/darwin_arm64/third-party/libsmb2/source/LICENCE-LGPL-2.1.txt +502 -0
  13. package/darwin_arm64/third-party/libsmb2/source/Makefile.am +15 -0
  14. package/darwin_arm64/third-party/libsmb2/source/Makefile.platform +112 -0
  15. package/darwin_arm64/third-party/libsmb2/source/README +413 -0
  16. package/darwin_arm64/third-party/libsmb2/source/Xbox/libsmb2.sln +25 -0
  17. package/darwin_arm64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj +248 -0
  18. package/darwin_arm64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj.filters +304 -0
  19. package/darwin_arm64/third-party/libsmb2/source/Xbox 360/libsmb2.sln +32 -0
  20. package/darwin_arm64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj +327 -0
  21. package/darwin_arm64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj.filters +268 -0
  22. package/darwin_arm64/third-party/libsmb2/source/bootstrap +2 -0
  23. package/darwin_arm64/third-party/libsmb2/source/cmake/ConfigureChecks.cmake +63 -0
  24. package/darwin_arm64/third-party/libsmb2/source/cmake/FindSMB2.cmake +37 -0
  25. package/darwin_arm64/third-party/libsmb2/source/cmake/Modules/FindGSSAPI.cmake +30 -0
  26. package/darwin_arm64/third-party/libsmb2/source/cmake/Modules/FindLibKrb5.cmake +44 -0
  27. package/darwin_arm64/third-party/libsmb2/source/cmake/config.h.cmake +126 -0
  28. package/darwin_arm64/third-party/libsmb2/source/cmake/libsmb2.pc.cmake +14 -0
  29. package/darwin_arm64/third-party/libsmb2/source/component.mk +5 -0
  30. package/darwin_arm64/third-party/libsmb2/source/configure.ac +184 -0
  31. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareAdd.yaml +9 -0
  32. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareCheck.yaml +4 -0
  33. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDel.yaml +5 -0
  34. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDelSticky.yaml +5 -0
  35. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareEnum.yaml +7 -0
  36. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareGetInfo.yaml +6 -0
  37. package/darwin_arm64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareSetInfo.yaml +11 -0
  38. package/darwin_arm64/third-party/libsmb2/source/examples/CMakeLists.txt +28 -0
  39. package/darwin_arm64/third-party/libsmb2/source/examples/Makefile.am +54 -0
  40. package/darwin_arm64/third-party/libsmb2/source/examples/dcerpc.c +254 -0
  41. package/darwin_arm64/third-party/libsmb2/source/examples/picow/CMakeLists.txt +72 -0
  42. package/darwin_arm64/third-party/libsmb2/source/examples/picow/README.md +2 -0
  43. package/darwin_arm64/third-party/libsmb2/source/examples/picow/main.cpp +119 -0
  44. package/darwin_arm64/third-party/libsmb2/source/examples/picow/smb-ls-sync.c +0 -0
  45. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-CMD-FIND.c +335 -0
  46. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-cat-async.c +183 -0
  47. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-cat-sync.c +105 -0
  48. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-ftruncate-sync.c +87 -0
  49. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-ls-async.c +185 -0
  50. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-ls-epoll.c +234 -0
  51. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-lsa-lookupsids.c +292 -0
  52. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-lseek-sync.c +101 -0
  53. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-notify.c +183 -0
  54. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-put-async.c +175 -0
  55. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-put-sync.c +100 -0
  56. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-raw-fsstat-async.c +353 -0
  57. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-raw-getsd-async.c +401 -0
  58. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-raw-stat-async.c +448 -0
  59. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-readlink.c +80 -0
  60. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-rename-sync.c +80 -0
  61. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-server-sync.c +497 -0
  62. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-share-enum-sync.c +146 -0
  63. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-share-enum.c +208 -0
  64. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-share-info.c +255 -0
  65. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-stat-sync.c +103 -0
  66. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-statvfs-sync.c +85 -0
  67. package/darwin_arm64/third-party/libsmb2/source/examples/smb2-truncate-sync.c +78 -0
  68. package/darwin_arm64/third-party/libsmb2/source/idf_component.yml +5 -0
  69. package/darwin_arm64/third-party/libsmb2/source/include/Makefile.am +15 -0
  70. package/darwin_arm64/third-party/libsmb2/source/include/amiga_os/config.h +139 -0
  71. package/darwin_arm64/third-party/libsmb2/source/include/apple/config.h +139 -0
  72. package/darwin_arm64/third-party/libsmb2/source/include/asprintf.h +65 -0
  73. package/darwin_arm64/third-party/libsmb2/source/include/esp/config.h +139 -0
  74. package/darwin_arm64/third-party/libsmb2/source/include/libsmb2-private.h +670 -0
  75. package/darwin_arm64/third-party/libsmb2/source/include/module.modulemap +21 -0
  76. package/darwin_arm64/third-party/libsmb2/source/include/picow/FreeRTOSConfig.h +143 -0
  77. package/darwin_arm64/third-party/libsmb2/source/include/picow/README.md +2 -0
  78. package/darwin_arm64/third-party/libsmb2/source/include/picow/config.h +139 -0
  79. package/darwin_arm64/third-party/libsmb2/source/include/picow/lwipopts.h +27 -0
  80. package/darwin_arm64/third-party/libsmb2/source/include/picow/lwipopts_examples_common.h +90 -0
  81. package/darwin_arm64/third-party/libsmb2/source/include/portable-endian.h +377 -0
  82. package/darwin_arm64/third-party/libsmb2/source/include/ps3/config.h +139 -0
  83. package/darwin_arm64/third-party/libsmb2/source/include/slist.h +63 -0
  84. package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-lsa.h +172 -0
  85. package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-srvsvc.h +276 -0
  86. package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc.h +203 -0
  87. package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2-raw.h +497 -0
  88. package/darwin_arm64/third-party/libsmb2/source/include/smb2/libsmb2.h +1409 -0
  89. package/darwin_arm64/third-party/libsmb2/source/include/smb2/smb2-errors.h +549 -0
  90. package/darwin_arm64/third-party/libsmb2/source/include/smb2/smb2-ioctl.h +83 -0
  91. package/darwin_arm64/third-party/libsmb2/source/include/smb2/smb2.h +1251 -0
  92. package/darwin_arm64/third-party/libsmb2/source/include/xbox/config.h +139 -0
  93. package/darwin_arm64/third-party/libsmb2/source/include/xbox 360/config.h +139 -0
  94. package/darwin_arm64/third-party/libsmb2/source/lib/CMakeLists.txt +260 -0
  95. package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.AMIGA +46 -0
  96. package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.AMIGA_AROS +59 -0
  97. package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.AMIGA_OS3 +59 -0
  98. package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.PS3_PPU +100 -0
  99. package/darwin_arm64/third-party/libsmb2/source/lib/Makefile.am +85 -0
  100. package/darwin_arm64/third-party/libsmb2/source/lib/aes.c +33 -0
  101. package/darwin_arm64/third-party/libsmb2/source/lib/aes.h +29 -0
  102. package/darwin_arm64/third-party/libsmb2/source/lib/aes128ccm.c +185 -0
  103. package/darwin_arm64/third-party/libsmb2/source/lib/aes128ccm.h +28 -0
  104. package/darwin_arm64/third-party/libsmb2/source/lib/aes_apple.c +70 -0
  105. package/darwin_arm64/third-party/libsmb2/source/lib/aes_apple.h +34 -0
  106. package/darwin_arm64/third-party/libsmb2/source/lib/aes_reference.c +560 -0
  107. package/darwin_arm64/third-party/libsmb2/source/lib/aes_reference.h +49 -0
  108. package/darwin_arm64/third-party/libsmb2/source/lib/alloc.c +154 -0
  109. package/darwin_arm64/third-party/libsmb2/source/lib/asn1-ber.c +1078 -0
  110. package/darwin_arm64/third-party/libsmb2/source/lib/asn1-ber.h +161 -0
  111. package/darwin_arm64/third-party/libsmb2/source/lib/compat.c +599 -0
  112. package/darwin_arm64/third-party/libsmb2/source/lib/compat.h +829 -0
  113. package/darwin_arm64/third-party/libsmb2/source/lib/dcerpc-lsa.c +641 -0
  114. package/darwin_arm64/third-party/libsmb2/source/lib/dcerpc-srvsvc.c +885 -0
  115. package/darwin_arm64/third-party/libsmb2/source/lib/dcerpc.c +2513 -0
  116. package/darwin_arm64/third-party/libsmb2/source/lib/dreamcast/vfs.c +328 -0
  117. package/darwin_arm64/third-party/libsmb2/source/lib/dreamcast/vfs.h +15 -0
  118. package/darwin_arm64/third-party/libsmb2/source/lib/errors.c +1192 -0
  119. package/darwin_arm64/third-party/libsmb2/source/lib/hmac-md5.c +84 -0
  120. package/darwin_arm64/third-party/libsmb2/source/lib/hmac-md5.h +42 -0
  121. package/darwin_arm64/third-party/libsmb2/source/lib/hmac.c +245 -0
  122. package/darwin_arm64/third-party/libsmb2/source/lib/init.c +778 -0
  123. package/darwin_arm64/third-party/libsmb2/source/lib/krb5-wrapper.c +1072 -0
  124. package/darwin_arm64/third-party/libsmb2/source/lib/krb5-wrapper.h +134 -0
  125. package/darwin_arm64/third-party/libsmb2/source/lib/libsmb2.c +4292 -0
  126. package/darwin_arm64/third-party/libsmb2/source/lib/libsmb2.syms +168 -0
  127. package/darwin_arm64/third-party/libsmb2/source/lib/md4.h +43 -0
  128. package/darwin_arm64/third-party/libsmb2/source/lib/md4c.c +289 -0
  129. package/darwin_arm64/third-party/libsmb2/source/lib/md5.c +249 -0
  130. package/darwin_arm64/third-party/libsmb2/source/lib/md5.h +76 -0
  131. package/darwin_arm64/third-party/libsmb2/source/lib/ntlmssp.c +1380 -0
  132. package/darwin_arm64/third-party/libsmb2/source/lib/ntlmssp.h +84 -0
  133. package/darwin_arm64/third-party/libsmb2/source/lib/pdu.c +1159 -0
  134. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/TODO +6 -0
  135. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/imports.lst +84 -0
  136. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/irx_imports.h +28 -0
  137. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/ps2smb2.h +35 -0
  138. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/smb2_fio.c +816 -0
  139. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/smb2_fio.h +15 -0
  140. package/darwin_arm64/third-party/libsmb2/source/lib/ps2/smb2man.c +69 -0
  141. package/darwin_arm64/third-party/libsmb2/source/lib/sha-private.h +28 -0
  142. package/darwin_arm64/third-party/libsmb2/source/lib/sha.h +334 -0
  143. package/darwin_arm64/third-party/libsmb2/source/lib/sha1.c +450 -0
  144. package/darwin_arm64/third-party/libsmb2/source/lib/sha224-256.c +611 -0
  145. package/darwin_arm64/third-party/libsmb2/source/lib/sha384-512.c +1059 -0
  146. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-close.c +240 -0
  147. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-create.c +508 -0
  148. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-echo.c +202 -0
  149. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-error.c +157 -0
  150. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-flush.c +207 -0
  151. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-ioctl.c +445 -0
  152. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-lock.c +312 -0
  153. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-logoff.c +190 -0
  154. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-negotiate.c +646 -0
  155. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-notify-change.c +278 -0
  156. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-oplock-break.c +543 -0
  157. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-query-directory.c +580 -0
  158. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-query-info.c +753 -0
  159. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-read.c +391 -0
  160. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-session-setup.c +331 -0
  161. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-set-info.c +361 -0
  162. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-tree-connect.c +278 -0
  163. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-tree-disconnect.c +171 -0
  164. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-cmd-write.c +319 -0
  165. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-file-info.c +537 -0
  166. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-filesystem-info.c +384 -0
  167. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-reparse-point.c +117 -0
  168. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-data-security-descriptor.c +361 -0
  169. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-share-enum.c +181 -0
  170. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-signing.c +279 -0
  171. package/darwin_arm64/third-party/libsmb2/source/lib/smb2-signing.h +51 -0
  172. package/darwin_arm64/third-party/libsmb2/source/lib/smb3-seal.c +165 -0
  173. package/darwin_arm64/third-party/libsmb2/source/lib/smb3-seal.h +43 -0
  174. package/darwin_arm64/third-party/libsmb2/source/lib/socket.c +1502 -0
  175. package/darwin_arm64/third-party/libsmb2/source/lib/spnego-wrapper.c +634 -0
  176. package/darwin_arm64/third-party/libsmb2/source/lib/spnego-wrapper.h +74 -0
  177. package/darwin_arm64/third-party/libsmb2/source/lib/sync.c +988 -0
  178. package/darwin_arm64/third-party/libsmb2/source/lib/timestamps.c +70 -0
  179. package/darwin_arm64/third-party/libsmb2/source/lib/unicode.c +307 -0
  180. package/darwin_arm64/third-party/libsmb2/source/lib/usha.c +345 -0
  181. package/darwin_arm64/third-party/libsmb2/source/libsmb2.pc.in +14 -0
  182. package/darwin_arm64/third-party/libsmb2/source/packaging/RPM/libsmb2.spec.in +135 -0
  183. package/darwin_arm64/third-party/libsmb2/source/packaging/RPM/makerpms.sh +114 -0
  184. package/darwin_arm64/third-party/libsmb2/source/tests/Makefile.am +34 -0
  185. package/darwin_arm64/third-party/libsmb2/source/tests/README +28 -0
  186. package/darwin_arm64/third-party/libsmb2/source/tests/aes128ccm-test.c +119 -0
  187. package/darwin_arm64/third-party/libsmb2/source/tests/functions.sh +11 -0
  188. package/darwin_arm64/third-party/libsmb2/source/tests/ld_sockerr.c +58 -0
  189. package/darwin_arm64/third-party/libsmb2/source/tests/metastat-0202-censored.c +136 -0
  190. package/darwin_arm64/third-party/libsmb2/source/tests/ntlmssp_generate_blob.c +123 -0
  191. package/darwin_arm64/third-party/libsmb2/source/tests/prog_cat.c +188 -0
  192. package/darwin_arm64/third-party/libsmb2/source/tests/prog_cat_cancel.c +203 -0
  193. package/darwin_arm64/third-party/libsmb2/source/tests/prog_ls.c +189 -0
  194. package/darwin_arm64/third-party/libsmb2/source/tests/prog_mkdir.c +85 -0
  195. package/darwin_arm64/third-party/libsmb2/source/tests/prog_rmdir.c +84 -0
  196. package/darwin_arm64/third-party/libsmb2/source/tests/smb2-dcerpc-coder-test.c +635 -0
  197. package/darwin_arm64/third-party/libsmb2/source/tests/test_0100_ls_basic.sh +22 -0
  198. package/darwin_arm64/third-party/libsmb2/source/tests/test_0101_ls_basic_valgrind.sh +23 -0
  199. package/darwin_arm64/third-party/libsmb2/source/tests/test_0102_ls_basic_socket_error.sh +16 -0
  200. package/darwin_arm64/third-party/libsmb2/source/tests/test_0103_ls_basic_valgrind_malloc_error.sh +25 -0
  201. package/darwin_arm64/third-party/libsmb2/source/tests/test_0200_mkdir.sh +15 -0
  202. package/darwin_arm64/third-party/libsmb2/source/tests/test_0201_mkdir_valgrind.sh +15 -0
  203. package/darwin_arm64/third-party/libsmb2/source/tests/test_0210_cp_basic.sh +25 -0
  204. package/darwin_arm64/third-party/libsmb2/source/tests/test_0211_cp_valgrind.sh +26 -0
  205. package/darwin_arm64/third-party/libsmb2/source/tests/test_0212_cp_valgrind_socket_error.sh +29 -0
  206. package/darwin_arm64/third-party/libsmb2/source/tests/test_0300_cat_basic.sh +13 -0
  207. package/darwin_arm64/third-party/libsmb2/source/tests/test_0301_cat_valgrind.sh +13 -0
  208. package/darwin_arm64/third-party/libsmb2/source/tests/test_0302_cat_valgrind_socket_error.sh +18 -0
  209. package/darwin_arm64/third-party/libsmb2/source/tests/test_0310_cancel_pdu.sh +13 -0
  210. package/darwin_arm64/third-party/libsmb2/source/tests/test_0400_overdrawn_0202.sh +25 -0
  211. package/darwin_arm64/third-party/libsmb2/source/tests/test_900_dcerpc.sh +10 -0
  212. package/darwin_arm64/third-party/libsmb2/source/utils/Makefile.am +11 -0
  213. package/darwin_arm64/third-party/libsmb2/source/utils/smb2-cp.c +265 -0
  214. package/darwin_arm64/third-party/libsmb2/source/utils/smb2-ls.c +135 -0
  215. package/linux_x64/libsmb2.so +0 -0
  216. package/linux_x64/libsmb2.so.1 +0 -0
  217. package/linux_x64/libsmb2.so.6.1.0 +0 -0
  218. package/linux_x64/smb_server_cpp_linux_x64 +0 -0
  219. package/linux_x64/third-party/libsmb2/COPYING +24 -0
  220. package/linux_x64/third-party/libsmb2/LICENCE-LGPL-2.1.txt +502 -0
  221. package/linux_x64/third-party/libsmb2/NOTICE.txt +13 -0
  222. package/linux_x64/third-party/libsmb2/README +413 -0
  223. package/linux_x64/third-party/libsmb2/source/CMakeLists.txt +205 -0
  224. package/linux_x64/third-party/libsmb2/source/COPYING +24 -0
  225. package/linux_x64/third-party/libsmb2/source/LICENCE-LGPL-2.1.txt +502 -0
  226. package/linux_x64/third-party/libsmb2/source/Makefile.am +15 -0
  227. package/linux_x64/third-party/libsmb2/source/Makefile.platform +112 -0
  228. package/linux_x64/third-party/libsmb2/source/README +413 -0
  229. package/linux_x64/third-party/libsmb2/source/Xbox/libsmb2.sln +25 -0
  230. package/linux_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj +248 -0
  231. package/linux_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj.filters +304 -0
  232. package/linux_x64/third-party/libsmb2/source/Xbox 360/libsmb2.sln +32 -0
  233. package/linux_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj +327 -0
  234. package/linux_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj.filters +268 -0
  235. package/linux_x64/third-party/libsmb2/source/bootstrap +2 -0
  236. package/linux_x64/third-party/libsmb2/source/cmake/ConfigureChecks.cmake +63 -0
  237. package/linux_x64/third-party/libsmb2/source/cmake/FindSMB2.cmake +37 -0
  238. package/linux_x64/third-party/libsmb2/source/cmake/Modules/FindGSSAPI.cmake +30 -0
  239. package/linux_x64/third-party/libsmb2/source/cmake/Modules/FindLibKrb5.cmake +44 -0
  240. package/linux_x64/third-party/libsmb2/source/cmake/config.h.cmake +126 -0
  241. package/linux_x64/third-party/libsmb2/source/cmake/libsmb2.pc.cmake +14 -0
  242. package/linux_x64/third-party/libsmb2/source/component.mk +5 -0
  243. package/linux_x64/third-party/libsmb2/source/configure.ac +184 -0
  244. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareAdd.yaml +9 -0
  245. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareCheck.yaml +4 -0
  246. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDel.yaml +5 -0
  247. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDelSticky.yaml +5 -0
  248. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareEnum.yaml +7 -0
  249. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareGetInfo.yaml +6 -0
  250. package/linux_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareSetInfo.yaml +11 -0
  251. package/linux_x64/third-party/libsmb2/source/examples/CMakeLists.txt +28 -0
  252. package/linux_x64/third-party/libsmb2/source/examples/Makefile.am +54 -0
  253. package/linux_x64/third-party/libsmb2/source/examples/dcerpc.c +254 -0
  254. package/linux_x64/third-party/libsmb2/source/examples/picow/CMakeLists.txt +72 -0
  255. package/linux_x64/third-party/libsmb2/source/examples/picow/README.md +2 -0
  256. package/linux_x64/third-party/libsmb2/source/examples/picow/main.cpp +119 -0
  257. package/linux_x64/third-party/libsmb2/source/examples/picow/smb-ls-sync.c +0 -0
  258. package/linux_x64/third-party/libsmb2/source/examples/smb2-CMD-FIND.c +335 -0
  259. package/linux_x64/third-party/libsmb2/source/examples/smb2-cat-async.c +183 -0
  260. package/linux_x64/third-party/libsmb2/source/examples/smb2-cat-sync.c +105 -0
  261. package/linux_x64/third-party/libsmb2/source/examples/smb2-ftruncate-sync.c +87 -0
  262. package/linux_x64/third-party/libsmb2/source/examples/smb2-ls-async.c +185 -0
  263. package/linux_x64/third-party/libsmb2/source/examples/smb2-ls-epoll.c +234 -0
  264. package/linux_x64/third-party/libsmb2/source/examples/smb2-lsa-lookupsids.c +292 -0
  265. package/linux_x64/third-party/libsmb2/source/examples/smb2-lseek-sync.c +101 -0
  266. package/linux_x64/third-party/libsmb2/source/examples/smb2-notify.c +183 -0
  267. package/linux_x64/third-party/libsmb2/source/examples/smb2-put-async.c +175 -0
  268. package/linux_x64/third-party/libsmb2/source/examples/smb2-put-sync.c +100 -0
  269. package/linux_x64/third-party/libsmb2/source/examples/smb2-raw-fsstat-async.c +353 -0
  270. package/linux_x64/third-party/libsmb2/source/examples/smb2-raw-getsd-async.c +401 -0
  271. package/linux_x64/third-party/libsmb2/source/examples/smb2-raw-stat-async.c +448 -0
  272. package/linux_x64/third-party/libsmb2/source/examples/smb2-readlink.c +80 -0
  273. package/linux_x64/third-party/libsmb2/source/examples/smb2-rename-sync.c +80 -0
  274. package/linux_x64/third-party/libsmb2/source/examples/smb2-server-sync.c +497 -0
  275. package/linux_x64/third-party/libsmb2/source/examples/smb2-share-enum-sync.c +146 -0
  276. package/linux_x64/third-party/libsmb2/source/examples/smb2-share-enum.c +208 -0
  277. package/linux_x64/third-party/libsmb2/source/examples/smb2-share-info.c +255 -0
  278. package/linux_x64/third-party/libsmb2/source/examples/smb2-stat-sync.c +103 -0
  279. package/linux_x64/third-party/libsmb2/source/examples/smb2-statvfs-sync.c +85 -0
  280. package/linux_x64/third-party/libsmb2/source/examples/smb2-truncate-sync.c +78 -0
  281. package/linux_x64/third-party/libsmb2/source/idf_component.yml +5 -0
  282. package/linux_x64/third-party/libsmb2/source/include/Makefile.am +15 -0
  283. package/linux_x64/third-party/libsmb2/source/include/amiga_os/config.h +139 -0
  284. package/linux_x64/third-party/libsmb2/source/include/apple/config.h +139 -0
  285. package/linux_x64/third-party/libsmb2/source/include/asprintf.h +65 -0
  286. package/linux_x64/third-party/libsmb2/source/include/esp/config.h +139 -0
  287. package/linux_x64/third-party/libsmb2/source/include/libsmb2-private.h +670 -0
  288. package/linux_x64/third-party/libsmb2/source/include/module.modulemap +21 -0
  289. package/linux_x64/third-party/libsmb2/source/include/picow/FreeRTOSConfig.h +143 -0
  290. package/linux_x64/third-party/libsmb2/source/include/picow/README.md +2 -0
  291. package/linux_x64/third-party/libsmb2/source/include/picow/config.h +139 -0
  292. package/linux_x64/third-party/libsmb2/source/include/picow/lwipopts.h +27 -0
  293. package/linux_x64/third-party/libsmb2/source/include/picow/lwipopts_examples_common.h +90 -0
  294. package/linux_x64/third-party/libsmb2/source/include/portable-endian.h +377 -0
  295. package/linux_x64/third-party/libsmb2/source/include/ps3/config.h +139 -0
  296. package/linux_x64/third-party/libsmb2/source/include/slist.h +63 -0
  297. package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-lsa.h +172 -0
  298. package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-srvsvc.h +276 -0
  299. package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc.h +203 -0
  300. package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2-raw.h +497 -0
  301. package/linux_x64/third-party/libsmb2/source/include/smb2/libsmb2.h +1409 -0
  302. package/linux_x64/third-party/libsmb2/source/include/smb2/smb2-errors.h +549 -0
  303. package/linux_x64/third-party/libsmb2/source/include/smb2/smb2-ioctl.h +83 -0
  304. package/linux_x64/third-party/libsmb2/source/include/smb2/smb2.h +1251 -0
  305. package/linux_x64/third-party/libsmb2/source/include/xbox/config.h +139 -0
  306. package/linux_x64/third-party/libsmb2/source/include/xbox 360/config.h +139 -0
  307. package/linux_x64/third-party/libsmb2/source/lib/CMakeLists.txt +260 -0
  308. package/linux_x64/third-party/libsmb2/source/lib/Makefile.AMIGA +46 -0
  309. package/linux_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_AROS +59 -0
  310. package/linux_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_OS3 +59 -0
  311. package/linux_x64/third-party/libsmb2/source/lib/Makefile.PS3_PPU +100 -0
  312. package/linux_x64/third-party/libsmb2/source/lib/Makefile.am +85 -0
  313. package/linux_x64/third-party/libsmb2/source/lib/aes.c +33 -0
  314. package/linux_x64/third-party/libsmb2/source/lib/aes.h +29 -0
  315. package/linux_x64/third-party/libsmb2/source/lib/aes128ccm.c +185 -0
  316. package/linux_x64/third-party/libsmb2/source/lib/aes128ccm.h +28 -0
  317. package/linux_x64/third-party/libsmb2/source/lib/aes_apple.c +70 -0
  318. package/linux_x64/third-party/libsmb2/source/lib/aes_apple.h +34 -0
  319. package/linux_x64/third-party/libsmb2/source/lib/aes_reference.c +560 -0
  320. package/linux_x64/third-party/libsmb2/source/lib/aes_reference.h +49 -0
  321. package/linux_x64/third-party/libsmb2/source/lib/alloc.c +154 -0
  322. package/linux_x64/third-party/libsmb2/source/lib/asn1-ber.c +1078 -0
  323. package/linux_x64/third-party/libsmb2/source/lib/asn1-ber.h +161 -0
  324. package/linux_x64/third-party/libsmb2/source/lib/compat.c +599 -0
  325. package/linux_x64/third-party/libsmb2/source/lib/compat.h +829 -0
  326. package/linux_x64/third-party/libsmb2/source/lib/dcerpc-lsa.c +641 -0
  327. package/linux_x64/third-party/libsmb2/source/lib/dcerpc-srvsvc.c +885 -0
  328. package/linux_x64/third-party/libsmb2/source/lib/dcerpc.c +2513 -0
  329. package/linux_x64/third-party/libsmb2/source/lib/dreamcast/vfs.c +328 -0
  330. package/linux_x64/third-party/libsmb2/source/lib/dreamcast/vfs.h +15 -0
  331. package/linux_x64/third-party/libsmb2/source/lib/errors.c +1192 -0
  332. package/linux_x64/third-party/libsmb2/source/lib/hmac-md5.c +84 -0
  333. package/linux_x64/third-party/libsmb2/source/lib/hmac-md5.h +42 -0
  334. package/linux_x64/third-party/libsmb2/source/lib/hmac.c +245 -0
  335. package/linux_x64/third-party/libsmb2/source/lib/init.c +778 -0
  336. package/linux_x64/third-party/libsmb2/source/lib/krb5-wrapper.c +1072 -0
  337. package/linux_x64/third-party/libsmb2/source/lib/krb5-wrapper.h +134 -0
  338. package/linux_x64/third-party/libsmb2/source/lib/libsmb2.c +4292 -0
  339. package/linux_x64/third-party/libsmb2/source/lib/libsmb2.syms +168 -0
  340. package/linux_x64/third-party/libsmb2/source/lib/md4.h +43 -0
  341. package/linux_x64/third-party/libsmb2/source/lib/md4c.c +289 -0
  342. package/linux_x64/third-party/libsmb2/source/lib/md5.c +249 -0
  343. package/linux_x64/third-party/libsmb2/source/lib/md5.h +76 -0
  344. package/linux_x64/third-party/libsmb2/source/lib/ntlmssp.c +1380 -0
  345. package/linux_x64/third-party/libsmb2/source/lib/ntlmssp.h +84 -0
  346. package/linux_x64/third-party/libsmb2/source/lib/pdu.c +1159 -0
  347. package/linux_x64/third-party/libsmb2/source/lib/ps2/TODO +6 -0
  348. package/linux_x64/third-party/libsmb2/source/lib/ps2/imports.lst +84 -0
  349. package/linux_x64/third-party/libsmb2/source/lib/ps2/irx_imports.h +28 -0
  350. package/linux_x64/third-party/libsmb2/source/lib/ps2/ps2smb2.h +35 -0
  351. package/linux_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.c +816 -0
  352. package/linux_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.h +15 -0
  353. package/linux_x64/third-party/libsmb2/source/lib/ps2/smb2man.c +69 -0
  354. package/linux_x64/third-party/libsmb2/source/lib/sha-private.h +28 -0
  355. package/linux_x64/third-party/libsmb2/source/lib/sha.h +334 -0
  356. package/linux_x64/third-party/libsmb2/source/lib/sha1.c +450 -0
  357. package/linux_x64/third-party/libsmb2/source/lib/sha224-256.c +611 -0
  358. package/linux_x64/third-party/libsmb2/source/lib/sha384-512.c +1059 -0
  359. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-close.c +240 -0
  360. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-create.c +508 -0
  361. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-echo.c +202 -0
  362. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-error.c +157 -0
  363. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-flush.c +207 -0
  364. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-ioctl.c +445 -0
  365. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-lock.c +312 -0
  366. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-logoff.c +190 -0
  367. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-negotiate.c +646 -0
  368. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-notify-change.c +278 -0
  369. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-oplock-break.c +543 -0
  370. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-query-directory.c +580 -0
  371. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-query-info.c +753 -0
  372. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-read.c +391 -0
  373. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-session-setup.c +331 -0
  374. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-set-info.c +361 -0
  375. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-connect.c +278 -0
  376. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-disconnect.c +171 -0
  377. package/linux_x64/third-party/libsmb2/source/lib/smb2-cmd-write.c +319 -0
  378. package/linux_x64/third-party/libsmb2/source/lib/smb2-data-file-info.c +537 -0
  379. package/linux_x64/third-party/libsmb2/source/lib/smb2-data-filesystem-info.c +384 -0
  380. package/linux_x64/third-party/libsmb2/source/lib/smb2-data-reparse-point.c +117 -0
  381. package/linux_x64/third-party/libsmb2/source/lib/smb2-data-security-descriptor.c +361 -0
  382. package/linux_x64/third-party/libsmb2/source/lib/smb2-share-enum.c +181 -0
  383. package/linux_x64/third-party/libsmb2/source/lib/smb2-signing.c +279 -0
  384. package/linux_x64/third-party/libsmb2/source/lib/smb2-signing.h +51 -0
  385. package/linux_x64/third-party/libsmb2/source/lib/smb3-seal.c +165 -0
  386. package/linux_x64/third-party/libsmb2/source/lib/smb3-seal.h +43 -0
  387. package/linux_x64/third-party/libsmb2/source/lib/socket.c +1502 -0
  388. package/linux_x64/third-party/libsmb2/source/lib/spnego-wrapper.c +634 -0
  389. package/linux_x64/third-party/libsmb2/source/lib/spnego-wrapper.h +74 -0
  390. package/linux_x64/third-party/libsmb2/source/lib/sync.c +988 -0
  391. package/linux_x64/third-party/libsmb2/source/lib/timestamps.c +70 -0
  392. package/linux_x64/third-party/libsmb2/source/lib/unicode.c +307 -0
  393. package/linux_x64/third-party/libsmb2/source/lib/usha.c +345 -0
  394. package/linux_x64/third-party/libsmb2/source/libsmb2.pc.in +14 -0
  395. package/linux_x64/third-party/libsmb2/source/packaging/RPM/libsmb2.spec.in +135 -0
  396. package/linux_x64/third-party/libsmb2/source/packaging/RPM/makerpms.sh +114 -0
  397. package/linux_x64/third-party/libsmb2/source/tests/Makefile.am +34 -0
  398. package/linux_x64/third-party/libsmb2/source/tests/README +28 -0
  399. package/linux_x64/third-party/libsmb2/source/tests/aes128ccm-test.c +119 -0
  400. package/linux_x64/third-party/libsmb2/source/tests/functions.sh +11 -0
  401. package/linux_x64/third-party/libsmb2/source/tests/ld_sockerr.c +58 -0
  402. package/linux_x64/third-party/libsmb2/source/tests/metastat-0202-censored.c +136 -0
  403. package/linux_x64/third-party/libsmb2/source/tests/ntlmssp_generate_blob.c +123 -0
  404. package/linux_x64/third-party/libsmb2/source/tests/prog_cat.c +188 -0
  405. package/linux_x64/third-party/libsmb2/source/tests/prog_cat_cancel.c +203 -0
  406. package/linux_x64/third-party/libsmb2/source/tests/prog_ls.c +189 -0
  407. package/linux_x64/third-party/libsmb2/source/tests/prog_mkdir.c +85 -0
  408. package/linux_x64/third-party/libsmb2/source/tests/prog_rmdir.c +84 -0
  409. package/linux_x64/third-party/libsmb2/source/tests/smb2-dcerpc-coder-test.c +635 -0
  410. package/linux_x64/third-party/libsmb2/source/tests/test_0100_ls_basic.sh +22 -0
  411. package/linux_x64/third-party/libsmb2/source/tests/test_0101_ls_basic_valgrind.sh +23 -0
  412. package/linux_x64/third-party/libsmb2/source/tests/test_0102_ls_basic_socket_error.sh +16 -0
  413. package/linux_x64/third-party/libsmb2/source/tests/test_0103_ls_basic_valgrind_malloc_error.sh +25 -0
  414. package/linux_x64/third-party/libsmb2/source/tests/test_0200_mkdir.sh +15 -0
  415. package/linux_x64/third-party/libsmb2/source/tests/test_0201_mkdir_valgrind.sh +15 -0
  416. package/linux_x64/third-party/libsmb2/source/tests/test_0210_cp_basic.sh +25 -0
  417. package/linux_x64/third-party/libsmb2/source/tests/test_0211_cp_valgrind.sh +26 -0
  418. package/linux_x64/third-party/libsmb2/source/tests/test_0212_cp_valgrind_socket_error.sh +29 -0
  419. package/linux_x64/third-party/libsmb2/source/tests/test_0300_cat_basic.sh +13 -0
  420. package/linux_x64/third-party/libsmb2/source/tests/test_0301_cat_valgrind.sh +13 -0
  421. package/linux_x64/third-party/libsmb2/source/tests/test_0302_cat_valgrind_socket_error.sh +18 -0
  422. package/linux_x64/third-party/libsmb2/source/tests/test_0310_cancel_pdu.sh +13 -0
  423. package/linux_x64/third-party/libsmb2/source/tests/test_0400_overdrawn_0202.sh +25 -0
  424. package/linux_x64/third-party/libsmb2/source/tests/test_900_dcerpc.sh +10 -0
  425. package/linux_x64/third-party/libsmb2/source/utils/Makefile.am +11 -0
  426. package/linux_x64/third-party/libsmb2/source/utils/smb2-cp.c +265 -0
  427. package/linux_x64/third-party/libsmb2/source/utils/smb2-ls.c +135 -0
  428. package/package.json +10 -4
  429. package/smb2.proto +164 -0
  430. package/win32_x64/smb2.dll +0 -0
  431. package/win32_x64/smb_server_cpp_win32_x64.exe +0 -0
  432. package/win32_x64/third-party/libsmb2/COPYING +24 -0
  433. package/win32_x64/third-party/libsmb2/LICENCE-LGPL-2.1.txt +502 -0
  434. package/win32_x64/third-party/libsmb2/NOTICE.txt +13 -0
  435. package/win32_x64/third-party/libsmb2/README +413 -0
  436. package/win32_x64/third-party/libsmb2/source/CMakeLists.txt +205 -0
  437. package/win32_x64/third-party/libsmb2/source/COPYING +24 -0
  438. package/win32_x64/third-party/libsmb2/source/LICENCE-LGPL-2.1.txt +502 -0
  439. package/win32_x64/third-party/libsmb2/source/Makefile.am +15 -0
  440. package/win32_x64/third-party/libsmb2/source/Makefile.platform +112 -0
  441. package/win32_x64/third-party/libsmb2/source/README +413 -0
  442. package/win32_x64/third-party/libsmb2/source/Xbox/libsmb2.sln +25 -0
  443. package/win32_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj +248 -0
  444. package/win32_x64/third-party/libsmb2/source/Xbox/libsmb2.vcxproj.filters +304 -0
  445. package/win32_x64/third-party/libsmb2/source/Xbox 360/libsmb2.sln +32 -0
  446. package/win32_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj +327 -0
  447. package/win32_x64/third-party/libsmb2/source/Xbox 360/libsmb2.vcxproj.filters +268 -0
  448. package/win32_x64/third-party/libsmb2/source/bootstrap +2 -0
  449. package/win32_x64/third-party/libsmb2/source/cmake/ConfigureChecks.cmake +63 -0
  450. package/win32_x64/third-party/libsmb2/source/cmake/FindSMB2.cmake +37 -0
  451. package/win32_x64/third-party/libsmb2/source/cmake/Modules/FindGSSAPI.cmake +30 -0
  452. package/win32_x64/third-party/libsmb2/source/cmake/Modules/FindLibKrb5.cmake +44 -0
  453. package/win32_x64/third-party/libsmb2/source/cmake/config.h.cmake +126 -0
  454. package/win32_x64/third-party/libsmb2/source/cmake/libsmb2.pc.cmake +14 -0
  455. package/win32_x64/third-party/libsmb2/source/component.mk +5 -0
  456. package/win32_x64/third-party/libsmb2/source/configure.ac +184 -0
  457. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareAdd.yaml +9 -0
  458. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareCheck.yaml +4 -0
  459. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDel.yaml +5 -0
  460. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareDelSticky.yaml +5 -0
  461. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareEnum.yaml +7 -0
  462. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareGetInfo.yaml +6 -0
  463. package/win32_x64/third-party/libsmb2/source/dcerpc-examples/srvsvc-NetrShareSetInfo.yaml +11 -0
  464. package/win32_x64/third-party/libsmb2/source/examples/CMakeLists.txt +28 -0
  465. package/win32_x64/third-party/libsmb2/source/examples/Makefile.am +54 -0
  466. package/win32_x64/third-party/libsmb2/source/examples/dcerpc.c +254 -0
  467. package/win32_x64/third-party/libsmb2/source/examples/picow/CMakeLists.txt +72 -0
  468. package/win32_x64/third-party/libsmb2/source/examples/picow/README.md +2 -0
  469. package/win32_x64/third-party/libsmb2/source/examples/picow/main.cpp +119 -0
  470. package/win32_x64/third-party/libsmb2/source/examples/picow/smb-ls-sync.c +0 -0
  471. package/win32_x64/third-party/libsmb2/source/examples/smb2-CMD-FIND.c +335 -0
  472. package/win32_x64/third-party/libsmb2/source/examples/smb2-cat-async.c +183 -0
  473. package/win32_x64/third-party/libsmb2/source/examples/smb2-cat-sync.c +105 -0
  474. package/win32_x64/third-party/libsmb2/source/examples/smb2-ftruncate-sync.c +87 -0
  475. package/win32_x64/third-party/libsmb2/source/examples/smb2-ls-async.c +185 -0
  476. package/win32_x64/third-party/libsmb2/source/examples/smb2-ls-epoll.c +234 -0
  477. package/win32_x64/third-party/libsmb2/source/examples/smb2-lsa-lookupsids.c +292 -0
  478. package/win32_x64/third-party/libsmb2/source/examples/smb2-lseek-sync.c +101 -0
  479. package/win32_x64/third-party/libsmb2/source/examples/smb2-notify.c +183 -0
  480. package/win32_x64/third-party/libsmb2/source/examples/smb2-put-async.c +175 -0
  481. package/win32_x64/third-party/libsmb2/source/examples/smb2-put-sync.c +100 -0
  482. package/win32_x64/third-party/libsmb2/source/examples/smb2-raw-fsstat-async.c +353 -0
  483. package/win32_x64/third-party/libsmb2/source/examples/smb2-raw-getsd-async.c +401 -0
  484. package/win32_x64/third-party/libsmb2/source/examples/smb2-raw-stat-async.c +448 -0
  485. package/win32_x64/third-party/libsmb2/source/examples/smb2-readlink.c +80 -0
  486. package/win32_x64/third-party/libsmb2/source/examples/smb2-rename-sync.c +80 -0
  487. package/win32_x64/third-party/libsmb2/source/examples/smb2-server-sync.c +497 -0
  488. package/win32_x64/third-party/libsmb2/source/examples/smb2-share-enum-sync.c +146 -0
  489. package/win32_x64/third-party/libsmb2/source/examples/smb2-share-enum.c +208 -0
  490. package/win32_x64/third-party/libsmb2/source/examples/smb2-share-info.c +255 -0
  491. package/win32_x64/third-party/libsmb2/source/examples/smb2-stat-sync.c +103 -0
  492. package/win32_x64/third-party/libsmb2/source/examples/smb2-statvfs-sync.c +85 -0
  493. package/win32_x64/third-party/libsmb2/source/examples/smb2-truncate-sync.c +78 -0
  494. package/win32_x64/third-party/libsmb2/source/idf_component.yml +5 -0
  495. package/win32_x64/third-party/libsmb2/source/include/Makefile.am +15 -0
  496. package/win32_x64/third-party/libsmb2/source/include/amiga_os/config.h +139 -0
  497. package/win32_x64/third-party/libsmb2/source/include/apple/config.h +139 -0
  498. package/win32_x64/third-party/libsmb2/source/include/asprintf.h +65 -0
  499. package/win32_x64/third-party/libsmb2/source/include/esp/config.h +139 -0
  500. package/win32_x64/third-party/libsmb2/source/include/libsmb2-private.h +670 -0
  501. package/win32_x64/third-party/libsmb2/source/include/module.modulemap +21 -0
  502. package/win32_x64/third-party/libsmb2/source/include/picow/FreeRTOSConfig.h +143 -0
  503. package/win32_x64/third-party/libsmb2/source/include/picow/README.md +2 -0
  504. package/win32_x64/third-party/libsmb2/source/include/picow/config.h +139 -0
  505. package/win32_x64/third-party/libsmb2/source/include/picow/lwipopts.h +27 -0
  506. package/win32_x64/third-party/libsmb2/source/include/picow/lwipopts_examples_common.h +90 -0
  507. package/win32_x64/third-party/libsmb2/source/include/portable-endian.h +377 -0
  508. package/win32_x64/third-party/libsmb2/source/include/ps3/config.h +139 -0
  509. package/win32_x64/third-party/libsmb2/source/include/slist.h +63 -0
  510. package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-lsa.h +172 -0
  511. package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc-srvsvc.h +276 -0
  512. package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-dcerpc.h +203 -0
  513. package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2-raw.h +497 -0
  514. package/win32_x64/third-party/libsmb2/source/include/smb2/libsmb2.h +1409 -0
  515. package/win32_x64/third-party/libsmb2/source/include/smb2/smb2-errors.h +549 -0
  516. package/win32_x64/third-party/libsmb2/source/include/smb2/smb2-ioctl.h +83 -0
  517. package/win32_x64/third-party/libsmb2/source/include/smb2/smb2.h +1251 -0
  518. package/win32_x64/third-party/libsmb2/source/include/xbox/config.h +139 -0
  519. package/win32_x64/third-party/libsmb2/source/include/xbox 360/config.h +139 -0
  520. package/win32_x64/third-party/libsmb2/source/lib/CMakeLists.txt +260 -0
  521. package/win32_x64/third-party/libsmb2/source/lib/Makefile.AMIGA +46 -0
  522. package/win32_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_AROS +59 -0
  523. package/win32_x64/third-party/libsmb2/source/lib/Makefile.AMIGA_OS3 +59 -0
  524. package/win32_x64/third-party/libsmb2/source/lib/Makefile.PS3_PPU +100 -0
  525. package/win32_x64/third-party/libsmb2/source/lib/Makefile.am +85 -0
  526. package/win32_x64/third-party/libsmb2/source/lib/aes.c +33 -0
  527. package/win32_x64/third-party/libsmb2/source/lib/aes.h +29 -0
  528. package/win32_x64/third-party/libsmb2/source/lib/aes128ccm.c +185 -0
  529. package/win32_x64/third-party/libsmb2/source/lib/aes128ccm.h +28 -0
  530. package/win32_x64/third-party/libsmb2/source/lib/aes_apple.c +70 -0
  531. package/win32_x64/third-party/libsmb2/source/lib/aes_apple.h +34 -0
  532. package/win32_x64/third-party/libsmb2/source/lib/aes_reference.c +560 -0
  533. package/win32_x64/third-party/libsmb2/source/lib/aes_reference.h +49 -0
  534. package/win32_x64/third-party/libsmb2/source/lib/alloc.c +154 -0
  535. package/win32_x64/third-party/libsmb2/source/lib/asn1-ber.c +1078 -0
  536. package/win32_x64/third-party/libsmb2/source/lib/asn1-ber.h +161 -0
  537. package/win32_x64/third-party/libsmb2/source/lib/compat.c +599 -0
  538. package/win32_x64/third-party/libsmb2/source/lib/compat.h +829 -0
  539. package/win32_x64/third-party/libsmb2/source/lib/dcerpc-lsa.c +641 -0
  540. package/win32_x64/third-party/libsmb2/source/lib/dcerpc-srvsvc.c +885 -0
  541. package/win32_x64/third-party/libsmb2/source/lib/dcerpc.c +2513 -0
  542. package/win32_x64/third-party/libsmb2/source/lib/dreamcast/vfs.c +328 -0
  543. package/win32_x64/third-party/libsmb2/source/lib/dreamcast/vfs.h +15 -0
  544. package/win32_x64/third-party/libsmb2/source/lib/errors.c +1192 -0
  545. package/win32_x64/third-party/libsmb2/source/lib/hmac-md5.c +84 -0
  546. package/win32_x64/third-party/libsmb2/source/lib/hmac-md5.h +42 -0
  547. package/win32_x64/third-party/libsmb2/source/lib/hmac.c +245 -0
  548. package/win32_x64/third-party/libsmb2/source/lib/init.c +778 -0
  549. package/win32_x64/third-party/libsmb2/source/lib/krb5-wrapper.c +1072 -0
  550. package/win32_x64/third-party/libsmb2/source/lib/krb5-wrapper.h +134 -0
  551. package/win32_x64/third-party/libsmb2/source/lib/libsmb2.c +4292 -0
  552. package/win32_x64/third-party/libsmb2/source/lib/libsmb2.syms +168 -0
  553. package/win32_x64/third-party/libsmb2/source/lib/md4.h +43 -0
  554. package/win32_x64/third-party/libsmb2/source/lib/md4c.c +289 -0
  555. package/win32_x64/third-party/libsmb2/source/lib/md5.c +249 -0
  556. package/win32_x64/third-party/libsmb2/source/lib/md5.h +76 -0
  557. package/win32_x64/third-party/libsmb2/source/lib/ntlmssp.c +1380 -0
  558. package/win32_x64/third-party/libsmb2/source/lib/ntlmssp.h +84 -0
  559. package/win32_x64/third-party/libsmb2/source/lib/pdu.c +1159 -0
  560. package/win32_x64/third-party/libsmb2/source/lib/ps2/TODO +6 -0
  561. package/win32_x64/third-party/libsmb2/source/lib/ps2/imports.lst +84 -0
  562. package/win32_x64/third-party/libsmb2/source/lib/ps2/irx_imports.h +28 -0
  563. package/win32_x64/third-party/libsmb2/source/lib/ps2/ps2smb2.h +35 -0
  564. package/win32_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.c +816 -0
  565. package/win32_x64/third-party/libsmb2/source/lib/ps2/smb2_fio.h +15 -0
  566. package/win32_x64/third-party/libsmb2/source/lib/ps2/smb2man.c +69 -0
  567. package/win32_x64/third-party/libsmb2/source/lib/sha-private.h +28 -0
  568. package/win32_x64/third-party/libsmb2/source/lib/sha.h +334 -0
  569. package/win32_x64/third-party/libsmb2/source/lib/sha1.c +450 -0
  570. package/win32_x64/third-party/libsmb2/source/lib/sha224-256.c +611 -0
  571. package/win32_x64/third-party/libsmb2/source/lib/sha384-512.c +1059 -0
  572. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-close.c +240 -0
  573. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-create.c +508 -0
  574. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-echo.c +202 -0
  575. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-error.c +157 -0
  576. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-flush.c +207 -0
  577. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-ioctl.c +445 -0
  578. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-lock.c +312 -0
  579. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-logoff.c +190 -0
  580. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-negotiate.c +646 -0
  581. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-notify-change.c +278 -0
  582. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-oplock-break.c +543 -0
  583. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-query-directory.c +580 -0
  584. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-query-info.c +753 -0
  585. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-read.c +391 -0
  586. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-session-setup.c +331 -0
  587. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-set-info.c +361 -0
  588. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-connect.c +278 -0
  589. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-tree-disconnect.c +171 -0
  590. package/win32_x64/third-party/libsmb2/source/lib/smb2-cmd-write.c +319 -0
  591. package/win32_x64/third-party/libsmb2/source/lib/smb2-data-file-info.c +537 -0
  592. package/win32_x64/third-party/libsmb2/source/lib/smb2-data-filesystem-info.c +384 -0
  593. package/win32_x64/third-party/libsmb2/source/lib/smb2-data-reparse-point.c +117 -0
  594. package/win32_x64/third-party/libsmb2/source/lib/smb2-data-security-descriptor.c +361 -0
  595. package/win32_x64/third-party/libsmb2/source/lib/smb2-share-enum.c +181 -0
  596. package/win32_x64/third-party/libsmb2/source/lib/smb2-signing.c +279 -0
  597. package/win32_x64/third-party/libsmb2/source/lib/smb2-signing.h +51 -0
  598. package/win32_x64/third-party/libsmb2/source/lib/smb3-seal.c +165 -0
  599. package/win32_x64/third-party/libsmb2/source/lib/smb3-seal.h +43 -0
  600. package/win32_x64/third-party/libsmb2/source/lib/socket.c +1502 -0
  601. package/win32_x64/third-party/libsmb2/source/lib/spnego-wrapper.c +634 -0
  602. package/win32_x64/third-party/libsmb2/source/lib/spnego-wrapper.h +74 -0
  603. package/win32_x64/third-party/libsmb2/source/lib/sync.c +988 -0
  604. package/win32_x64/third-party/libsmb2/source/lib/timestamps.c +70 -0
  605. package/win32_x64/third-party/libsmb2/source/lib/unicode.c +307 -0
  606. package/win32_x64/third-party/libsmb2/source/lib/usha.c +345 -0
  607. package/win32_x64/third-party/libsmb2/source/libsmb2.pc.in +14 -0
  608. package/win32_x64/third-party/libsmb2/source/packaging/RPM/libsmb2.spec.in +135 -0
  609. package/win32_x64/third-party/libsmb2/source/packaging/RPM/makerpms.sh +114 -0
  610. package/win32_x64/third-party/libsmb2/source/tests/Makefile.am +34 -0
  611. package/win32_x64/third-party/libsmb2/source/tests/README +28 -0
  612. package/win32_x64/third-party/libsmb2/source/tests/aes128ccm-test.c +119 -0
  613. package/win32_x64/third-party/libsmb2/source/tests/functions.sh +11 -0
  614. package/win32_x64/third-party/libsmb2/source/tests/ld_sockerr.c +58 -0
  615. package/win32_x64/third-party/libsmb2/source/tests/metastat-0202-censored.c +136 -0
  616. package/win32_x64/third-party/libsmb2/source/tests/ntlmssp_generate_blob.c +123 -0
  617. package/win32_x64/third-party/libsmb2/source/tests/prog_cat.c +188 -0
  618. package/win32_x64/third-party/libsmb2/source/tests/prog_cat_cancel.c +203 -0
  619. package/win32_x64/third-party/libsmb2/source/tests/prog_ls.c +189 -0
  620. package/win32_x64/third-party/libsmb2/source/tests/prog_mkdir.c +85 -0
  621. package/win32_x64/third-party/libsmb2/source/tests/prog_rmdir.c +84 -0
  622. package/win32_x64/third-party/libsmb2/source/tests/smb2-dcerpc-coder-test.c +635 -0
  623. package/win32_x64/third-party/libsmb2/source/tests/test_0100_ls_basic.sh +22 -0
  624. package/win32_x64/third-party/libsmb2/source/tests/test_0101_ls_basic_valgrind.sh +23 -0
  625. package/win32_x64/third-party/libsmb2/source/tests/test_0102_ls_basic_socket_error.sh +16 -0
  626. package/win32_x64/third-party/libsmb2/source/tests/test_0103_ls_basic_valgrind_malloc_error.sh +25 -0
  627. package/win32_x64/third-party/libsmb2/source/tests/test_0200_mkdir.sh +15 -0
  628. package/win32_x64/third-party/libsmb2/source/tests/test_0201_mkdir_valgrind.sh +15 -0
  629. package/win32_x64/third-party/libsmb2/source/tests/test_0210_cp_basic.sh +25 -0
  630. package/win32_x64/third-party/libsmb2/source/tests/test_0211_cp_valgrind.sh +26 -0
  631. package/win32_x64/third-party/libsmb2/source/tests/test_0212_cp_valgrind_socket_error.sh +29 -0
  632. package/win32_x64/third-party/libsmb2/source/tests/test_0300_cat_basic.sh +13 -0
  633. package/win32_x64/third-party/libsmb2/source/tests/test_0301_cat_valgrind.sh +13 -0
  634. package/win32_x64/third-party/libsmb2/source/tests/test_0302_cat_valgrind_socket_error.sh +18 -0
  635. package/win32_x64/third-party/libsmb2/source/tests/test_0310_cancel_pdu.sh +13 -0
  636. package/win32_x64/third-party/libsmb2/source/tests/test_0400_overdrawn_0202.sh +25 -0
  637. package/win32_x64/third-party/libsmb2/source/tests/test_900_dcerpc.sh +10 -0
  638. package/win32_x64/third-party/libsmb2/source/utils/Makefile.am +11 -0
  639. package/win32_x64/third-party/libsmb2/source/utils/smb2-cp.c +265 -0
  640. 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
+ }