rugged 0.27.7 → 0.27.10

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 (409) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +99 -51
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  8. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  9. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  10. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  11. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  12. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  13. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
  14. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  15. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  16. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  17. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  18. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  19. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  20. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  21. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  82. data/vendor/libgit2/include/git2/apply.h +149 -0
  83. data/vendor/libgit2/include/git2/attr.h +20 -13
  84. data/vendor/libgit2/include/git2/blame.h +4 -4
  85. data/vendor/libgit2/include/git2/blob.h +44 -12
  86. data/vendor/libgit2/include/git2/buffer.h +20 -26
  87. data/vendor/libgit2/include/git2/cert.h +135 -0
  88. data/vendor/libgit2/include/git2/checkout.h +53 -21
  89. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  90. data/vendor/libgit2/include/git2/clone.h +5 -5
  91. data/vendor/libgit2/include/git2/commit.h +25 -3
  92. data/vendor/libgit2/include/git2/common.h +35 -10
  93. data/vendor/libgit2/include/git2/config.h +29 -19
  94. data/vendor/libgit2/include/git2/cred.h +308 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  96. data/vendor/libgit2/include/git2/describe.h +4 -4
  97. data/vendor/libgit2/include/git2/diff.h +177 -135
  98. data/vendor/libgit2/include/git2/errors.h +53 -46
  99. data/vendor/libgit2/include/git2/filter.h +8 -0
  100. data/vendor/libgit2/include/git2/index.h +74 -52
  101. data/vendor/libgit2/include/git2/indexer.h +76 -6
  102. data/vendor/libgit2/include/git2/merge.h +25 -10
  103. data/vendor/libgit2/include/git2/net.h +0 -5
  104. data/vendor/libgit2/include/git2/notes.h +1 -1
  105. data/vendor/libgit2/include/git2/object.h +17 -29
  106. data/vendor/libgit2/include/git2/odb.h +12 -11
  107. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  108. data/vendor/libgit2/include/git2/oid.h +2 -2
  109. data/vendor/libgit2/include/git2/pack.h +14 -3
  110. data/vendor/libgit2/include/git2/proxy.h +5 -3
  111. data/vendor/libgit2/include/git2/rebase.h +46 -2
  112. data/vendor/libgit2/include/git2/refs.h +34 -16
  113. data/vendor/libgit2/include/git2/remote.h +111 -14
  114. data/vendor/libgit2/include/git2/repository.h +69 -34
  115. data/vendor/libgit2/include/git2/revert.h +1 -1
  116. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  117. data/vendor/libgit2/include/git2/signature.h +2 -2
  118. data/vendor/libgit2/include/git2/stash.h +5 -5
  119. data/vendor/libgit2/include/git2/status.h +26 -17
  120. data/vendor/libgit2/include/git2/submodule.h +23 -6
  121. data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
  122. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  123. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  124. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  125. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  126. data/vendor/libgit2/include/git2/sys/merge.h +3 -3
  127. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  128. data/vendor/libgit2/include/git2/sys/path.h +14 -5
  129. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  130. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  131. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  132. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  133. data/vendor/libgit2/include/git2/tag.h +13 -4
  134. data/vendor/libgit2/include/git2/trace.h +2 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -311
  136. data/vendor/libgit2/include/git2/tree.h +4 -4
  137. data/vendor/libgit2/include/git2/types.h +25 -106
  138. data/vendor/libgit2/include/git2/version.h +3 -3
  139. data/vendor/libgit2/include/git2/worktree.h +5 -5
  140. data/vendor/libgit2/include/git2.h +4 -0
  141. data/vendor/libgit2/src/CMakeLists.txt +104 -235
  142. data/vendor/libgit2/src/alloc.c +14 -18
  143. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
  144. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  145. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  146. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  147. data/vendor/libgit2/src/annotated_commit.c +18 -11
  148. data/vendor/libgit2/src/apply.c +535 -28
  149. data/vendor/libgit2/src/apply.h +3 -1
  150. data/vendor/libgit2/src/array.h +2 -2
  151. data/vendor/libgit2/src/attr.c +77 -71
  152. data/vendor/libgit2/src/attr_file.c +203 -117
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +49 -51
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +38 -18
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +29 -15
  159. data/vendor/libgit2/src/blob.c +123 -37
  160. data/vendor/libgit2/src/blob.h +19 -2
  161. data/vendor/libgit2/src/branch.c +47 -23
  162. data/vendor/libgit2/src/buf_text.c +7 -6
  163. data/vendor/libgit2/src/buffer.c +60 -53
  164. data/vendor/libgit2/src/cache.c +38 -45
  165. data/vendor/libgit2/src/cache.h +3 -3
  166. data/vendor/libgit2/src/cc-compat.h +20 -3
  167. data/vendor/libgit2/src/checkout.c +77 -67
  168. data/vendor/libgit2/src/cherrypick.c +12 -6
  169. data/vendor/libgit2/src/clone.c +36 -14
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +103 -48
  172. data/vendor/libgit2/src/commit.h +7 -0
  173. data/vendor/libgit2/src/commit_list.c +36 -78
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +24 -90
  176. data/vendor/libgit2/src/config.c +203 -176
  177. data/vendor/libgit2/src/config.h +8 -20
  178. data/vendor/libgit2/src/config_backend.h +96 -0
  179. data/vendor/libgit2/src/config_cache.c +41 -35
  180. data/vendor/libgit2/src/config_entries.c +229 -0
  181. data/vendor/libgit2/src/config_entries.h +24 -0
  182. data/vendor/libgit2/src/config_file.c +422 -680
  183. data/vendor/libgit2/src/config_mem.c +220 -0
  184. data/vendor/libgit2/src/config_parse.c +96 -68
  185. data/vendor/libgit2/src/config_parse.h +15 -14
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +219 -196
  188. data/vendor/libgit2/src/delta.c +25 -18
  189. data/vendor/libgit2/src/describe.c +42 -41
  190. data/vendor/libgit2/src/diff.c +52 -67
  191. data/vendor/libgit2/src/diff.h +2 -1
  192. data/vendor/libgit2/src/diff_driver.c +44 -46
  193. data/vendor/libgit2/src/diff_file.c +16 -14
  194. data/vendor/libgit2/src/diff_file.h +1 -1
  195. data/vendor/libgit2/src/diff_generate.c +158 -103
  196. data/vendor/libgit2/src/diff_generate.h +3 -3
  197. data/vendor/libgit2/src/diff_parse.c +4 -4
  198. data/vendor/libgit2/src/diff_print.c +34 -22
  199. data/vendor/libgit2/src/diff_stats.c +22 -7
  200. data/vendor/libgit2/src/diff_tform.c +18 -16
  201. data/vendor/libgit2/src/diff_xdiff.c +3 -3
  202. data/vendor/libgit2/src/errors.c +51 -39
  203. data/vendor/libgit2/src/errors.h +81 -0
  204. data/vendor/libgit2/src/features.h.in +9 -3
  205. data/vendor/libgit2/src/fetch.c +8 -3
  206. data/vendor/libgit2/src/fetchhead.c +12 -12
  207. data/vendor/libgit2/src/filebuf.c +28 -32
  208. data/vendor/libgit2/src/filebuf.h +2 -2
  209. data/vendor/libgit2/src/filter.c +47 -33
  210. data/vendor/libgit2/src/filter.h +0 -10
  211. data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
  212. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  213. data/vendor/libgit2/src/global.c +35 -55
  214. data/vendor/libgit2/src/global.h +0 -2
  215. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  216. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  218. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  219. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  220. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  221. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  222. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
  223. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  224. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  226. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  227. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  228. data/vendor/libgit2/src/hash/sha1.h +38 -0
  229. data/vendor/libgit2/src/hash.c +61 -0
  230. data/vendor/libgit2/src/hash.h +20 -21
  231. data/vendor/libgit2/src/hashsig.c +5 -5
  232. data/vendor/libgit2/src/idxmap.c +107 -61
  233. data/vendor/libgit2/src/idxmap.h +153 -31
  234. data/vendor/libgit2/src/ignore.c +38 -42
  235. data/vendor/libgit2/src/index.c +264 -199
  236. data/vendor/libgit2/src/index.h +7 -1
  237. data/vendor/libgit2/src/indexer.c +338 -167
  238. data/vendor/libgit2/src/integer.h +71 -26
  239. data/vendor/libgit2/src/iterator.c +134 -62
  240. data/vendor/libgit2/src/iterator.h +15 -0
  241. data/vendor/libgit2/src/mailmap.c +8 -8
  242. data/vendor/libgit2/src/map.h +1 -1
  243. data/vendor/libgit2/src/merge.c +137 -93
  244. data/vendor/libgit2/src/merge_driver.c +11 -11
  245. data/vendor/libgit2/src/merge_file.c +2 -2
  246. data/vendor/libgit2/src/mwindow.c +24 -29
  247. data/vendor/libgit2/src/mwindow.h +4 -4
  248. data/vendor/libgit2/src/net.c +184 -0
  249. data/vendor/libgit2/src/net.h +36 -0
  250. data/vendor/libgit2/src/netops.c +55 -156
  251. data/vendor/libgit2/src/netops.h +3 -23
  252. data/vendor/libgit2/src/notes.c +14 -9
  253. data/vendor/libgit2/src/object.c +120 -69
  254. data/vendor/libgit2/src/object.h +22 -9
  255. data/vendor/libgit2/src/object_api.c +8 -8
  256. data/vendor/libgit2/src/odb.c +111 -88
  257. data/vendor/libgit2/src/odb.h +8 -7
  258. data/vendor/libgit2/src/odb_loose.c +58 -47
  259. data/vendor/libgit2/src/odb_mempack.c +21 -34
  260. data/vendor/libgit2/src/odb_pack.c +17 -13
  261. data/vendor/libgit2/src/offmap.c +53 -35
  262. data/vendor/libgit2/src/offmap.h +108 -21
  263. data/vendor/libgit2/src/oid.c +12 -7
  264. data/vendor/libgit2/src/oidmap.c +49 -47
  265. data/vendor/libgit2/src/oidmap.h +101 -24
  266. data/vendor/libgit2/src/pack-objects.c +87 -86
  267. data/vendor/libgit2/src/pack-objects.h +2 -8
  268. data/vendor/libgit2/src/pack.c +94 -96
  269. data/vendor/libgit2/src/pack.h +16 -18
  270. data/vendor/libgit2/src/parse.c +17 -4
  271. data/vendor/libgit2/src/parse.h +3 -3
  272. data/vendor/libgit2/src/patch.c +3 -3
  273. data/vendor/libgit2/src/patch_generate.c +18 -18
  274. data/vendor/libgit2/src/patch_parse.c +147 -79
  275. data/vendor/libgit2/src/path.c +207 -62
  276. data/vendor/libgit2/src/path.h +14 -0
  277. data/vendor/libgit2/src/pathspec.c +18 -18
  278. data/vendor/libgit2/src/pool.c +26 -22
  279. data/vendor/libgit2/src/pool.h +7 -7
  280. data/vendor/libgit2/src/posix.c +10 -10
  281. data/vendor/libgit2/src/posix.h +12 -1
  282. data/vendor/libgit2/src/proxy.c +8 -3
  283. data/vendor/libgit2/src/push.c +35 -29
  284. data/vendor/libgit2/src/push.h +2 -1
  285. data/vendor/libgit2/src/reader.c +265 -0
  286. data/vendor/libgit2/src/reader.h +107 -0
  287. data/vendor/libgit2/src/rebase.c +97 -38
  288. data/vendor/libgit2/src/refdb.c +15 -3
  289. data/vendor/libgit2/src/refdb_fs.c +318 -222
  290. data/vendor/libgit2/src/reflog.c +13 -15
  291. data/vendor/libgit2/src/refs.c +122 -89
  292. data/vendor/libgit2/src/refs.h +5 -3
  293. data/vendor/libgit2/src/refspec.c +27 -33
  294. data/vendor/libgit2/src/regexp.c +221 -0
  295. data/vendor/libgit2/src/regexp.h +97 -0
  296. data/vendor/libgit2/src/remote.c +229 -178
  297. data/vendor/libgit2/src/remote.h +11 -2
  298. data/vendor/libgit2/src/repository.c +227 -172
  299. data/vendor/libgit2/src/repository.h +52 -40
  300. data/vendor/libgit2/src/reset.c +7 -7
  301. data/vendor/libgit2/src/revert.c +11 -6
  302. data/vendor/libgit2/src/revparse.c +46 -46
  303. data/vendor/libgit2/src/revwalk.c +89 -54
  304. data/vendor/libgit2/src/revwalk.h +20 -0
  305. data/vendor/libgit2/src/settings.c +22 -9
  306. data/vendor/libgit2/src/signature.c +15 -13
  307. data/vendor/libgit2/src/sortedcache.c +22 -36
  308. data/vendor/libgit2/src/sortedcache.h +1 -1
  309. data/vendor/libgit2/src/stash.c +56 -76
  310. data/vendor/libgit2/src/status.c +27 -21
  311. data/vendor/libgit2/src/stream.h +17 -2
  312. data/vendor/libgit2/src/streams/mbedtls.c +100 -80
  313. data/vendor/libgit2/src/streams/mbedtls.h +5 -2
  314. data/vendor/libgit2/src/streams/openssl.c +93 -81
  315. data/vendor/libgit2/src/streams/openssl.h +5 -2
  316. data/vendor/libgit2/src/streams/registry.c +118 -0
  317. data/vendor/libgit2/src/streams/registry.h +19 -0
  318. data/vendor/libgit2/src/streams/socket.c +55 -30
  319. data/vendor/libgit2/src/streams/stransport.c +57 -32
  320. data/vendor/libgit2/src/streams/stransport.h +5 -0
  321. data/vendor/libgit2/src/streams/tls.c +48 -20
  322. data/vendor/libgit2/src/streams/tls.h +12 -4
  323. data/vendor/libgit2/src/strmap.c +47 -74
  324. data/vendor/libgit2/src/strmap.h +108 -33
  325. data/vendor/libgit2/src/submodule.c +190 -169
  326. data/vendor/libgit2/src/submodule.h +1 -1
  327. data/vendor/libgit2/src/sysdir.c +25 -15
  328. data/vendor/libgit2/src/tag.c +39 -26
  329. data/vendor/libgit2/src/tag.h +2 -1
  330. data/vendor/libgit2/src/trace.c +2 -2
  331. data/vendor/libgit2/src/trace.h +2 -2
  332. data/vendor/libgit2/src/trailer.c +46 -32
  333. data/vendor/libgit2/src/transaction.c +30 -29
  334. data/vendor/libgit2/src/transport.c +3 -3
  335. data/vendor/libgit2/src/transports/auth.c +14 -10
  336. data/vendor/libgit2/src/transports/auth.h +10 -3
  337. data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
  338. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  339. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  340. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  341. data/vendor/libgit2/src/transports/cred.c +24 -24
  342. data/vendor/libgit2/src/transports/git.c +25 -30
  343. data/vendor/libgit2/src/transports/http.c +871 -335
  344. data/vendor/libgit2/src/transports/http.h +2 -0
  345. data/vendor/libgit2/src/transports/local.c +28 -28
  346. data/vendor/libgit2/src/transports/smart.c +64 -46
  347. data/vendor/libgit2/src/transports/smart.h +5 -6
  348. data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
  349. data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
  350. data/vendor/libgit2/src/transports/ssh.c +76 -65
  351. data/vendor/libgit2/src/transports/winhttp.c +328 -319
  352. data/vendor/libgit2/src/tree-cache.c +21 -14
  353. data/vendor/libgit2/src/tree.c +119 -112
  354. data/vendor/libgit2/src/tree.h +1 -0
  355. data/vendor/libgit2/src/unix/map.c +3 -3
  356. data/vendor/libgit2/src/unix/posix.h +1 -11
  357. data/vendor/libgit2/src/userdiff.h +3 -1
  358. data/vendor/libgit2/src/util.c +154 -93
  359. data/vendor/libgit2/src/util.h +19 -23
  360. data/vendor/libgit2/src/vector.c +15 -10
  361. data/vendor/libgit2/src/wildmatch.c +320 -0
  362. data/vendor/libgit2/src/wildmatch.h +23 -0
  363. data/vendor/libgit2/src/win32/dir.c +3 -3
  364. data/vendor/libgit2/src/win32/findfile.c +1 -1
  365. data/vendor/libgit2/src/win32/map.c +9 -11
  366. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  367. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  368. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  369. data/vendor/libgit2/src/win32/posix.h +1 -4
  370. data/vendor/libgit2/src/win32/posix_w32.c +69 -44
  371. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  372. data/vendor/libgit2/src/win32/thread.c +5 -10
  373. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  374. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  375. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
  376. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  377. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  378. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  379. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  380. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  381. data/vendor/libgit2/src/worktree.c +44 -30
  382. data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
  383. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  384. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  385. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  386. data/vendor/libgit2/src/zstream.c +4 -4
  387. metadata +115 -38
  388. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  389. data/vendor/libgit2/deps/regex/config.h +0 -7
  390. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  391. data/vendor/libgit2/deps/regex/regex.c +0 -92
  392. data/vendor/libgit2/deps/regex/regex.h +0 -582
  393. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  394. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  395. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  396. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  397. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  398. data/vendor/libgit2/libgit2.pc.in +0 -13
  399. data/vendor/libgit2/src/config_file.h +0 -73
  400. data/vendor/libgit2/src/fnmatch.c +0 -248
  401. data/vendor/libgit2/src/fnmatch.h +0 -48
  402. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  403. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  404. data/vendor/libgit2/src/streams/curl.c +0 -385
  405. data/vendor/libgit2/src/streams/curl.h +0 -17
  406. /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  407. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  408. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  409. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
