rugged 1.4.5 → 1.5.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 (424) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +1 -0
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_remote.c +10 -10
  7. data/ext/rugged/rugged_repo.c +2 -7
  8. data/ext/rugged/rugged_settings.c +5 -0
  9. data/lib/rugged/tree.rb +4 -0
  10. data/lib/rugged/version.rb +1 -1
  11. data/vendor/libgit2/CMakeLists.txt +16 -3
  12. data/vendor/libgit2/COPYING +40 -0
  13. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  14. data/vendor/libgit2/cmake/FindPCRE.cmake +3 -4
  15. data/vendor/libgit2/cmake/FindPCRE2.cmake +1 -1
  16. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +1 -1
  17. data/vendor/libgit2/cmake/SelectHashes.cmake +62 -14
  18. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
  19. data/vendor/libgit2/include/git2/branch.h +2 -2
  20. data/vendor/libgit2/include/git2/common.h +11 -0
  21. data/vendor/libgit2/include/git2/config.h +6 -6
  22. data/vendor/libgit2/include/git2/deprecated.h +2 -0
  23. data/vendor/libgit2/include/git2/errors.h +17 -3
  24. data/vendor/libgit2/include/git2/merge.h +1 -1
  25. data/vendor/libgit2/include/git2/status.h +5 -2
  26. data/vendor/libgit2/include/git2/sys/remote.h +15 -0
  27. data/vendor/libgit2/include/git2/sys/transport.h +9 -5
  28. data/vendor/libgit2/include/git2/version.h +27 -6
  29. data/vendor/libgit2/src/CMakeLists.txt +104 -214
  30. data/vendor/libgit2/src/README.md +12 -0
  31. data/vendor/libgit2/src/cli/CMakeLists.txt +53 -0
  32. data/vendor/libgit2/src/cli/README.md +26 -0
  33. data/vendor/libgit2/src/cli/cli.h +20 -0
  34. data/vendor/libgit2/src/cli/cmd.c +21 -0
  35. data/vendor/libgit2/src/cli/cmd.h +33 -0
  36. data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
  37. data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
  38. data/vendor/libgit2/src/cli/cmd_hash_object.c +135 -0
  39. data/vendor/libgit2/src/cli/cmd_help.c +86 -0
  40. data/vendor/libgit2/src/cli/error.h +51 -0
  41. data/vendor/libgit2/src/cli/main.c +106 -0
  42. data/vendor/libgit2/src/cli/opt.c +669 -0
  43. data/vendor/libgit2/src/cli/opt.h +349 -0
  44. data/vendor/libgit2/src/cli/opt_usage.c +194 -0
  45. data/vendor/libgit2/src/cli/opt_usage.h +35 -0
  46. data/vendor/libgit2/src/cli/progress.c +345 -0
  47. data/vendor/libgit2/src/cli/progress.h +117 -0
  48. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  49. data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
  50. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  51. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  52. data/vendor/libgit2/src/features.h.in +9 -0
  53. data/vendor/libgit2/src/libgit2/CMakeLists.txt +131 -0
  54. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +1 -1
  55. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +14 -9
  56. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +20 -17
  57. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +1 -1
  58. data/vendor/libgit2/src/libgit2/common.h +55 -0
  59. data/vendor/libgit2/src/{config.c → libgit2/config.c} +2 -2
  60. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +1 -1
  61. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +1 -0
  62. data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
  63. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +31 -1
  64. data/vendor/libgit2/src/{index.c → libgit2/index.c} +6 -6
  65. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +2 -2
  66. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +3 -3
  67. data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +5 -0
  68. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +20 -23
  69. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +2 -1
  70. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +9 -9
  71. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +1 -1
  72. data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +0 -1
  73. data/vendor/libgit2/src/{object.c → libgit2/object.c} +1 -0
  74. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +2 -2
  75. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +2 -21
  76. data/vendor/libgit2/src/{oid.h → libgit2/oid.h} +35 -2
  77. data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
  78. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +24 -18
  79. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +3 -2
  80. data/vendor/libgit2/src/{path.c → libgit2/path.c} +1 -0
  81. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +11 -1
  82. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +6 -2
  83. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +1 -1
  84. data/vendor/libgit2/src/{remote.h → libgit2/remote.h} +1 -1
  85. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +1 -0
  86. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +15 -5
  87. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +1 -1
  88. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +12 -0
  89. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +91 -326
  90. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +1 -1
  91. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +16 -23
  92. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +1 -1
  93. data/vendor/libgit2/src/util/CMakeLists.txt +74 -0
  94. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
  95. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  96. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  97. data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
  98. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  99. data/vendor/libgit2/src/{date.c → util/date.c} +4 -3
  100. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +1 -1
  101. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +1 -1
  102. data/vendor/libgit2/src/{fs_path.c → util/fs_path.c} +17 -11
  103. data/vendor/libgit2/src/{fs_path.h → util/fs_path.h} +1 -1
  104. data/vendor/libgit2/src/{futils.c → util/futils.c} +44 -2
  105. data/vendor/libgit2/src/{futils.h → util/futils.h} +2 -1
  106. data/vendor/libgit2/src/{common.h → util/git2_util.h} +13 -59
  107. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  108. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  109. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +1 -1
  110. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  111. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.c +55 -0
  112. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  113. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.c +46 -0
  114. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  115. data/vendor/libgit2/src/util/hash/openssl.c +194 -0
  116. data/vendor/libgit2/src/util/hash/openssl.h +45 -0
  117. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +355 -0
  118. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  119. data/vendor/libgit2/src/util/hash/sha.h +70 -0
  120. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  121. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  122. data/vendor/libgit2/src/{hash.c → util/hash.c} +17 -1
  123. data/vendor/libgit2/src/{hash.h → util/hash.h} +5 -3
  124. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  125. data/vendor/libgit2/src/{net.c → util/net.c} +0 -1
  126. data/vendor/libgit2/src/{net.h → util/net.h} +1 -1
  127. data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
  128. data/vendor/libgit2/src/{posix.h → util/posix.h} +1 -1
  129. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +1 -1
  130. data/vendor/libgit2/src/{rand.c → util/rand.c} +7 -3
  131. data/vendor/libgit2/src/{rand.h → util/rand.h} +1 -1
  132. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  133. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  134. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  135. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +1 -1
  136. data/vendor/libgit2/src/{str.h → util/str.h} +1 -1
  137. data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
  138. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  139. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  140. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -1
  141. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -1
  142. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -1
  143. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  144. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  145. data/vendor/libgit2/src/{util.c → util/util.c} +1 -1
  146. data/vendor/libgit2/src/{util.h → util/util.h} +1 -1
  147. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  148. data/vendor/libgit2/src/{vector.h → util/vector.h} +1 -1
  149. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  150. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  151. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  152. data/vendor/libgit2/src/{win32 → util/win32}/findfile.h +1 -1
  153. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  154. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +1 -1
  155. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -1
  156. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +1 -1
  157. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  158. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  159. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  160. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
  161. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +1 -1
  162. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  163. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  164. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +1 -1
  165. metadata +390 -361
  166. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  167. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  168. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  169. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  170. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  171. data/vendor/libgit2/src/hash/sha1.h +0 -40
  172. /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  173. /data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +0 -0
  174. /data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +0 -0
  175. /data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +0 -0
  176. /data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +0 -0
  177. /data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +0 -0
  178. /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  179. /data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +0 -0
  180. /data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +0 -0
  181. /data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +0 -0
  182. /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
  183. /data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +0 -0
  184. /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
  185. /data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +0 -0
  186. /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  187. /data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +0 -0
  188. /data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +0 -0
  189. /data/vendor/libgit2/src/{buf.c → libgit2/buf.c} +0 -0
  190. /data/vendor/libgit2/src/{buf.h → libgit2/buf.h} +0 -0
  191. /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
  192. /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
  193. /data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +0 -0
  194. /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
  195. /data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +0 -0
  196. /data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +0 -0
  197. /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
  198. /data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +0 -0
  199. /data/vendor/libgit2/src/{commit.h → libgit2/commit.h} +0 -0
  200. /data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +0 -0
  201. /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
  202. /data/vendor/libgit2/src/{config.h → libgit2/config.h} +0 -0
  203. /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
  204. /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
  205. /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
  206. /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
  207. /data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +0 -0
  208. /data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +0 -0
  209. /data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +0 -0
  210. /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  211. /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
  212. /data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +0 -0
  213. /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  214. /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  215. /data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +0 -0
  216. /data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +0 -0
  217. /data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +0 -0
  218. /data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +0 -0
  219. /data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +0 -0
  220. /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  221. /data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +0 -0
  222. /data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +0 -0
  223. /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
  224. /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  225. /data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +0 -0
  226. /data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +0 -0
  227. /data/vendor/libgit2/src/{diff_stats.h → libgit2/diff_stats.h} +0 -0
  228. /data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +0 -0
  229. /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  230. /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
  231. /data/vendor/libgit2/src/{email.c → libgit2/email.c} +0 -0
  232. /data/vendor/libgit2/src/{email.h → libgit2/email.h} +0 -0
  233. /data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +0 -0
  234. /data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +0 -0
  235. /data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +0 -0
  236. /data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +0 -0
  237. /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  238. /data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +0 -0
  239. /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
  240. /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
  241. /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  242. /data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +0 -0
  243. /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
  244. /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
  245. /data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +0 -0
  246. /data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +0 -0
  247. /data/vendor/libgit2/src/{index.h → libgit2/index.h} +0 -0
  248. /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  249. /data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +0 -0
  250. /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
  251. /data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +0 -0
  252. /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  253. /data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +0 -0
  254. /data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +0 -0
  255. /data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +0 -0
  256. /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  257. /data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +0 -0
  258. /data/vendor/libgit2/src/{message.c → libgit2/message.c} +0 -0
  259. /data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +0 -0
  260. /data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +0 -0
  261. /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  262. /data/vendor/libgit2/src/{object.h → libgit2/object.h} +0 -0
  263. /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  264. /data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +0 -0
  265. /data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +0 -0
  266. /data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +0 -0
  267. /data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +0 -0
  268. /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
  269. /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
  270. /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
  271. /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
  272. /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
  273. /data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +0 -0
  274. /data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +0 -0
  275. /data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +0 -0
  276. /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
  277. /data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +0 -0
  278. /data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +0 -0
  279. /data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +0 -0
  280. /data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +0 -0
  281. /data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +0 -0
  282. /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  283. /data/vendor/libgit2/src/{path.h → libgit2/path.h} +0 -0
  284. /data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +0 -0
  285. /data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +0 -0
  286. /data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +0 -0
  287. /data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +0 -0
  288. /data/vendor/libgit2/src/{push.c → libgit2/push.c} +0 -0
  289. /data/vendor/libgit2/src/{push.h → libgit2/push.h} +0 -0
  290. /data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +0 -0
  291. /data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +0 -0
  292. /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  293. /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  294. /data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +0 -0
  295. /data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +0 -0
  296. /data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +0 -0
  297. /data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +0 -0
  298. /data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +0 -0
  299. /data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +0 -0
  300. /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  301. /data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +0 -0
  302. /data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +0 -0
  303. /data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +0 -0
  304. /data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +0 -0
  305. /data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +0 -0
  306. /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
  307. /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
  308. /data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +0 -0
  309. /data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +0 -0
  310. /data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +0 -0
  311. /data/vendor/libgit2/src/{status.c → libgit2/status.c} +0 -0
  312. /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  313. /data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +0 -0
  314. /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  315. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +0 -0
  316. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  317. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +0 -0
  318. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
  319. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +0 -0
  320. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +0 -0
  321. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  322. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  323. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  324. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  325. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +0 -0
  326. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
  327. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
  328. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  329. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
  330. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  331. /data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +0 -0
  332. /data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +0 -0
  333. /data/vendor/libgit2/src/{sysdir.c → libgit2/sysdir.c} +0 -0
  334. /data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +0 -0
  335. /data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +0 -0
  336. /data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +0 -0
  337. /data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +0 -0
  338. /data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +0 -0
  339. /data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +0 -0
  340. /data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +0 -0
  341. /data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +0 -0
  342. /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
  343. /data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +0 -0
  344. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +0 -0
  345. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +0 -0
  346. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +0 -0
  347. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
  348. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +0 -0
  349. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -0
  350. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
  351. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  352. /data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +0 -0
  353. /data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +0 -0
  354. /data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -0
  355. /data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +0 -0
  356. /data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +0 -0
  357. /data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +0 -0
  358. /data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +0 -0
  359. /data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +0 -0
  360. /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
  361. /data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +0 -0
  362. /data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +0 -0
  363. /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  364. /data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +0 -0
  365. /data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +0 -0
  366. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/git-xdiff.h +0 -0
  367. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +0 -0
  368. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +0 -0
  369. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
  370. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +0 -0
  371. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
  372. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +0 -0
  373. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +0 -0
  374. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
  375. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +0 -0
  376. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +0 -0
  377. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +0 -0
  378. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
  379. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
  380. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +0 -0
  381. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
  382. /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
  383. /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
  384. /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
  385. /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
  386. /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
  387. /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  388. /data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +0 -0
  389. /data/vendor/libgit2/src/{date.h → util/date.h} +0 -0
  390. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +0 -0
  391. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  392. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  393. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  394. /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
  395. /data/vendor/libgit2/src/{khash.h → util/khash.h} +0 -0
  396. /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
  397. /data/vendor/libgit2/src/{posix.c → util/posix.c} +0 -0
  398. /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  399. /data/vendor/libgit2/src/{regexp.c → util/regexp.c} +0 -0
  400. /data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +0 -0
  401. /data/vendor/libgit2/src/{str.c → util/str.c} +0 -0
  402. /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
  403. /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  404. /data/vendor/libgit2/src/{thread.h → util/thread.h} +0 -0
  405. /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  406. /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  407. /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
  408. /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  409. /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  410. /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
  411. /data/vendor/libgit2/src/{win32 → util/win32}/findfile.c +0 -0
  412. /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  413. /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  414. /data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +0 -0
  415. /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  416. /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  417. /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
  418. /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  419. /data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +0 -0
  420. /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  421. /data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +0 -0
  422. /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
  423. /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
  424. /data/vendor/libgit2/src/{zstream.c → util/zstream.c} +0 -0
