rugged 1.6.3 → 1.9.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 (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -284,7 +284,7 @@ static int build_untracked_tree(
284
284
  struct stash_update_rules data = {0};
285
285
  int error;
286
286
 
287
- if ((error = git_index_new(&i_index)) < 0)
287
+ if ((error = git_index__new(&i_index, repo->oid_type)) < 0)
288
288
  goto cleanup;
289
289
 
290
290
  if (flags & GIT_STASH_INCLUDE_UNTRACKED) {
@@ -487,7 +487,7 @@ static int commit_worktree(
487
487
  int error = 0, ignorecase;
488
488
 
489
489
  if ((error = git_repository_index(&r_index, repo) < 0) ||
490
- (error = git_index_new(&i_index)) < 0 ||
490
+ (error = git_index__new(&i_index, repo->oid_type)) < 0 ||
491
491
  (error = git_index__fill(i_index, &r_index->entries) < 0) ||
492
492
  (error = git_repository__configmap_lookup(&ignorecase, repo, GIT_CONFIGMAP_IGNORECASE)) < 0)
493
493
  goto cleanup;
@@ -732,7 +732,7 @@ int git_stash_save_with_opts(
732
732
  i_commit, b_commit, u_commit)) < 0)
733
733
  goto cleanup;
734
734
  } else {
735
- if ((error = git_index_new(&paths_index)) < 0 ||
735
+ if ((error = git_index__new(&paths_index, repo->oid_type)) < 0 ||
736
736
  (error = retrieve_head(&head, repo)) < 0 ||
737
737
  (error = git_reference_peel((git_object**)&tree, head, GIT_OBJECT_TREE)) < 0 ||
738
738
  (error = git_index_read_tree(paths_index, tree)) < 0 ||
@@ -1003,6 +1003,7 @@ static int stage_new_file(const git_index_entry **entries, void *data)
1003
1003
 
1004
1004
  static int stage_new_files(
1005
1005
  git_index **out,
1006
+ git_repository *repo,
1006
1007
  git_tree *parent_tree,
1007
1008
  git_tree *tree)
1008
1009
  {
@@ -1011,7 +1012,7 @@ static int stage_new_files(
1011
1012
  git_index *index = NULL;
1012
1013
  int error;
1013
1014
 
1014
- if ((error = git_index_new(&index)) < 0 ||
1015
+ if ((error = git_index__new(&index, repo->oid_type)) < 0 ||
1015
1016
  (error = git_iterator_for_tree(
1016
1017
  &iterators[0], parent_tree, &iterator_options)) < 0 ||
1017
1018
  (error = git_iterator_for_tree(
@@ -1095,10 +1096,10 @@ int git_stash_apply(
1095
1096
  * previously unstaged contents are staged, not the previously staged.)
1096
1097
  */
1097
1098
  } else if ((opts.flags & GIT_STASH_APPLY_REINSTATE_INDEX) == 0) {
1098
- if ((error = stage_new_files(
1099
- &stash_adds, stash_parent_tree, stash_tree)) < 0 ||
1100
- (error = merge_indexes(
1101
- &unstashed_index, repo, stash_parent_tree, repo_index, stash_adds)) < 0)
1099
+ if ((error = stage_new_files(&stash_adds, repo,
1100
+ stash_parent_tree, stash_tree)) < 0 ||
1101
+ (error = merge_indexes(&unstashed_index, repo,
1102
+ stash_parent_tree, repo_index, stash_adds)) < 0)
1102
1103
  goto cleanup;
1103
1104
  }
1104
1105
 
@@ -414,7 +414,7 @@ void git_status_list_free(git_status_list *status)
414
414
  git_diff_free(status->head2idx);
415
415
  git_diff_free(status->idx2wd);
416
416
 
417
- git_vector_free_deep(&status->paired);
417
+ git_vector_dispose_deep(&status->paired);
418
418
 
419
419
  git__memzero(status, sizeof(*status));
420
420
  git__free(status);
@@ -14,7 +14,6 @@
14
14
  #include "runtime.h"
15
15
  #include "stream.h"
16
16
  #include "streams/socket.h"
17
- #include "netops.h"
18
17
  #include "git2/transport.h"
19
18
  #include "util.h"
20
19
 
@@ -33,7 +32,6 @@
33
32
  # endif
34
33
  #endif
35
34
 
36
- #include <mbedtls/config.h>
37
35
  #include <mbedtls/ssl.h>
38
36
  #include <mbedtls/error.h>
39
37
  #include <mbedtls/entropy.h>
@@ -41,12 +39,18 @@
41
39
 
42
40
  #undef inline
43
41
 
44
- #define GIT_SSL_DEFAULT_CIPHERS "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-DSS-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-DSS-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-DSS-WITH-AES-128-CBC-SHA256:TLS-DHE-DSS-WITH-AES-256-CBC-SHA256:TLS-DHE-DSS-WITH-AES-128-CBC-SHA:TLS-DHE-DSS-WITH-AES-256-CBC-SHA:TLS-RSA-WITH-AES-128-GCM-SHA256:TLS-RSA-WITH-AES-256-GCM-SHA384:TLS-RSA-WITH-AES-128-CBC-SHA256:TLS-RSA-WITH-AES-256-CBC-SHA256:TLS-RSA-WITH-AES-128-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA"
45
- #define GIT_SSL_DEFAULT_CIPHERS_COUNT 30
42
+ #define GIT_SSL_DEFAULT_CIPHERS "TLS1-3-AES-128-GCM-SHA256:TLS1-3-AES-256-GCM-SHA384:TLS1-3-CHACHA20-POLY1305-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256:TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-CHACHA20-POLY1305-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-RSA-WITH-AES-128-GCM-SHA256:TLS-RSA-WITH-AES-256-GCM-SHA384:TLS-RSA-WITH-AES-128-CBC-SHA256:TLS-RSA-WITH-AES-256-CBC-SHA256:TLS-RSA-WITH-AES-128-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA"
43
+ #define GIT_SSL_DEFAULT_CIPHERS_COUNT 28
46
44
 
47
- static mbedtls_ssl_config *git__ssl_conf;
48
45
  static int ciphers_list[GIT_SSL_DEFAULT_CIPHERS_COUNT];
49
- static mbedtls_entropy_context *mbedtls_entropy;
46
+
47
+ static bool initialized = false;
48
+ static mbedtls_ssl_config mbedtls_config;
49
+ static mbedtls_ctr_drbg_context mbedtls_rng;
50
+ static mbedtls_entropy_context mbedtls_entropy;
51
+
52
+ static bool has_ca_chain = false;
53
+ static mbedtls_x509_crt mbedtls_ca_chain;
50
54
 
51
55
  /**
52
56
  * This function aims to clean-up the SSL context which
@@ -54,19 +58,16 @@ static mbedtls_entropy_context *mbedtls_entropy;
54
58
  */
55
59
  static void shutdown_ssl(void)
56
60
  {
57
- if (git__ssl_conf) {
58
- mbedtls_x509_crt_free(git__ssl_conf->ca_chain);
59
- git__free(git__ssl_conf->ca_chain);
60
- mbedtls_ctr_drbg_free(git__ssl_conf->p_rng);
61
- git__free(git__ssl_conf->p_rng);
62
- mbedtls_ssl_config_free(git__ssl_conf);
63
- git__free(git__ssl_conf);
64
- git__ssl_conf = NULL;
61
+ if (has_ca_chain) {
62
+ mbedtls_x509_crt_free(&mbedtls_ca_chain);
63
+ has_ca_chain = false;
65
64
  }
66
- if (mbedtls_entropy) {
67
- mbedtls_entropy_free(mbedtls_entropy);
68
- git__free(mbedtls_entropy);
69
- mbedtls_entropy = NULL;
65
+
66
+ if (initialized) {
67
+ mbedtls_ctr_drbg_free(&mbedtls_rng);
68
+ mbedtls_ssl_config_free(&mbedtls_config);
69
+ mbedtls_entropy_free(&mbedtls_entropy);
70
+ initialized = false;
70
71
  }
71
72
  }
72
73
 
@@ -75,32 +76,33 @@ int git_mbedtls_stream_global_init(void)
75
76
  int loaded = 0;
76
77
  char *crtpath = GIT_DEFAULT_CERT_LOCATION;
77
78
  struct stat statbuf;
78
- mbedtls_ctr_drbg_context *ctr_drbg = NULL;
79
79
 
80
80
  size_t ciphers_known = 0;
81
81
  char *cipher_name = NULL;
82
82
  char *cipher_string = NULL;
83
83
  char *cipher_string_tmp = NULL;
84
84
 
85
- git__ssl_conf = git__malloc(sizeof(mbedtls_ssl_config));
86
- GIT_ERROR_CHECK_ALLOC(git__ssl_conf);
85
+ mbedtls_ssl_config_init(&mbedtls_config);
86
+ mbedtls_entropy_init(&mbedtls_entropy);
87
+ mbedtls_ctr_drbg_init(&mbedtls_rng);
87
88
 
88
- mbedtls_ssl_config_init(git__ssl_conf);
89
- if (mbedtls_ssl_config_defaults(git__ssl_conf,
90
- MBEDTLS_SSL_IS_CLIENT,
91
- MBEDTLS_SSL_TRANSPORT_STREAM,
92
- MBEDTLS_SSL_PRESET_DEFAULT) != 0) {
89
+ if (mbedtls_ssl_config_defaults(&mbedtls_config,
90
+ MBEDTLS_SSL_IS_CLIENT,
91
+ MBEDTLS_SSL_TRANSPORT_STREAM,
92
+ MBEDTLS_SSL_PRESET_DEFAULT) != 0) {
93
93
  git_error_set(GIT_ERROR_SSL, "failed to initialize mbedTLS");
94
94
  goto cleanup;
95
95
  }
96
96
 
97
- /* configure TLSv1 */
98
- mbedtls_ssl_conf_min_version(git__ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0);
97
+ /* configure TLSv1.1 or better */
98
+ #ifdef MBEDTLS_SSL_MINOR_VERSION_2
99
+ mbedtls_ssl_conf_min_version(&mbedtls_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_2);
100
+ #endif
99
101
 
100
102
  /* verify_server_cert is responsible for making the check.
101
103
  * OPTIONAL because REQUIRED drops the certificate as soon as the check
102
104
  * is made, so we can never see the certificate and override it. */
103
- mbedtls_ssl_conf_authmode(git__ssl_conf, MBEDTLS_SSL_VERIFY_OPTIONAL);
105
+ mbedtls_ssl_conf_authmode(&mbedtls_config, MBEDTLS_SSL_VERIFY_OPTIONAL);
104
106
 
105
107
  /* set the list of allowed ciphersuites */
106
108
  ciphers_known = 0;
@@ -124,42 +126,33 @@ int git_mbedtls_stream_global_init(void)
124
126
  git_error_set(GIT_ERROR_SSL, "no cipher could be enabled");
125
127
  goto cleanup;
126
128
  }
127
- mbedtls_ssl_conf_ciphersuites(git__ssl_conf, ciphers_list);
129
+ mbedtls_ssl_conf_ciphersuites(&mbedtls_config, ciphers_list);
128
130
 
129
131
  /* Seeding the random number generator */
130
- mbedtls_entropy = git__malloc(sizeof(mbedtls_entropy_context));
131
- GIT_ERROR_CHECK_ALLOC(mbedtls_entropy);
132
-
133
- mbedtls_entropy_init(mbedtls_entropy);
134
-
135
- ctr_drbg = git__malloc(sizeof(mbedtls_ctr_drbg_context));
136
- GIT_ERROR_CHECK_ALLOC(ctr_drbg);
137
132
 
138
- mbedtls_ctr_drbg_init(ctr_drbg);
139
-
140
- if (mbedtls_ctr_drbg_seed(ctr_drbg,
141
- mbedtls_entropy_func,
142
- mbedtls_entropy, NULL, 0) != 0) {
133
+ if (mbedtls_ctr_drbg_seed(&mbedtls_rng, mbedtls_entropy_func,
134
+ &mbedtls_entropy, NULL, 0) != 0) {
143
135
  git_error_set(GIT_ERROR_SSL, "failed to initialize mbedTLS entropy pool");
144
136
  goto cleanup;
145
137
  }
146
138
 
147
- mbedtls_ssl_conf_rng(git__ssl_conf, mbedtls_ctr_drbg_random, ctr_drbg);
139
+ mbedtls_ssl_conf_rng(&mbedtls_config, mbedtls_ctr_drbg_random, &mbedtls_rng);
148
140
 
149
141
  /* load default certificates */
150
142
  if (crtpath != NULL && stat(crtpath, &statbuf) == 0 && S_ISREG(statbuf.st_mode))
151
143
  loaded = (git_mbedtls__set_cert_location(crtpath, NULL) == 0);
144
+
152
145
  if (!loaded && crtpath != NULL && stat(crtpath, &statbuf) == 0 && S_ISDIR(statbuf.st_mode))
153
146
  loaded = (git_mbedtls__set_cert_location(NULL, crtpath) == 0);
154
147
 
148
+ initialized = true;
149
+
155
150
  return git_runtime_shutdown_register(shutdown_ssl);
156
151
 
157
152
  cleanup:
158
- mbedtls_ctr_drbg_free(ctr_drbg);
159
- git__free(ctr_drbg);
160
- mbedtls_ssl_config_free(git__ssl_conf);
161
- git__free(git__ssl_conf);
162
- git__ssl_conf = NULL;
153
+ mbedtls_ctr_drbg_free(&mbedtls_rng);
154
+ mbedtls_ssl_config_free(&mbedtls_config);
155
+ mbedtls_entropy_free(&mbedtls_entropy);
163
156
 
164
157
  return -1;
165
158
  }
@@ -193,7 +186,7 @@ static int ssl_set_error(mbedtls_ssl_context *ssl, int error)
193
186
  break;
194
187
 
195
188
  case MBEDTLS_ERR_X509_CERT_VERIFY_FAILED:
196
- git_error_set(GIT_ERROR_SSL, "SSL error: %#04x [%x] - %s", error, ssl->session_negotiate->verify_result, errbuf);
189
+ git_error_set(GIT_ERROR_SSL, "SSL error: %#04x [%x] - %s", error, mbedtls_ssl_get_verify_result(ssl), errbuf);
197
190
  ret = GIT_ECERTIFICATE;
198
191
  break;
199
192
 
@@ -375,7 +368,7 @@ static int mbedtls_stream_wrap(
375
368
  st->ssl = git__malloc(sizeof(mbedtls_ssl_context));
376
369
  GIT_ERROR_CHECK_ALLOC(st->ssl);
377
370
  mbedtls_ssl_init(st->ssl);
378
- if (mbedtls_ssl_setup(st->ssl, git__ssl_conf)) {
371
+ if (mbedtls_ssl_setup(st->ssl, &mbedtls_config)) {
379
372
  git_error_set(GIT_ERROR_SSL, "failed to create ssl object");
380
373
  error = -1;
381
374
  goto out_err;
@@ -442,30 +435,30 @@ int git_mbedtls__set_cert_location(const char *file, const char *path)
442
435
  {
443
436
  int ret = 0;
444
437
  char errbuf[512];
445
- mbedtls_x509_crt *cacert;
446
438
 
447
439
  GIT_ASSERT_ARG(file || path);
448
440
 
449
- cacert = git__malloc(sizeof(mbedtls_x509_crt));
450
- GIT_ERROR_CHECK_ALLOC(cacert);
441
+ if (has_ca_chain)
442
+ mbedtls_x509_crt_free(&mbedtls_ca_chain);
443
+
444
+ mbedtls_x509_crt_init(&mbedtls_ca_chain);
451
445
 
452
- mbedtls_x509_crt_init(cacert);
453
446
  if (file)
454
- ret = mbedtls_x509_crt_parse_file(cacert, file);
447
+ ret = mbedtls_x509_crt_parse_file(&mbedtls_ca_chain, file);
448
+
455
449
  if (ret >= 0 && path)
456
- ret = mbedtls_x509_crt_parse_path(cacert, path);
450
+ ret = mbedtls_x509_crt_parse_path(&mbedtls_ca_chain, path);
451
+
457
452
  /* mbedtls_x509_crt_parse_path returns the number of invalid certs on success */
458
453
  if (ret < 0) {
459
- mbedtls_x509_crt_free(cacert);
460
- git__free(cacert);
454
+ mbedtls_x509_crt_free(&mbedtls_ca_chain);
461
455
  mbedtls_strerror( ret, errbuf, 512 );
462
456
  git_error_set(GIT_ERROR_SSL, "failed to load CA certificates: %#04x - %s", ret, errbuf);
463
457
  return -1;
464
458
  }
465
459
 
466
- mbedtls_x509_crt_free(git__ssl_conf->ca_chain);
467
- git__free(git__ssl_conf->ca_chain);
468
- mbedtls_ssl_conf_ca_chain(git__ssl_conf, cacert, NULL);
460
+ mbedtls_ssl_conf_ca_chain(&mbedtls_config, &mbedtls_ca_chain, NULL);
461
+ has_ca_chain = true;
469
462
 
470
463
  return 0;
471
464
  }
@@ -18,8 +18,8 @@
18
18
  #include "settings.h"
19
19
  #include "posix.h"
20
20
  #include "stream.h"
21
+ #include "net.h"
21
22
  #include "streams/socket.h"
22
- #include "netops.h"
23
23
  #include "git2/transport.h"
24
24
  #include "git2/sys/openssl.h"
25
25
 
@@ -36,10 +36,11 @@
36
36
  # include <openssl/bio.h>
37
37
  #endif
38
38
 
39
- SSL_CTX *git__ssl_ctx;
39
+ extern char *git__ssl_ciphers;
40
40
 
41
- #define GIT_SSL_DEFAULT_CIPHERS "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA256:DHE-DSS-AES128-SHA:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA"
41
+ SSL_CTX *git__ssl_ctx;
42
42
 
43
+ #define GIT_SSL_DEFAULT_CIPHERS "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA"
43
44
 
44
45
  static BIO_METHOD *git_stream_bio_method;
45
46
  static int init_bio_method(void);
@@ -70,14 +71,14 @@ static void *git_openssl_malloc(size_t bytes, const char *file, int line)
70
71
  GIT_UNUSED(line);
71
72
  return git__calloc(1, bytes);
72
73
  }
73
-
74
+
74
75
  static void *git_openssl_realloc(void *mem, size_t size, const char *file, int line)
75
76
  {
76
77
  GIT_UNUSED(file);
77
78
  GIT_UNUSED(line);
78
79
  return git__realloc(mem, size);
79
80
  }
80
-
81
+
81
82
  static void git_openssl_free(void *mem, const char *file, int line)
82
83
  {
83
84
  GIT_UNUSED(file);
@@ -105,7 +106,7 @@ static void git_openssl_free(void *mem)
105
106
  static int openssl_init(void)
106
107
  {
107
108
  long ssl_opts = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
108
- const char *ciphers = git_libgit2__ssl_ciphers();
109
+ const char *ciphers = git__ssl_ciphers;
109
110
  #ifdef VALGRIND
110
111
  static bool allocators_initialized = false;
111
112
  #endif
@@ -133,10 +134,10 @@ static int openssl_init(void)
133
134
  OPENSSL_init_ssl(0, NULL);
134
135
 
135
136
  /*
136
- * Load SSLv{2,3} and TLSv1 so that we can talk with servers
137
- * which use the SSL hellos, which are often used for
138
- * compatibility. We then disable SSL so we only allow OpenSSL
139
- * to speak TLSv1 to perform the encryption itself.
137
+ * Despite the name SSLv23_method, this is actually a version-
138
+ * flexible context, which honors the protocol versions
139
+ * specified in `ssl_opts`. So we only support TLSv1.0 and
140
+ * higher.
140
141
  */
141
142
  if (!(git__ssl_ctx = SSL_CTX_new(SSLv23_method())))
142
143
  goto error;
@@ -357,15 +358,10 @@ static int ssl_teardown(SSL *ssl)
357
358
  return ret;
358
359
  }
359
360
 
360
- static int check_host_name(const char *name, const char *host)
361
+ static bool check_host_name(const char *host, const char *name)
361
362
  {
362
- if (!strcasecmp(name, host))
363
- return 0;
364
-
365
- if (gitno__match_host(name, host) < 0)
366
- return -1;
367
-
368
- return 0;
363
+ return !strcasecmp(host, name) ||
364
+ git_net_hostname_matches_cert(host, name);
369
365
  }
370
366
 
371
367
  static int verify_server_cert(SSL *ssl, const char *host)
@@ -425,10 +421,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
425
421
  if (memchr(name, '\0', namelen))
426
422
  continue;
427
423
 
428
- if (check_host_name(name, host) < 0)
429
- matched = 0;
430
- else
431
- matched = 1;
424
+ matched = !!check_host_name(host, name);
432
425
  } else if (type == GEN_IPADD) {
433
426
  /* Here name isn't so much a name but a binary representation of the IP */
434
427
  matched = addr && !!memcmp(name, addr, namelen);
@@ -481,7 +474,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
481
474
  goto cert_fail_name;
482
475
  }
483
476
 
484
- if (check_host_name((char *)peer_cn, host) < 0)
477
+ if (!check_host_name(host, (char *)peer_cn))
485
478
  goto cert_fail_name;
486
479
 
487
480
  goto cleanup;
@@ -728,6 +721,30 @@ int git_openssl__set_cert_location(const char *file, const char *path)
728
721
  return 0;
729
722
  }
730
723
 
724
+ int git_openssl__add_x509_cert(X509 *cert)
725
+ {
726
+ X509_STORE *cert_store;
727
+
728
+ if (openssl_ensure_initialized() < 0)
729
+ return -1;
730
+
731
+ if (!(cert_store = SSL_CTX_get_cert_store(git__ssl_ctx)))
732
+ return -1;
733
+
734
+ if (cert && X509_STORE_add_cert(cert_store, cert) == 0) {
735
+ git_error_set(GIT_ERROR_SSL, "OpenSSL error: failed to add raw X509 certificate");
736
+ return -1;
737
+ }
738
+
739
+ return 0;
740
+ }
741
+
742
+ int git_openssl__reset_context(void)
743
+ {
744
+ shutdown_ssl();
745
+ return openssl_init();
746
+ }
747
+
731
748
  #else
732
749
 
733
750
  #include "stream.h"
@@ -24,6 +24,8 @@ extern int git_openssl_stream_global_init(void);
24
24
 
25
25
  #ifdef GIT_OPENSSL
26
26
  extern int git_openssl__set_cert_location(const char *file, const char *path);
27
+ extern int git_openssl__add_x509_cert(X509 *cert);
28
+ extern int git_openssl__reset_context(void);
27
29
  extern int git_openssl_stream_new(git_stream **out, const char *host, const char *port);
28
30
  extern int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host);
29
31
  #endif
@@ -65,6 +65,7 @@ int (*SSL_write)(SSL *ssl, const void *buf, int num);
65
65
  long (*SSL_CTX_ctrl)(SSL_CTX *ctx, int cmd, long larg, void *parg);
66
66
  void (*SSL_CTX_free)(SSL_CTX *ctx);
67
67
  SSL_CTX *(*SSL_CTX_new)(const SSL_METHOD *method);
68
+ X509_STORE *(*SSL_CTX_get_cert_store)(const SSL_CTX *);
68
69
  int (*SSL_CTX_set_cipher_list)(SSL_CTX *ctx, const char *str);
69
70
  int (*SSL_CTX_set_default_verify_paths)(SSL_CTX *ctx);
70
71
  long (*SSL_CTX_set_options)(SSL_CTX *ctx, long options);
@@ -80,6 +81,7 @@ int (*X509_NAME_get_index_by_NID)(X509_NAME *name, int nid, int lastpos);
80
81
  void (*X509_free)(X509 *a);
81
82
  void *(*X509_get_ext_d2i)(const X509 *x, int nid, int *crit, int *idx);
82
83
  X509_NAME *(*X509_get_subject_name)(const X509 *x);
84
+ int (*X509_STORE_add_cert)(X509_STORE *ctx, X509 *x);
83
85
 
84
86
  int (*i2d_X509)(X509 *a, unsigned char **ppout);
85
87
 
@@ -194,6 +196,7 @@ int git_openssl_stream_dynamic_init(void)
194
196
  SSL_CTX_ctrl = (long (*)(SSL_CTX *, int, long, void *))openssl_sym(&err, "SSL_CTX_ctrl", true);
195
197
  SSL_CTX_free = (void (*)(SSL_CTX *))openssl_sym(&err, "SSL_CTX_free", true);
196
198
  SSL_CTX_new = (SSL_CTX *(*)(const SSL_METHOD *))openssl_sym(&err, "SSL_CTX_new", true);
199
+ SSL_CTX_get_cert_store = (X509_STORE *(*)(const SSL_CTX *))openssl_sym(&err, "SSL_CTX_get_cert_store", true);
197
200
  SSL_CTX_set_cipher_list = (int (*)(SSL_CTX *, const char *))openssl_sym(&err, "SSL_CTX_set_cipher_list", true);
198
201
  SSL_CTX_set_default_verify_paths = (int (*)(SSL_CTX *ctx))openssl_sym(&err, "SSL_CTX_set_default_verify_paths", true);
199
202
  SSL_CTX_set_options = (long (*)(SSL_CTX *, long))openssl_sym(&err, "SSL_CTX_set_options", false);
@@ -209,6 +212,7 @@ int git_openssl_stream_dynamic_init(void)
209
212
  X509_free = (void (*)(X509 *))openssl_sym(&err, "X509_free", true);
210
213
  X509_get_ext_d2i = (void *(*)(const X509 *x, int nid, int *crit, int *idx))openssl_sym(&err, "X509_get_ext_d2i", true);
211
214
  X509_get_subject_name = (X509_NAME *(*)(const X509 *))openssl_sym(&err, "X509_get_subject_name", true);
215
+ X509_STORE_add_cert = (int (*)(X509_STORE *ctx, X509 *x))openssl_sym(&err, "X509_STORE_add_cert", true);
212
216
 
213
217
  i2d_X509 = (int (*)(X509 *a, unsigned char **ppout))openssl_sym(&err, "i2d_X509", true);
214
218
 
@@ -204,6 +204,7 @@ typedef void SSL_METHOD;
204
204
  typedef void X509;
205
205
  typedef void X509_NAME;
206
206
  typedef void X509_NAME_ENTRY;
207
+ typedef void X509_STORE;
207
208
  typedef void X509_STORE_CTX;
208
209
 
209
210
  typedef struct {
@@ -309,6 +310,7 @@ extern int (*SSL_write)(SSL *ssl, const void *buf, int num);
309
310
  extern long (*SSL_CTX_ctrl)(SSL_CTX *ctx, int cmd, long larg, void *parg);
310
311
  extern void (*SSL_CTX_free)(SSL_CTX *ctx);
311
312
  extern SSL_CTX *(*SSL_CTX_new)(const SSL_METHOD *method);
313
+ extern X509_STORE *(*SSL_CTX_get_cert_store)(const SSL_CTX *ctx);
312
314
  extern int (*SSL_CTX_set_cipher_list)(SSL_CTX *ctx, const char *str);
313
315
  extern int (*SSL_CTX_set_default_verify_paths)(SSL_CTX *ctx);
314
316
  extern long (*SSL_CTX_set_options)(SSL_CTX *ctx, long options);
@@ -326,6 +328,7 @@ extern int (*X509_NAME_get_index_by_NID)(X509_NAME *name, int nid, int lastpos);
326
328
  extern void (*X509_free)(X509 *a);
327
329
  extern void *(*X509_get_ext_d2i)(const X509 *x, int nid, int *crit, int *idx);
328
330
  extern X509_NAME *(*X509_get_subject_name)(const X509 *x);
331
+ extern int (*X509_STORE_add_cert)(X509_STORE *ctx, X509 *x);
329
332
 
330
333
  extern int (*i2d_X509)(X509 *a, unsigned char **ppout);
331
334