@@ -19,10 +19,6 @@
19
19
  #include "git2/transport.h"
20
20
  #include "git2/sys/openssl.h"
21
21
 
22
- #ifdef GIT_CURL
23
- # include "streams/curl.h"
24
- #endif
25
-
26
22
  #ifndef GIT_WIN32
27
23
  # include <sys/types.h>
28
24
  # include <sys/socket.h>
@@ -34,6 +30,10 @@
34
30
  #include <openssl/x509v3.h>
35
31
  #include <openssl/bio.h>
36
32
 
33
+ #ifdef VALGRIND
34
+ # include <valgrind/memcheck.h>
35
+ #endif
36
+
37
37
  SSL_CTX *git__ssl_ctx;
38
38
 
39
39
  #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"
@@ -241,7 +241,7 @@ int git_openssl_stream_global_init(void)
241
241
  return 0;
242
242
 
243
243
  error:
244
- giterr_set(GITERR_NET, "could not initialize openssl: %s",
244
+ git_error_set(GIT_ERROR_NET, "could not initialize openssl: %s",
245
245
  ERR_error_string(ERR_get_error(), NULL));
246
246
  SSL_CTX_free(git__ssl_ctx);
247
247
  git__ssl_ctx = NULL;
@@ -265,11 +265,11 @@ int git_openssl_set_locking(void)
265
265
 
266
266
  num_locks = CRYPTO_num_locks();
267
267
  openssl_locks = git__calloc(num_locks, sizeof(git_mutex));
268
- GITERR_CHECK_ALLOC(openssl_locks);
268
+ GIT_ERROR_CHECK_ALLOC(openssl_locks);
269
269
 
270
270
  for (i = 0; i < num_locks; i++) {
271
271
  if (git_mutex_init(&openssl_locks[i]) != 0) {
272
- giterr_set(GITERR_SSL, "failed to initialize openssl locks");
272
+ git_error_set(GIT_ERROR_SSL, "failed to initialize openssl locks");
273
273
  return -1;
274
274
  }
275
275
  }
@@ -280,7 +280,7 @@ int git_openssl_set_locking(void)
280
280
  #elif !defined(OPENSSL_LEGACY_API)
281
281
  return 0;
282
282
  #else
283
- giterr_set(GITERR_THREAD, "libgit2 was not built with threads");
283
+ git_error_set(GIT_ERROR_THREAD, "libgit2 was not built with threads");
284
284
  return -1;
285
285
  #endif
286
286
  }
