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