rugged 1.7.2 → 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/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- 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/xdiff/xmerge.c +2 -2
- 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 +120 -63
- 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 +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- 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 +99 -14
- 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 +23 -24
- 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 +94 -18
- data/vendor/libgit2/include/git2/repository.h +57 -21
- 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 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- 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 +43 -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 +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +24 -3
- 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 +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- 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 +5 -7
- 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 +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- 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 +26 -8
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- 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 +130 -44
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- 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 +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +186 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +92 -0
- data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +389 -298
- 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 +99 -88
- 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 +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- 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_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- 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 +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +68 -90
- data/vendor/libgit2/src/libgit2/index.h +2 -2
- 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 +34 -38
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +42 -37
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/midx.c +28 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +5 -4
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +32 -5
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +30 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- 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 +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- 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 +26 -7
- 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 +121 -61
- data/vendor/libgit2/src/libgit2/repository.c +231 -51
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- 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/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- 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/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- 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/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -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 +8 -7
- data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- 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 +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +4 -1
- 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/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -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/fs_path.c +15 -4
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- 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 +13 -7
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -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 +1 -7
- 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/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 +2 -2
- data/vendor/libgit2/src/util/util.h +4 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- metadata +45 -28
- 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 -293
- 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/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 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- 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
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
# endif
|
|
33
33
|
#endif
|
|
34
34
|
|
|
35
|
-
#include <mbedtls/config.h>
|
|
36
35
|
#include <mbedtls/ssl.h>
|
|
37
36
|
#include <mbedtls/error.h>
|
|
38
37
|
#include <mbedtls/entropy.h>
|
|
@@ -40,12 +39,18 @@
|
|
|
40
39
|
|
|
41
40
|
#undef inline
|
|
42
41
|
|
|
43
|
-
#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-
|
|
44
|
-
#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
|
|
45
44
|
|
|
46
|
-
static mbedtls_ssl_config *git__ssl_conf;
|
|
47
45
|
static int ciphers_list[GIT_SSL_DEFAULT_CIPHERS_COUNT];
|
|
48
|
-
|
|
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;
|
|
49
54
|
|
|
50
55
|
/**
|
|
51
56
|
* This function aims to clean-up the SSL context which
|
|
@@ -53,19 +58,16 @@ static mbedtls_entropy_context *mbedtls_entropy;
|
|
|
53
58
|
*/
|
|
54
59
|
static void shutdown_ssl(void)
|
|
55
60
|
{
|
|
56
|
-
if (
|
|
57
|
-
mbedtls_x509_crt_free(
|
|
58
|
-
|
|
59
|
-
mbedtls_ctr_drbg_free(git__ssl_conf->p_rng);
|
|
60
|
-
git__free(git__ssl_conf->p_rng);
|
|
61
|
-
mbedtls_ssl_config_free(git__ssl_conf);
|
|
62
|
-
git__free(git__ssl_conf);
|
|
63
|
-
git__ssl_conf = NULL;
|
|
61
|
+
if (has_ca_chain) {
|
|
62
|
+
mbedtls_x509_crt_free(&mbedtls_ca_chain);
|
|
63
|
+
has_ca_chain = false;
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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;
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
|
|
@@ -74,32 +76,33 @@ int git_mbedtls_stream_global_init(void)
|
|
|
74
76
|
int loaded = 0;
|
|
75
77
|
char *crtpath = GIT_DEFAULT_CERT_LOCATION;
|
|
76
78
|
struct stat statbuf;
|
|
77
|
-
mbedtls_ctr_drbg_context *ctr_drbg = NULL;
|
|
78
79
|
|
|
79
80
|
size_t ciphers_known = 0;
|
|
80
81
|
char *cipher_name = NULL;
|
|
81
82
|
char *cipher_string = NULL;
|
|
82
83
|
char *cipher_string_tmp = NULL;
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
mbedtls_ssl_config_init(&mbedtls_config);
|
|
86
|
+
mbedtls_entropy_init(&mbedtls_entropy);
|
|
87
|
+
mbedtls_ctr_drbg_init(&mbedtls_rng);
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
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) {
|
|
92
93
|
git_error_set(GIT_ERROR_SSL, "failed to initialize mbedTLS");
|
|
93
94
|
goto cleanup;
|
|
94
95
|
}
|
|
95
96
|
|
|
96
|
-
/* configure TLSv1 */
|
|
97
|
-
|
|
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
|
|
98
101
|
|
|
99
102
|
/* verify_server_cert is responsible for making the check.
|
|
100
103
|
* OPTIONAL because REQUIRED drops the certificate as soon as the check
|
|
101
104
|
* is made, so we can never see the certificate and override it. */
|
|
102
|
-
mbedtls_ssl_conf_authmode(
|
|
105
|
+
mbedtls_ssl_conf_authmode(&mbedtls_config, MBEDTLS_SSL_VERIFY_OPTIONAL);
|
|
103
106
|
|
|
104
107
|
/* set the list of allowed ciphersuites */
|
|
105
108
|
ciphers_known = 0;
|
|
@@ -123,42 +126,33 @@ int git_mbedtls_stream_global_init(void)
|
|
|
123
126
|
git_error_set(GIT_ERROR_SSL, "no cipher could be enabled");
|
|
124
127
|
goto cleanup;
|
|
125
128
|
}
|
|
126
|
-
mbedtls_ssl_conf_ciphersuites(
|
|
129
|
+
mbedtls_ssl_conf_ciphersuites(&mbedtls_config, ciphers_list);
|
|
127
130
|
|
|
128
131
|
/* Seeding the random number generator */
|
|
129
|
-
mbedtls_entropy = git__malloc(sizeof(mbedtls_entropy_context));
|
|
130
|
-
GIT_ERROR_CHECK_ALLOC(mbedtls_entropy);
|
|
131
|
-
|
|
132
|
-
mbedtls_entropy_init(mbedtls_entropy);
|
|
133
|
-
|
|
134
|
-
ctr_drbg = git__malloc(sizeof(mbedtls_ctr_drbg_context));
|
|
135
|
-
GIT_ERROR_CHECK_ALLOC(ctr_drbg);
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if (mbedtls_ctr_drbg_seed(ctr_drbg,
|
|
140
|
-
mbedtls_entropy_func,
|
|
141
|
-
mbedtls_entropy, NULL, 0) != 0) {
|
|
133
|
+
if (mbedtls_ctr_drbg_seed(&mbedtls_rng, mbedtls_entropy_func,
|
|
134
|
+
&mbedtls_entropy, NULL, 0) != 0) {
|
|
142
135
|
git_error_set(GIT_ERROR_SSL, "failed to initialize mbedTLS entropy pool");
|
|
143
136
|
goto cleanup;
|
|
144
137
|
}
|
|
145
138
|
|
|
146
|
-
mbedtls_ssl_conf_rng(
|
|
139
|
+
mbedtls_ssl_conf_rng(&mbedtls_config, mbedtls_ctr_drbg_random, &mbedtls_rng);
|
|
147
140
|
|
|
148
141
|
/* load default certificates */
|
|
149
142
|
if (crtpath != NULL && stat(crtpath, &statbuf) == 0 && S_ISREG(statbuf.st_mode))
|
|
150
143
|
loaded = (git_mbedtls__set_cert_location(crtpath, NULL) == 0);
|
|
144
|
+
|
|
151
145
|
if (!loaded && crtpath != NULL && stat(crtpath, &statbuf) == 0 && S_ISDIR(statbuf.st_mode))
|
|
152
146
|
loaded = (git_mbedtls__set_cert_location(NULL, crtpath) == 0);
|
|
153
147
|
|
|
148
|
+
initialized = true;
|
|
149
|
+
|
|
154
150
|
return git_runtime_shutdown_register(shutdown_ssl);
|
|
155
151
|
|
|
156
152
|
cleanup:
|
|
157
|
-
mbedtls_ctr_drbg_free(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
git__free(git__ssl_conf);
|
|
161
|
-
git__ssl_conf = NULL;
|
|
153
|
+
mbedtls_ctr_drbg_free(&mbedtls_rng);
|
|
154
|
+
mbedtls_ssl_config_free(&mbedtls_config);
|
|
155
|
+
mbedtls_entropy_free(&mbedtls_entropy);
|
|
162
156
|
|
|
163
157
|
return -1;
|
|
164
158
|
}
|
|
@@ -192,7 +186,7 @@ static int ssl_set_error(mbedtls_ssl_context *ssl, int error)
|
|
|
192
186
|
break;
|
|
193
187
|
|
|
194
188
|
case MBEDTLS_ERR_X509_CERT_VERIFY_FAILED:
|
|
195
|
-
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);
|
|
196
190
|
ret = GIT_ECERTIFICATE;
|
|
197
191
|
break;
|
|
198
192
|
|
|
@@ -374,7 +368,7 @@ static int mbedtls_stream_wrap(
|
|
|
374
368
|
st->ssl = git__malloc(sizeof(mbedtls_ssl_context));
|
|
375
369
|
GIT_ERROR_CHECK_ALLOC(st->ssl);
|
|
376
370
|
mbedtls_ssl_init(st->ssl);
|
|
377
|
-
if (mbedtls_ssl_setup(st->ssl,
|
|
371
|
+
if (mbedtls_ssl_setup(st->ssl, &mbedtls_config)) {
|
|
378
372
|
git_error_set(GIT_ERROR_SSL, "failed to create ssl object");
|
|
379
373
|
error = -1;
|
|
380
374
|
goto out_err;
|
|
@@ -441,30 +435,30 @@ int git_mbedtls__set_cert_location(const char *file, const char *path)
|
|
|
441
435
|
{
|
|
442
436
|
int ret = 0;
|
|
443
437
|
char errbuf[512];
|
|
444
|
-
mbedtls_x509_crt *cacert;
|
|
445
438
|
|
|
446
439
|
GIT_ASSERT_ARG(file || path);
|
|
447
440
|
|
|
448
|
-
|
|
449
|
-
|
|
441
|
+
if (has_ca_chain)
|
|
442
|
+
mbedtls_x509_crt_free(&mbedtls_ca_chain);
|
|
443
|
+
|
|
444
|
+
mbedtls_x509_crt_init(&mbedtls_ca_chain);
|
|
450
445
|
|
|
451
|
-
mbedtls_x509_crt_init(cacert);
|
|
452
446
|
if (file)
|
|
453
|
-
ret = mbedtls_x509_crt_parse_file(
|
|
447
|
+
ret = mbedtls_x509_crt_parse_file(&mbedtls_ca_chain, file);
|
|
448
|
+
|
|
454
449
|
if (ret >= 0 && path)
|
|
455
|
-
ret = mbedtls_x509_crt_parse_path(
|
|
450
|
+
ret = mbedtls_x509_crt_parse_path(&mbedtls_ca_chain, path);
|
|
451
|
+
|
|
456
452
|
/* mbedtls_x509_crt_parse_path returns the number of invalid certs on success */
|
|
457
453
|
if (ret < 0) {
|
|
458
|
-
mbedtls_x509_crt_free(
|
|
459
|
-
git__free(cacert);
|
|
454
|
+
mbedtls_x509_crt_free(&mbedtls_ca_chain);
|
|
460
455
|
mbedtls_strerror( ret, errbuf, 512 );
|
|
461
456
|
git_error_set(GIT_ERROR_SSL, "failed to load CA certificates: %#04x - %s", ret, errbuf);
|
|
462
457
|
return -1;
|
|
463
458
|
}
|
|
464
459
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
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;
|
|
468
462
|
|
|
469
463
|
return 0;
|
|
470
464
|
}
|
|
@@ -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);
|
|
@@ -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;
|
|
@@ -720,6 +721,30 @@ int git_openssl__set_cert_location(const char *file, const char *path)
|
|
|
720
721
|
return 0;
|
|
721
722
|
}
|
|
722
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
|
+
|
|
723
748
|
#else
|
|
724
749
|
|
|
725
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
|
|
|
@@ -13,13 +13,16 @@
|
|
|
13
13
|
#include <Security/SecureTransport.h>
|
|
14
14
|
#include <Security/SecCertificate.h>
|
|
15
15
|
|
|
16
|
+
#include "common.h"
|
|
17
|
+
#include "trace.h"
|
|
16
18
|
#include "git2/transport.h"
|
|
17
|
-
|
|
18
19
|
#include "streams/socket.h"
|
|
19
20
|
|
|
20
21
|
static int stransport_error(OSStatus ret)
|
|
21
22
|
{
|
|
22
|
-
CFStringRef
|
|
23
|
+
CFStringRef message_ref = NULL;
|
|
24
|
+
const char *message_cstr = NULL;
|
|
25
|
+
char *message_ptr = NULL;
|
|
23
26
|
|
|
24
27
|
if (ret == noErr || ret == errSSLClosedGraceful) {
|
|
25
28
|
git_error_clear();
|
|
@@ -27,14 +30,39 @@ static int stransport_error(OSStatus ret)
|
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
#if !TARGET_OS_IPHONE
|
|
30
|
-
|
|
31
|
-
GIT_ERROR_CHECK_ALLOC(
|
|
33
|
+
message_ref = SecCopyErrorMessageString(ret, NULL);
|
|
34
|
+
GIT_ERROR_CHECK_ALLOC(message_ref);
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Attempt the cheap CFString conversion; this can return NULL
|
|
38
|
+
* when that would be expensive. In that case, call the more
|
|
39
|
+
* expensive function.
|
|
40
|
+
*/
|
|
41
|
+
message_cstr = CFStringGetCStringPtr(message_ref, kCFStringEncodingUTF8);
|
|
42
|
+
|
|
43
|
+
if (!message_cstr) {
|
|
44
|
+
/* Provide buffer to convert from UTF16 to UTF8 */
|
|
45
|
+
size_t message_size = CFStringGetLength(message_ref) * 2 + 1;
|
|
46
|
+
|
|
47
|
+
message_cstr = message_ptr = git__malloc(message_size);
|
|
48
|
+
GIT_ERROR_CHECK_ALLOC(message_ptr);
|
|
49
|
+
|
|
50
|
+
if (!CFStringGetCString(message_ref, message_ptr, message_size, kCFStringEncodingUTF8)) {
|
|
51
|
+
git_error_set(GIT_ERROR_NET, "SecureTransport error: %d", (unsigned int)ret);
|
|
52
|
+
goto done;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
32
55
|
|
|
33
|
-
git_error_set(GIT_ERROR_NET, "SecureTransport error: %s",
|
|
34
|
-
|
|
56
|
+
git_error_set(GIT_ERROR_NET, "SecureTransport error: %s", message_cstr);
|
|
57
|
+
|
|
58
|
+
done:
|
|
59
|
+
git__free(message_ptr);
|
|
60
|
+
CFRelease(message_ref);
|
|
35
61
|
#else
|
|
36
62
|
git_error_set(GIT_ERROR_NET, "SecureTransport error: OSStatus %d", (unsigned int)ret);
|
|
37
|
-
GIT_UNUSED(
|
|
63
|
+
GIT_UNUSED(message_ref);
|
|
64
|
+
GIT_UNUSED(message_cstr);
|
|
65
|
+
GIT_UNUSED(message_ptr);
|
|
38
66
|
#endif
|
|
39
67
|
|
|
40
68
|
return -1;
|
|
@@ -236,6 +264,10 @@ static ssize_t stransport_read(git_stream *stream, void *data, size_t len)
|
|
|
236
264
|
OSStatus ret;
|
|
237
265
|
|
|
238
266
|
if ((ret = SSLRead(st->ctx, data, len, &processed)) != noErr) {
|
|
267
|
+
/* This specific SecureTransport error is not well described */
|
|
268
|
+
if (ret == -9806)
|
|
269
|
+
git_trace(GIT_TRACE_INFO, "SecureTraceport error during SSLRead: returned -9806 (connection closed via error)");
|
|
270
|
+
|
|
239
271
|
if (st->error == GIT_TIMEOUT)
|
|
240
272
|
return GIT_TIMEOUT;
|
|
241
273
|
|