@@ -315,6 +315,10 @@ static int bio_write(BIO *b, const char *buf, int len)
315
315
  {
316
316
  git_stream *io = (git_stream *) BIO_get_data(b);
317
317
 
318
+ #ifdef VALGRIND
319
+ VALGRIND_MAKE_MEM_DEFINED(buf, len);
320
+ #endif
321
+
318
322
  return (int) git_stream_write(io, buf, len, 0);
319
323
  }
320
324
 
@@ -347,7 +351,7 @@ static int init_bio_method(void)
347
351
  {
348
352
  /* Set up the BIO_METHOD we use for wrapping our own stream implementations */
349
353
  git_stream_bio_method = BIO_meth_new(BIO_TYPE_SOURCE_SINK | BIO_get_new_index(), "git_stream");
350
- GITERR_CHECK_ALLOC(git_stream_bio_method);
354
+ GIT_ERROR_CHECK_ALLOC(git_stream_bio_method);
351
355
 
352
356
  BIO_meth_set_write(git_stream_bio_method, bio_write);
353
357
  BIO_meth_set_read(git_stream_bio_method, bio_read);
@@ -373,23 +377,23 @@ static int ssl_set_error(SSL *ssl, int error)
373
377
  switch (err) {
374
378
  case SSL_ERROR_WANT_CONNECT:
375
379
  case SSL_ERROR_WANT_ACCEPT:
376
- giterr_set(GITERR_NET, "SSL error: connection failure");
380
+ git_error_set(GIT_ERROR_SSL, "SSL error: connection failure");
377
381
  break;
378
382
  case SSL_ERROR_WANT_X509_LOOKUP:
379
- giterr_set(GITERR_NET, "SSL error: x509 error");
383
+ git_error_set(GIT_ERROR_SSL, "SSL error: x509 error");
380
384
  break;
381
385
  case SSL_ERROR_SYSCALL:
382
386
  e = ERR_get_error();
383
387
  if (e > 0) {
384
388
  char errmsg[256];
385
389
  ERR_error_string_n(e, errmsg, sizeof(errmsg));
386
- giterr_set(GITERR_NET, "SSL error: %s", errmsg);
390
+ git_error_set(GIT_ERROR_NET, "SSL error: %s", errmsg);
387
391
  break;
388
392
  } else if (error < 0) {
389
- giterr_set(GITERR_OS, "SSL error: syscall failure");
393
+ git_error_set(GIT_ERROR_OS, "SSL error: syscall failure");
390
394
  break;
391
395
  }
392
- giterr_set(GITERR_NET, "SSL error: received early EOF");
396
+ git_error_set(GIT_ERROR_SSL, "SSL error: received early EOF");
393
397
  return GIT_EEOF;
394
398
  break;
395
399
  case SSL_ERROR_SSL:
@@ -397,13 +401,13 @@ static int ssl_set_error(SSL *ssl, int error)
397
401
  char errmsg[256];
398
402
  e = ERR_get_error();
399
403
  ERR_error_string_n(e, errmsg, sizeof(errmsg));
400
- giterr_set(GITERR_NET, "SSL error: %s", errmsg);
404
+ git_error_set(GIT_ERROR_SSL, "SSL error: %s", errmsg);
401
405
  break;
402
406
  }
403
407
  case SSL_ERROR_NONE:
404
408
  case SSL_ERROR_ZERO_RETURN:
405
409
  default:
406
- giterr_set(GITERR_NET, "SSL error: unknown error");
410
+ git_error_set(GIT_ERROR_SSL, "SSL error: unknown error");
407
411
  break;
408
412
  }
