rugged 1.6.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +138 -56
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +100 -6
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +24 -25
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +47 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +113 -96
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +34 -8
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +6 -10
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -238
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -0,0 +1,28 @@
|
|
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_steams_schannel_h__
|
8
|
+
#define INCLUDE_steams_schannel_h__
|
9
|
+
|
10
|
+
#include "common.h"
|
11
|
+
|
12
|
+
#include "git2/sys/stream.h"
|
13
|
+
|
14
|
+
#ifdef GIT_SCHANNEL
|
15
|
+
|
16
|
+
extern int git_schannel_stream_new(
|
17
|
+
git_stream **out,
|
18
|
+
const char *host,
|
19
|
+
const char *port);
|
20
|
+
|
21
|
+
extern int git_schannel_stream_wrap(
|
22
|
+
git_stream **out,
|
23
|
+
git_stream *in,
|
24
|
+
const char *host);
|
25
|
+
|
26
|
+
#endif
|
27
|
+
|
28
|
+
#endif
|
@@ -8,26 +8,29 @@
|
|
8
8
|
#include "streams/socket.h"
|
9
9
|
|
10
10
|
#include "posix.h"
|
11
|
-
#include "netops.h"
|
12
11
|
#include "registry.h"
|
12
|
+
#include "runtime.h"
|
13
13
|
#include "stream.h"
|
14
14
|
|
15
15
|
#ifndef _WIN32
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
16
|
+
# include <sys/types.h>
|
17
|
+
# include <sys/socket.h>
|
18
|
+
# include <sys/select.h>
|
19
|
+
# include <sys/time.h>
|
20
|
+
# include <netdb.h>
|
21
|
+
# include <netinet/in.h>
|
22
|
+
# include <arpa/inet.h>
|
23
23
|
#else
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
24
|
+
# include <winsock2.h>
|
25
|
+
# include <ws2tcpip.h>
|
26
|
+
# ifdef _MSC_VER
|
27
|
+
# pragma comment(lib, "ws2_32")
|
28
|
+
# endif
|
29
29
|
#endif
|
30
30
|
|
31
|
+
int git_socket_stream__connect_timeout = 0;
|
32
|
+
int git_socket_stream__timeout = 0;
|
33
|
+
|
31
34
|
#ifdef GIT_WIN32
|
32
35
|
static void net_set_error(const char *str)
|
33
36
|
{
|
@@ -54,11 +57,8 @@ static int close_socket(GIT_SOCKET s)
|
|
54
57
|
return 0;
|
55
58
|
|
56
59
|
#ifdef GIT_WIN32
|
57
|
-
if (
|
58
|
-
|
59
|
-
|
60
|
-
if (0 != WSACleanup()) {
|
61
|
-
git_error_set(GIT_ERROR_OS, "winsock cleanup failed");
|
60
|
+
if (closesocket(s) != 0) {
|
61
|
+
net_set_error("could not close socket");
|
62
62
|
return -1;
|
63
63
|
}
|
64
64
|
|
@@ -69,38 +69,119 @@ static int close_socket(GIT_SOCKET s)
|
|
69
69
|
|
70
70
|
}
|
71
71
|
|
72
|
-
static int
|
72
|
+
static int set_nonblocking(GIT_SOCKET s)
|
73
73
|
{
|
74
|
-
struct addrinfo *info = NULL, *p;
|
75
|
-
struct addrinfo hints;
|
76
|
-
git_socket_stream *st = (git_socket_stream *) stream;
|
77
|
-
GIT_SOCKET s = INVALID_SOCKET;
|
78
|
-
int ret;
|
79
|
-
|
80
74
|
#ifdef GIT_WIN32
|
81
|
-
|
82
|
-
* before any socket calls can be performed */
|
83
|
-
WSADATA wsd;
|
75
|
+
unsigned long nonblocking = 1;
|
84
76
|
|
85
|
-
if (
|
86
|
-
|
77
|
+
if (ioctlsocket(s, FIONBIO, &nonblocking) != 0) {
|
78
|
+
net_set_error("could not set socket non-blocking");
|
87
79
|
return -1;
|
88
80
|
}
|
81
|
+
#else
|
82
|
+
int flags;
|
83
|
+
|
84
|
+
if ((flags = fcntl(s, F_GETFL, 0)) == -1) {
|
85
|
+
net_set_error("could not query socket flags");
|
86
|
+
return -1;
|
87
|
+
}
|
88
|
+
|
89
|
+
flags |= O_NONBLOCK;
|
89
90
|
|
90
|
-
if (
|
91
|
-
|
92
|
-
git_error_set(GIT_ERROR_OS, "winsock init failed");
|
91
|
+
if (fcntl(s, F_SETFL, flags) != 0) {
|
92
|
+
net_set_error("could not set socket non-blocking");
|
93
93
|
return -1;
|
94
94
|
}
|
95
95
|
#endif
|
96
96
|
|
97
|
+
return 0;
|
98
|
+
}
|
99
|
+
|
100
|
+
/* Promote a sockerr to an errno for our error handling routines */
|
101
|
+
static int handle_sockerr(GIT_SOCKET socket)
|
102
|
+
{
|
103
|
+
int sockerr;
|
104
|
+
socklen_t errlen = sizeof(sockerr);
|
105
|
+
|
106
|
+
if (getsockopt(socket, SOL_SOCKET, SO_ERROR,
|
107
|
+
(void *)&sockerr, &errlen) < 0)
|
108
|
+
return -1;
|
109
|
+
|
110
|
+
if (sockerr == ETIMEDOUT)
|
111
|
+
return GIT_TIMEOUT;
|
112
|
+
|
113
|
+
errno = sockerr;
|
114
|
+
return -1;
|
115
|
+
}
|
116
|
+
|
117
|
+
GIT_INLINE(bool) connect_would_block(int error)
|
118
|
+
{
|
119
|
+
#ifdef GIT_WIN32
|
120
|
+
if (error == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK)
|
121
|
+
return true;
|
122
|
+
#endif
|
123
|
+
|
124
|
+
if (error == -1 && errno == EINPROGRESS)
|
125
|
+
return true;
|
126
|
+
|
127
|
+
return false;
|
128
|
+
}
|
129
|
+
|
130
|
+
static int connect_with_timeout(
|
131
|
+
GIT_SOCKET socket,
|
132
|
+
const struct sockaddr *address,
|
133
|
+
socklen_t address_len,
|
134
|
+
int timeout)
|
135
|
+
{
|
136
|
+
struct pollfd fd;
|
137
|
+
int error;
|
138
|
+
|
139
|
+
if (timeout && (error = set_nonblocking(socket)) < 0)
|
140
|
+
return error;
|
141
|
+
|
142
|
+
error = connect(socket, address, address_len);
|
143
|
+
|
144
|
+
if (error == 0 || !connect_would_block(error))
|
145
|
+
return error;
|
146
|
+
|
147
|
+
fd.fd = socket;
|
148
|
+
fd.events = POLLOUT;
|
149
|
+
fd.revents = 0;
|
150
|
+
|
151
|
+
error = p_poll(&fd, 1, timeout);
|
152
|
+
|
153
|
+
if (error == 0) {
|
154
|
+
return GIT_TIMEOUT;
|
155
|
+
} else if (error != 1) {
|
156
|
+
return -1;
|
157
|
+
} else if ((fd.revents & (POLLPRI | POLLHUP | POLLERR))) {
|
158
|
+
return handle_sockerr(socket);
|
159
|
+
} else if ((fd.revents & POLLOUT) != POLLOUT) {
|
160
|
+
git_error_set(GIT_ERROR_NET,
|
161
|
+
"unknown error while polling for connect: %d",
|
162
|
+
fd.revents);
|
163
|
+
return -1;
|
164
|
+
}
|
165
|
+
|
166
|
+
return 0;
|
167
|
+
}
|
168
|
+
|
169
|
+
static int socket_connect(git_stream *stream)
|
170
|
+
{
|
171
|
+
git_socket_stream *st = (git_socket_stream *) stream;
|
172
|
+
GIT_SOCKET s = INVALID_SOCKET;
|
173
|
+
struct addrinfo *info = NULL, *p;
|
174
|
+
struct addrinfo hints;
|
175
|
+
int error;
|
176
|
+
|
97
177
|
memset(&hints, 0x0, sizeof(struct addrinfo));
|
98
178
|
hints.ai_socktype = SOCK_STREAM;
|
99
179
|
hints.ai_family = AF_UNSPEC;
|
100
180
|
|
101
|
-
if ((
|
181
|
+
if ((error = p_getaddrinfo(st->host, st->port, &hints, &info)) != 0) {
|
102
182
|
git_error_set(GIT_ERROR_NET,
|
103
|
-
"failed to resolve address for %s: %s",
|
183
|
+
"failed to resolve address for %s: %s",
|
184
|
+
st->host, p_gai_strerror(error));
|
104
185
|
return -1;
|
105
186
|
}
|
106
187
|
|
@@ -110,51 +191,115 @@ static int socket_connect(git_stream *stream)
|
|
110
191
|
if (s == INVALID_SOCKET)
|
111
192
|
continue;
|
112
193
|
|
113
|
-
|
194
|
+
error = connect_with_timeout(s, p->ai_addr,
|
195
|
+
(socklen_t)p->ai_addrlen,
|
196
|
+
st->parent.connect_timeout);
|
197
|
+
|
198
|
+
if (error == 0)
|
114
199
|
break;
|
115
200
|
|
116
201
|
/* If we can't connect, try the next one */
|
117
202
|
close_socket(s);
|
118
203
|
s = INVALID_SOCKET;
|
204
|
+
|
205
|
+
if (error == GIT_TIMEOUT)
|
206
|
+
break;
|
119
207
|
}
|
120
208
|
|
121
209
|
/* Oops, we couldn't connect to any address */
|
122
|
-
if (s == INVALID_SOCKET
|
123
|
-
|
124
|
-
|
125
|
-
|
210
|
+
if (s == INVALID_SOCKET) {
|
211
|
+
if (error == GIT_TIMEOUT)
|
212
|
+
git_error_set(GIT_ERROR_NET, "failed to connect to %s: Operation timed out", st->host);
|
213
|
+
else
|
214
|
+
git_error_set(GIT_ERROR_OS, "failed to connect to %s", st->host);
|
215
|
+
error = -1;
|
216
|
+
goto done;
|
126
217
|
}
|
127
218
|
|
219
|
+
if (st->parent.timeout && !st->parent.connect_timeout &&
|
220
|
+
(error = set_nonblocking(s)) < 0)
|
221
|
+
return error;
|
222
|
+
|
128
223
|
st->s = s;
|
224
|
+
error = 0;
|
225
|
+
|
226
|
+
done:
|
129
227
|
p_freeaddrinfo(info);
|
130
|
-
return
|
228
|
+
return error;
|
131
229
|
}
|
132
230
|
|
133
|
-
static ssize_t socket_write(
|
231
|
+
static ssize_t socket_write(
|
232
|
+
git_stream *stream,
|
233
|
+
const char *data,
|
234
|
+
size_t len,
|
235
|
+
int flags)
|
134
236
|
{
|
135
237
|
git_socket_stream *st = (git_socket_stream *) stream;
|
136
|
-
|
238
|
+
struct pollfd fd;
|
239
|
+
ssize_t ret;
|
137
240
|
|
138
241
|
GIT_ASSERT(flags == 0);
|
139
242
|
GIT_UNUSED(flags);
|
140
243
|
|
141
|
-
|
244
|
+
ret = p_send(st->s, data, len, 0);
|
142
245
|
|
143
|
-
if (
|
144
|
-
|
246
|
+
if (st->parent.timeout && ret < 0 &&
|
247
|
+
(errno == EAGAIN || errno != EWOULDBLOCK)) {
|
248
|
+
fd.fd = st->s;
|
249
|
+
fd.events = POLLOUT;
|
250
|
+
fd.revents = 0;
|
251
|
+
|
252
|
+
ret = p_poll(&fd, 1, st->parent.timeout);
|
253
|
+
|
254
|
+
if (ret == 1) {
|
255
|
+
ret = p_send(st->s, data, len, 0);
|
256
|
+
} else if (ret == 0) {
|
257
|
+
git_error_set(GIT_ERROR_NET,
|
258
|
+
"could not write to socket: timed out");
|
259
|
+
return GIT_TIMEOUT;
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
if (ret < 0) {
|
264
|
+
net_set_error("error receiving data from socket");
|
145
265
|
return -1;
|
146
266
|
}
|
147
267
|
|
148
|
-
return
|
268
|
+
return ret;
|
149
269
|
}
|
150
270
|
|
151
|
-
static ssize_t socket_read(
|
271
|
+
static ssize_t socket_read(
|
272
|
+
git_stream *stream,
|
273
|
+
void *data,
|
274
|
+
size_t len)
|
152
275
|
{
|
153
|
-
ssize_t ret;
|
154
276
|
git_socket_stream *st = (git_socket_stream *) stream;
|
277
|
+
struct pollfd fd;
|
278
|
+
ssize_t ret;
|
155
279
|
|
156
|
-
|
157
|
-
|
280
|
+
ret = p_recv(st->s, data, len, 0);
|
281
|
+
|
282
|
+
if (st->parent.timeout && ret < 0 &&
|
283
|
+
(errno == EAGAIN || errno != EWOULDBLOCK)) {
|
284
|
+
fd.fd = st->s;
|
285
|
+
fd.events = POLLIN;
|
286
|
+
fd.revents = 0;
|
287
|
+
|
288
|
+
ret = p_poll(&fd, 1, st->parent.timeout);
|
289
|
+
|
290
|
+
if (ret == 1) {
|
291
|
+
ret = p_recv(st->s, data, len, 0);
|
292
|
+
} else if (ret == 0) {
|
293
|
+
git_error_set(GIT_ERROR_NET,
|
294
|
+
"could not read from socket: timed out");
|
295
|
+
return GIT_TIMEOUT;
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
if (ret < 0) {
|
300
|
+
net_set_error("error receiving data from socket");
|
301
|
+
return -1;
|
302
|
+
}
|
158
303
|
|
159
304
|
return ret;
|
160
305
|
}
|
@@ -202,6 +347,8 @@ static int default_socket_stream_new(
|
|
202
347
|
}
|
203
348
|
|
204
349
|
st->parent.version = GIT_STREAM_VERSION;
|
350
|
+
st->parent.timeout = git_socket_stream__timeout;
|
351
|
+
st->parent.connect_timeout = git_socket_stream__connect_timeout;
|
205
352
|
st->parent.connect = socket_connect;
|
206
353
|
st->parent.write = socket_write;
|
207
354
|
st->parent.read = socket_read;
|
@@ -240,3 +387,42 @@ int git_socket_stream_new(
|
|
240
387
|
|
241
388
|
return init(out, host, port);
|
242
389
|
}
|
390
|
+
|
391
|
+
#ifdef GIT_WIN32
|
392
|
+
|
393
|
+
static void socket_stream_global_shutdown(void)
|
394
|
+
{
|
395
|
+
WSACleanup();
|
396
|
+
}
|
397
|
+
|
398
|
+
int git_socket_stream_global_init(void)
|
399
|
+
{
|
400
|
+
WORD winsock_version;
|
401
|
+
WSADATA wsa_data;
|
402
|
+
|
403
|
+
winsock_version = MAKEWORD(2, 2);
|
404
|
+
|
405
|
+
if (WSAStartup(winsock_version, &wsa_data) != 0) {
|
406
|
+
git_error_set(GIT_ERROR_OS, "could not initialize Windows Socket Library");
|
407
|
+
return -1;
|
408
|
+
}
|
409
|
+
|
410
|
+
if (LOBYTE(wsa_data.wVersion) != 2 ||
|
411
|
+
HIBYTE(wsa_data.wVersion) != 2) {
|
412
|
+
git_error_set(GIT_ERROR_SSL, "Windows Socket Library does not support Winsock 2.2");
|
413
|
+
return -1;
|
414
|
+
}
|
415
|
+
|
416
|
+
return git_runtime_shutdown_register(socket_stream_global_shutdown);
|
417
|
+
}
|
418
|
+
|
419
|
+
#else
|
420
|
+
|
421
|
+
#include "stream.h"
|
422
|
+
|
423
|
+
int git_socket_stream_global_init(void)
|
424
|
+
{
|
425
|
+
return 0;
|
426
|
+
}
|
427
|
+
|
428
|
+
#endif
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
#include "common.h"
|
11
11
|
|
12
|
-
#include "
|
12
|
+
#include "stream.h"
|
13
13
|
|
14
14
|
typedef struct {
|
15
15
|
git_stream parent;
|
@@ -20,4 +20,6 @@ typedef struct {
|
|
20
20
|
|
21
21
|
extern int git_socket_stream_new(git_stream **out, const char *host, const char *port);
|
22
22
|
|
23
|
+
extern int git_socket_stream_global_init(void);
|
24
|
+
|
23
25
|
#endif
|
@@ -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;
|
@@ -44,6 +72,7 @@ typedef struct {
|
|
44
72
|
git_stream parent;
|
45
73
|
git_stream *io;
|
46
74
|
int owned;
|
75
|
+
int error;
|
47
76
|
SSLContextRef ctx;
|
48
77
|
CFDataRef der_data;
|
49
78
|
git_cert_x509 cert_info;
|
@@ -61,7 +90,10 @@ static int stransport_connect(git_stream *stream)
|
|
61
90
|
return error;
|
62
91
|
|
63
92
|
ret = SSLHandshake(st->ctx);
|
64
|
-
|
93
|
+
|
94
|
+
if (ret != errSSLServerAuthCompleted && st->error != 0)
|
95
|
+
return -1;
|
96
|
+
else if (ret != errSSLServerAuthCompleted) {
|
65
97
|
git_error_set(GIT_ERROR_SSL, "unexpected return value from ssl handshake %d", (int)ret);
|
66
98
|
return -1;
|
67
99
|
}
|
@@ -147,10 +179,20 @@ static int stransport_set_proxy(
|
|
147
179
|
*/
|
148
180
|
static OSStatus write_cb(SSLConnectionRef conn, const void *data, size_t *len)
|
149
181
|
{
|
150
|
-
|
182
|
+
stransport_stream *st = (stransport_stream *)conn;
|
183
|
+
git_stream *io = st->io;
|
184
|
+
OSStatus ret;
|
185
|
+
|
186
|
+
st->error = 0;
|
187
|
+
|
188
|
+
ret = git_stream__write_full(io, data, *len, 0);
|
151
189
|
|
152
|
-
if (
|
153
|
-
|
190
|
+
if (ret < 0) {
|
191
|
+
st->error = ret;
|
192
|
+
return (ret == GIT_TIMEOUT) ?
|
193
|
+
-9853 /* errSSLNetworkTimeout */:
|
194
|
+
-36 /* ioErr */;
|
195
|
+
}
|
154
196
|
|
155
197
|
return noErr;
|
156
198
|
}
|
@@ -164,8 +206,12 @@ static ssize_t stransport_write(git_stream *stream, const char *data, size_t len
|
|
164
206
|
GIT_UNUSED(flags);
|
165
207
|
|
166
208
|
data_len = min(len, SSIZE_MAX);
|
167
|
-
if ((ret = SSLWrite(st->ctx, data, data_len, &processed)) != noErr)
|
209
|
+
if ((ret = SSLWrite(st->ctx, data, data_len, &processed)) != noErr) {
|
210
|
+
if (st->error == GIT_TIMEOUT)
|
211
|
+
return GIT_TIMEOUT;
|
212
|
+
|
168
213
|
return stransport_error(ret);
|
214
|
+
}
|
169
215
|
|
170
216
|
GIT_ASSERT(processed < SSIZE_MAX);
|
171
217
|
return (ssize_t)processed;
|
@@ -182,18 +228,24 @@ static ssize_t stransport_write(git_stream *stream, const char *data, size_t len
|
|
182
228
|
*/
|
183
229
|
static OSStatus read_cb(SSLConnectionRef conn, void *data, size_t *len)
|
184
230
|
{
|
185
|
-
|
231
|
+
stransport_stream *st = (stransport_stream *)conn;
|
232
|
+
git_stream *io = st->io;
|
186
233
|
OSStatus error = noErr;
|
187
234
|
size_t off = 0;
|
188
235
|
ssize_t ret;
|
189
236
|
|
237
|
+
st->error = 0;
|
238
|
+
|
190
239
|
do {
|
191
240
|
ret = git_stream_read(io, data + off, *len - off);
|
241
|
+
|
192
242
|
if (ret < 0) {
|
193
|
-
error =
|
243
|
+
st->error = ret;
|
244
|
+
error = (ret == GIT_TIMEOUT) ?
|
245
|
+
-9853 /* errSSLNetworkTimeout */:
|
246
|
+
-36 /* ioErr */;
|
194
247
|
break;
|
195
|
-
}
|
196
|
-
if (ret == 0) {
|
248
|
+
} else if (ret == 0) {
|
197
249
|
error = errSSLClosedGraceful;
|
198
250
|
break;
|
199
251
|
}
|
@@ -207,12 +259,20 @@ static OSStatus read_cb(SSLConnectionRef conn, void *data, size_t *len)
|
|
207
259
|
|
208
260
|
static ssize_t stransport_read(git_stream *stream, void *data, size_t len)
|
209
261
|
{
|
210
|
-
stransport_stream *st = (stransport_stream *)
|
262
|
+
stransport_stream *st = (stransport_stream *)stream;
|
211
263
|
size_t processed;
|
212
264
|
OSStatus ret;
|
213
265
|
|
214
|
-
if ((ret = SSLRead(st->ctx, data, len, &processed)) != noErr)
|
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
|
+
|
271
|
+
if (st->error == GIT_TIMEOUT)
|
272
|
+
return GIT_TIMEOUT;
|
273
|
+
|
215
274
|
return stransport_error(ret);
|
275
|
+
}
|
216
276
|
|
217
277
|
return processed;
|
218
278
|
}
|
@@ -269,7 +329,7 @@ static int stransport_wrap(
|
|
269
329
|
}
|
270
330
|
|
271
331
|
if ((ret = SSLSetIOFuncs(st->ctx, read_cb, write_cb)) != noErr ||
|
272
|
-
(ret = SSLSetConnection(st->ctx, st
|
332
|
+
(ret = SSLSetConnection(st->ctx, st)) != noErr ||
|
273
333
|
(ret = SSLSetSessionOption(st->ctx, kSSLSessionOptionBreakOnServerAuth, true)) != noErr ||
|
274
334
|
(ret = SSLSetProtocolVersionMin(st->ctx, kTLSProtocol1)) != noErr ||
|
275
335
|
(ret = SSLSetProtocolVersionMax(st->ctx, kTLSProtocol12)) != noErr ||
|
@@ -13,6 +13,7 @@
|
|
13
13
|
#include "streams/mbedtls.h"
|
14
14
|
#include "streams/openssl.h"
|
15
15
|
#include "streams/stransport.h"
|
16
|
+
#include "streams/schannel.h"
|
16
17
|
|
17
18
|
int git_tls_stream_new(git_stream **out, const char *host, const char *port)
|
18
19
|
{
|
@@ -33,6 +34,8 @@ int git_tls_stream_new(git_stream **out, const char *host, const char *port)
|
|
33
34
|
init = git_openssl_stream_new;
|
34
35
|
#elif defined(GIT_MBEDTLS)
|
35
36
|
init = git_mbedtls_stream_new;
|
37
|
+
#elif defined(GIT_SCHANNEL)
|
38
|
+
init = git_schannel_stream_new;
|
36
39
|
#endif
|
37
40
|
} else {
|
38
41
|
return error;
|
@@ -63,6 +66,8 @@ int git_tls_stream_wrap(git_stream **out, git_stream *in, const char *host)
|
|
63
66
|
wrap = git_openssl_stream_wrap;
|
64
67
|
#elif defined(GIT_MBEDTLS)
|
65
68
|
wrap = git_mbedtls_stream_wrap;
|
69
|
+
#elif defined(GIT_SCHANNEL)
|
70
|
+
wrap = git_schannel_stream_wrap;
|
66
71
|
#endif
|
67
72
|
}
|
68
73
|
|