rugged 1.0.0 → 1.2.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 (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -9,13 +9,82 @@
9
9
  #ifndef PRIVATE_CRYPT_OPENSSL_H__
10
10
  #define PRIVATE_CRYPT_OPENSSL_H__
11
11
 
12
- #include <openssl/hmac.h>
12
+ #ifndef CRYPT_OPENSSL_DYNAMIC
13
+ # include <openssl/des.h>
14
+ # include <openssl/hmac.h>
15
+ #endif
13
16
 
14
17
  /* OpenSSL 1.1.0 uses opaque structs, we'll reuse these. */
15
- #if OPENSSL_VERSION_NUMBER < 0x10100000L
16
- typedef struct hmac_ctx_st ntlm_hmac_ctx;
17
- #else
18
- # define ntlm_hmac_ctx HMAC_CTX
18
+ #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10100000L
19
+ # define HMAC_CTX struct hmac_ctx_st
20
+ #endif
21
+
22
+ #ifdef CRYPT_OPENSSL_DYNAMIC
23
+ typedef unsigned char DES_cblock[8];
24
+ typedef unsigned char const_DES_cblock[8];
25
+
26
+ typedef unsigned long DES_LONG;
27
+
28
+ typedef struct DES_ks {
29
+ union {
30
+ DES_cblock cblock;
31
+ DES_LONG deslong[2];
32
+ } ks[16];
33
+ } DES_key_schedule;
34
+
35
+ #define DES_ENCRYPT 1
36
+
37
+ typedef void EVP_MD;
38
+ typedef void ENGINE;
39
+ typedef void EVP_PKEY_CTX;
40
+
41
+ #define HMAC_MAX_MD_CBLOCK 128
42
+
43
+ typedef struct env_md_ctx_st EVP_MD_CTX;
44
+ struct env_md_ctx_st {
45
+ const EVP_MD *digest;
46
+ ENGINE *engine;
47
+ unsigned long flags;
48
+ void *md_data;
49
+ EVP_PKEY_CTX *pctx;
50
+ int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count);
51
+ };
52
+
53
+ typedef struct hmac_ctx_st {
54
+ const EVP_MD *md;
55
+ EVP_MD_CTX md_ctx;
56
+ EVP_MD_CTX i_ctx;
57
+ EVP_MD_CTX o_ctx;
58
+ unsigned int key_length;
59
+ unsigned char key[HMAC_MAX_MD_CBLOCK];
60
+ } HMAC_CTX;
19
61
  #endif
20
62
 
63
+ struct ntlm_crypt_ctx {
64
+ HMAC_CTX *hmac;
65
+
66
+ void *openssl_handle;
67
+
68
+ void (*des_ecb_encrypt_fn)(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks, int enc);
69
+ int (*des_set_key_fn)(const_DES_cblock *key, DES_key_schedule *schedule);
70
+
71
+ unsigned long (*err_get_error_fn)(void);
72
+ const char *(*err_lib_error_string_fn)(unsigned long e);
73
+
74
+ const EVP_MD *(*evp_md5_fn)(void);
75
+
76
+ HMAC_CTX *(*hmac_ctx_new_fn)(void);
77
+ int (*hmac_ctx_reset_fn)(HMAC_CTX *ctx);
78
+ void (*hmac_ctx_free_fn)(HMAC_CTX *ctx);
79
+ void (*hmac_ctx_cleanup_fn)(HMAC_CTX *ctx);
80
+
81
+ int (*hmac_init_ex_fn)(HMAC_CTX *ctx, const void *key, int key_len, const EVP_MD *md, ENGINE *impl);
82
+ int (*hmac_update_fn)(HMAC_CTX *ctx, const unsigned char *data, size_t len);
83
+ int (*hmac_final_fn)(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
84
+
85
+ unsigned char *(*md4_fn)(const unsigned char *d, size_t n, unsigned char *md);
86
+
87
+ int (*rand_bytes_fn)(unsigned char *buf, int num);
88
+ };
89
+
21
90
  #endif /* PRIVATE_CRYPT_OPENSSL_H__ */
@@ -9,7 +9,6 @@
9
9
  #include <stdlib.h>
10
10
  #include <stdint.h>
11
11
  #include <string.h>
12
- #include <assert.h>
13
12
  #include <errno.h>
14
13
  #include <ctype.h>
15
14
  #include <unistd.h>
@@ -24,6 +23,18 @@
24
23
  #include "compat.h"
25
24
  #include "util.h"
26
25
 
26
+ #define NTLM_ASSERT_ARG(expr) do { \
27
+ if (!(expr)) \
28
+ return NTLM_CLIENT_ERROR_INVALID_INPUT; \
29
+ } while(0)
30
+
31
+ #define NTLM_ASSERT(ntlm, expr) do { \
32
+ if (!(expr)) { \
33
+ ntlm_client_set_errmsg(ntlm, "internal error: " #expr); \
34
+ return -1; \
35
+ } \
36
+ } while(0)
37
+
27
38
  unsigned char ntlm_client_signature[] = NTLM_SIGNATURE;