409
413
  return -1;
@@ -447,7 +451,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
447
451
  int i = -1, j, error = 0;
448
452
 
449
453
  if (SSL_get_verify_result(ssl) != X509_V_OK) {
450
- giterr_set(GITERR_SSL, "the SSL certificate is invalid");
454
+ git_error_set(GIT_ERROR_SSL, "the SSL certificate is invalid");
451
455
  return GIT_ECERTIFICATE;
452
456
  }
453
457
 
@@ -466,7 +470,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
466
470
  cert = SSL_get_peer_certificate(ssl);
467
471
  if (!cert) {
468
472
  error = -1;
469
- giterr_set(GITERR_SSL, "the server did not provide a certificate");
473
+ git_error_set(GIT_ERROR_SSL, "the server did not provide a certificate");
470
474
  goto cleanup;
471
475
  }
472
476
 
@@ -533,7 +537,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
533
537
 
534
538
  if (size > 0) {
535
539
  peer_cn = OPENSSL_malloc(size + 1);
536
- GITERR_CHECK_ALLOC(peer_cn);
540
+ GIT_ERROR_CHECK_ALLOC(peer_cn);
537
541
  memcpy(peer_cn, ASN1_STRING_get0_data(str), size);
538
542
  peer_cn[size] = '\0';
539
543
  } else {
@@ -541,7 +545,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
541
545
  }