@@ -421,119 +421,15 @@ static int request_creds(git_credential **out, ssh_subtransport *t, const char *
421
421
  return 0;
422
422
  }
423
423
 
424
- #define KNOWN_HOSTS_FILE ".ssh/known_hosts"
425
-
426
- /*
427
- * Load the known_hosts file.
428
- *
429
- * Returns success but leaves the output NULL if we couldn't find the file.
430
- */
431
- static int load_known_hosts(LIBSSH2_KNOWNHOSTS **hosts, LIBSSH2_SESSION *session)
432
- {
433
- git_str path = GIT_STR_INIT, home = GIT_STR_INIT;
434
- LIBSSH2_KNOWNHOSTS *known_hosts = NULL;
435
- int error;
436
-
437
- GIT_ASSERT_ARG(hosts);
438
-
439
- if ((error = git__getenv(&home, "HOME")) < 0)
440
- return error;
441
-
442
- if ((error = git_str_joinpath(&path, git_str_cstr(&home), KNOWN_HOSTS_FILE)) < 0)
443
- goto out;
444
-
445
- if ((known_hosts = libssh2_knownhost_init(session)) == NULL) {
446
- ssh_error(session, "error initializing known hosts");
447
- error = -1;
448
- goto out;
449
- }
450
-
451
- /*
452
- * Try to read the file and consider not finding it as not trusting the
453
- * host rather than an error.
454
- */
455
- error = libssh2_knownhost_readfile(known_hosts, git_str_cstr(&path), LIBSSH2_KNOWNHOST_FILE_OPENSSH);
456
- if (error == LIBSSH2_ERROR_FILE)
457
- error = 0;
458
- if (error < 0)
459
- ssh_error(session, "error reading known_hosts");
460
-
461
- out:
462
- *hosts = known_hosts;
463
-
464
- git_str_clear(&home);
465
- git_str_clear(&path);
466
-
467
- return error;
468
- }
469
-
470
- static const char *hostkey_type_to_string(int type)
471
- {
472
- switch (type) {
473
- case LIBSSH2_KNOWNHOST_KEY_SSHRSA:
474
- return "ssh-rsa";
475
- case LIBSSH2_KNOWNHOST_KEY_SSHDSS:
476
- return "ssh-dss";
477
- #ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_256
478
- case LIBSSH2_KNOWNHOST_KEY_ECDSA_256:
479
- return "ecdsa-sha2-nistp256";
480
- case LIBSSH2_KNOWNHOST_KEY_ECDSA_384:
481
- return "ecdsa-sha2-nistp384";
482
- case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
483
- return "ecdsa-sha2-nistp521";
484
- #endif
485
- #ifdef LIBSSH2_KNOWNHOST_KEY_ED25519
486
- case LIBSSH2_KNOWNHOST_KEY_ED25519:
487
- return "ssh-ed25519";
488
- #endif
489
- }
490
-
491
- return NULL;
492
- }
493
-
494
- /*
495
- * We figure out what kind of key we want to ask the remote for by trying to
496
- * look it up with a nonsense key and using that mismatch to figure out what key
497
- * we do have stored for the host.
498
- *
499
- * Returns the string to pass to libssh2_session_method_pref or NULL if we were
500
- * unable to find anything or an error happened.
501
- */
502
- static const char *find_hostkey_preference(LIBSSH2_KNOWNHOSTS *known_hosts, const char *hostname, int port)
503
- {
504
- struct libssh2_knownhost *host = NULL;
505
- /* Specify no key type so we don't filter on that */
506
- int type = LIBSSH2_KNOWNHOST_TYPE_PLAIN | LIBSSH2_KNOWNHOST_KEYENC_RAW;
507
- const char key = '\0';
508
- int error;
509
-
510
- /*
511
- * In case of mismatch, we can find the type of key from known_hosts in
512
- * the returned host's information as it means that an entry was found
513
- * but our nonsense key obviously didn't match.
514
- */
515
- error = libssh2_knownhost_checkp(known_hosts, hostname, port, &key, 1, type, &host);
516
- if (error == LIBSSH2_KNOWNHOST_CHECK_MISMATCH)
517
- return hostkey_type_to_string(host->typemask & LIBSSH2_KNOWNHOST_KEY_MASK);
518
-
519
- return NULL;
520
- }
521
-
522
424
  static int _git_ssh_session_create(
523
425
  LIBSSH2_SESSION **session,
524
- LIBSSH2_KNOWNHOSTS **hosts,
525
- const char *hostname,
526
- int port,
527
426
  git_stream *io)