28
39
 
29
40
  static bool supports_unicode(ntlm_client *ntlm)
@@ -47,24 +58,25 @@ ntlm_client *ntlm_client_init(ntlm_client_flags flags)
47
58
  {
48
59
  ntlm_client *ntlm = NULL;
49
60
 
50
- if ((ntlm = malloc(sizeof(ntlm_client))) == NULL)
61
+ if ((ntlm = calloc(1, sizeof(ntlm_client))) == NULL)
51
62
  return NULL;
52
63
 
53
- memset(ntlm, 0, sizeof(ntlm_client));
54
-
55
64
  ntlm->flags = flags;
56
65
 
57
- if ((ntlm->hmac_ctx = ntlm_hmac_ctx_init()) == NULL ||
58
- (ntlm->unicode_ctx = ntlm_unicode_ctx_init(ntlm)) == NULL) {
59
- ntlm_hmac_ctx_free(ntlm->hmac_ctx);
60
- ntlm_unicode_ctx_free(ntlm->unicode_ctx);
61
- free(ntlm);
62
- return NULL;
63
- }
64
-
65
66
  return ntlm;
66
67
  }
67
68
 
69
+ #define ENSURE_INITIALIZED(ntlm) \
70
+ do { \
71
+ if (!(ntlm)->unicode_initialized) \
72
+ (ntlm)->unicode_initialized = ntlm_unicode_init((ntlm)); \
73
+ if (!(ntlm)->crypt_initialized) \
74
+ (ntlm)->crypt_initialized = ntlm_crypt_init((ntlm)); \
75
+ if (!(ntlm)->unicode_initialized || \
76
+ !(ntlm)->crypt_initialized) \
77
+ return -1; \
78
+ } while(0)
79
+
68
80
  void ntlm_client_set_errmsg(ntlm_client *ntlm, const char *errmsg)