542
546
  } else {
543
547
  int size = ASN1_STRING_to_UTF8(&peer_cn, str);
544
- GITERR_CHECK_ALLOC(peer_cn);
548
+ GIT_ERROR_CHECK_ALLOC(peer_cn);
545
549
  if (memchr(peer_cn, '\0', size))
546
550
  goto cert_fail_name;
547
551
  }
@@ -553,7 +557,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
553
557
 
554
558
  cert_fail_name:
555
559
  error = GIT_ECERTIFICATE;
556
- giterr_set(GITERR_SSL, "hostname does not match certificate");
560
+ git_error_set(GIT_ERROR_SSL, "hostname does not match certificate");
557
561
  goto cleanup;
558
562
 
559
563
  on_error:
@@ -569,31 +573,32 @@ cleanup:
569
573
  typedef struct {
570
574
  git_stream parent;
571
575
  git_stream *io;
576
+ int owned;
572
577
  bool connected;
573
578
  char *host;
574
579
  SSL *ssl;
575
580
  git_cert_x509 cert_info;
576
581
  } openssl_stream;
577
582
 
578
- int openssl_close(git_stream *stream);
579
-
580
- int openssl_connect(git_stream *stream)
583
+ static int openssl_connect(git_stream *stream)
581
584
  {
582
585
  int ret;
583
586
  BIO *bio;
584
587
  openssl_stream *st = (openssl_stream *) stream;
585
588
 
586
- if ((ret = git_stream_connect(st->io)) < 0)
589
+ if (st->owned && (ret = git_stream_connect(st->io)) < 0)
587
590
  return ret;
588
591
 
589
- st->connected = true;
590
-
591
592
  bio = BIO_new(git_stream_bio_method);
592
- GITERR_CHECK_ALLOC(bio);
593
+ GIT_ERROR_CHECK_ALLOC(bio);
593
594
 
594
595
  BIO_set_data(bio, st->io);
595
596
  SSL_set_bio(st->ssl, bio, bio);
596
597
 
598
+ #ifdef VALGRIND
599
+ VALGRIND_MAKE_MEM_DEFINED(st->ssl, sizeof(SSL));
600
+ #endif
601
+
597
602
  /* specify the host in case SNI is needed */
598
603
  #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
599
604
  SSL_set_tlsext_host_name(st->ssl, st->host);
@@ -602,10 +607,16 @@ int openssl_connect(git_stream *stream)
602
607
  if ((ret = SSL_connect(st->ssl)) <= 0)
603
608
  return ssl_set_error(st->ssl, ret);
604
609
 
610
+ st->connected = true;
611
+
612
+ #ifdef VALGRIND
613
+ VALGRIND_MAKE_MEM_DEFINED(st->ssl, sizeof(SSL));
614
+ #endif
615
+
605
616
  return verify_server_cert(st->ssl, st->host);
606
617
  }