528
427
  {
529
428
  int rc = 0;
530
429
  LIBSSH2_SESSION *s;
531
- LIBSSH2_KNOWNHOSTS *known_hosts;
532
430
  git_socket_stream *socket = GIT_CONTAINER_OF(io, git_socket_stream, parent);
533
- const char *keytype = NULL;
534
431
 
535
432
  GIT_ASSERT_ARG(session);
536
- GIT_ASSERT_ARG(hosts);
537
433
 
538
434
  s = libssh2_session_init();
539
435
  if (!s) {
@@ -541,225 +437,21 @@ static int _git_ssh_session_create(
541
437
  return -1;
542
438
  }
543
439
 
544
- if ((rc = load_known_hosts(&known_hosts, s)) < 0) {
545
- ssh_error(s, "error loading known_hosts");
546
- libssh2_session_free(s);
547
- return -1;
548
- }
549
-
550
- if ((keytype = find_hostkey_preference(known_hosts, hostname, port)) != NULL) {
551
- do {
552
- rc = libssh2_session_method_pref(s, LIBSSH2_METHOD_HOSTKEY, keytype);
553
- } while (LIBSSH2_ERROR_EAGAIN == rc || LIBSSH2_ERROR_TIMEOUT == rc);
554
- if (rc != LIBSSH2_ERROR_NONE) {
555
- ssh_error(s, "failed to set hostkey preference");
556
- goto on_error;
557
- }
558
- }
559
-
560
-
561
440
  do {
562
441
  rc = libssh2_session_handshake(s, socket->s);
563
442
  } while (LIBSSH2_ERROR_EAGAIN == rc || LIBSSH2_ERROR_TIMEOUT == rc);
564
443
 
565
444
  if (rc != LIBSSH2_ERROR_NONE) {
566
445
  ssh_error(s, "failed to start SSH session");
567
- goto on_error;
446
+ libssh2_session_free(s);
447
+ return -1;
568
448
  }
569
449
 
570
450
  libssh2_session_set_blocking(s, 1);
571
451
 
572
452
  *session = s;
573
- *hosts = known_hosts;
574
453
 
575
454
  return 0;
576
-
577
- on_error:
578
- libssh2_knownhost_free(known_hosts);
579
- libssh2_session_free(s);
580
- return -1;
581
- }
582
-
583
-
584
- /*
585
- * Returns the typemask argument to pass to libssh2_knownhost_check{,p} based on
586
- * the type of key that libssh2_session_hostkey returns.
587
- */
588
- static int fingerprint_type_mask(int keytype)
589
- {
590
- int mask = LIBSSH2_KNOWNHOST_TYPE_PLAIN | LIBSSH2_KNOWNHOST_KEYENC_RAW;
591
- return mask;
592
-
593
- switch (keytype) {
594
- case LIBSSH2_HOSTKEY_TYPE_RSA:
595
- mask |= LIBSSH2_KNOWNHOST_KEY_SSHRSA;
596
- break;
597
- case LIBSSH2_HOSTKEY_TYPE_DSS:
598
- mask |= LIBSSH2_KNOWNHOST_KEY_SSHDSS;
599
- break;
600
- #ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
601
- case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
602
- mask |= LIBSSH2_KNOWNHOST_KEY_ECDSA_256;
603
- break;
604
- case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
605
- mask |= LIBSSH2_KNOWNHOST_KEY_ECDSA_384;
606
- break;
607
- case LIBSSH2_HOSTKEY_TYPE_ECDSA_521:
608
- mask |= LIBSSH2_KNOWNHOST_KEY_ECDSA_521;
609
- break;
610
- #endif
611
- #ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
612
- case LIBSSH2_HOSTKEY_TYPE_ED25519:
613
- mask |= LIBSSH2_KNOWNHOST_KEY_ED25519;
614
- break;
615
- #endif
616
- }
617
-
618
- return mask;
619
- }
620
-
621
- /*
622
- * Check the host against the user's known_hosts file.
623
- *
624
- * Returns 1/0 for valid/''not-valid or <0 for an error
625
- */
626
- static int check_against_known_hosts(
627
- LIBSSH2_SESSION *session,
628
- LIBSSH2_KNOWNHOSTS *known_hosts,
629
- const char *hostname,
630
- int port,
631
- const char *key,
632
- size_t key_len,
633
- int key_type)
634
- {
635
- int check, typemask, ret = 0;
636
- struct libssh2_knownhost *host = NULL;
637
-
638
- if (known_hosts == NULL)
639
- return 0;
640
-
641
- typemask = fingerprint_type_mask(key_type);
642
- check = libssh2_knownhost_checkp(known_hosts, hostname, port, key, key_len, typemask, &host);
643
- if (check == LIBSSH2_KNOWNHOST_CHECK_FAILURE) {
644
- ssh_error(session, "error checking for known host");
645
- return -1;
646
- }
647
-
648
- ret = check == LIBSSH2_KNOWNHOST_CHECK_MATCH ? 1 : 0;
649
-
650
- return ret;
651
- }
652
-
653
- /*
654
- * Perform the check for the session's certificate against known hosts if
655
- * possible and then ask the user if they have a callback.
656
- *
657
- * Returns 1/0 for valid/not-valid or <0 for an error
658
- */
659
- static int check_certificate(
660
- LIBSSH2_SESSION *session,
661
- LIBSSH2_KNOWNHOSTS *known_hosts,
662
- git_transport_certificate_check_cb check_cb,
663
- void *check_cb_payload,
664
- const char *host,
665
- int port)
666
- {
667
- git_cert_hostkey cert = {{ 0 }};
668
- const char *key;
669
- size_t cert_len;
670
- int cert_type, cert_valid = 0, error = 0;
671
-
672
- if ((key = libssh2_session_hostkey(session, &cert_len, &cert_type)) == NULL) {
673
- ssh_error(session, "failed to retrieve hostkey");
674
- return -1;
675
- }
676
-
677
- if ((cert_valid = check_against_known_hosts(session, known_hosts, host, port, key, cert_len, cert_type)) < 0)
678
- return -1;
679
-
680
- cert.parent.cert_type = GIT_CERT_HOSTKEY_LIBSSH2;
681
- if (key != NULL) {
682
- cert.type |= GIT_CERT_SSH_RAW;
683
- cert.hostkey = key;
684
- cert.hostkey_len = cert_len;
685
- switch (cert_type) {
686
- case LIBSSH2_HOSTKEY_TYPE_RSA:
687
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_RSA;
688
- break;
689
- case LIBSSH2_HOSTKEY_TYPE_DSS:
690
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_DSS;
691
- break;
692
-
693
- #ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
694
- case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
695
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_256;
696
- break;
697
- case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
698
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_384;
699
- break;
700
- case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
701
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_521;
702
- break;
703
- #endif
704
-
705
- #ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
706
- case LIBSSH2_HOSTKEY_TYPE_ED25519:
707
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ED25519;
708
- break;
709
- #endif
710
- default:
711
- cert.raw_type = GIT_CERT_SSH_RAW_TYPE_UNKNOWN;
712
- }
713
- }
714
-
715
- #ifdef LIBSSH2_HOSTKEY_HASH_SHA256
716
- key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA256);
717
- if (key != NULL) {
718
- cert.type |= GIT_CERT_SSH_SHA256;
719
- memcpy(&cert.hash_sha256, key, 32);
720
- }
721
- #endif
722
-
723
- key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
724
- if (key != NULL) {
725
- cert.type |= GIT_CERT_SSH_SHA1;
726
- memcpy(&cert.hash_sha1, key, 20);
727
- }
728
-
729
- key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
730
- if (key != NULL) {
731
- cert.type |= GIT_CERT_SSH_MD5;
732
- memcpy(&cert.hash_md5, key, 16);
733
- }
734
-
735
- if (cert.type == 0) {
736
- git_error_set(GIT_ERROR_SSH, "unable to get the host key");
737
- return -1;
738
- }
739
-
740
- git_error_clear();
741
- error = 0;
742
- if (!cert_valid) {
743
- git_error_set(GIT_ERROR_SSH, "invalid or unknown remote ssh hostkey");
744
- error = GIT_ECERTIFICATE;
745
- }
746
-
747
- if (check_cb != NULL) {
748
- git_cert_hostkey *cert_ptr = &cert;
749
- git_error_state previous_error = {0};
750
-
751
- git_error_state_capture(&previous_error, error);
752
- error = check_cb((git_cert *) cert_ptr, cert_valid, host, check_cb_payload);
753
- if (error == GIT_PASSTHROUGH) {
754
- error = git_error_state_restore(&previous_error);
755
- } else if (error < 0 && !git_error_last()) {
756
- git_error_set(GIT_ERROR_NET, "user canceled hostkey check");
757
- }
758
-
759
- git_error_state_free(&previous_error);
760
- }
761
-
762
- return error;
763
455
  }
