rugged 1.6.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -22,6 +22,7 @@ typedef struct transport_definition {
22
22
 
23
23
  static git_smart_subtransport_definition http_subtransport_definition = { git_smart_subtransport_http, 1, NULL };
24
24
  static git_smart_subtransport_definition git_subtransport_definition = { git_smart_subtransport_git, 0, NULL };
25
+
25
26
  #ifdef GIT_SSH
26
27
  static git_smart_subtransport_definition ssh_subtransport_definition = { git_smart_subtransport_ssh, 0, NULL };
27
28
  #endif
@@ -33,11 +34,13 @@ static transport_definition transports[] = {
33
34
  { "http://", git_transport_smart, &http_subtransport_definition },
34
35
  { "https://", git_transport_smart, &http_subtransport_definition },
35
36
  { "file://", git_transport_local, NULL },
37
+
36
38
  #ifdef GIT_SSH
37
39
  { "ssh://", git_transport_smart, &ssh_subtransport_definition },
38
40
  { "ssh+git://", git_transport_smart, &ssh_subtransport_definition },
39
41
  { "git+ssh://", git_transport_smart, &ssh_subtransport_definition },
40
42
  #endif
43
+
41
44
  { NULL, 0, 0 }
42
45
  };
43
46
 
@@ -200,7 +203,7 @@ int git_transport_unregister(const char *scheme)
200
203
  git__free(d);
201
204
 
202
205
  if (!custom_transports.length)
203
- git_vector_free(&custom_transports);
206
+ git_vector_dispose(&custom_transports);
204
207
 
205
208
  error = 0;
206
209
  goto done;
@@ -9,8 +9,7 @@
9
9
  #define INCLUDE_transports_auth_h__
10
10
 
11
11
  #include "common.h"
12
-
13
- #include "netops.h"
12
+ #include "net.h"
14
13
 
15
14
  typedef enum {
16
15
  GIT_HTTP_AUTH_BASIC = 1,
@@ -20,13 +20,13 @@
20
20
  #include <krb5.h>
21
21
  #endif
22
22
 
23
- static gss_OID_desc negotiate_oid_spnego =
23
+ static gss_OID_desc gssapi_oid_spnego =
24
24
  { 6, (void *) "\x2b\x06\x01\x05\x05\x02" };
25
- static gss_OID_desc negotiate_oid_krb5 =
25
+ static gss_OID_desc gssapi_oid_krb5 =
26
26
  { 9, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02" };
27
27
 
28
- static gss_OID negotiate_oids[] =
29
- { &negotiate_oid_spnego, &negotiate_oid_krb5, NULL };
28
+ static gss_OID gssapi_oids[] =
29
+ { &gssapi_oid_spnego, &gssapi_oid_krb5, NULL };
30
30
 
31
31
  typedef struct {
32
32
  git_http_auth_context parent;
@@ -36,9 +36,9 @@ typedef struct {
36
36
  char *challenge;
37
37
  gss_ctx_id_t gss_context;
38
38
  gss_OID oid;
39
- } http_auth_negotiate_context;
39
+ } http_auth_gssapi_context;
40
40
 
41
- static void negotiate_err_set(
41
+ static void gssapi_err_set(
42
42
  OM_uint32 status_major,
43
43
  OM_uint32 status_minor,
44
44
  const char *message)
@@ -58,11 +58,11 @@ static void negotiate_err_set(
58
58
  }
59
59
  }
60
60
 
61
- static int negotiate_set_challenge(
61
+ static int gssapi_set_challenge(
62
62
  git_http_auth_context *c,
63
63
  const char *challenge)
64
64
  {
65
- http_auth_negotiate_context *ctx = (http_auth_negotiate_context *)c;
65
+ http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
66
66
 
67
67
  GIT_ASSERT_ARG(ctx);
68
68
  GIT_ASSERT_ARG(challenge);
@@ -76,7 +76,7 @@ static int negotiate_set_challenge(
76
76
  return 0;
77
77
  }
78
78
 
79
- static void negotiate_context_dispose(http_auth_negotiate_context *ctx)
79
+ static void gssapi_context_dispose(http_auth_gssapi_context *ctx)
80
80
  {
81
81
  OM_uint32 status_minor;
82
82
 
@@ -92,12 +92,12 @@ static void negotiate_context_dispose(http_auth_negotiate_context *ctx)
92
92
  ctx->challenge = NULL;
93
93
  }
94
94
 
95
- static int negotiate_next_token(
95
+ static int gssapi_next_token(
96
96
  git_str *buf,
97
97
  git_http_auth_context *c,
98
98
  git_credential *cred)
99
99
  {
100
- http_auth_negotiate_context *ctx = (http_auth_negotiate_context *)c;
100
+ http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
101
101
  OM_uint32 status_major, status_minor;
102
102
  gss_buffer_desc target_buffer = GSS_C_EMPTY_BUFFER,
103
103
  input_token = GSS_C_EMPTY_BUFFER,
@@ -126,7 +126,7 @@ static int negotiate_next_token(
126
126
  GSS_C_NT_HOSTBASED_SERVICE, &server);
127
127
 
128
128
  if (GSS_ERROR(status_major)) {
129
- negotiate_err_set(status_major, status_minor,
129
+ gssapi_err_set(status_major, status_minor,
130
130
  "could not parse principal");
131
131
  error = -1;
132
132
  goto done;
@@ -152,10 +152,10 @@ static int negotiate_next_token(
152
152
  input_token.length = input_buf.size;
153
153
  input_token_ptr = &input_token;
154
154
  } else if (ctx->gss_context != GSS_C_NO_CONTEXT) {
155
- negotiate_context_dispose(ctx);
155
+ gssapi_context_dispose(ctx);
156
156
  }
157
157
 
158
- mech = &negotiate_oid_spnego;
158
+ mech = &gssapi_oid_spnego;
159
159
 
160
160
  status_major = gss_init_sec_context(
161
161
  &status_minor,
@@ -173,14 +173,14 @@ static int negotiate_next_token(
173
173
  NULL);
174
174
 
175
175
  if (GSS_ERROR(status_major)) {
176
- negotiate_err_set(status_major, status_minor, "negotiate failure");
176
+ gssapi_err_set(status_major, status_minor, "negotiate failure");
177
177
  error = -1;
178
178
  goto done;
179
179
  }
180
180
 
181
181
  /* This message merely told us auth was complete; we do not respond. */
182
182
  if (status_major == GSS_S_COMPLETE) {
183
- negotiate_context_dispose(ctx);
183
+ gssapi_context_dispose(ctx);
184
184
  ctx->complete = 1;
185
185
  goto done;
186
186
  }
@@ -204,20 +204,20 @@ done:
204
204
  return error;
205
205
  }
206
206
 
207
- static int negotiate_is_complete(git_http_auth_context *c)
207
+ static int gssapi_is_complete(git_http_auth_context *c)
208
208
  {
209
- http_auth_negotiate_context *ctx = (http_auth_negotiate_context *)c;
209
+ http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
210
210
 
211
211
  GIT_ASSERT_ARG(ctx);
212
212
 
213
213
  return (ctx->complete == 1);
214
214
  }
215
215
 
216
- static void negotiate_context_free(git_http_auth_context *c)
216
+ static void gssapi_context_free(git_http_auth_context *c)
217
217
  {
218
- http_auth_negotiate_context *ctx = (http_auth_negotiate_context *)c;
218
+ http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
219
219
 
220
- negotiate_context_dispose(ctx);
220
+ gssapi_context_dispose(ctx);
221
221
 
222
222
  ctx->configured = 0;
223
223
  ctx->complete = 0;
@@ -226,8 +226,8 @@ static void negotiate_context_free(git_http_auth_context *c)
226
226
  git__free(ctx);
227
227
  }
228
228
 
229
- static int negotiate_init_context(
230
- http_auth_negotiate_context *ctx,
229
+ static int gssapi_init_context(
230
+ http_auth_gssapi_context *ctx,
231
231
  const git_net_url *url)
232
232
  {
233
233
  OM_uint32 status_major, status_minor;
@@ -239,13 +239,13 @@ static int negotiate_init_context(
239
239
  status_major = gss_indicate_mechs(&status_minor, &mechanism_list);
240
240
 
241
241
  if (GSS_ERROR(status_major)) {
242
- negotiate_err_set(status_major, status_minor,
242
+ gssapi_err_set(status_major, status_minor,
243
243
  "could not query mechanisms");
244
244
  return -1;
245
245
  }
246
246
 
247
247
  if (mechanism_list) {
248
- for (oid = negotiate_oids; *oid; oid++) {
248
+ for (oid = gssapi_oids; *oid; oid++) {
249
249
  for (i = 0; i < mechanism_list->count; i++) {
250
250
  item = &mechanism_list->elements[i];
251
251
 
@@ -285,14 +285,14 @@ int git_http_auth_negotiate(
285
285
  git_http_auth_context **out,
286
286
  const git_net_url *url)
287
287
  {
288
- http_auth_negotiate_context *ctx;
288
+ http_auth_gssapi_context *ctx;
289
289
 
290
290
  *out = NULL;
291
291
 
292
- ctx = git__calloc(1, sizeof(http_auth_negotiate_context));
292
+ ctx = git__calloc(1, sizeof(http_auth_gssapi_context));
293
293
  GIT_ERROR_CHECK_ALLOC(ctx);
294
294
 
295
- if (negotiate_init_context(ctx, url) < 0) {
295
+ if (gssapi_init_context(ctx, url) < 0) {
296
296
  git__free(ctx);
297
297
  return -1;
298
298
  }
@@ -300,10 +300,10 @@ int git_http_auth_negotiate(
300
300
  ctx->parent.type = GIT_HTTP_AUTH_NEGOTIATE;
301
301
  ctx->parent.credtypes = GIT_CREDENTIAL_DEFAULT;
302
302
  ctx->parent.connection_affinity = 1;
303
- ctx->parent.set_challenge = negotiate_set_challenge;
304
- ctx->parent.next_token = negotiate_next_token;
305
- ctx->parent.is_complete = negotiate_is_complete;
306
- ctx->parent.free = negotiate_context_free;
303
+ ctx->parent.set_challenge = gssapi_set_challenge;
304
+ ctx->parent.next_token = gssapi_next_token;
305
+ ctx->parent.is_complete = gssapi_is_complete;
306
+ ctx->parent.free = gssapi_context_free;
307
307
 
308
308
  *out = (git_http_auth_context *)ctx;
309
309
 
@@ -12,7 +12,7 @@
12
12
  #include "git2.h"
13
13
  #include "auth.h"
14
14
 
15
- #if defined(GIT_GSSAPI) || defined(GIT_GSSFRAMEWORK)
15
+ #if defined(GIT_GSSAPI) || defined(GIT_GSSFRAMEWORK) || defined(GIT_WIN32)
16
16
 
17
17
  extern int git_http_auth_negotiate(
18
18
  git_http_auth_context **out,
@@ -13,7 +13,7 @@
13
13
  /* NTLM requires a full request/challenge/response */
14
14
  #define GIT_AUTH_STEPS_NTLM 2
15
15
 
16
- #ifdef GIT_NTLM
16
+ #if defined(GIT_NTLM) || defined(GIT_WIN32)
17
17
 
18
18
  #if defined(GIT_OPENSSL)
19
19
  # define CRYPT_OPENSSL
@@ -23,7 +23,7 @@ typedef struct {
23
23
  bool complete;
24
24
  } http_auth_ntlm_context;
25
25
 
26
- static int ntlm_set_challenge(
26
+ static int ntlmclient_set_challenge(
27
27
  git_http_auth_context *c,
28
28
  const char *challenge)
29
29
  {
@@ -40,7 +40,7 @@ static int ntlm_set_challenge(
40
40
  return 0;
41
41
  }
42
42
 
43
- static int ntlm_set_credentials(http_auth_ntlm_context *ctx, git_credential *_cred)
43
+ static int ntlmclient_set_credentials(http_auth_ntlm_context *ctx, git_credential *_cred)
44
44
  {
45
45
  git_credential_userpass_plaintext *cred;
46
46
  const char *sep, *username;
@@ -76,7 +76,7 @@ done:
76
76
  return error;
77
77
  }
78
78
 
79
- static int ntlm_next_token(
79
+ static int ntlmclient_next_token(
80
80
  git_str *buf,
81
81
  git_http_auth_context *c,
82
82
  git_credential *cred)
@@ -104,7 +104,7 @@ static int ntlm_next_token(
104
104
  */
105
105
  ctx->complete = true;
106
106
 
107
- if (cred && ntlm_set_credentials(ctx, cred) != 0)
107
+ if (cred && ntlmclient_set_credentials(ctx, cred) != 0)
108
108
  goto done;
109
109
 
110
110
  if (challenge_len < 4) {
@@ -162,7 +162,7 @@ done:
162
162
  return error;
163
163
  }
164
164
 
165
- static int ntlm_is_complete(git_http_auth_context *c)
165
+ static int ntlmclient_is_complete(git_http_auth_context *c)
166
166
  {
167
167
  http_auth_ntlm_context *ctx = (http_auth_ntlm_context *)c;
168
168
 
@@ -170,7 +170,7 @@ static int ntlm_is_complete(git_http_auth_context *c)
170
170
  return (ctx->complete == true);
171
171
  }
172
172
 
173
- static void ntlm_context_free(git_http_auth_context *c)
173
+ static void ntlmclient_context_free(git_http_auth_context *c)
174
174
  {
175
175
  http_auth_ntlm_context *ctx = (http_auth_ntlm_context *)c;
176
176
 
@@ -179,7 +179,7 @@ static void ntlm_context_free(git_http_auth_context *c)
179
179
  git__free(ctx);
180
180
  }
181
181
 
182
- static int ntlm_init_context(
182
+ static int ntlmclient_init_context(
183
183
  http_auth_ntlm_context *ctx,
184
184
  const git_net_url *url)
185
185
  {
@@ -206,7 +206,7 @@ int git_http_auth_ntlm(
206
206
  ctx = git__calloc(1, sizeof(http_auth_ntlm_context));
207
207
  GIT_ERROR_CHECK_ALLOC(ctx);
208
208
 
209
- if (ntlm_init_context(ctx, url) < 0) {
209
+ if (ntlmclient_init_context(ctx, url) < 0) {
210
210
  git__free(ctx);
211
211
  return -1;
212
212
  }
@@ -214,10 +214,10 @@ int git_http_auth_ntlm(
214
214
  ctx->parent.type = GIT_HTTP_AUTH_NTLM;
215
215
  ctx->parent.credtypes = GIT_CREDENTIAL_USERPASS_PLAINTEXT;
216
216
  ctx->parent.connection_affinity = 1;
217
- ctx->parent.set_challenge = ntlm_set_challenge;
218
- ctx->parent.next_token = ntlm_next_token;
219
- ctx->parent.is_complete = ntlm_is_complete;
220
- ctx->parent.free = ntlm_context_free;
217
+ ctx->parent.set_challenge = ntlmclient_set_challenge;
218
+ ctx->parent.next_token = ntlmclient_next_token;
219
+ ctx->parent.is_complete = ntlmclient_is_complete;
220
+ ctx->parent.free = ntlmclient_context_free;
221
221
 
222
222
  *out = (git_http_auth_context *)ctx;
223
223
 
@@ -0,0 +1,341 @@
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 "auth_ntlm.h"
9
+ #include "auth_negotiate.h"
10
+
11
+ #ifdef GIT_WIN32
12
+
13
+ #define SECURITY_WIN32
14
+
15
+ #include "git2.h"
16
+ #include "auth.h"
17
+ #include "git2/sys/credential.h"
18
+
19
+ #include <windows.h>
20
+ #include <security.h>
21
+
22
+ typedef struct {
23
+ git_http_auth_context parent;
24
+ wchar_t *target;
25
+
26
+ const char *package_name;
27
+ size_t package_name_len;
28
+ wchar_t *package_name_w;
29
+ SecPkgInfoW *package_info;
30
+ SEC_WINNT_AUTH_IDENTITY_W identity;
31
+ CredHandle cred;
32
+ CtxtHandle context;
33
+
34
+ int has_identity : 1,
35
+ has_credentials : 1,
36
+ has_context : 1,
37
+ complete : 1;
38
+ git_str challenge;
39
+ } http_auth_sspi_context;
40
+
41
+ static void sspi_reset_context(http_auth_sspi_context *ctx)
42
+ {
43
+ if (ctx->has_identity) {
44
+ git__free(ctx->identity.User);
45
+ git__free(ctx->identity.Domain);
46
+ git__free(ctx->identity.Password);
47
+
48
+ memset(&ctx->identity, 0, sizeof(SEC_WINNT_AUTH_IDENTITY_W));
49
+
50
+ ctx->has_identity = 0;
51
+ }
52
+
53
+ if (ctx->has_credentials) {
54
+ FreeCredentialsHandle(&ctx->cred);
55
+ memset(&ctx->cred, 0, sizeof(CredHandle));
56
+
57
+ ctx->has_credentials = 0;
58
+ }
59
+
60
+ if (ctx->has_context) {
61
+ DeleteSecurityContext(&ctx->context);
62
+ memset(&ctx->context, 0, sizeof(CtxtHandle));
63
+
64
+ ctx->has_context = 0;
65
+ }
66
+
67
+ ctx->complete = 0;
68
+
69
+ git_str_dispose(&ctx->challenge);
70
+ }
71
+
72
+ static int sspi_set_challenge(
73
+ git_http_auth_context *c,
74
+ const char *challenge)
75
+ {
76
+ http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
77
+ size_t challenge_len = strlen(challenge);
78
+
79
+ git_str_clear(&ctx->challenge);
80
+
81
+ if (strncmp(challenge, ctx->package_name, ctx->package_name_len) != 0) {
82
+ git_error_set(GIT_ERROR_NET, "invalid %s challenge from server", ctx->package_name);
83
+ return -1;
84
+ }
85
+
86
+ /*
87
+ * A package type indicator without a base64 payload indicates the
88
+ * mechanism; it's not an actual challenge. Ignore it.
89
+ */
90
+ if (challenge[ctx->package_name_len] == 0) {
91
+ return 0;
92
+ } else if (challenge[ctx->package_name_len] != ' ') {
93
+ git_error_set(GIT_ERROR_NET, "invalid %s challenge from server", ctx->package_name);
94
+ return -1;
95
+ }
96
+
97
+ if (git_str_decode_base64(&ctx->challenge,
98
+ challenge + (ctx->package_name_len + 1),
99
+ challenge_len - (ctx->package_name_len + 1)) < 0) {
100
+ git_error_set(GIT_ERROR_NET, "invalid %s challenge from server", ctx->package_name);
101
+ return -1;
102
+ }
103
+
104
+ GIT_ASSERT(ctx->challenge.size <= ULONG_MAX);
105
+ return 0;
106
+ }
107
+
108
+ static int create_identity(
109
+ SEC_WINNT_AUTH_IDENTITY_W **out,
110
+ http_auth_sspi_context *ctx,
111
+ git_credential *cred)
112
+ {
113
+ git_credential_userpass_plaintext *userpass;
114
+ wchar_t *username = NULL, *domain = NULL, *password = NULL;
115
+ int username_len = 0, domain_len = 0, password_len = 0;
116
+ const char *sep;
117
+
118
+ if (cred->credtype == GIT_CREDENTIAL_DEFAULT) {
119
+ *out = NULL;
120
+ return 0;
121
+ }
122
+
123
+ if (cred->credtype != GIT_CREDENTIAL_USERPASS_PLAINTEXT) {
124
+ git_error_set(GIT_ERROR_NET, "unknown credential type: %d", cred->credtype);
125
+ return -1;
126
+ }
127
+
128
+ userpass = (git_credential_userpass_plaintext *)cred;
129
+
130
+ if ((sep = strchr(userpass->username, '\\')) != NULL) {
131
+ GIT_ASSERT(sep - userpass->username < INT_MAX);
132
+
133
+ username_len = git_utf8_to_16_alloc(&username, sep + 1);
134
+ domain_len = git_utf8_to_16_alloc_with_len(&domain,
135
+ userpass->username, (int)(sep - userpass->username));
136
+ } else {
137
+ username_len = git_utf8_to_16_alloc(&username,
138
+ userpass->username);
139
+ }
140
+
141
+ password_len = git_utf8_to_16_alloc(&password, userpass->password);
142
+
143
+ if (username_len < 0 || domain_len < 0 || password_len < 0) {
144
+ git__free(username);
145
+ git__free(domain);
146
+ git__free(password);
147
+ return -1;
148
+ }
149
+
150
+ ctx->identity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
151
+ ctx->identity.User = username;
152
+ ctx->identity.UserLength = (unsigned long)username_len;
153
+ ctx->identity.Password = password;
154
+ ctx->identity.PasswordLength = (unsigned long)password_len;
155
+ ctx->identity.Domain = domain;
156
+ ctx->identity.DomainLength = (unsigned long)domain_len;
157
+
158
+ ctx->has_identity = 1;
159
+
160
+ *out = &ctx->identity;
161
+
162
+ return 0;
163
+ }
164
+
165
+ static int sspi_next_token(
166
+ git_str *buf,
167
+ git_http_auth_context *c,
168
+ git_credential *cred)
169
+ {
170
+ http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
171
+ SEC_WINNT_AUTH_IDENTITY_W *identity = NULL;
172
+ TimeStamp timestamp;
173
+ DWORD context_flags;
174
+ SecBuffer input_buf = { 0, SECBUFFER_TOKEN, NULL };
175
+ SecBuffer output_buf = { 0, SECBUFFER_TOKEN, NULL };
176
+ SecBufferDesc input_buf_desc = { SECBUFFER_VERSION, 1, &input_buf };
177
+ SecBufferDesc output_buf_desc = { SECBUFFER_VERSION, 1, &output_buf };
178
+ SECURITY_STATUS status;
179
+
180
+ if (ctx->complete)
181
+ sspi_reset_context(ctx);
182
+
183
+ if (!ctx->has_context) {
184
+ if (create_identity(&identity, ctx, cred) < 0)
185
+ return -1;
186
+
187
+ status = AcquireCredentialsHandleW(NULL, ctx->package_name_w,
188
+ SECPKG_CRED_BOTH, NULL, identity, NULL,
189
+ NULL, &ctx->cred, &timestamp);
190
+
191
+ if (status != SEC_E_OK) {
192
+ git_error_set(GIT_ERROR_OS, "could not acquire credentials");
193
+ return -1;
194
+ }
195
+
196
+ ctx->has_credentials = 1;
197
+ }
198
+
199
+ context_flags = ISC_REQ_ALLOCATE_MEMORY |
200
+ ISC_REQ_CONFIDENTIALITY |
201
+ ISC_REQ_MUTUAL_AUTH;
202
+
203
+ if (ctx->challenge.size > 0) {
204
+ input_buf.BufferType = SECBUFFER_TOKEN;
205
+ input_buf.cbBuffer = (unsigned long)ctx->challenge.size;
206
+ input_buf.pvBuffer = ctx->challenge.ptr;
207
+ }
208
+
209
+ status = InitializeSecurityContextW(&ctx->cred,
210
+ ctx->has_context ? &ctx->context : NULL,
211
+ ctx->target,
212
+ context_flags,
213
+ 0,
214
+ SECURITY_NETWORK_DREP,
215
+ ctx->has_context ? &input_buf_desc : NULL,
216
+ 0,
217
+ ctx->has_context ? NULL : &ctx->context,
218
+ &output_buf_desc,
219
+ &context_flags,
220
+ NULL);
221
+
222
+ if (status == SEC_I_COMPLETE_AND_CONTINUE ||
223
+ status == SEC_I_COMPLETE_NEEDED)
224
+ status = CompleteAuthToken(&ctx->context, &output_buf_desc);
225
+
226
+ if (status == SEC_E_OK) {
227
+ ctx->complete = 1;
228
+ } else if (status != SEC_I_CONTINUE_NEEDED) {
229
+ git_error_set(GIT_ERROR_OS, "could not initialize security context");
230
+ return -1;
231
+ }
232
+
233
+ ctx->has_context = 1;
234
+ git_str_clear(&ctx->challenge);
235
+
236
+ if (output_buf.cbBuffer > 0) {
237
+ git_str_put(buf, ctx->package_name, ctx->package_name_len);
238
+ git_str_putc(buf, ' ');
239
+ git_str_encode_base64(buf, output_buf.pvBuffer, output_buf.cbBuffer);
240
+
241
+ FreeContextBuffer(output_buf.pvBuffer);
242
+
243
+ if (git_str_oom(buf))
244
+ return -1;
245
+ }
246
+
247
+ return 0;
248
+ }
249
+
250
+ static int sspi_is_complete(git_http_auth_context *c)
251
+ {
252
+ http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
253
+
254
+ return ctx->complete;
255
+ }
256
+
257
+ static void sspi_context_free(git_http_auth_context *c)
258
+ {
259
+ http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
260
+
261
+ sspi_reset_context(ctx);
262
+
263
+ FreeContextBuffer(ctx->package_info);
264
+ git__free(ctx->target);
265
+ git__free(ctx);
266
+ }
267
+
268
+ static int sspi_init_context(
269
+ git_http_auth_context **out,
270
+ git_http_auth_t type,
271
+ const git_net_url *url)
272
+ {
273
+ http_auth_sspi_context *ctx;
274
+ git_str target = GIT_STR_INIT;
275
+
276
+ *out = NULL;
277
+
278
+ ctx = git__calloc(1, sizeof(http_auth_sspi_context));
279
+ GIT_ERROR_CHECK_ALLOC(ctx);
280
+
281
+ switch (type) {
282
+ case GIT_HTTP_AUTH_NTLM:
283
+ ctx->package_name = "NTLM";
284
+ ctx->package_name_len = CONST_STRLEN("NTLM");
285
+ ctx->package_name_w = L"NTLM";
286
+ ctx->parent.credtypes = GIT_CREDENTIAL_USERPASS_PLAINTEXT |
287
+ GIT_CREDENTIAL_DEFAULT;
288
+ break;
289
+ case GIT_HTTP_AUTH_NEGOTIATE:
290
+ ctx->package_name = "Negotiate";
291
+ ctx->package_name_len = CONST_STRLEN("Negotiate");
292
+ ctx->package_name_w = L"Negotiate";
293
+ ctx->parent.credtypes = GIT_CREDENTIAL_DEFAULT;
294
+ break;
295
+ default:
296
+ git_error_set(GIT_ERROR_NET, "unknown SSPI auth type: %d", ctx->parent.type);
297
+ git__free(ctx);
298
+ return -1;
299
+ }
300
+
301
+ if (QuerySecurityPackageInfoW(ctx->package_name_w, &ctx->package_info) != SEC_E_OK) {
302
+ git_error_set(GIT_ERROR_OS, "could not query security package");
303
+ git__free(ctx);
304
+ return -1;
305
+ }
306
+
307
+ if (git_str_printf(&target, "http/%s", url->host) < 0 ||
308
+ git_utf8_to_16_alloc(&ctx->target, target.ptr) < 0) {
309
+ FreeContextBuffer(ctx->package_info);
310
+ git__free(ctx);
311
+ return -1;
312
+ }
313
+
314
+ ctx->parent.type = type;
315
+ ctx->parent.connection_affinity = 1;
316
+ ctx->parent.set_challenge = sspi_set_challenge;
317
+ ctx->parent.next_token = sspi_next_token;
318
+ ctx->parent.is_complete = sspi_is_complete;
319
+ ctx->parent.free = sspi_context_free;
320
+
321
+ *out = (git_http_auth_context *)ctx;
322
+
323
+ git_str_dispose(&target);
324
+ return 0;
325
+ }
326
+
327
+ int git_http_auth_negotiate(
328
+ git_http_auth_context **out,
329
+ const git_net_url *url)
330
+ {
331
+ return sspi_init_context(out, GIT_HTTP_AUTH_NEGOTIATE, url);
332
+ }
333
+
334
+ int git_http_auth_ntlm(
335
+ git_http_auth_context **out,
336
+ const git_net_url *url)
337
+ {
338
+ return sspi_init_context(out, GIT_HTTP_AUTH_NTLM, url);
339
+ }
340
+
341
+ #endif /* GIT_WIN32 */
@@ -204,7 +204,7 @@ int git_credential_ssh_key_memory_new(
204
204
  const char *privatekey,
205
205
  const char *passphrase)
206
206
  {
207
- #ifdef GIT_SSH_MEMORY_CREDENTIALS
207
+ #ifdef GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS
208
208
  return git_credential_ssh_key_type_new(
209
209
  cred,
210
210
  username,