607
618
 
608
- int openssl_certificate(git_cert **out, git_stream *stream)
619
+ static int openssl_certificate(git_cert **out, git_stream *stream)
609
620
  {
610
621
  openssl_stream *st = (openssl_stream *) stream;
611
622
  int len;
@@ -615,19 +626,19 @@ int openssl_certificate(git_cert **out, git_stream *stream)
615
626
  /* Retrieve the length of the certificate first */
616
627
  len = i2d_X509(cert, NULL);
617
628
  if (len < 0) {
618
- giterr_set(GITERR_NET, "failed to retrieve certificate information");
629
+ git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
619
630
  return -1;
620
631
  }
621
632
 
622
633
  encoded_cert = git__malloc(len);
623
- GITERR_CHECK_ALLOC(encoded_cert);
634
+ GIT_ERROR_CHECK_ALLOC(encoded_cert);
624
635
  /* i2d_X509 makes 'guard' point to just after the data */
625
636
  guard = encoded_cert;
626
637
 
627
638
  len = i2d_X509(cert, &guard);
628
639
  if (len < 0) {
629
640
  git__free(encoded_cert);
630
- giterr_set(GITERR_NET, "failed to retrieve certificate information");
641
+ git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
631
642
  return -1;
632
643
  }
633
644
 
@@ -647,21 +658,20 @@ static int openssl_set_proxy(git_stream *stream, const git_proxy_options *proxy_
647
658
  return git_stream_set_proxy(st->io, proxy_opts);
648
659
  }
649
660
 
650
- ssize_t openssl_write(git_stream *stream, const char *data, size_t len, int flags)
661
+ static ssize_t openssl_write(git_stream *stream, const char *data, size_t data_len, int flags)
651
662
  {
652
663
  openssl_stream *st = (openssl_stream *) stream;
653
- int ret;
664
+ int ret, len = min(data_len, INT_MAX);
654
665
 
655
666
  GIT_UNUSED(flags);
656
667
 
657
- if ((ret = SSL_write(st->ssl, data, len)) <= 0) {
668
+ if ((ret = SSL_write(st->ssl, data, len)) <= 0)
658
669
  return ssl_set_error(st->ssl, ret);
659
- }
660
670
 
661
671
  return ret;
662
672
  }
663
673
 
664
- ssize_t openssl_read(git_stream *stream, void *data, size_t len)
674
+ static ssize_t openssl_read(git_stream *stream, void *data, size_t len)
665
675
  {
666
676
  openssl_stream *st = (openssl_stream *) stream;
667
677
  int ret;
@@ -669,10 +679,14 @@ ssize_t openssl_read(git_stream *stream, void *data, size_t len)
669
679
  if ((ret = SSL_read(st->ssl, data, len)) <= 0)
670
680
  return ssl_set_error(st->ssl, ret);
671
681
 
682
+ #ifdef VALGRIND
683
+ VALGRIND_MAKE_MEM_DEFINED(data, ret);
684
+ #endif
685
+
672
686
  return ret;
673
687
  }
674
688
 
675
- int openssl_close(git_stream *stream)
689
+ static int openssl_close(git_stream *stream)
676
690
  {
677
691
  openssl_stream *st = (openssl_stream *) stream;
678
692
  int ret;
@@ -682,47 +696,47 @@ int openssl_close(git_stream *stream)
682
696
 
683
697
  st->connected = false;
684
698
 
685
- return git_stream_close(st->io);
699
+ return st->owned ? git_stream_close(st->io) : 0;
686
700
  }
687
701
 
688
- void openssl_free(git_stream *stream)
702
+ static void openssl_free(git_stream *stream)
689
703
  {
690
704
  openssl_stream *st = (openssl_stream *) stream;
691
705
 
706
+ if (st->owned)
707
+ git_stream_free(st->io);
708
+
692
709
  SSL_free(st->ssl);
693
710
  git__free(st->host);
694
711
  git__free(st->cert_info.data);
695
- git_stream_free(st->io);
696
712
  git__free(st);
697
713
  }
698
714
 
699
- int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
715
+ static int openssl_stream_wrap(
716
+ git_stream **out,
717
+ git_stream *in,
718
+ const char *host,
719
+ int owned)
700
720
  {
701
- int error;
702
721
  openssl_stream *st;
703
722
 
704
- st = git__calloc(1, sizeof(openssl_stream));
705
- GITERR_CHECK_ALLOC(st);
723
+ assert(out && in && host);
706
724
 
707
- st->io = NULL;
708
- #ifdef GIT_CURL
709
- error = git_curl_stream_new(&st->io, host, port);
710
- #else
711
- error = git_socket_stream_new(&st->io, host, port);
712
- #endif
725
+ st = git__calloc(1, sizeof(openssl_stream));
726
+ GIT_ERROR_CHECK_ALLOC(st);
713
727
 
714
- if (error < 0)
715
- goto out_err;
728
+ st->io = in;
729
+ st->owned = owned;
716
730
 
717
731
  st->ssl = SSL_new(git__ssl_ctx);
718
732
  if (st->ssl == NULL) {
719
- giterr_set(GITERR_SSL, "failed to create ssl object");
720
- error = -1;
721
- goto out_err;
733
+ git_error_set(GIT_ERROR_SSL, "failed to create ssl object");
734
+ git__free(st);
735
+ return -1;
722
736
  }
723
737
 
724
738
  st->host = git__strdup(host);
725
- GITERR_CHECK_ALLOC(st->host);
739
+ GIT_ERROR_CHECK_ALLOC(st->host);
726
740
 
727
741
  st->parent.version = GIT_STREAM_VERSION;
728
742
  st->parent.encrypted = 1;
@@ -737,10 +751,27 @@ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
737
751
 
738
752
  *out = (git_stream *) st;
739
753
  return 0;
754
+ }
740
755
 
741
- out_err:
742
- git_stream_free(st->io);
743
- git__free(st);
756
+ int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host)
757
+ {
758
+ return openssl_stream_wrap(out, in, host, 0);
759
+ }
760
+
761
+ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
762
+ {
763
+ git_stream *stream = NULL;
764
+ int error;
765
+
766
+ assert(out && host && port);
767
+
768
+ if ((error = git_socket_stream_new(&stream, host, port)) < 0)
769
+ return error;
770
+
771
+ if ((error = openssl_stream_wrap(out, stream, host, 1)) < 0) {
772
+ git_stream_close(stream);
773
+ git_stream_free(stream);
774
+ }
744
775
 
745
776
  return error;
746
777
  }
