rugged 1.0.0 → 1.2.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/LICENSE +1 -0
- data/README.md +3 -3
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_commit.c +1 -1
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +13 -3
- data/lib/rugged/commit.rb +17 -4
- data/lib/rugged/repository.rb +7 -8
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +41 -74
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
- data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/apply.h +2 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +95 -42
- data/vendor/libgit2/include/git2/blob.h +31 -3
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +33 -6
- data/vendor/libgit2/include/git2/config.h +1 -1
- data/vendor/libgit2/include/git2/deprecated.h +248 -8
- data/vendor/libgit2/include/git2/diff.h +35 -20
- data/vendor/libgit2/include/git2/errors.h +8 -7
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +4 -5
- data/vendor/libgit2/include/git2/indexer.h +2 -1
- data/vendor/libgit2/include/git2/odb.h +44 -20
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +9 -5
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/repository.h +95 -52
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/transport.h +1 -1
- data/vendor/libgit2/include/git2/tree.h +2 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +77 -44
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +21 -8
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +92 -42
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +44 -40
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +28 -15
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +46 -24
- data/vendor/libgit2/src/branch.c +87 -37
- data/vendor/libgit2/src/buffer.c +339 -27
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +3 -24
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +97 -98
- data/vendor/libgit2/src/cherrypick.c +8 -2
- data/vendor/libgit2/src/clone.c +104 -29
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +26 -2
- data/vendor/libgit2/src/config.c +40 -22
- data/vendor/libgit2/src/config_cache.c +9 -4
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_file.c +25 -8
- data/vendor/libgit2/src/config_parse.c +5 -7
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +11 -4
- data/vendor/libgit2/src/diff.c +23 -19
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +5 -7
- data/vendor/libgit2/src/diff_generate.c +56 -28
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +81 -65
- data/vendor/libgit2/src/diff_stats.c +19 -16
- data/vendor/libgit2/src/diff_tform.c +13 -13
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +26 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +7 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +209 -113
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +8 -8
- data/vendor/libgit2/src/futils.h +4 -4
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +126 -84
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +60 -36
- data/vendor/libgit2/src/integer.h +79 -2
- data/vendor/libgit2/src/iterator.c +40 -28
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +108 -46
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +15 -9
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +879 -0
- data/vendor/libgit2/src/midx.h +110 -0
- data/vendor/libgit2/src/mwindow.c +214 -95
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +133 -4
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +24 -15
- data/vendor/libgit2/src/odb.c +298 -57
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +31 -21
- data/vendor/libgit2/src/odb_mempack.c +3 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +7 -4
- data/vendor/libgit2/src/pack-objects.c +83 -69
- data/vendor/libgit2/src/pack.c +383 -150
- data/vendor/libgit2/src/pack.h +44 -9
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +3 -5
- data/vendor/libgit2/src/patch_parse.c +6 -3
- data/vendor/libgit2/src/path.c +102 -57
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +12 -11
- data/vendor/libgit2/src/pool.c +34 -22
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/posix.c +43 -12
- data/vendor/libgit2/src/posix.h +9 -0
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +95 -49
- data/vendor/libgit2/src/refdb.c +165 -13
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +144 -152
- data/vendor/libgit2/src/reflog.c +21 -20
- data/vendor/libgit2/src/refs.c +151 -231
- data/vendor/libgit2/src/refs.h +2 -20
- data/vendor/libgit2/src/refspec.c +80 -44
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +312 -121
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +351 -189
- data/vendor/libgit2/src/repository.h +23 -29
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +8 -2
- data/vendor/libgit2/src/revparse.c +19 -13
- data/vendor/libgit2/src/revwalk.c +35 -20
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +7 -3
- data/vendor/libgit2/src/status.c +9 -4
- data/vendor/libgit2/src/strarray.c +64 -0
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +113 -207
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +10 -9
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +134 -66
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +8 -26
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +49 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +21 -9
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +17 -7
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +84 -42
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +5 -5
- data/vendor/libgit2/src/transports/smart.c +14 -9
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +156 -88
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/posix.h +16 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +74 -183
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +23 -25
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +77 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +37 -15
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +56 -38
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -361
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -246
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
|
@@ -6,12 +6,16 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
#include "streams/openssl.h"
|
|
9
|
+
#include "streams/openssl_legacy.h"
|
|
10
|
+
#include "streams/openssl_dynamic.h"
|
|
9
11
|
|
|
10
12
|
#ifdef GIT_OPENSSL
|
|
11
13
|
|
|
12
14
|
#include <ctype.h>
|
|
13
15
|
|
|
14
|
-
#include "
|
|
16
|
+
#include "common.h"
|
|
17
|
+
#include "runtime.h"
|
|
18
|
+
#include "settings.h"
|
|
15
19
|
#include "posix.h"
|
|
16
20
|
#include "stream.h"
|
|
17
21
|
#include "streams/socket.h"
|
|
@@ -25,156 +29,17 @@
|
|
|
25
29
|
# include <netinet/in.h>
|
|
26
30
|
#endif
|
|
27
31
|
|
|
28
|
-
#
|
|
29
|
-
#include <openssl/
|
|
30
|
-
#include <openssl/
|
|
31
|
-
#include <openssl/
|
|
32
|
+
#ifndef GIT_OPENSSL_DYNAMIC
|
|
33
|
+
# include <openssl/ssl.h>
|
|
34
|
+
# include <openssl/err.h>
|
|
35
|
+
# include <openssl/x509v3.h>
|
|
36
|
+
# include <openssl/bio.h>
|
|
37
|
+
#endif
|
|
32
38
|
|
|
33
39
|
SSL_CTX *git__ssl_ctx;
|
|
34
40
|
|
|
35
41
|
#define GIT_SSL_DEFAULT_CIPHERS "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA256:DHE-DSS-AES128-SHA:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA"
|
|
36
42
|
|
|
37
|
-
#if (defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10100000L) || \
|
|
38
|
-
(defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L)
|
|
39
|
-
# define OPENSSL_LEGACY_API
|
|
40
|
-
#endif
|
|
41
|
-
|
|
42
|
-
/*
|
|
43
|
-
* OpenSSL 1.1 made BIO opaque so we have to use functions to interact with it
|
|
44
|
-
* which do not exist in previous versions. We define these inline functions so
|
|
45
|
-
* we can program against the interface instead of littering the implementation
|
|
46
|
-
* with ifdefs. We do the same for OPENSSL_init_ssl.
|
|
47
|
-
*/
|
|
48
|
-
#if defined(OPENSSL_LEGACY_API)
|
|
49
|
-
static int OPENSSL_init_ssl(int opts, void *settings)
|
|
50
|
-
{
|
|
51
|
-
GIT_UNUSED(opts);
|
|
52
|
-
GIT_UNUSED(settings);
|
|
53
|
-
SSL_load_error_strings();
|
|
54
|
-
OpenSSL_add_ssl_algorithms();
|
|
55
|
-
return 0;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
static BIO_METHOD* BIO_meth_new(int type, const char *name)
|
|
59
|
-
{
|
|
60
|
-
BIO_METHOD *meth = git__calloc(1, sizeof(BIO_METHOD));
|
|
61
|
-
if (!meth) {
|
|
62
|
-
return NULL;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
meth->type = type;
|
|
66
|
-
meth->name = name;
|
|
67
|
-
|
|
68
|
-
return meth;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
static void BIO_meth_free(BIO_METHOD *biom)
|
|
72
|
-
{
|
|
73
|
-
git__free(biom);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
static int BIO_meth_set_write(BIO_METHOD *biom, int (*write) (BIO *, const char *, int))
|
|
77
|
-
{
|
|
78
|
-
biom->bwrite = write;
|
|
79
|
-
return 1;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
static int BIO_meth_set_read(BIO_METHOD *biom, int (*read) (BIO *, char *, int))
|
|
83
|
-
{
|
|
84
|
-
biom->bread = read;
|
|
85
|
-
return 1;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
static int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts) (BIO *, const char *))
|
|
89
|
-
{
|
|
90
|
-
biom->bputs = puts;
|
|
91
|
-
return 1;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
static int BIO_meth_set_gets(BIO_METHOD *biom, int (*gets) (BIO *, char *, int))
|
|
95
|
-
|
|
96
|
-
{
|
|
97
|
-
biom->bgets = gets;
|
|
98
|
-
return 1;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
static int BIO_meth_set_ctrl(BIO_METHOD *biom, long (*ctrl) (BIO *, int, long, void *))
|
|
102
|
-
{
|
|
103
|
-
biom->ctrl = ctrl;
|
|
104
|
-
return 1;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
static int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *))
|
|
108
|
-
{
|
|
109
|
-
biom->create = create;
|
|
110
|
-
return 1;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
static int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *))
|
|
114
|
-
{
|
|
115
|
-
biom->destroy = destroy;
|
|
116
|
-
return 1;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
static int BIO_get_new_index(void)
|
|
120
|
-
{
|
|
121
|
-
/* This exists as of 1.1 so before we'd just have 0 */
|
|
122
|
-
return 0;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
static void BIO_set_init(BIO *b, int init)
|
|
126
|
-
{
|
|
127
|
-
b->init = init;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
static void BIO_set_data(BIO *a, void *ptr)
|
|
131
|
-
{
|
|
132
|
-
a->ptr = ptr;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
static void *BIO_get_data(BIO *a)
|
|
136
|
-
{
|
|
137
|
-
return a->ptr;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
static const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x)
|
|
141
|
-
{
|
|
142
|
-
return ASN1_STRING_data((ASN1_STRING *)x);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
# if defined(GIT_THREADS)
|
|
146
|
-
static git_mutex *openssl_locks;
|
|
147
|
-
|
|
148
|
-
static void openssl_locking_function(
|
|
149
|
-
int mode, int n, const char *file, int line)
|
|
150
|
-
{
|
|
151
|
-
int lock;
|
|
152
|
-
|
|
153
|
-
GIT_UNUSED(file);
|
|
154
|
-
GIT_UNUSED(line);
|
|
155
|
-
|
|
156
|
-
lock = mode & CRYPTO_LOCK;
|
|
157
|
-
|
|
158
|
-
if (lock) {
|
|
159
|
-
(void)git_mutex_lock(&openssl_locks[n]);
|
|
160
|
-
} else {
|
|
161
|
-
git_mutex_unlock(&openssl_locks[n]);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
static void shutdown_ssl_locking(void)
|
|
166
|
-
{
|
|
167
|
-
int num_locks, i;
|
|
168
|
-
|
|
169
|
-
num_locks = CRYPTO_num_locks();
|
|
170
|
-
CRYPTO_set_locking_callback(NULL);
|
|
171
|
-
|
|
172
|
-
for (i = 0; i < num_locks; ++i)
|
|
173
|
-
git_mutex_free(&openssl_locks[i]);
|
|
174
|
-
git__free(openssl_locks);
|
|
175
|
-
}
|
|
176
|
-
# endif /* GIT_THREADS */
|
|
177
|
-
#endif /* OPENSSL_LEGACY_API */
|
|
178
43
|
|
|
179
44
|
static BIO_METHOD *git_stream_bio_method;
|
|
180
45
|
static int init_bio_method(void);
|
|
@@ -197,46 +62,47 @@ static void shutdown_ssl(void)
|
|
|
197
62
|
}
|
|
198
63
|
|
|
199
64
|
#ifdef VALGRIND
|
|
200
|
-
#
|
|
201
|
-
static void *git_openssl_malloc(size_t bytes)
|
|
202
|
-
{
|
|
203
|
-
return git__calloc(1, bytes);
|
|
204
|
-
}
|
|
65
|
+
# if !defined(GIT_OPENSSL_LEGACY) && !defined(GIT_OPENSSL_DYNAMIC)
|
|
205
66
|
|
|
206
|
-
static void *git_openssl_realloc(void *mem, size_t size)
|
|
207
|
-
{
|
|
208
|
-
return git__realloc(mem, size);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
static void git_openssl_free(void *mem)
|
|
212
|
-
{
|
|
213
|
-
return git__free(mem);
|
|
214
|
-
}
|
|
215
|
-
#else
|
|
216
67
|
static void *git_openssl_malloc(size_t bytes, const char *file, int line)
|
|
217
68
|
{
|
|
218
69
|
GIT_UNUSED(file);
|
|
219
70
|
GIT_UNUSED(line);
|
|
220
71
|
return git__calloc(1, bytes);
|
|
221
72
|
}
|
|
222
|
-
|
|
73
|
+
|
|
223
74
|
static void *git_openssl_realloc(void *mem, size_t size, const char *file, int line)
|
|
224
75
|
{
|
|
225
76
|
GIT_UNUSED(file);
|
|
226
77
|
GIT_UNUSED(line);
|
|
227
78
|
return git__realloc(mem, size);
|
|
228
79
|
}
|
|
229
|
-
|
|
80
|
+
|
|
230
81
|
static void git_openssl_free(void *mem, const char *file, int line)
|
|
231
82
|
{
|
|
232
83
|
GIT_UNUSED(file);
|
|
233
84
|
GIT_UNUSED(line);
|
|
234
|
-
|
|
85
|
+
git__free(mem);
|
|
86
|
+
}
|
|
87
|
+
# else /* !GIT_OPENSSL_LEGACY && !GIT_OPENSSL_DYNAMIC */
|
|
88
|
+
static void *git_openssl_malloc(size_t bytes)
|
|
89
|
+
{
|
|
90
|
+
return git__calloc(1, bytes);
|
|
235
91
|
}
|
|
236
|
-
#endif
|
|
237
|
-
#endif
|
|
238
92
|
|
|
239
|
-
|
|
93
|
+
static void *git_openssl_realloc(void *mem, size_t size)
|
|
94
|
+
{
|
|
95
|
+
return git__realloc(mem, size);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static void git_openssl_free(void *mem)
|
|
99
|
+
{
|
|
100
|
+
git__free(mem);
|
|
101
|
+
}
|
|
102
|
+
# endif /* !GIT_OPENSSL_LEGACY && !GIT_OPENSSL_DYNAMIC */
|
|
103
|
+
#endif /* VALGRIND */
|
|
104
|
+
|
|
105
|
+
static int openssl_init(void)
|
|
240
106
|
{
|
|
241
107
|
long ssl_opts = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
|
|
242
108
|
const char *ciphers = git_libgit2__ssl_ciphers();
|
|
@@ -250,13 +116,18 @@ int git_openssl_stream_global_init(void)
|
|
|
250
116
|
#endif
|
|
251
117
|
|
|
252
118
|
#ifdef VALGRIND
|
|
253
|
-
/*
|
|
254
|
-
|
|
119
|
+
/*
|
|
120
|
+
* Swap in our own allocator functions that initialize
|
|
121
|
+
* allocated memory to avoid spurious valgrind warnings.
|
|
122
|
+
* Don't error on failure; many builds of OpenSSL do not
|
|
123
|
+
* allow you to set these functions.
|
|
124
|
+
*/
|
|
125
|
+
if (!allocators_initialized) {
|
|
255
126
|
CRYPTO_set_mem_functions(git_openssl_malloc,
|
|
256
127
|
git_openssl_realloc,
|
|
257
|
-
git_openssl_free)
|
|
258
|
-
|
|
259
|
-
|
|
128
|
+
git_openssl_free);
|
|
129
|
+
allocators_initialized = true;
|
|
130
|
+
}
|
|
260
131
|
#endif
|
|
261
132
|
|
|
262
133
|
OPENSSL_init_ssl(0, NULL);
|
|
@@ -285,9 +156,7 @@ int git_openssl_stream_global_init(void)
|
|
|
285
156
|
if (init_bio_method() < 0)
|
|
286
157
|
goto error;
|
|
287
158
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
return 0;
|
|
159
|
+
return git_runtime_shutdown_register(shutdown_ssl);
|
|
291
160
|
|
|
292
161
|
error:
|
|
293
162
|
git_error_set(GIT_ERROR_NET, "could not initialize openssl: %s",
|
|
@@ -297,42 +166,60 @@ error:
|
|
|
297
166
|
return -1;
|
|
298
167
|
}
|
|
299
168
|
|
|
300
|
-
|
|
301
|
-
|
|
169
|
+
/*
|
|
170
|
+
* When we use dynamic loading, we defer OpenSSL initialization until
|
|
171
|
+
* it's first used. `openssl_ensure_initialized` will do the work
|
|
172
|
+
* under a mutex.
|
|
173
|
+
*/
|
|
174
|
+
git_mutex openssl_mutex;
|
|
175
|
+
bool openssl_initialized;
|
|
176
|
+
|
|
177
|
+
int git_openssl_stream_global_init(void)
|
|
302
178
|
{
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
179
|
+
#ifndef GIT_OPENSSL_DYNAMIC
|
|
180
|
+
return openssl_init();
|
|
181
|
+
#else
|
|
182
|
+
if (git_mutex_init(&openssl_mutex) != 0)
|
|
183
|
+
return -1;
|
|
184
|
+
|
|
185
|
+
return 0;
|
|
306
186
|
#endif
|
|
187
|
+
}
|
|
307
188
|
|
|
308
|
-
int
|
|
189
|
+
static int openssl_ensure_initialized(void)
|
|
309
190
|
{
|
|
310
|
-
#
|
|
311
|
-
int
|
|
191
|
+
#ifdef GIT_OPENSSL_DYNAMIC
|
|
192
|
+
int error = 0;
|
|
312
193
|
|
|
313
|
-
|
|
194
|
+
if (git_mutex_lock(&openssl_mutex) != 0)
|
|
195
|
+
return -1;
|
|
314
196
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
197
|
+
if (!openssl_initialized) {
|
|
198
|
+
if ((error = git_openssl_stream_dynamic_init()) == 0)
|
|
199
|
+
error = openssl_init();
|
|
318
200
|
|
|
319
|
-
|
|
320
|
-
if (git_mutex_init(&openssl_locks[i]) != 0) {
|
|
321
|
-
git_error_set(GIT_ERROR_SSL, "failed to initialize openssl locks");
|
|
322
|
-
return -1;
|
|
323
|
-
}
|
|
201
|
+
openssl_initialized = true;
|
|
324
202
|
}
|
|
325
203
|
|
|
326
|
-
|
|
327
|
-
|
|
204
|
+
error |= git_mutex_unlock(&openssl_mutex);
|
|
205
|
+
return error;
|
|
206
|
+
|
|
207
|
+
#else
|
|
328
208
|
return 0;
|
|
329
|
-
#
|
|
209
|
+
#endif
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
#if !defined(GIT_OPENSSL_LEGACY) && !defined(GIT_OPENSSL_DYNAMIC)
|
|
213
|
+
int git_openssl_set_locking(void)
|
|
214
|
+
{
|
|
215
|
+
# ifdef GIT_THREADS
|
|
330
216
|
return 0;
|
|
331
|
-
#else
|
|
217
|
+
# else
|
|
332
218
|
git_error_set(GIT_ERROR_THREAD, "libgit2 was not built with threads");
|
|
333
219
|
return -1;
|
|
334
|
-
#endif
|
|
220
|
+
# endif
|
|
335
221
|
}
|
|
222
|
+
#endif
|
|
336
223
|
|
|
337
224
|
|
|
338
225
|
static int bio_create(BIO *b)
|
|
@@ -415,8 +302,8 @@ static int ssl_set_error(SSL *ssl, int error)
|
|
|
415
302
|
|
|
416
303
|
err = SSL_get_error(ssl, error);
|
|
417
304
|
|
|
418
|
-
|
|
419
|
-
|
|
305
|
+
GIT_ASSERT(err != SSL_ERROR_WANT_READ);
|
|
306
|
+
GIT_ASSERT(err != SSL_ERROR_WANT_WRITE);
|
|
420
307
|
|
|
421
308
|
switch (err) {
|
|
422
309
|
case SSL_ERROR_WANT_CONNECT:
|
|
@@ -655,15 +542,16 @@ static int openssl_connect(git_stream *stream)
|
|
|
655
542
|
static int openssl_certificate(git_cert **out, git_stream *stream)
|
|
656
543
|
{
|
|
657
544
|
openssl_stream *st = (openssl_stream *) stream;
|
|
658
|
-
int len;
|
|
659
545
|
X509 *cert = SSL_get_peer_certificate(st->ssl);
|
|
660
|
-
unsigned char *guard, *encoded_cert;
|
|
546
|
+
unsigned char *guard, *encoded_cert = NULL;
|
|
547
|
+
int error, len;
|
|
661
548
|
|
|
662
549
|
/* Retrieve the length of the certificate first */
|
|
663
550
|
len = i2d_X509(cert, NULL);
|
|
664
551
|
if (len < 0) {
|
|
665
552
|
git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
|
|
666
|
-
|
|
553
|
+
error = -1;
|
|
554
|
+
goto out;
|
|
667
555
|
}
|
|
668
556
|
|
|
669
557
|
encoded_cert = git__malloc(len);
|
|
@@ -673,18 +561,23 @@ static int openssl_certificate(git_cert **out, git_stream *stream)
|
|
|
673
561
|
|
|
674
562
|
len = i2d_X509(cert, &guard);
|
|
675
563
|
if (len < 0) {
|
|
676
|
-
git__free(encoded_cert);
|
|
677
564
|
git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
|
|
678
|
-
|
|
565
|
+
error = -1;
|
|
566
|
+
goto out;
|
|
679
567
|
}
|
|
680
568
|
|
|
681
569
|
st->cert_info.parent.cert_type = GIT_CERT_X509;
|
|
682
570
|
st->cert_info.data = encoded_cert;
|
|
683
571
|
st->cert_info.len = len;
|
|
572
|
+
encoded_cert = NULL;
|
|
684
573
|
|
|
685
574
|
*out = &st->cert_info.parent;
|
|
575
|
+
error = 0;
|
|
686
576
|
|
|
687
|
-
|
|
577
|
+
out:
|
|
578
|
+
git__free(encoded_cert);
|
|
579
|
+
X509_free(cert);
|
|
580
|
+
return error;
|
|
688
581
|
}
|
|
689
582
|
|
|
690
583
|
static int openssl_set_proxy(git_stream *stream, const git_proxy_options *proxy_opts)
|
|
@@ -752,7 +645,9 @@ static int openssl_stream_wrap(
|
|
|
752
645
|
{
|
|
753
646
|
openssl_stream *st;
|
|
754
647
|
|
|
755
|
-
|
|
648
|
+
GIT_ASSERT_ARG(out);
|
|
649
|
+
GIT_ASSERT_ARG(in);
|
|
650
|
+
GIT_ASSERT_ARG(host);
|
|
756
651
|
|
|
757
652
|
st = git__calloc(1, sizeof(openssl_stream));
|
|
758
653
|
GIT_ERROR_CHECK_ALLOC(st);
|
|
@@ -787,6 +682,9 @@ static int openssl_stream_wrap(
|
|
|
787
682
|
|
|
788
683
|
int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host)
|
|
789
684
|
{
|
|
685
|
+
if (openssl_ensure_initialized() < 0)
|
|
686
|
+
return -1;
|
|
687
|
+
|
|
790
688
|
return openssl_stream_wrap(out, in, host, 0);
|
|
791
689
|
}
|
|
792
690
|
|
|
@@ -795,7 +693,12 @@ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
|
|
|
795
693
|
git_stream *stream = NULL;
|
|
796
694
|
int error;
|
|
797
695
|
|
|
798
|
-
|
|
696
|
+
GIT_ASSERT_ARG(out);
|
|
697
|
+
GIT_ASSERT_ARG(host);
|
|
698
|
+
GIT_ASSERT_ARG(port);
|
|
699
|
+
|
|
700
|
+
if (openssl_ensure_initialized() < 0)
|
|
701
|
+
return -1;
|
|
799
702
|
|
|
800
703
|
if ((error = git_socket_stream_new(&stream, host, port)) < 0)
|
|
801
704
|
return error;
|
|
@@ -810,6 +713,9 @@ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
|
|
|
810
713
|
|
|
811
714
|
int git_openssl__set_cert_location(const char *file, const char *path)
|
|
812
715
|
{
|
|
716
|
+
if (openssl_ensure_initialized() < 0)
|
|
717
|
+
return -1;
|
|
718
|
+
|
|
813
719
|
if (SSL_CTX_load_verify_locations(git__ssl_ctx, file, path) == 0) {
|
|
814
720
|
char errmsg[256];
|
|
815
721
|
|