69
81
  {
70
82
  ntlm->state = NTLM_STATE_ERROR;
@@ -73,7 +85,9 @@ void ntlm_client_set_errmsg(ntlm_client *ntlm, const char *errmsg)
73
85
 
74
86
  const char *ntlm_client_errmsg(ntlm_client *ntlm)
75
87
  {
76
- assert(ntlm);
88
+ if (!ntlm)
89
+ return "internal error";
90
+
77
91
  return ntlm->errmsg ? ntlm->errmsg : "no error";
78
92
  }
79
93
 
@@ -83,7 +97,7 @@ int ntlm_client_set_version(
83
97
  uint8_t minor,
84
98
  uint16_t build)
85
99
  {
86
- assert(ntlm);
100
+ NTLM_ASSERT_ARG(ntlm);
87
101
 
88
102
  ntlm->host_version.major = major;
89
103
  ntlm->host_version.minor = minor;
@@ -95,20 +109,25 @@ int ntlm_client_set_version(
95
109
  return 0;
96
110
  }
97
111
 
112
+ #define reset(ptr) do { free(ptr); ptr = NULL; } while(0)
113
+
114
+ static void free_hostname(ntlm_client *ntlm)
115
+ {
116
+ reset(ntlm->hostname);
117
+ reset(ntlm->hostdomain);
118
+ reset(ntlm->hostname_utf16);
119
+ ntlm->hostname_utf16_len = 0;
120
+ }
121
+
98
122
  int ntlm_client_set_hostname(
99
123
  ntlm_client *ntlm,
100
124
  const char *hostname,
101
125
  const char *domain)
102
126
  {
103
- assert(ntlm);
127
+ NTLM_ASSERT_ARG(ntlm);
128
+ ENSURE_INITIALIZED(ntlm);
104
129
 
105
- free(ntlm->hostname);
106
- free(ntlm->hostdomain);
107
- free(ntlm->hostname_utf16);
108
-
109
- ntlm->hostname = NULL;
110
- ntlm->hostdomain = NULL;
111
- ntlm->hostname_utf16 = NULL;
130
+ free_hostname(ntlm);
112
131
 
113
132
  if (hostname && (ntlm->hostname = strdup(hostname)) == NULL) {
114
133
  ntlm_client_set_errmsg(ntlm, "out of memory");
@@ -123,7 +142,7 @@ int ntlm_client_set_hostname(
123
142
  if (hostname && supports_unicode(ntlm) && !ntlm_unicode_utf8_to_16(
124
143
  &ntlm->hostname_utf16,
125
144
  &ntlm->hostname_utf16_len,
126
- ntlm->unicode_ctx,
145
+ ntlm,
127
146
  hostname,
128
147
  strlen(hostname)))
129
148
  return -1;
@@ -134,30 +153,25 @@ int ntlm_client_set_hostname(
134
153
  static void free_credentials(ntlm_client *ntlm)
135
154
  {
136
155
  if (ntlm->password)
137
- memzero(ntlm->password, strlen(ntlm->password));
156
+ ntlm_memzero(ntlm->password, strlen(ntlm->password));
138
157
 
139
158
  if (ntlm->password_utf16)
140
- memzero(ntlm->password_utf16, ntlm->password_utf16_len);
141
-
142
- free(ntlm->username);
143
- free(ntlm->username_upper);
144
- free(ntlm->userdomain);
145
- free(ntlm->password);
146
-
147
- free(ntlm->username_utf16);
148
- free(ntlm->username_upper_utf16);
149
- free(ntlm->userdomain_utf16);
150
- free(ntlm->password_utf16);
151
-
152
- ntlm->username = NULL;
153
- ntlm->username_upper = NULL;
154
- ntlm->userdomain = NULL;
155
- ntlm->password = NULL;
156
-
157
- ntlm->username_utf16 = NULL;
158
- ntlm->username_upper_utf16 = NULL;
159
- ntlm->userdomain_utf16 = NULL;
160
- ntlm->password_utf16 = NULL;
159
+ ntlm_memzero(ntlm->password_utf16, ntlm->password_utf16_len);
160
+
161
+ reset(ntlm->username);
162
+ reset(ntlm->username_upper);
163
+ reset(ntlm->userdomain);
164
+ reset(ntlm->password);
165
+
166
+ reset(ntlm->username_utf16);
167
+ reset(ntlm->username_upper_utf16);
168
+ reset(ntlm->userdomain_utf16);
169
+ reset(ntlm->password_utf16);
170
+
171
+ ntlm->username_utf16_len = 0;
172
+ ntlm->username_upper_utf16_len = 0;
173
+ ntlm->userdomain_utf16_len = 0;
174
+ ntlm->password_utf16_len = 0;
161
175
  }
162
176
 
163
177
  int ntlm_client_set_credentials(
@@ -166,7 +180,8 @@ int ntlm_client_set_credentials(
166
180
  const char *domain,
167
181
  const char *password)
168
182
  {
169
- assert(ntlm);
183
+ NTLM_ASSERT_ARG(ntlm);
184
+ ENSURE_INITIALIZED(ntlm);
170
185
 
171
186
  free_credentials(ntlm);
172
187
 
@@ -187,7 +202,7 @@ int ntlm_client_set_credentials(
187
202
  if (!ntlm_unicode_utf8_to_16(
188
203
  &ntlm->username_utf16,
189
204
  &ntlm->username_utf16_len,
190
- ntlm->unicode_ctx,
205
+ ntlm,
191
206
  ntlm->username,
192
207
  strlen(ntlm->username)))
193
208
  return -1;
@@ -195,7 +210,7 @@ int ntlm_client_set_credentials(
195
210
  if (!ntlm_unicode_utf8_to_16(
196
211
  &ntlm->username_upper_utf16,
197
212
  &ntlm->username_upper_utf16_len,
198
- ntlm->unicode_ctx,
213
+ ntlm,
199
214
  ntlm->username_upper,
200
215
  strlen(ntlm->username_upper)))
201
216
  return -1;
@@ -204,7 +219,7 @@ int ntlm_client_set_credentials(
204
219
  if (domain && supports_unicode(ntlm) && !ntlm_unicode_utf8_to_16(
205
220
  &ntlm->userdomain_utf16,
206
221
  &ntlm->userdomain_utf16_len,
207
- ntlm->unicode_ctx,
222
+ ntlm,
208
223
  ntlm->userdomain,
209
224
  strlen(ntlm->userdomain)))
210
225
  return -1;
@@ -214,7 +229,8 @@ int ntlm_client_set_credentials(
214
229
 
215
230
  int ntlm_client_set_target(ntlm_client *ntlm, const char *target)
216
231
  {
217
- assert(ntlm);
232
+ NTLM_ASSERT_ARG(ntlm);
233
+ ENSURE_INITIALIZED(ntlm);
218
234
 
219
235
  free(ntlm->target);
220
236
  free(ntlm->target_utf16);
@@ -231,7 +247,7 @@ int ntlm_client_set_target(ntlm_client *ntlm, const char *target)
231
247
  if (supports_unicode(ntlm) && !ntlm_unicode_utf8_to_16(
232
248
  &ntlm->target_utf16,
233
249
  &ntlm->target_utf16_len,
234
- ntlm->unicode_ctx,
250
+ ntlm,
235
251
  ntlm->target,
236
252
  strlen(ntlm->target)))
237
253
  return -1;
@@ -242,14 +258,16 @@ int ntlm_client_set_target(ntlm_client *ntlm, const char *target)
242
258
 
243
259
  int ntlm_client_set_nonce(ntlm_client *ntlm, uint64_t nonce)
244
260
  {
245
- assert(ntlm);
261
+ NTLM_ASSERT_ARG(ntlm);
262
+
246
263
  ntlm->nonce = nonce;
247
264
  return 0;
248
265
  }
249
266
 
250
267
  int ntlm_client_set_timestamp(ntlm_client *ntlm, uint64_t timestamp)
251
268
  {
252
- assert(ntlm);
269
+ NTLM_ASSERT_ARG(ntlm);
270
+
253
271
  ntlm->timestamp = timestamp;
254
272
  return 0;
255
273
  }
@@ -260,6 +278,9 @@ static inline bool write_buf(
260
278
  const unsigned char *buf,
261
279
  size_t len)
262
280
  {
281
+ if (!len)
282
+ return true;
283
+
263
284
  if (out->len - out->pos < len) {
264
285
  ntlm_client_set_errmsg(ntlm, "out of buffer space");
265
286
  return false;
@@ -474,7 +495,7 @@ static inline bool read_string_unicode(
474
495
  size_t out_len;
475
496
  int ret = ntlm_unicode_utf16_to_8(out,
476
497
  &out_len,
477
- ntlm->unicode_ctx,
498
+ ntlm,
478
499
  (char *)&message->buf[message->pos],
479
500
  string_len);
480
501
 
@@ -592,7 +613,9 @@ int ntlm_client_negotiate(
592
613
  size_t hostname_offset = 0;
593
614
  uint32_t flags = 0;
594
615
 
595
- assert(out && out_len && ntlm);
616
+ NTLM_ASSERT_ARG(out);
617
+ NTLM_ASSERT_ARG(out_len);
618
+ NTLM_ASSERT_ARG(ntlm);
596
619
 
597
620
  *out = NULL;
598
621
  *out_len = 0;
@@ -648,13 +671,11 @@ int ntlm_client_negotiate(
648
671
  return -1;
649
672
  }
650
673
 
651
- if ((ntlm->negotiate.buf = malloc(ntlm->negotiate.len)) == NULL) {
674
+ if ((ntlm->negotiate.buf = calloc(1, ntlm->negotiate.len)) == NULL) {
652
675
  ntlm_client_set_errmsg(ntlm, "out of memory");
653
676
  return -1;
654
677
  }
655
678
 
656
- memset(ntlm->negotiate.buf, 0, ntlm->negotiate.len);
657
-
658
679
  if (!write_buf(ntlm, &ntlm->negotiate,
659
680
  ntlm_client_signature, sizeof(ntlm_client_signature)) ||
660
681
  !write_int32(ntlm, &ntlm->negotiate, 1) ||
@@ -677,20 +698,22 @@ int ntlm_client_negotiate(
677
698
  return -1;
678
699
 
679
700
  if (hostname_len > 0) {
680
- assert(hostname_offset == ntlm->negotiate.pos);
701
+ NTLM_ASSERT(ntlm, hostname_offset == ntlm->negotiate.pos);
702
+
681
703
  if (!write_buf(ntlm, &ntlm->negotiate,
682
704
  (const unsigned char *)ntlm->hostname, hostname_len))
683
705
  return -1;
684
706
  }
685
707
 
686
708
  if (domain_len > 0) {
687
- assert(domain_offset == ntlm->negotiate.pos);
709
+ NTLM_ASSERT(ntlm, domain_offset == ntlm->negotiate.pos);
710
+
688
711
  if (!write_buf(ntlm, &ntlm->negotiate,
689
712
  (const unsigned char *)ntlm->hostdomain, domain_len))
690
713
  return -1;
691
714
  }
692
715
 
693
- assert(ntlm->negotiate.pos == ntlm->negotiate.len);
716
+ NTLM_ASSERT(ntlm, ntlm->negotiate.pos == ntlm->negotiate.len);
694
717
 
695
718
  ntlm->state = NTLM_STATE_CHALLENGE;
696
719
 
@@ -712,7 +735,10 @@ int ntlm_client_set_challenge(
712
735
  uint32_t name_offset, info_offset = 0;
713
736
  bool unicode, has_target_info = false;
714
737
 
715
- assert(ntlm && (challenge_msg || !challenge_msg_len));
738
+ NTLM_ASSERT_ARG(ntlm);
739
+ NTLM_ASSERT_ARG(challenge_msg || !challenge_msg_len);
740
+
741
+ ENSURE_INITIALIZED(ntlm);
716
742
 
717
743
  if (ntlm->state != NTLM_STATE_NEGOTIATE &&
718
744
  ntlm->state != NTLM_STATE_CHALLENGE) {
@@ -941,6 +967,7 @@ static void des_key_from_password(
941
967
 
942
968
  static inline bool generate_lm_hash(
943
969
  ntlm_des_block out[2],
970
+ ntlm_client *ntlm,
944
971
  const char *password)
945
972
  {
946
973
  /* LM encrypts this known plaintext using the password as a key */
@@ -969,8 +996,8 @@ static inline bool generate_lm_hash(
969
996
  des_key_from_password(&key1, keystr1, keystr1_len);
970
997
  des_key_from_password(&key2, keystr2, keystr2_len);
971
998
 
972
- return ntlm_des_encrypt(&out[0], &plaintext, &key1) &&
973
- ntlm_des_encrypt(&out[1], &plaintext, &key2);
999
+ return ntlm_des_encrypt(&out[0], ntlm, &plaintext, &key1) &&
1000
+ ntlm_des_encrypt(&out[1], ntlm, &plaintext, &key2);
974
1001
  }
975
1002
 
976
1003
  static void des_keys_from_lm_hash(ntlm_des_block out[3], ntlm_des_block lm_hash[2])
@@ -995,16 +1022,16 @@ static bool generate_lm_response(ntlm_client *ntlm)
995
1022
  ntlm_des_block *challenge = (ntlm_des_block *)&ntlm->challenge.nonce;
996
1023
 
997
1024
  /* Generate the LM hash from the password */
998
- if (!generate_lm_hash(lm_hash, ntlm->password))
1025
+ if (!generate_lm_hash(lm_hash, ntlm, ntlm->password))
999
1026
  return false;
1000
1027
 
1001
1028
  /* Convert that LM hash to three DES keys */
1002
1029
  des_keys_from_lm_hash(key, lm_hash);
1003
1030
 
1004
1031
  /* Finally, encrypt the challenge with each of these keys */
1005
- if (!ntlm_des_encrypt(&lm_response[0], challenge, &key[0]) ||
1006
- !ntlm_des_encrypt(&lm_response[1], challenge, &key[1]) ||
1007
- !ntlm_des_encrypt(&lm_response[2], challenge, &key[2]))
1032
+ if (!ntlm_des_encrypt(&lm_response[0], ntlm, challenge, &key[0]) ||
1033
+ !ntlm_des_encrypt(&lm_response[1], ntlm, challenge, &key[1]) ||
1034
+ !ntlm_des_encrypt(&lm_response[2], ntlm, challenge, &key[2]))
1008
1035
  return false;
1009
1036
 
1010
1037
  memcpy(&ntlm->lm_response[0], lm_response[0], 8);
@@ -1023,12 +1050,13 @@ static bool generate_ntlm_hash(
1023
1050
  if (ntlm->password && !ntlm_unicode_utf8_to_16(
1024
1051
  &ntlm->password_utf16,
1025
1052
  &ntlm->password_utf16_len,
1026
- ntlm->unicode_ctx,
1053
+ ntlm,
1027
1054
  ntlm->password,
1028
1055
  strlen(ntlm->password)))
1029
1056
  return false;
1030
1057
 
1031
1058
  return ntlm_md4_digest(out,
1059
+ ntlm,
1032
1060
  (const unsigned char *)ntlm->password_utf16,
1033
1061
  ntlm->password_utf16_len);
1034
1062
  }
@@ -1049,9 +1077,9 @@ static bool generate_ntlm_response(ntlm_client *ntlm)
1049
1077
  des_key_from_password(&key[2], &ntlm_hash[14], 2);
1050
1078
 
1051
1079
  /* Finally, encrypt the challenge with each of these keys */
1052
- if (!ntlm_des_encrypt(&ntlm_response[0], challenge, &key[0]) ||
1053
- !ntlm_des_encrypt(&ntlm_response[1], challenge, &key[1]) ||
1054
- !ntlm_des_encrypt(&ntlm_response[2], challenge, &key[2]))
1080
+ if (!ntlm_des_encrypt(&ntlm_response[0], ntlm, challenge, &key[0]) ||
1081
+ !ntlm_des_encrypt(&ntlm_response[1], ntlm, challenge, &key[1]) ||
1082
+ !ntlm_des_encrypt(&ntlm_response[2], ntlm, challenge, &key[2]))
1055
1083
  return false;
1056
1084
 
1057
1085
  memcpy(&ntlm->ntlm_response[0], ntlm_response[0], 8);
@@ -1082,16 +1110,15 @@ static bool generate_ntlm2_hash(
1082
1110
  target_len = ntlm->target_utf16_len;
1083
1111
  }
1084
1112
 
1085
- if (!ntlm_hmac_ctx_reset(ntlm->hmac_ctx) ||
1086
- !ntlm_hmac_md5_init(ntlm->hmac_ctx, ntlm_hash, sizeof(ntlm_hash)) ||
1087
- !ntlm_hmac_md5_update(ntlm->hmac_ctx, username, username_len) ||
1088
- !ntlm_hmac_md5_update(ntlm->hmac_ctx, target, target_len) ||
1089
- !ntlm_hmac_md5_final(out, &out_len, ntlm->hmac_ctx)) {
1113
+ if (!ntlm_hmac_md5_init(ntlm, ntlm_hash, sizeof(ntlm_hash)) ||
1114
+ !ntlm_hmac_md5_update(ntlm, username, username_len) ||
1115
+ !ntlm_hmac_md5_update(ntlm, target, target_len) ||
1116
+ !ntlm_hmac_md5_final(out, &out_len, ntlm)) {
1090
1117
  ntlm_client_set_errmsg(ntlm, "failed to create HMAC-MD5");
1091
1118
  return false;
1092
1119
  }
1093
1120
 
1094
- assert(out_len == NTLM_NTLM2_HASH_LEN);
1121
+ NTLM_ASSERT(ntlm, out_len == NTLM_NTLM2_HASH_LEN);
1095
1122
  return true;
1096
1123
  }
1097
1124
 
@@ -1104,43 +1131,36 @@ static bool generate_ntlm2_challengehash(
1104
1131
  {
1105
1132
  size_t out_len = 16;
1106
1133
 
1107
- if (!ntlm_hmac_ctx_reset(ntlm->hmac_ctx) ||
1108
- !ntlm_hmac_md5_init(ntlm->hmac_ctx,
1109
- ntlm2_hash, NTLM_NTLM2_HASH_LEN) ||
1110
- !ntlm_hmac_md5_update(ntlm->hmac_ctx,
1111
- (const unsigned char *)&ntlm->challenge.nonce, 8) ||
1112
- !ntlm_hmac_md5_update(ntlm->hmac_ctx, blob, blob_len) ||
1113
- !ntlm_hmac_md5_final(out, &out_len, ntlm->hmac_ctx)) {
1134
+ if (!ntlm_hmac_md5_init(ntlm, ntlm2_hash, NTLM_NTLM2_HASH_LEN) ||
1135
+ !ntlm_hmac_md5_update(ntlm, (const unsigned char *)&ntlm->challenge.nonce, 8) ||
1136
+ !ntlm_hmac_md5_update(ntlm, blob, blob_len) ||
1137
+ !ntlm_hmac_md5_final(out, &out_len, ntlm)) {
1114
1138
  ntlm_client_set_errmsg(ntlm, "failed to create HMAC-MD5");
1115
1139
  return false;
1116
1140
  }
1117
1141
 
1118
- assert(out_len == 16);
1142
+ NTLM_ASSERT(ntlm, out_len == 16);
1119
1143
  return true;
1120
1144
  }
1121
1145
 
1122
1146
  static bool generate_lm2_response(ntlm_client *ntlm,
1123
1147
  unsigned char ntlm2_hash[NTLM_NTLM2_HASH_LEN])
1124
1148
  {
1125
- unsigned char lm2_challengehash[16];
1149
+ unsigned char lm2_challengehash[16] = {0};
1126
1150
  size_t lm2_len = 16;
1127
1151
  uint64_t local_nonce;
1128
1152
 
1129
- local_nonce = htonll(ntlm->nonce);
1153
+ local_nonce = ntlm_htonll(ntlm->nonce);
1130
1154
 
1131
- if (!ntlm_hmac_ctx_reset(ntlm->hmac_ctx) ||
1132
- !ntlm_hmac_md5_init(ntlm->hmac_ctx,
1133
- ntlm2_hash, NTLM_NTLM2_HASH_LEN) ||
1134
- !ntlm_hmac_md5_update(ntlm->hmac_ctx,
1135
- (const unsigned char *)&ntlm->challenge.nonce, 8) ||
1136
- !ntlm_hmac_md5_update(ntlm->hmac_ctx,
1137
- (const unsigned char *)&local_nonce, 8) ||
1138
- !ntlm_hmac_md5_final(lm2_challengehash, &lm2_len, ntlm->hmac_ctx)) {
1155
+ if (!ntlm_hmac_md5_init(ntlm, ntlm2_hash, NTLM_NTLM2_HASH_LEN) ||
1156
+ !ntlm_hmac_md5_update(ntlm, (const unsigned char *)&ntlm->challenge.nonce, 8) ||
1157
+ !ntlm_hmac_md5_update(ntlm, (const unsigned char *)&local_nonce, 8) ||
1158
+ !ntlm_hmac_md5_final(lm2_challengehash, &lm2_len, ntlm)) {
1139
1159
  ntlm_client_set_errmsg(ntlm, "failed to create HMAC-MD5");
1140
1160
  return false;
1141
1161
  }
1142
1162
 
1143
- assert(lm2_len == 16);
1163
+ NTLM_ASSERT(ntlm, lm2_len == 16);
1144
1164
 
1145
1165
  memcpy(&ntlm->lm_response[0], lm2_challengehash, 16);
1146
1166
  memcpy(&ntlm->lm_response[16], &local_nonce, 8);
@@ -1164,7 +1184,7 @@ static bool generate_nonce(ntlm_client *ntlm)
1164
1184
  if (ntlm->nonce)
1165
1185
  return true;
1166
1186
 
1167
- if (!ntlm_random_bytes(ntlm, buf, 8))
1187
+ if (!ntlm_random_bytes(buf, ntlm, 8))
1168
1188
  return false;
1169
1189
 
1170
1190
  memcpy(&ntlm->nonce, buf, sizeof(uint64_t));
@@ -1177,7 +1197,7 @@ static bool generate_ntlm2_response(ntlm_client *ntlm)
1177
1197
  uint32_t signature;
1178
1198
  uint64_t timestamp, nonce;
1179
1199
  unsigned char ntlm2_hash[NTLM_NTLM2_HASH_LEN];
1180
- unsigned char challengehash[16];
1200
+ unsigned char challengehash[16] = {0};
1181
1201
  unsigned char *blob;
1182
1202
 
1183
1203
  if (!generate_timestamp(ntlm) ||
@@ -1198,8 +1218,8 @@ static bool generate_ntlm2_response(ntlm_client *ntlm)
1198
1218
 
1199
1219
  /* the blob's integer values are in network byte order */
1200
1220
  signature = htonl(0x01010000);
1201
- timestamp = htonll(ntlm->timestamp);
1202
- nonce = htonll(ntlm->nonce);
1221
+ timestamp = ntlm_htonll(ntlm->timestamp);
1222
+ nonce = ntlm_htonll(ntlm->nonce);
1203
1223
 
1204
1224
  /* construct the blob */
1205
1225
  memcpy(&blob[0], &signature, 4);
@@ -1234,7 +1254,11 @@ int ntlm_client_response(
1234
1254
  uint32_t flags = 0;
1235
1255
  bool unicode;
1236
1256
 
1237
- assert(out && out_len && ntlm);
1257
+ NTLM_ASSERT_ARG(out);
1258
+ NTLM_ASSERT_ARG(out_len);
1259
+ NTLM_ASSERT_ARG(ntlm);
1260
+
1261
+ ENSURE_INITIALIZED(ntlm);
1238
1262
 
1239
1263
  *out = NULL;
1240
1264
  *out_len = 0;
@@ -1334,13 +1358,11 @@ int ntlm_client_response(
1334
1358
  return -1;
1335
1359
  }
1336
1360
 
1337
- if ((ntlm->response.buf = malloc(ntlm->response.len)) == NULL) {
1361
+ if ((ntlm->response.buf = calloc(1, ntlm->response.len)) == NULL) {
1338
1362
  ntlm_client_set_errmsg(ntlm, "out of memory");
1339
1363
  return -1;
1340
1364
  }
1341
1365
 
1342
- memset(ntlm->response.buf, 0, ntlm->response.len);
1343
-
1344
1366
  if (!write_buf(ntlm, &ntlm->response,
1345
1367
  ntlm_client_signature, sizeof(ntlm_client_signature)) ||
1346
1368
  !write_int32(ntlm, &ntlm->response, 3) ||
@@ -1359,7 +1381,7 @@ int ntlm_client_response(
1359
1381
  !write_buf(ntlm, &ntlm->response, session, session_len))
1360
1382
  return -1;
1361
1383
 
1362
- assert(ntlm->response.pos == ntlm->response.len);
1384
+ NTLM_ASSERT(ntlm, ntlm->response.pos == ntlm->response.len);
1363
1385
 
1364
1386
  ntlm->state = NTLM_STATE_COMPLETE;
1365
1387
 
@@ -1371,41 +1393,48 @@ int ntlm_client_response(
1371
1393
 
1372
1394
  void ntlm_client_reset(ntlm_client *ntlm)
1373
1395
  {
1374
- ntlm_client_flags flags;
1375
- ntlm_hmac_ctx *hmac_ctx;
1376
- ntlm_unicode_ctx *unicode_ctx;
1377
-
1378
- assert(ntlm);
1396
+ if (!ntlm)
1397
+ return;
1379
1398
 
1380
- free(ntlm->negotiate.buf);
1381
- free(ntlm->challenge.target_info);
1382
- free(ntlm->challenge.target);
1383
- free(ntlm->challenge.target_domain);
1384
- free(ntlm->challenge.target_domain_dns);
1385
- free(ntlm->challenge.target_server);
1386
- free(ntlm->challenge.target_server_dns);
1387
- free(ntlm->response.buf);
1399
+ ntlm->state = NTLM_STATE_NEGOTIATE;
1388
1400
 
1389
- free(ntlm->hostname);
1390
- free(ntlm->hostname_utf16);
1391
- free(ntlm->hostdomain);
1401
+ free_hostname(ntlm);
1392
1402
 
1393
- free(ntlm->target);
1394
- free(ntlm->target_utf16);
1403
+ memset(&ntlm->host_version, 0, sizeof(ntlm_version));
1395
1404
 
1396
- free(ntlm->ntlm2_response);
1405
+ reset(ntlm->target);
1406
+ reset(ntlm->target_utf16);
1407
+ ntlm->target_utf16_len = 0;
1397
1408
 
1398
1409
  free_credentials(ntlm);
1399
1410
 
1400
- flags = ntlm->flags;
1401
- hmac_ctx = ntlm->hmac_ctx;
1402
- unicode_ctx = ntlm->unicode_ctx;
1411
+ ntlm->nonce = 0;
1412
+ ntlm->timestamp = 0;
1403
1413
 
1404
- memset(ntlm, 0, sizeof(struct ntlm_client));
1414
+ memset(ntlm->lm_response, 0, NTLM_LM_RESPONSE_LEN);
1415
+ ntlm->lm_response_len = 0;
1405
1416
 
1406
- ntlm->flags = flags;
1407
- ntlm->hmac_ctx = hmac_ctx;
1408
- ntlm->unicode_ctx = unicode_ctx;
1417
+ memset(ntlm->ntlm_response, 0, NTLM_NTLM_RESPONSE_LEN);
1418
+ ntlm->ntlm_response_len = 0;
1419
+
1420
+ reset(ntlm->ntlm2_response);
1421
+ ntlm->ntlm2_response_len = 0;
1422
+
1423
+ reset(ntlm->negotiate.buf);
1424
+ ntlm->negotiate.pos = 0;
1425
+ ntlm->negotiate.len = 0;
1426
+
1427
+ reset(ntlm->response.buf);
1428
+ ntlm->response.pos = 0;
1429
+ ntlm->response.len = 0;
1430
+
1431
+ free(ntlm->challenge.target_info);
1432
+ free(ntlm->challenge.target);
1433
+ free(ntlm->challenge.target_domain);
1434
+ free(ntlm->challenge.target_domain_dns);
1435
+ free(ntlm->challenge.target_server);
1436
+ free(ntlm->challenge.target_server_dns);
1437
+ memset(&ntlm->challenge, 0, sizeof(ntlm_challenge));
1409
1438
  }
1410
1439
 
1411
1440
  void ntlm_client_free(ntlm_client *ntlm)
@@ -1413,10 +1442,10 @@ void ntlm_client_free(ntlm_client *ntlm)
1413
1442
  if (!ntlm)
1414
1443
  return;
1415
1444
 
1416
- ntlm_client_reset(ntlm);
1445
+ ntlm_crypt_shutdown(ntlm);
1446
+ ntlm_unicode_shutdown(ntlm);
1417
1447
 
1418
- ntlm_hmac_ctx_free(ntlm->hmac_ctx);
1419
- ntlm_unicode_ctx_free(ntlm->unicode_ctx);
1448
+ ntlm_client_reset(ntlm);
1420
1449
 
1421
1450
  free(ntlm);
1422
1451
  }