@@ -751,7 +782,7 @@ int git_openssl__set_cert_location(const char *file, const char *path)
751
782
  char errmsg[256];
752
783
 
753
784
  ERR_error_string_n(ERR_get_error(), errmsg, sizeof(errmsg));
754
- giterr_set(GITERR_SSL, "OpenSSL error: failed to load certificates: %s",
785
+ git_error_set(GIT_ERROR_SSL, "OpenSSL error: failed to load certificates: %s",
755
786
  errmsg);
756
787
 
757
788
  return -1;
@@ -771,26 +802,7 @@ int git_openssl_stream_global_init(void)
771
802
 
772
803
  int git_openssl_set_locking(void)
773
804
  {
774
- giterr_set(GITERR_SSL, "libgit2 was not built with OpenSSL support");
775
- return -1;
776
- }
777
-
778
- int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
779
- {
780
- GIT_UNUSED(out);
781
- GIT_UNUSED(host);
782
- GIT_UNUSED(port);
783
-
784
- giterr_set(GITERR_SSL, "openssl is not supported in this version");
785
- return -1;
786
- }
787
-
788
- int git_openssl__set_cert_location(const char *file, const char *path)
789
- {
790
- GIT_UNUSED(file);
791
- GIT_UNUSED(path);
792
-
793
- giterr_set(GITERR_SSL, "openssl is not supported in this version");
805
+ git_error_set(GIT_ERROR_SSL, "libgit2 was not built with OpenSSL support");
794
806
  return -1;
795
807
  }
796
808
 
@@ -13,8 +13,11 @@
13
13
 
14
14
  extern int git_openssl_stream_global_init(void);
15
15
 
16
- extern int git_openssl_stream_new(git_stream **out, const char *host, const char *port);
17
-
16
+ #ifdef GIT_OPENSSL
18
17
  extern int git_openssl__set_cert_location(const char *file, const char *path);
19
18
 
19
+ extern int git_openssl_stream_new(git_stream **out, const char *host, const char *port);
20
+ extern int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host);
21
+ #endif
22
+
20
23
  #endif