764
456
 
765
457
  #define SSH_DEFAULT_PORT "22"
@@ -770,12 +462,11 @@ static int _git_ssh_setup_conn(
770
462
  const char *cmd,
771
463
  git_smart_subtransport_stream **stream)
772
464
  {
773
- int auth_methods, error = 0, port;
465
+ int auth_methods, error = 0;
774
466
  ssh_stream *s;
775
467
  git_credential *cred = NULL;
776
468
  LIBSSH2_SESSION *session=NULL;
777
469
  LIBSSH2_CHANNEL *channel=NULL;
778
- LIBSSH2_KNOWNHOSTS *known_hosts = NULL;
779
470
 
780
471
  t->current_stream = NULL;
781
472
 
@@ -799,20 +490,96 @@ static int _git_ssh_setup_conn(
799
490
  (error = git_stream_connect(s->io)) < 0)
800
491
  goto done;
801
492
 
802
- /*
803
- * Try to parse the port as a number, if we can't then fall back to
804
- * default. It would be nice if we could get the port that was resolved
805
- * as part of the stream connection, but that's not something that's
806
- * exposed.
807
- */
808
- if (git__strntol32(&port, s->url.port, strlen(s->url.port), NULL, 10) < 0)
809
- port = -1;
810
-
811
- if ((error = _git_ssh_session_create(&session, &known_hosts, s->url.host, port, s->io)) < 0)
493
+ if ((error = _git_ssh_session_create(&session, s->io)) < 0)
812
494
  goto done;
813
495
 
814
- if ((error = check_certificate(session, known_hosts, t->owner->connect_opts.callbacks.certificate_check, t->owner->connect_opts.callbacks.payload, s->url.host, port)) < 0)
815
- goto done;
496
+ if (t->owner->connect_opts.callbacks.certificate_check != NULL) {
497
+ git_cert_hostkey cert = {{ 0 }}, *cert_ptr;
498
+ const char *key;
499
+ size_t cert_len;
500
+ int cert_type;
501
+
502
+ cert.parent.cert_type = GIT_CERT_HOSTKEY_LIBSSH2;
503
+
504
+ key = libssh2_session_hostkey(session, &cert_len, &cert_type);
505
+ if (key != NULL) {
506
+ cert.type |= GIT_CERT_SSH_RAW;
507
+ cert.hostkey = key;
508
+ cert.hostkey_len = cert_len;
509
+ switch (cert_type) {
510
+ case LIBSSH2_HOSTKEY_TYPE_RSA:
511
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_RSA;
512
+ break;
513
+ case LIBSSH2_HOSTKEY_TYPE_DSS:
514
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_DSS;
515
+ break;
516
+
517
+ #ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
518
+ case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
519
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_256;
520
+ break;
521
+ case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
522
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_384;
523
+ break;
524
+ case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
525
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_521;
526
+ break;
527
+ #endif
528
+
529
+ #ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
530
+ case LIBSSH2_HOSTKEY_TYPE_ED25519:
531
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ED25519;
532
+ break;
533
+ #endif
534
+ default:
535
+ cert.raw_type = GIT_CERT_SSH_RAW_TYPE_UNKNOWN;
536
+ }
537
+ }
538
+
539
+ #ifdef LIBSSH2_HOSTKEY_HASH_SHA256
540
+ key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA256);
541
+ if (key != NULL) {
542
+ cert.type |= GIT_CERT_SSH_SHA256;
543
+ memcpy(&cert.hash_sha256, key, 32);
544
+ }
545
+ #endif
546
+
547
+ key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
548
+ if (key != NULL) {
549
+ cert.type |= GIT_CERT_SSH_SHA1;
550
+ memcpy(&cert.hash_sha1, key, 20);
551
+ }
552
+
553
+ key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
554
+ if (key != NULL) {
555
+ cert.type |= GIT_CERT_SSH_MD5;
556
+ memcpy(&cert.hash_md5, key, 16);
557
+ }
558
+
559
+ if (cert.type == 0) {
560
+ git_error_set(GIT_ERROR_SSH, "unable to get the host key");
561
+ error = -1;
562
+ goto done;
563
+ }
564
+
565
+ /* We don't currently trust any hostkeys */
566
+ git_error_clear();
567
+
568
+ cert_ptr = &cert;
569
+
570
+ error = t->owner->connect_opts.callbacks.certificate_check(
571
+ (git_cert *)cert_ptr,
572
+ 0,
573
+ s->url.host,
574
+ t->owner->connect_opts.callbacks.payload);
575
+
576
+ if (error < 0 && error != GIT_PASSTHROUGH) {
577
+ if (!git_error_last())
578
+ git_error_set(GIT_ERROR_NET, "user cancelled hostkey check");
579
+
580
+ goto done;
581
+ }
582
+ }
816
583
 
