rugged 0.27.7 → 0.27.10
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 +99 -51
- data/vendor/libgit2/COPYING +28 -0
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
- data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
- data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
- data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
- data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
- data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
- data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
- data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
- data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
- data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
- data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
- data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
- data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
- data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
- data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
- data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
- data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
- data/vendor/libgit2/deps/pcre/COPYING +5 -0
- data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
- data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
- data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
- data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
- data/vendor/libgit2/deps/pcre/config.h.in +57 -0
- data/vendor/libgit2/deps/pcre/pcre.h +641 -0
- data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
- data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
- data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
- data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
- data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
- data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
- data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
- data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
- data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
- data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
- data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
- data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
- data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
- data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
- data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
- data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
- data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
- data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
- data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
- data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
- data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
- data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
- data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
- data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
- data/vendor/libgit2/deps/pcre/ucp.h +224 -0
- data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
- data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/zlib/COPYING +27 -0
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +0 -7
- data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
- data/vendor/libgit2/include/git2/apply.h +149 -0
- data/vendor/libgit2/include/git2/attr.h +20 -13
- data/vendor/libgit2/include/git2/blame.h +4 -4
- data/vendor/libgit2/include/git2/blob.h +44 -12
- data/vendor/libgit2/include/git2/buffer.h +20 -26
- data/vendor/libgit2/include/git2/cert.h +135 -0
- data/vendor/libgit2/include/git2/checkout.h +53 -21
- data/vendor/libgit2/include/git2/cherrypick.h +3 -3
- data/vendor/libgit2/include/git2/clone.h +5 -5
- data/vendor/libgit2/include/git2/commit.h +25 -3
- data/vendor/libgit2/include/git2/common.h +35 -10
- data/vendor/libgit2/include/git2/config.h +29 -19
- data/vendor/libgit2/include/git2/cred.h +308 -0
- data/vendor/libgit2/include/git2/deprecated.h +493 -0
- data/vendor/libgit2/include/git2/describe.h +4 -4
- data/vendor/libgit2/include/git2/diff.h +177 -135
- data/vendor/libgit2/include/git2/errors.h +53 -46
- data/vendor/libgit2/include/git2/filter.h +8 -0
- data/vendor/libgit2/include/git2/index.h +74 -52
- data/vendor/libgit2/include/git2/indexer.h +76 -6
- data/vendor/libgit2/include/git2/merge.h +25 -10
- data/vendor/libgit2/include/git2/net.h +0 -5
- data/vendor/libgit2/include/git2/notes.h +1 -1
- data/vendor/libgit2/include/git2/object.h +17 -29
- data/vendor/libgit2/include/git2/odb.h +12 -11
- data/vendor/libgit2/include/git2/odb_backend.h +10 -9
- data/vendor/libgit2/include/git2/oid.h +2 -2
- data/vendor/libgit2/include/git2/pack.h +14 -3
- data/vendor/libgit2/include/git2/proxy.h +5 -3
- data/vendor/libgit2/include/git2/rebase.h +46 -2
- data/vendor/libgit2/include/git2/refs.h +34 -16
- data/vendor/libgit2/include/git2/remote.h +111 -14
- data/vendor/libgit2/include/git2/repository.h +69 -34
- data/vendor/libgit2/include/git2/revert.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +7 -7
- data/vendor/libgit2/include/git2/signature.h +2 -2
- data/vendor/libgit2/include/git2/stash.h +5 -5
- data/vendor/libgit2/include/git2/status.h +26 -17
- data/vendor/libgit2/include/git2/submodule.h +23 -6
- data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
- data/vendor/libgit2/include/git2/sys/commit.h +1 -1
- data/vendor/libgit2/include/git2/sys/config.h +13 -13
- data/vendor/libgit2/include/git2/sys/cred.h +90 -0
- data/vendor/libgit2/include/git2/sys/filter.h +6 -6
- data/vendor/libgit2/include/git2/sys/merge.h +3 -3
- data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
- data/vendor/libgit2/include/git2/sys/path.h +14 -5
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
- data/vendor/libgit2/include/git2/sys/repository.h +5 -1
- data/vendor/libgit2/include/git2/sys/stream.h +92 -12
- data/vendor/libgit2/include/git2/sys/transport.h +129 -83
- data/vendor/libgit2/include/git2/tag.h +13 -4
- data/vendor/libgit2/include/git2/trace.h +2 -2
- data/vendor/libgit2/include/git2/transport.h +11 -311
- data/vendor/libgit2/include/git2/tree.h +4 -4
- data/vendor/libgit2/include/git2/types.h +25 -106
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +5 -5
- data/vendor/libgit2/include/git2.h +4 -0
- data/vendor/libgit2/src/CMakeLists.txt +104 -235
- data/vendor/libgit2/src/alloc.c +14 -18
- data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
- data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
- data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
- data/vendor/libgit2/src/annotated_commit.c +18 -11
- data/vendor/libgit2/src/apply.c +535 -28
- data/vendor/libgit2/src/apply.h +3 -1
- data/vendor/libgit2/src/array.h +2 -2
- data/vendor/libgit2/src/attr.c +77 -71
- data/vendor/libgit2/src/attr_file.c +203 -117
- data/vendor/libgit2/src/attr_file.h +9 -9
- data/vendor/libgit2/src/attrcache.c +49 -51
- data/vendor/libgit2/src/attrcache.h +2 -1
- data/vendor/libgit2/src/blame.c +38 -18
- data/vendor/libgit2/src/blame.h +1 -1
- data/vendor/libgit2/src/blame_git.c +29 -15
- data/vendor/libgit2/src/blob.c +123 -37
- data/vendor/libgit2/src/blob.h +19 -2
- data/vendor/libgit2/src/branch.c +47 -23
- data/vendor/libgit2/src/buf_text.c +7 -6
- data/vendor/libgit2/src/buffer.c +60 -53
- data/vendor/libgit2/src/cache.c +38 -45
- data/vendor/libgit2/src/cache.h +3 -3
- data/vendor/libgit2/src/cc-compat.h +20 -3
- data/vendor/libgit2/src/checkout.c +77 -67
- data/vendor/libgit2/src/cherrypick.c +12 -6
- data/vendor/libgit2/src/clone.c +36 -14
- data/vendor/libgit2/src/clone.h +4 -0
- data/vendor/libgit2/src/commit.c +103 -48
- data/vendor/libgit2/src/commit.h +7 -0
- data/vendor/libgit2/src/commit_list.c +36 -78
- data/vendor/libgit2/src/commit_list.h +2 -2
- data/vendor/libgit2/src/common.h +24 -90
- data/vendor/libgit2/src/config.c +203 -176
- data/vendor/libgit2/src/config.h +8 -20
- data/vendor/libgit2/src/config_backend.h +96 -0
- data/vendor/libgit2/src/config_cache.c +41 -35
- data/vendor/libgit2/src/config_entries.c +229 -0
- data/vendor/libgit2/src/config_entries.h +24 -0
- data/vendor/libgit2/src/config_file.c +422 -680
- data/vendor/libgit2/src/config_mem.c +220 -0
- data/vendor/libgit2/src/config_parse.c +96 -68
- data/vendor/libgit2/src/config_parse.h +15 -14
- data/vendor/libgit2/src/config_snapshot.c +206 -0
- data/vendor/libgit2/src/crlf.c +219 -196
- data/vendor/libgit2/src/delta.c +25 -18
- data/vendor/libgit2/src/describe.c +42 -41
- data/vendor/libgit2/src/diff.c +52 -67
- data/vendor/libgit2/src/diff.h +2 -1
- data/vendor/libgit2/src/diff_driver.c +44 -46
- data/vendor/libgit2/src/diff_file.c +16 -14
- data/vendor/libgit2/src/diff_file.h +1 -1
- data/vendor/libgit2/src/diff_generate.c +158 -103
- data/vendor/libgit2/src/diff_generate.h +3 -3
- data/vendor/libgit2/src/diff_parse.c +4 -4
- data/vendor/libgit2/src/diff_print.c +34 -22
- data/vendor/libgit2/src/diff_stats.c +22 -7
- data/vendor/libgit2/src/diff_tform.c +18 -16
- data/vendor/libgit2/src/diff_xdiff.c +3 -3
- data/vendor/libgit2/src/errors.c +51 -39
- data/vendor/libgit2/src/errors.h +81 -0
- data/vendor/libgit2/src/features.h.in +9 -3
- data/vendor/libgit2/src/fetch.c +8 -3
- data/vendor/libgit2/src/fetchhead.c +12 -12
- data/vendor/libgit2/src/filebuf.c +28 -32
- data/vendor/libgit2/src/filebuf.h +2 -2
- data/vendor/libgit2/src/filter.c +47 -33
- data/vendor/libgit2/src/filter.h +0 -10
- data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
- data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
- data/vendor/libgit2/src/global.c +35 -55
- data/vendor/libgit2/src/global.h +0 -2
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
- data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
- data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
- data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
- data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
- data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
- data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
- data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
- data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
- data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
- data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
- data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
- data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
- data/vendor/libgit2/src/hash/sha1.h +38 -0
- data/vendor/libgit2/src/hash.c +61 -0
- data/vendor/libgit2/src/hash.h +20 -21
- data/vendor/libgit2/src/hashsig.c +5 -5
- data/vendor/libgit2/src/idxmap.c +107 -61
- data/vendor/libgit2/src/idxmap.h +153 -31
- data/vendor/libgit2/src/ignore.c +38 -42
- data/vendor/libgit2/src/index.c +264 -199
- data/vendor/libgit2/src/index.h +7 -1
- data/vendor/libgit2/src/indexer.c +338 -167
- data/vendor/libgit2/src/integer.h +71 -26
- data/vendor/libgit2/src/iterator.c +134 -62
- data/vendor/libgit2/src/iterator.h +15 -0
- data/vendor/libgit2/src/mailmap.c +8 -8
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +137 -93
- data/vendor/libgit2/src/merge_driver.c +11 -11
- data/vendor/libgit2/src/merge_file.c +2 -2
- data/vendor/libgit2/src/mwindow.c +24 -29
- data/vendor/libgit2/src/mwindow.h +4 -4
- data/vendor/libgit2/src/net.c +184 -0
- data/vendor/libgit2/src/net.h +36 -0
- data/vendor/libgit2/src/netops.c +55 -156
- data/vendor/libgit2/src/netops.h +3 -23
- data/vendor/libgit2/src/notes.c +14 -9
- data/vendor/libgit2/src/object.c +120 -69
- data/vendor/libgit2/src/object.h +22 -9
- data/vendor/libgit2/src/object_api.c +8 -8
- data/vendor/libgit2/src/odb.c +111 -88
- data/vendor/libgit2/src/odb.h +8 -7
- data/vendor/libgit2/src/odb_loose.c +58 -47
- data/vendor/libgit2/src/odb_mempack.c +21 -34
- data/vendor/libgit2/src/odb_pack.c +17 -13
- data/vendor/libgit2/src/offmap.c +53 -35
- data/vendor/libgit2/src/offmap.h +108 -21
- data/vendor/libgit2/src/oid.c +12 -7
- data/vendor/libgit2/src/oidmap.c +49 -47
- data/vendor/libgit2/src/oidmap.h +101 -24
- data/vendor/libgit2/src/pack-objects.c +87 -86
- data/vendor/libgit2/src/pack-objects.h +2 -8
- data/vendor/libgit2/src/pack.c +94 -96
- data/vendor/libgit2/src/pack.h +16 -18
- data/vendor/libgit2/src/parse.c +17 -4
- data/vendor/libgit2/src/parse.h +3 -3
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch_generate.c +18 -18
- data/vendor/libgit2/src/patch_parse.c +147 -79
- data/vendor/libgit2/src/path.c +207 -62
- data/vendor/libgit2/src/path.h +14 -0
- data/vendor/libgit2/src/pathspec.c +18 -18
- data/vendor/libgit2/src/pool.c +26 -22
- data/vendor/libgit2/src/pool.h +7 -7
- data/vendor/libgit2/src/posix.c +10 -10
- data/vendor/libgit2/src/posix.h +12 -1
- data/vendor/libgit2/src/proxy.c +8 -3
- data/vendor/libgit2/src/push.c +35 -29
- data/vendor/libgit2/src/push.h +2 -1
- data/vendor/libgit2/src/reader.c +265 -0
- data/vendor/libgit2/src/reader.h +107 -0
- data/vendor/libgit2/src/rebase.c +97 -38
- data/vendor/libgit2/src/refdb.c +15 -3
- data/vendor/libgit2/src/refdb_fs.c +318 -222
- data/vendor/libgit2/src/reflog.c +13 -15
- data/vendor/libgit2/src/refs.c +122 -89
- data/vendor/libgit2/src/refs.h +5 -3
- data/vendor/libgit2/src/refspec.c +27 -33
- data/vendor/libgit2/src/regexp.c +221 -0
- data/vendor/libgit2/src/regexp.h +97 -0
- data/vendor/libgit2/src/remote.c +229 -178
- data/vendor/libgit2/src/remote.h +11 -2
- data/vendor/libgit2/src/repository.c +227 -172
- data/vendor/libgit2/src/repository.h +52 -40
- data/vendor/libgit2/src/reset.c +7 -7
- data/vendor/libgit2/src/revert.c +11 -6
- data/vendor/libgit2/src/revparse.c +46 -46
- data/vendor/libgit2/src/revwalk.c +89 -54
- data/vendor/libgit2/src/revwalk.h +20 -0
- data/vendor/libgit2/src/settings.c +22 -9
- data/vendor/libgit2/src/signature.c +15 -13
- data/vendor/libgit2/src/sortedcache.c +22 -36
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +56 -76
- data/vendor/libgit2/src/status.c +27 -21
- data/vendor/libgit2/src/stream.h +17 -2
- data/vendor/libgit2/src/streams/mbedtls.c +100 -80
- data/vendor/libgit2/src/streams/mbedtls.h +5 -2
- data/vendor/libgit2/src/streams/openssl.c +93 -81
- data/vendor/libgit2/src/streams/openssl.h +5 -2
- data/vendor/libgit2/src/streams/registry.c +118 -0
- data/vendor/libgit2/src/streams/registry.h +19 -0
- data/vendor/libgit2/src/streams/socket.c +55 -30
- data/vendor/libgit2/src/streams/stransport.c +57 -32
- data/vendor/libgit2/src/streams/stransport.h +5 -0
- data/vendor/libgit2/src/streams/tls.c +48 -20
- data/vendor/libgit2/src/streams/tls.h +12 -4
- data/vendor/libgit2/src/strmap.c +47 -74
- data/vendor/libgit2/src/strmap.h +108 -33
- data/vendor/libgit2/src/submodule.c +190 -169
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +25 -15
- data/vendor/libgit2/src/tag.c +39 -26
- data/vendor/libgit2/src/tag.h +2 -1
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +2 -2
- data/vendor/libgit2/src/trailer.c +46 -32
- data/vendor/libgit2/src/transaction.c +30 -29
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +14 -10
- data/vendor/libgit2/src/transports/auth.h +10 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
- data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
- data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
- data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
- data/vendor/libgit2/src/transports/cred.c +24 -24
- data/vendor/libgit2/src/transports/git.c +25 -30
- data/vendor/libgit2/src/transports/http.c +871 -335
- data/vendor/libgit2/src/transports/http.h +2 -0
- data/vendor/libgit2/src/transports/local.c +28 -28
- data/vendor/libgit2/src/transports/smart.c +64 -46
- data/vendor/libgit2/src/transports/smart.h +5 -6
- data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
- data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
- data/vendor/libgit2/src/transports/ssh.c +76 -65
- data/vendor/libgit2/src/transports/winhttp.c +328 -319
- data/vendor/libgit2/src/tree-cache.c +21 -14
- data/vendor/libgit2/src/tree.c +119 -112
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/unix/map.c +3 -3
- data/vendor/libgit2/src/unix/posix.h +1 -11
- data/vendor/libgit2/src/userdiff.h +3 -1
- data/vendor/libgit2/src/util.c +154 -93
- data/vendor/libgit2/src/util.h +19 -23
- data/vendor/libgit2/src/vector.c +15 -10
- data/vendor/libgit2/src/wildmatch.c +320 -0
- data/vendor/libgit2/src/wildmatch.h +23 -0
- data/vendor/libgit2/src/win32/dir.c +3 -3
- data/vendor/libgit2/src/win32/findfile.c +1 -1
- data/vendor/libgit2/src/win32/map.c +9 -11
- data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
- data/vendor/libgit2/src/win32/path_w32.c +113 -9
- data/vendor/libgit2/src/win32/path_w32.h +18 -29
- data/vendor/libgit2/src/win32/posix.h +1 -4
- data/vendor/libgit2/src/win32/posix_w32.c +69 -44
- data/vendor/libgit2/src/win32/precompiled.h +0 -2
- data/vendor/libgit2/src/win32/thread.c +5 -10
- data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
- data/vendor/libgit2/src/win32/w32_common.h +39 -0
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
- data/vendor/libgit2/src/win32/w32_stack.c +6 -11
- data/vendor/libgit2/src/win32/w32_stack.h +3 -3
- data/vendor/libgit2/src/win32/w32_util.c +27 -64
- data/vendor/libgit2/src/win32/w32_util.h +5 -49
- data/vendor/libgit2/src/worktree.c +44 -30
- data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
- data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
- data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
- data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
- data/vendor/libgit2/src/zstream.c +4 -4
- metadata +115 -38
- data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
- data/vendor/libgit2/deps/regex/config.h +0 -7
- data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
- data/vendor/libgit2/deps/regex/regex.c +0 -92
- data/vendor/libgit2/deps/regex/regex.h +0 -582
- data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
- data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
- data/vendor/libgit2/deps/regex/regexec.c +0 -4369
- data/vendor/libgit2/include/git2/inttypes.h +0 -309
- data/vendor/libgit2/include/git2/sys/time.h +0 -31
- data/vendor/libgit2/libgit2.pc.in +0 -13
- data/vendor/libgit2/src/config_file.h +0 -73
- data/vendor/libgit2/src/fnmatch.c +0 -248
- data/vendor/libgit2/src/fnmatch.h +0 -48
- data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
- data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
- data/vendor/libgit2/src/streams/curl.c +0 -385
- data/vendor/libgit2/src/streams/curl.h +0 -17
- /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
- /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
|
@@ -19,10 +19,6 @@
|
|
|
19
19
|
#include "git2/transport.h"
|
|
20
20
|
#include "git2/sys/openssl.h"
|
|
21
21
|
|
|
22
|
-
#ifdef GIT_CURL
|
|
23
|
-
# include "streams/curl.h"
|
|
24
|
-
#endif
|
|
25
|
-
|
|
26
22
|
#ifndef GIT_WIN32
|
|
27
23
|
# include <sys/types.h>
|
|
28
24
|
# include <sys/socket.h>
|
|
@@ -34,6 +30,10 @@
|
|
|
34
30
|
#include <openssl/x509v3.h>
|
|
35
31
|
#include <openssl/bio.h>
|
|
36
32
|
|
|
33
|
+
#ifdef VALGRIND
|
|
34
|
+
# include <valgrind/memcheck.h>
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
37
|
SSL_CTX *git__ssl_ctx;
|
|
38
38
|
|
|
39
39
|
#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"
|
|
@@ -241,7 +241,7 @@ int git_openssl_stream_global_init(void)
|
|
|
241
241
|
return 0;
|
|
242
242
|
|
|
243
243
|
error:
|
|
244
|
-
|
|
244
|
+
git_error_set(GIT_ERROR_NET, "could not initialize openssl: %s",
|
|
245
245
|
ERR_error_string(ERR_get_error(), NULL));
|
|
246
246
|
SSL_CTX_free(git__ssl_ctx);
|
|
247
247
|
git__ssl_ctx = NULL;
|
|
@@ -265,11 +265,11 @@ int git_openssl_set_locking(void)
|
|
|
265
265
|
|
|
266
266
|
num_locks = CRYPTO_num_locks();
|
|
267
267
|
openssl_locks = git__calloc(num_locks, sizeof(git_mutex));
|
|
268
|
-
|
|
268
|
+
GIT_ERROR_CHECK_ALLOC(openssl_locks);
|
|
269
269
|
|
|
270
270
|
for (i = 0; i < num_locks; i++) {
|
|
271
271
|
if (git_mutex_init(&openssl_locks[i]) != 0) {
|
|
272
|
-
|
|
272
|
+
git_error_set(GIT_ERROR_SSL, "failed to initialize openssl locks");
|
|
273
273
|
return -1;
|
|
274
274
|
}
|
|
275
275
|
}
|
|
@@ -280,7 +280,7 @@ int git_openssl_set_locking(void)
|
|
|
280
280
|
#elif !defined(OPENSSL_LEGACY_API)
|
|
281
281
|
return 0;
|
|
282
282
|
#else
|
|
283
|
-
|
|
283
|
+
git_error_set(GIT_ERROR_THREAD, "libgit2 was not built with threads");
|
|
284
284
|
return -1;
|
|
285
285
|
#endif
|
|
286
286
|
}
|
|
@@ -315,6 +315,10 @@ static int bio_write(BIO *b, const char *buf, int len)
|
|
|
315
315
|
{
|
|
316
316
|
git_stream *io = (git_stream *) BIO_get_data(b);
|
|
317
317
|
|
|
318
|
+
#ifdef VALGRIND
|
|
319
|
+
VALGRIND_MAKE_MEM_DEFINED(buf, len);
|
|
320
|
+
#endif
|
|
321
|
+
|
|
318
322
|
return (int) git_stream_write(io, buf, len, 0);
|
|
319
323
|
}
|
|
320
324
|
|
|
@@ -347,7 +351,7 @@ static int init_bio_method(void)
|
|
|
347
351
|
{
|
|
348
352
|
/* Set up the BIO_METHOD we use for wrapping our own stream implementations */
|
|
349
353
|
git_stream_bio_method = BIO_meth_new(BIO_TYPE_SOURCE_SINK | BIO_get_new_index(), "git_stream");
|
|
350
|
-
|
|
354
|
+
GIT_ERROR_CHECK_ALLOC(git_stream_bio_method);
|
|
351
355
|
|
|
352
356
|
BIO_meth_set_write(git_stream_bio_method, bio_write);
|
|
353
357
|
BIO_meth_set_read(git_stream_bio_method, bio_read);
|
|
@@ -373,23 +377,23 @@ static int ssl_set_error(SSL *ssl, int error)
|
|
|
373
377
|
switch (err) {
|
|
374
378
|
case SSL_ERROR_WANT_CONNECT:
|
|
375
379
|
case SSL_ERROR_WANT_ACCEPT:
|
|
376
|
-
|
|
380
|
+
git_error_set(GIT_ERROR_SSL, "SSL error: connection failure");
|
|
377
381
|
break;
|
|
378
382
|
case SSL_ERROR_WANT_X509_LOOKUP:
|
|
379
|
-
|
|
383
|
+
git_error_set(GIT_ERROR_SSL, "SSL error: x509 error");
|
|
380
384
|
break;
|
|
381
385
|
case SSL_ERROR_SYSCALL:
|
|
382
386
|
e = ERR_get_error();
|
|
383
387
|
if (e > 0) {
|
|
384
388
|
char errmsg[256];
|
|
385
389
|
ERR_error_string_n(e, errmsg, sizeof(errmsg));
|
|
386
|
-
|
|
390
|
+
git_error_set(GIT_ERROR_NET, "SSL error: %s", errmsg);
|
|
387
391
|
break;
|
|
388
392
|
} else if (error < 0) {
|
|
389
|
-
|
|
393
|
+
git_error_set(GIT_ERROR_OS, "SSL error: syscall failure");
|
|
390
394
|
break;
|
|
391
395
|
}
|
|
392
|
-
|
|
396
|
+
git_error_set(GIT_ERROR_SSL, "SSL error: received early EOF");
|
|
393
397
|
return GIT_EEOF;
|
|
394
398
|
break;
|
|
395
399
|
case SSL_ERROR_SSL:
|
|
@@ -397,13 +401,13 @@ static int ssl_set_error(SSL *ssl, int error)
|
|
|
397
401
|
char errmsg[256];
|
|
398
402
|
e = ERR_get_error();
|
|
399
403
|
ERR_error_string_n(e, errmsg, sizeof(errmsg));
|
|
400
|
-
|
|
404
|
+
git_error_set(GIT_ERROR_SSL, "SSL error: %s", errmsg);
|
|
401
405
|
break;
|
|
402
406
|
}
|
|
403
407
|
case SSL_ERROR_NONE:
|
|
404
408
|
case SSL_ERROR_ZERO_RETURN:
|
|
405
409
|
default:
|
|
406
|
-
|
|
410
|
+
git_error_set(GIT_ERROR_SSL, "SSL error: unknown error");
|
|
407
411
|
break;
|
|
408
412
|
}
|
|
409
413
|
return -1;
|
|
@@ -447,7 +451,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
|
|
|
447
451
|
int i = -1, j, error = 0;
|
|
448
452
|
|
|
449
453
|
if (SSL_get_verify_result(ssl) != X509_V_OK) {
|
|
450
|
-
|
|
454
|
+
git_error_set(GIT_ERROR_SSL, "the SSL certificate is invalid");
|
|
451
455
|
return GIT_ECERTIFICATE;
|
|
452
456
|
}
|
|
453
457
|
|
|
@@ -466,7 +470,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
|
|
|
466
470
|
cert = SSL_get_peer_certificate(ssl);
|
|
467
471
|
if (!cert) {
|
|
468
472
|
error = -1;
|
|
469
|
-
|
|
473
|
+
git_error_set(GIT_ERROR_SSL, "the server did not provide a certificate");
|
|
470
474
|
goto cleanup;
|
|
471
475
|
}
|
|
472
476
|
|
|
@@ -533,7 +537,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
|
|
|
533
537
|
|
|
534
538
|
if (size > 0) {
|
|
535
539
|
peer_cn = OPENSSL_malloc(size + 1);
|
|
536
|
-
|
|
540
|
+
GIT_ERROR_CHECK_ALLOC(peer_cn);
|
|
537
541
|
memcpy(peer_cn, ASN1_STRING_get0_data(str), size);
|
|
538
542
|
peer_cn[size] = '\0';
|
|
539
543
|
} else {
|
|
@@ -541,7 +545,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
|
|
|
541
545
|
}
|
|
542
546
|
} else {
|
|
543
547
|
int size = ASN1_STRING_to_UTF8(&peer_cn, str);
|
|
544
|
-
|
|
548
|
+
GIT_ERROR_CHECK_ALLOC(peer_cn);
|
|
545
549
|
if (memchr(peer_cn, '\0', size))
|
|
546
550
|
goto cert_fail_name;
|
|
547
551
|
}
|
|
@@ -553,7 +557,7 @@ static int verify_server_cert(SSL *ssl, const char *host)
|
|
|
553
557
|
|
|
554
558
|
cert_fail_name:
|
|
555
559
|
error = GIT_ECERTIFICATE;
|
|
556
|
-
|
|
560
|
+
git_error_set(GIT_ERROR_SSL, "hostname does not match certificate");
|
|
557
561
|
goto cleanup;
|
|
558
562
|
|
|
559
563
|
on_error:
|
|
@@ -569,31 +573,32 @@ cleanup:
|
|
|
569
573
|
typedef struct {
|
|
570
574
|
git_stream parent;
|
|
571
575
|
git_stream *io;
|
|
576
|
+
int owned;
|
|
572
577
|
bool connected;
|
|
573
578
|
char *host;
|
|
574
579
|
SSL *ssl;
|
|
575
580
|
git_cert_x509 cert_info;
|
|
576
581
|
} openssl_stream;
|
|
577
582
|
|
|
578
|
-
int
|
|
579
|
-
|
|
580
|
-
int openssl_connect(git_stream *stream)
|
|
583
|
+
static int openssl_connect(git_stream *stream)
|
|
581
584
|
{
|
|
582
585
|
int ret;
|
|
583
586
|
BIO *bio;
|
|
584
587
|
openssl_stream *st = (openssl_stream *) stream;
|
|
585
588
|
|
|
586
|
-
if ((ret = git_stream_connect(st->io)) < 0)
|
|
589
|
+
if (st->owned && (ret = git_stream_connect(st->io)) < 0)
|
|
587
590
|
return ret;
|
|
588
591
|
|
|
589
|
-
st->connected = true;
|
|
590
|
-
|
|
591
592
|
bio = BIO_new(git_stream_bio_method);
|
|
592
|
-
|
|
593
|
+
GIT_ERROR_CHECK_ALLOC(bio);
|
|
593
594
|
|
|
594
595
|
BIO_set_data(bio, st->io);
|
|
595
596
|
SSL_set_bio(st->ssl, bio, bio);
|
|
596
597
|
|
|
598
|
+
#ifdef VALGRIND
|
|
599
|
+
VALGRIND_MAKE_MEM_DEFINED(st->ssl, sizeof(SSL));
|
|
600
|
+
#endif
|
|
601
|
+
|
|
597
602
|
/* specify the host in case SNI is needed */
|
|
598
603
|
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
|
|
599
604
|
SSL_set_tlsext_host_name(st->ssl, st->host);
|
|
@@ -602,10 +607,16 @@ int openssl_connect(git_stream *stream)
|
|
|
602
607
|
if ((ret = SSL_connect(st->ssl)) <= 0)
|
|
603
608
|
return ssl_set_error(st->ssl, ret);
|
|
604
609
|
|
|
610
|
+
st->connected = true;
|
|
611
|
+
|
|
612
|
+
#ifdef VALGRIND
|
|
613
|
+
VALGRIND_MAKE_MEM_DEFINED(st->ssl, sizeof(SSL));
|
|
614
|
+
#endif
|
|
615
|
+
|
|
605
616
|
return verify_server_cert(st->ssl, st->host);
|
|
606
617
|
}
|
|
607
618
|
|
|
608
|
-
int openssl_certificate(git_cert **out, git_stream *stream)
|
|
619
|
+
static int openssl_certificate(git_cert **out, git_stream *stream)
|
|
609
620
|
{
|
|
610
621
|
openssl_stream *st = (openssl_stream *) stream;
|
|
611
622
|
int len;
|
|
@@ -615,19 +626,19 @@ int openssl_certificate(git_cert **out, git_stream *stream)
|
|
|
615
626
|
/* Retrieve the length of the certificate first */
|
|
616
627
|
len = i2d_X509(cert, NULL);
|
|
617
628
|
if (len < 0) {
|
|
618
|
-
|
|
629
|
+
git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
|
|
619
630
|
return -1;
|
|
620
631
|
}
|
|
621
632
|
|
|
622
633
|
encoded_cert = git__malloc(len);
|
|
623
|
-
|
|
634
|
+
GIT_ERROR_CHECK_ALLOC(encoded_cert);
|
|
624
635
|
/* i2d_X509 makes 'guard' point to just after the data */
|
|
625
636
|
guard = encoded_cert;
|
|
626
637
|
|
|
627
638
|
len = i2d_X509(cert, &guard);
|
|
628
639
|
if (len < 0) {
|
|
629
640
|
git__free(encoded_cert);
|
|
630
|
-
|
|
641
|
+
git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
|
|
631
642
|
return -1;
|
|
632
643
|
}
|
|
633
644
|
|
|
@@ -647,21 +658,20 @@ static int openssl_set_proxy(git_stream *stream, const git_proxy_options *proxy_
|
|
|
647
658
|
return git_stream_set_proxy(st->io, proxy_opts);
|
|
648
659
|
}
|
|
649
660
|
|
|
650
|
-
ssize_t openssl_write(git_stream *stream, const char *data, size_t
|
|
661
|
+
static ssize_t openssl_write(git_stream *stream, const char *data, size_t data_len, int flags)
|
|
651
662
|
{
|
|
652
663
|
openssl_stream *st = (openssl_stream *) stream;
|
|
653
|
-
int ret;
|
|
664
|
+
int ret, len = min(data_len, INT_MAX);
|
|
654
665
|
|
|
655
666
|
GIT_UNUSED(flags);
|
|
656
667
|
|
|
657
|
-
if ((ret = SSL_write(st->ssl, data, len)) <= 0)
|
|
668
|
+
if ((ret = SSL_write(st->ssl, data, len)) <= 0)
|
|
658
669
|
return ssl_set_error(st->ssl, ret);
|
|
659
|
-
}
|
|
660
670
|
|
|
661
671
|
return ret;
|
|
662
672
|
}
|
|
663
673
|
|
|
664
|
-
ssize_t openssl_read(git_stream *stream, void *data, size_t len)
|
|
674
|
+
static ssize_t openssl_read(git_stream *stream, void *data, size_t len)
|
|
665
675
|
{
|
|
666
676
|
openssl_stream *st = (openssl_stream *) stream;
|
|
667
677
|
int ret;
|
|
@@ -669,10 +679,14 @@ ssize_t openssl_read(git_stream *stream, void *data, size_t len)
|
|
|
669
679
|
if ((ret = SSL_read(st->ssl, data, len)) <= 0)
|
|
670
680
|
return ssl_set_error(st->ssl, ret);
|
|
671
681
|
|
|
682
|
+
#ifdef VALGRIND
|
|
683
|
+
VALGRIND_MAKE_MEM_DEFINED(data, ret);
|
|
684
|
+
#endif
|
|
685
|
+
|
|
672
686
|
return ret;
|
|
673
687
|
}
|
|
674
688
|
|
|
675
|
-
int openssl_close(git_stream *stream)
|
|
689
|
+
static int openssl_close(git_stream *stream)
|
|
676
690
|
{
|
|
677
691
|
openssl_stream *st = (openssl_stream *) stream;
|
|
678
692
|
int ret;
|
|
@@ -682,47 +696,47 @@ int openssl_close(git_stream *stream)
|
|
|
682
696
|
|
|
683
697
|
st->connected = false;
|
|
684
698
|
|
|
685
|
-
return git_stream_close(st->io);
|
|
699
|
+
return st->owned ? git_stream_close(st->io) : 0;
|
|
686
700
|
}
|
|
687
701
|
|
|
688
|
-
void openssl_free(git_stream *stream)
|
|
702
|
+
static void openssl_free(git_stream *stream)
|
|
689
703
|
{
|
|
690
704
|
openssl_stream *st = (openssl_stream *) stream;
|
|
691
705
|
|
|
706
|
+
if (st->owned)
|
|
707
|
+
git_stream_free(st->io);
|
|
708
|
+
|
|
692
709
|
SSL_free(st->ssl);
|
|
693
710
|
git__free(st->host);
|
|
694
711
|
git__free(st->cert_info.data);
|
|
695
|
-
git_stream_free(st->io);
|
|
696
712
|
git__free(st);
|
|
697
713
|
}
|
|
698
714
|
|
|
699
|
-
int
|
|
715
|
+
static int openssl_stream_wrap(
|
|
716
|
+
git_stream **out,
|
|
717
|
+
git_stream *in,
|
|
718
|
+
const char *host,
|
|
719
|
+
int owned)
|
|
700
720
|
{
|
|
701
|
-
int error;
|
|
702
721
|
openssl_stream *st;
|
|
703
722
|
|
|
704
|
-
|
|
705
|
-
GITERR_CHECK_ALLOC(st);
|
|
723
|
+
assert(out && in && host);
|
|
706
724
|
|
|
707
|
-
st
|
|
708
|
-
|
|
709
|
-
error = git_curl_stream_new(&st->io, host, port);
|
|
710
|
-
#else
|
|
711
|
-
error = git_socket_stream_new(&st->io, host, port);
|
|
712
|
-
#endif
|
|
725
|
+
st = git__calloc(1, sizeof(openssl_stream));
|
|
726
|
+
GIT_ERROR_CHECK_ALLOC(st);
|
|
713
727
|
|
|
714
|
-
|
|
715
|
-
|
|
728
|
+
st->io = in;
|
|
729
|
+
st->owned = owned;
|
|
716
730
|
|
|
717
731
|
st->ssl = SSL_new(git__ssl_ctx);
|
|
718
732
|
if (st->ssl == NULL) {
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
733
|
+
git_error_set(GIT_ERROR_SSL, "failed to create ssl object");
|
|
734
|
+
git__free(st);
|
|
735
|
+
return -1;
|
|
722
736
|
}
|
|
723
737
|
|
|
724
738
|
st->host = git__strdup(host);
|
|
725
|
-
|
|
739
|
+
GIT_ERROR_CHECK_ALLOC(st->host);
|
|
726
740
|
|
|
727
741
|
st->parent.version = GIT_STREAM_VERSION;
|
|
728
742
|
st->parent.encrypted = 1;
|
|
@@ -737,10 +751,27 @@ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
|
|
|
737
751
|
|
|
738
752
|
*out = (git_stream *) st;
|
|
739
753
|
return 0;
|
|
754
|
+
}
|
|
740
755
|
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
756
|
+
int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host)
|
|
757
|
+
{
|
|
758
|
+
return openssl_stream_wrap(out, in, host, 0);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
|
|
762
|
+
{
|
|
763
|
+
git_stream *stream = NULL;
|
|
764
|
+
int error;
|
|
765
|
+
|
|
766
|
+
assert(out && host && port);
|
|
767
|
+
|
|
768
|
+
if ((error = git_socket_stream_new(&stream, host, port)) < 0)
|
|
769
|
+
return error;
|
|
770
|
+
|
|
771
|
+
if ((error = openssl_stream_wrap(out, stream, host, 1)) < 0) {
|
|
772
|
+
git_stream_close(stream);
|
|
773
|
+
git_stream_free(stream);
|
|
774
|
+
}
|
|
744
775
|
|
|
745
776
|
return error;
|
|
746
777
|
}
|
|
@@ -751,7 +782,7 @@ int git_openssl__set_cert_location(const char *file, const char *path)
|
|
|
751
782
|
char errmsg[256];
|
|
752
783
|
|
|
753
784
|
ERR_error_string_n(ERR_get_error(), errmsg, sizeof(errmsg));
|
|
754
|
-
|
|
785
|
+
git_error_set(GIT_ERROR_SSL, "OpenSSL error: failed to load certificates: %s",
|
|
755
786
|
errmsg);
|
|
756
787
|
|
|
757
788
|
return -1;
|
|
@@ -771,26 +802,7 @@ int git_openssl_stream_global_init(void)
|
|
|
771
802
|
|
|
772
803
|
int git_openssl_set_locking(void)
|
|
773
804
|
{
|
|
774
|
-
|
|
775
|
-
return -1;
|
|
776
|
-
}
|
|
777
|
-
|
|
778
|
-
int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
|
|
779
|
-
{
|
|
780
|
-
GIT_UNUSED(out);
|
|
781
|
-
GIT_UNUSED(host);
|
|
782
|
-
GIT_UNUSED(port);
|
|
783
|
-
|
|
784
|
-
giterr_set(GITERR_SSL, "openssl is not supported in this version");
|
|
785
|
-
return -1;
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
int git_openssl__set_cert_location(const char *file, const char *path)
|
|
789
|
-
{
|
|
790
|
-
GIT_UNUSED(file);
|
|
791
|
-
GIT_UNUSED(path);
|
|
792
|
-
|
|
793
|
-
giterr_set(GITERR_SSL, "openssl is not supported in this version");
|
|
805
|
+
git_error_set(GIT_ERROR_SSL, "libgit2 was not built with OpenSSL support");
|
|
794
806
|
return -1;
|
|
795
807
|
}
|
|
796
808
|
|
|
@@ -13,8 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
extern int git_openssl_stream_global_init(void);
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
#ifdef GIT_OPENSSL
|
|
18
17
|
extern int git_openssl__set_cert_location(const char *file, const char *path);
|
|
19
18
|
|
|
19
|
+
extern int git_openssl_stream_new(git_stream **out, const char *host, const char *port);
|
|
20
|
+
extern int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host);
|
|
21
|
+
#endif
|
|
22
|
+
|
|
20
23
|
#endif
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "git2/errors.h"
|
|
9
|
+
|
|
10
|
+
#include "common.h"
|
|
11
|
+
#include "global.h"
|
|
12
|
+
#include "streams/tls.h"
|
|
13
|
+
#include "streams/mbedtls.h"
|
|
14
|
+
#include "streams/openssl.h"
|
|
15
|
+
#include "streams/stransport.h"
|
|
16
|
+
|
|
17
|
+
struct stream_registry {
|
|
18
|
+
git_rwlock lock;
|
|
19
|
+
git_stream_registration callbacks;
|
|
20
|
+
git_stream_registration tls_callbacks;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
static struct stream_registry stream_registry;
|
|
24
|
+
|
|
25
|
+
static void shutdown_stream_registry(void)
|
|
26
|
+
{
|
|
27
|
+
git_rwlock_free(&stream_registry.lock);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
int git_stream_registry_global_init(void)
|
|
31
|
+
{
|
|
32
|
+
if (git_rwlock_init(&stream_registry.lock) < 0)
|
|
33
|
+
return -1;
|
|
34
|
+
|
|
35
|
+
git__on_shutdown(shutdown_stream_registry);
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
GIT_INLINE(void) stream_registration_cpy(
|
|
40
|
+
git_stream_registration *target,
|
|
41
|
+
git_stream_registration *src)
|
|
42
|
+
{
|
|
43
|
+
if (src)
|
|
44
|
+
memcpy(target, src, sizeof(git_stream_registration));
|
|
45
|
+
else
|
|
46
|
+
memset(target, 0, sizeof(git_stream_registration));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
int git_stream_registry_lookup(git_stream_registration *out, git_stream_t type)
|
|
50
|
+
{
|
|
51
|
+
git_stream_registration *target;
|
|
52
|
+
int error = GIT_ENOTFOUND;
|
|
53
|
+
|
|
54
|
+
assert(out);
|
|
55
|
+
|
|
56
|
+
switch(type) {
|
|
57
|
+
case GIT_STREAM_STANDARD:
|
|
58
|
+
target = &stream_registry.callbacks;
|
|
59
|
+
break;
|
|
60
|
+
case GIT_STREAM_TLS:
|
|
61
|
+
target = &stream_registry.tls_callbacks;
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
assert(0);
|
|
65
|
+
return -1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (git_rwlock_rdlock(&stream_registry.lock) < 0) {
|
|
69
|
+
git_error_set(GIT_ERROR_OS, "failed to lock stream registry");
|
|
70
|
+
return -1;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (target->init) {
|
|
74
|
+
stream_registration_cpy(out, target);
|
|
75
|
+
error = 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
git_rwlock_rdunlock(&stream_registry.lock);
|
|
79
|
+
return error;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
int git_stream_register(git_stream_t type, git_stream_registration *registration)
|
|
83
|
+
{
|
|
84
|
+
assert(!registration || registration->init);
|
|
85
|
+
|
|
86
|
+
GIT_ERROR_CHECK_VERSION(registration, GIT_STREAM_VERSION, "stream_registration");
|
|
87
|
+
|
|
88
|
+
if (git_rwlock_wrlock(&stream_registry.lock) < 0) {
|
|
89
|
+
git_error_set(GIT_ERROR_OS, "failed to lock stream registry");
|
|
90
|
+
return -1;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if ((type & GIT_STREAM_STANDARD) == GIT_STREAM_STANDARD)
|
|
94
|
+
stream_registration_cpy(&stream_registry.callbacks, registration);
|
|
95
|
+
|
|
96
|
+
if ((type & GIT_STREAM_TLS) == GIT_STREAM_TLS)
|
|
97
|
+
stream_registration_cpy(&stream_registry.tls_callbacks, registration);
|
|
98
|
+
|
|
99
|
+
git_rwlock_wrunlock(&stream_registry.lock);
|
|
100
|
+
return 0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
int git_stream_register_tls(
|
|
105
|
+
int GIT_CALLBACK(ctor)(git_stream **out, const char *host, const char *port))
|
|
106
|
+
{
|
|
107
|
+
git_stream_registration registration = {0};
|
|
108
|
+
|
|
109
|
+
if (ctor) {
|
|
110
|
+
registration.version = GIT_STREAM_VERSION;
|
|
111
|
+
registration.init = ctor;
|
|
112
|
+
registration.wrap = NULL;
|
|
113
|
+
|
|
114
|
+
return git_stream_register(GIT_STREAM_TLS, ®istration);
|
|
115
|
+
} else {
|
|
116
|
+
return git_stream_register(GIT_STREAM_TLS, NULL);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
#ifndef INCLUDE_streams_registry_h__
|
|
8
|
+
#define INCLUDE_streams_registry_h__
|
|
9
|
+
|
|
10
|
+
#include "common.h"
|
|
11
|
+
#include "git2/sys/stream.h"
|
|
12
|
+
|
|
13
|
+
/** Configure stream registry. */
|
|
14
|
+
int git_stream_registry_global_init(void);
|
|
15
|
+
|
|
16
|
+
/** Lookup a stream registration. */
|
|
17
|
+
extern int git_stream_registry_lookup(git_stream_registration *out, git_stream_t type);
|
|
18
|
+
|
|
19
|
+
#endif
|