@@ -0,0 +1,118 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "git2/errors.h"
9
+
10
+ #include "common.h"
11
+ #include "global.h"
12
+ #include "streams/tls.h"
13
+ #include "streams/mbedtls.h"
14
+ #include "streams/openssl.h"
15
+ #include "streams/stransport.h"
16
+
17
+ struct stream_registry {
18
+ git_rwlock lock;
19
+ git_stream_registration callbacks;
20
+ git_stream_registration tls_callbacks;
21
+ };
22
+
23
+ static struct stream_registry stream_registry;
24
+
25
+ static void shutdown_stream_registry(void)
26
+ {
27
+ git_rwlock_free(&stream_registry.lock);
28
+ }
29
+
30
+ int git_stream_registry_global_init(void)
31
+ {
32
+ if (git_rwlock_init(&stream_registry.lock) < 0)
33
+ return -1;
34
+
35
+ git__on_shutdown(shutdown_stream_registry);
36
+ return 0;
37
+ }
38
+
39
+ GIT_INLINE(void) stream_registration_cpy(
40
+ git_stream_registration *target,
41
+ git_stream_registration *src)
42
+ {
43
+ if (src)
44
+ memcpy(target, src, sizeof(git_stream_registration));
45
+ else
46
+ memset(target, 0, sizeof(git_stream_registration));
47
+ }
48
+
49
+ int git_stream_registry_lookup(git_stream_registration *out, git_stream_t type)
50
+ {
51
+ git_stream_registration *target;
52
+ int error = GIT_ENOTFOUND;
53
+
54
+ assert(out);
55
+
56
+ switch(type) {
57
+ case GIT_STREAM_STANDARD:
58
+ target = &stream_registry.callbacks;
59
+ break;
60
+ case GIT_STREAM_TLS:
61
+ target = &stream_registry.tls_callbacks;
62
+ break;
63
+ default:
64
+ assert(0);
65
+ return -1;
66
+ }
67
+
68
+ if (git_rwlock_rdlock(&stream_registry.lock) < 0) {
69
+ git_error_set(GIT_ERROR_OS, "failed to lock stream registry");
70
+ return -1;
71
+ }
72
+
73
+ if (target->init) {
74
+ stream_registration_cpy(out, target);
75
+ error = 0;
76
+ }
77
+
78
+ git_rwlock_rdunlock(&stream_registry.lock);
79
+ return error;
80
+ }
81
+
82
+ int git_stream_register(git_stream_t type, git_stream_registration *registration)
83
+ {
84
+ assert(!registration || registration->init);
85
+
86
+ GIT_ERROR_CHECK_VERSION(registration, GIT_STREAM_VERSION, "stream_registration");
87
+
88
+ if (git_rwlock_wrlock(&stream_registry.lock) < 0) {
89
+ git_error_set(GIT_ERROR_OS, "failed to lock stream registry");
90
+ return -1;
91
+ }
92
+
93
+ if ((type & GIT_STREAM_STANDARD) == GIT_STREAM_STANDARD)
94
+ stream_registration_cpy(&stream_registry.callbacks, registration);
95
+
96
+ if ((type & GIT_STREAM_TLS) == GIT_STREAM_TLS)
97
+ stream_registration_cpy(&stream_registry.tls_callbacks, registration);
98
+
99
+ git_rwlock_wrunlock(&stream_registry.lock);
100
+ return 0;
101
+ }
102
+
103
+
104
+ int git_stream_register_tls(
105
+ int GIT_CALLBACK(ctor)(git_stream **out, const char *host, const char *port))
106
+ {
107
+ git_stream_registration registration = {0};
108
+
109
+ if (ctor) {
110
+ registration.version = GIT_STREAM_VERSION;
111
+ registration.init = ctor;
112
+ registration.wrap = NULL;
113
+
114
+ return git_stream_register(GIT_STREAM_TLS, &registration);
115
+ } else {
116
+ return git_stream_register(GIT_STREAM_TLS, NULL);
117
+ }
118
+ }
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_streams_registry_h__
8
+ #define INCLUDE_streams_registry_h__
9
+
10
+ #include "common.h"
11
+ #include "git2/sys/stream.h"
12
+
13
+ /** Configure stream registry. */
14
+ int git_stream_registry_global_init(void);
15
+
16
+ /** Lookup a stream registration. */
17
+ extern int git_stream_registry_lookup(git_stream_registration *out, git_stream_t type);
18
+
19
+ #endif