817
584
  /* we need the username to ask for auth methods */
818
585
  if (!s->url.username) {
@@ -884,8 +651,6 @@ done:
884
651
  if (error < 0) {
885
652
  ssh_stream_free(*stream);
886
653
 
887
- if (known_hosts)
888
- libssh2_knownhost_free(known_hosts);
889
654
  if (session)
890
655
  libssh2_session_free(session);
891
656
  }
@@ -263,7 +263,7 @@ static void write_tree(git_str *out, git_tree_cache *tree)
263
263
  git_str_printf(out, "%s%c%"PRIdZ" %"PRIuZ"\n", tree->name, 0, tree->entry_count, tree->children_count);
264
264
 
265
265
  if (tree->entry_count != -1)
266
- git_str_put(out, (const char *) &tree->oid, GIT_OID_RAWSZ);
266
+ git_str_put(out, (char *)&tree->oid.id, GIT_OID_RAWSZ);
267
267
 
268
268
  for (i = 0; i < tree->children_count; i++)
269
269
  write_tree(out, tree->children[i]);
@@ -82,6 +82,7 @@ int git_tree_entry_cmp(const git_tree_entry *e1, const git_tree_entry *e2)
82
82
  static git_tree_entry *alloc_entry(const char *filename, size_t filename_len, const git_oid *id)
83
83
  {
84
84
  git_tree_entry *entry = NULL;
85
+ char *filename_ptr;
85
86
  size_t tree_len;
86
87
 
87
88
  TREE_ENTRY_CHECK_NAMELEN(filename_len);
@@ -95,21 +96,13 @@ static git_tree_entry *alloc_entry(const char *filename, size_t filename_len, co
95
96
  if (!entry)
96
97
  return NULL;
97
98
 
98
- {
99
- char *filename_ptr;
100
- void *id_ptr;
101
-
102
- filename_ptr = ((char *) entry) + sizeof(git_tree_entry);
103
- memcpy(filename_ptr, filename, filename_len);
104
- entry->filename = filename_ptr;
105
-
106
- id_ptr = filename_ptr + filename_len + 1;
107
- git_oid_cpy(id_ptr, id);
108
- entry->oid = id_ptr;
109
- }
110
-
99
+ filename_ptr = ((char *) entry) + sizeof(git_tree_entry);
100
+ memcpy(filename_ptr, filename, filename_len);
101
+ entry->filename = filename_ptr;
111
102
  entry->filename_len = (uint16_t)filename_len;
112
103
 
104
+ git_oid_cpy(&entry->oid, id);
105
+
113
106
  return entry;
114
107
  }
115
108
 
@@ -231,7 +224,7 @@ int git_tree_entry_dup(git_tree_entry **dest, const git_tree_entry *source)
231
224
 
232
225
  GIT_ASSERT_ARG(source);
233
226
 
234
- cpy = alloc_entry(source->filename, source->filename_len, source->oid);
227
+ cpy = alloc_entry(source->filename, source->filename_len, &source->oid);
235
228
  if (cpy == NULL)
236
229
  return -1;
237
230
 
@@ -269,7 +262,7 @@ const char *git_tree_entry_name(const git_tree_entry *entry)
269
262
  const git_oid *git_tree_entry_id(const git_tree_entry *entry)
270
263
  {
271
264
  GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
272
- return entry->oid;
265
+ return &entry->oid;
273
266
  }
274
267
 
275
268
  git_object_t git_tree_entry_type(const git_tree_entry *entry)
@@ -292,7 +285,7 @@ int git_tree_entry_to_object(
292
285
  GIT_ASSERT_ARG(entry);
293
286
  GIT_ASSERT_ARG(object_out);
294
287
 
295
- return git_object_lookup(object_out, repo, entry->oid, GIT_OBJECT_ANY);
288
+ return git_object_lookup(object_out, repo, &entry->oid, GIT_OBJECT_ANY);
296
289
  }
297
290
 
298
291
  static const git_tree_entry *entry_fromname(
@@ -331,7 +324,7 @@ const git_tree_entry *git_tree_entry_byid(
331
324
  GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
332
325
 
333
326
  git_array_foreach(tree->entries, i, e) {
334
- if (memcmp(&e->oid->id, &id->id, sizeof(id->id)) == 0)
327
+ if (git_oid_equal(&e->oid, id))
335
328
  return e;
336
329
  }
337
330
 
@@ -432,7 +425,7 @@ int git_tree__parse_raw(void *_tree, const char *data, size_t size)
432
425
  entry->attr = attr;
433
426
  entry->filename_len = (uint16_t)filename_len;
434
427
  entry->filename = buffer;
435
- entry->oid = (git_oid *) ((char *) buffer + filename_len + 1);
428
+ git_oid_fromraw(&entry->oid, ((unsigned char *) buffer + filename_len + 1));
436
429
  }
437
430
 
438
431
  buffer += filename_len + 1;
@@ -536,7 +529,7 @@ static int git_treebuilder__write_with_buffer(
536
529
 
537
530
  git_str_printf(buf, "%o ", entry->attr);
538
531
  git_str_put(buf, entry->filename, entry->filename_len + 1);
539
- git_str_put(buf, (char *)entry->oid->id, GIT_OID_RAWSZ);
532
+ git_str_put(buf, (char *)entry->oid.id, GIT_OID_RAWSZ);
540
533
 
541
534
  if (git_str_oom(buf)) {
542
535
  error = -1;
@@ -765,7 +758,7 @@ int git_treebuilder_new(
765
758
  git_array_foreach(source->entries, i, entry_src) {
766
759
  if (append_entry(
767
760
  bld, entry_src->filename,
768
- entry_src->oid,
761
+ &entry_src->oid,
769
762
  entry_src->attr,
770
763
  false) < 0)
771
764
  goto on_error;
@@ -798,7 +791,7 @@ int git_treebuilder_insert(
798
791
  return error;
799
792
 
800
793
  if ((entry = git_strmap_get(bld->map, filename)) != NULL) {
801
- git_oid_cpy((git_oid *) entry->oid, id);
794
+ git_oid_cpy(&entry->oid, id);
802
795
  } else {
803
796
  entry = alloc_entry(filename, strlen(filename), id);
804
797
  GIT_ERROR_CHECK_ALLOC(entry);
@@ -954,7 +947,7 @@ int git_tree_entry_bypath(
954
947
  return git_tree_entry_dup(entry_out, entry);
955
948
  }
956
949
 
957
- if (git_tree_lookup(&subtree, root->object.repo, entry->oid) < 0)
950
+ if (git_tree_lookup(&subtree, root->object.repo, &entry->oid) < 0)
958
951
  return -1;
959
952
 
960
953
  error = git_tree_entry_bypath(
@@ -995,7 +988,7 @@ static int tree_walk(
995
988
  git_tree *subtree;
996
989
  size_t path_len = git_str_len(path);
997
990
 
998
- error = git_tree_lookup(&subtree, tree->object.repo, entry->oid);
991
+ error = git_tree_lookup(&subtree, tree->object.repo, &entry->oid);
999
992
  if (error < 0)
1000
993
  break;
1001
994
 
@@ -19,7 +19,7 @@
19
19
  struct git_tree_entry {
20
20
  uint16_t attr;
21
21
  uint16_t filename_len;
22
- const git_oid *oid;
22
+ git_oid oid;
23
23
  const char *filename;
24
24
  };
25
25
 
@@ -0,0 +1,74 @@
1
+ # util: a shared library for common utility functions for libgit2 projects
2
+
3
+ add_library(util OBJECT)
4
+ set_target_properties(util PROPERTIES C_STANDARD 90)
5
+ set_target_properties(util PROPERTIES C_EXTENSIONS OFF)
6
+
7
+ set(UTIL_INCLUDES
8
+ "${PROJECT_BINARY_DIR}/src"
9
+ "${PROJECT_SOURCE_DIR}/src/util"
10
+ "${PROJECT_SOURCE_DIR}/include")
11
+
12
+ file(GLOB UTIL_SRC *.c *.h allocators/*.c allocators/*.h hash.h)
13
+ list(SORT UTIL_SRC)
14
+
15
+ #
16
+ # Platform specific sources
17
+ #
18
+
19
+ if(WIN32 AND NOT CYGWIN)
20
+ file(GLOB UTIL_SRC_OS win32/*.c win32/*.h)
21
+ list(SORT UTIL_SRC_OS)
22
+ elseif(NOT AMIGA)
23
+ file(GLOB UTIL_SRC_OS unix/*.c unix/*.h)
24
+ list(SORT UTIL_SRC_OS)
25
+ endif()
26
+
27
+ #
28
+ # Hash backend selection
29
+ #
30
+
31
+ if(USE_SHA1 STREQUAL "CollisionDetection")
32
+ file(GLOB UTIL_SRC_SHA1 hash/collisiondetect.* hash/sha1dc/*)
33
+ target_compile_definitions(util PRIVATE SHA1DC_NO_STANDARD_INCLUDES=1)
34
+ target_compile_definitions(util PRIVATE SHA1DC_CUSTOM_INCLUDE_SHA1_C=\"git2_util.h\")
35
+ target_compile_definitions(util PRIVATE SHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"git2_util.h\")
36
+ elseif(USE_SHA1 STREQUAL "OpenSSL" OR USE_SHA1 STREQUAL "OpenSSL-Dynamic")
37
+ file(GLOB UTIL_SRC_SHA1 hash/openssl.*)
38
+ elseif(USE_SHA1 STREQUAL "CommonCrypto")
39
+ file(GLOB UTIL_SRC_SHA1 hash/common_crypto.*)
40
+ elseif(USE_SHA1 STREQUAL "mbedTLS")
41
+ file(GLOB UTIL_SRC_SHA1 hash/mbedtls.*)
42
+ elseif(USE_SHA1 STREQUAL "Win32")
43
+ file(GLOB UTIL_SRC_SHA1 hash/win32.*)
44
+ else()
45
+ message(FATAL_ERROR "Asked for unknown SHA1 backend: ${USE_SHA1}")
46
+ endif()
47
+
48
+ list(SORT UTIL_SRC_SHA1)
49
+
50
+ if(USE_SHA256 STREQUAL "Builtin")
51
+ file(GLOB UTIL_SRC_SHA256 hash/builtin.* hash/rfc6234/*)
52
+ elseif(USE_SHA256 STREQUAL "OpenSSL" OR USE_SHA256 STREQUAL "OpenSSL-Dynamic")
53
+ file(GLOB UTIL_SRC_SHA256 hash/openssl.*)
54
+ elseif(USE_SHA256 STREQUAL "CommonCrypto")
55
+ file(GLOB UTIL_SRC_SHA256 hash/common_crypto.*)
56
+ elseif(USE_SHA256 STREQUAL "mbedTLS")
57
+ file(GLOB UTIL_SRC_SHA256 hash/mbedtls.*)
58
+ elseif(USE_SHA256 STREQUAL "Win32")
59
+ file(GLOB UTIL_SRC_SHA256 hash/win32.*)
60
+ else()
61
+ message(FATAL_ERROR "Asked for unknown SHA256 backend: ${USE_SHA256}")
62
+ endif()
63
+
64
+ list(SORT UTIL_SRC_SHA256)
65
+
66
+ #
67
+ # Build the library
68
+ #
69
+
70
+ target_sources(util PRIVATE ${UTIL_SRC} ${UTIL_SRC_OS} ${UTIL_SRC_SHA1} ${UTIL_SRC_SHA256})
71
+ ide_split_sources(util)
72
+
73
+ target_include_directories(util PRIVATE ${UTIL_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES} PUBLIC ${libgit2_SOURCE_DIR}/include)
74
+ target_include_directories(util SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
@@ -8,7 +8,7 @@
8
8
  #ifndef INCLUDE_allocators_failalloc_h__
9
9
  #define INCLUDE_allocators_failalloc_h__
10
10
 
11
- #include "common.h"
11
+ #include "git2_util.h"
12
12
 
13
13
  extern void *git_failalloc_malloc(size_t len, const char *file, int line);
14
14
  extern void *git_failalloc_calloc(size_t nelem, size_t elsize, const char *file, int line);
@@ -8,7 +8,7 @@
8
8
  #ifndef INCLUDE_allocators_stdalloc_h__
9
9
  #define INCLUDE_allocators_stdalloc_h__
10
10
 
11
- #include "common.h"
11
+ #include "git2_util.h"
12
12
 
13
13
  #include "alloc.h"
14
14