rugged 1.3.1 → 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/README.md +34 -2
- data/ext/rugged/extconf.rb +6 -3
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- data/ext/rugged/rugged_allocator.c +0 -54
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +9 -2
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +28 -10
- data/ext/rugged/rugged_repo.c +7 -9
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_settings.c +5 -0
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +5 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +141 -289
- data/vendor/libgit2/COPYING +301 -20
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/FindHTTP_Parser.cmake +17 -17
- data/vendor/libgit2/cmake/FindIntlIconv.cmake +51 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +34 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +129 -101
- data/vendor/libgit2/cmake/SelectHashes.cmake +113 -54
- data/vendor/libgit2/cmake/SelectRegex.cmake +56 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +46 -0
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +38 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- 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 +33 -31
- 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 +7 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +25 -25
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- 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 +89 -88
- 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/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/deps/xdiff/git-xdiff.h +56 -0
- data/vendor/libgit2/{src → deps}/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/{src → deps}/xdiff/xdiffi.c +152 -125
- data/vendor/libgit2/{src → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src → deps}/xdiff/xemit.c +26 -10
- data/vendor/libgit2/{src → deps}/xdiff/xhistogram.c +92 -94
- data/vendor/libgit2/{src → deps}/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/{src → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src → deps}/xdiff/xmerge.c +126 -137
- data/vendor/libgit2/{src → deps}/xdiff/xpatience.c +26 -46
- data/vendor/libgit2/{src → deps}/xdiff/xprepare.c +24 -46
- data/vendor/libgit2/{src → deps}/xdiff/xutils.c +36 -8
- data/vendor/libgit2/{src → 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 +7 -22
- data/vendor/libgit2/deps/zlib/crc32.c +931 -317
- data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
- data/vendor/libgit2/deps/zlib/deflate.c +428 -453
- data/vendor/libgit2/deps/zlib/deflate.h +51 -23
- data/vendor/libgit2/deps/zlib/gzguts.h +15 -19
- data/vendor/libgit2/deps/zlib/infback.c +19 -31
- data/vendor/libgit2/deps/zlib/inffast.c +15 -18
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +75 -110
- data/vendor/libgit2/deps/zlib/inflate.h +3 -2
- 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 +294 -380
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +310 -284
- data/vendor/libgit2/deps/zlib/zutil.c +20 -46
- data/vendor/libgit2/deps/zlib/zutil.h +24 -41
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +43 -8
- data/vendor/libgit2/include/git2/attr.h +28 -6
- data/vendor/libgit2/include/git2/blame.h +137 -29
- data/vendor/libgit2/include/git2/blob.h +85 -29
- data/vendor/libgit2/include/git2/branch.h +25 -16
- data/vendor/libgit2/include/git2/buffer.h +24 -82
- data/vendor/libgit2/include/git2/cert.h +4 -3
- data/vendor/libgit2/include/git2/checkout.h +88 -34
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +134 -3
- data/vendor/libgit2/include/git2/common.h +172 -59
- data/vendor/libgit2/include/git2/config.h +118 -32
- data/vendor/libgit2/include/git2/credential.h +32 -3
- data/vendor/libgit2/include/git2/credential_helpers.h +2 -0
- data/vendor/libgit2/include/git2/deprecated.h +141 -3
- data/vendor/libgit2/include/git2/describe.h +20 -3
- data/vendor/libgit2/include/git2/diff.h +95 -19
- data/vendor/libgit2/include/git2/email.h +10 -30
- data/vendor/libgit2/include/git2/errors.h +51 -61
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/filter.h +21 -9
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +4 -2
- data/vendor/libgit2/include/git2/ignore.h +11 -1
- data/vendor/libgit2/include/git2/index.h +111 -11
- data/vendor/libgit2/include/git2/indexer.h +67 -2
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +70 -5
- data/vendor/libgit2/include/git2/message.h +4 -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 +57 -7
- data/vendor/libgit2/include/git2/odb.h +156 -33
- data/vendor/libgit2/include/git2/odb_backend.h +132 -16
- data/vendor/libgit2/include/git2/oid.h +116 -17
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +37 -9
- data/vendor/libgit2/include/git2/patch.h +10 -3
- data/vendor/libgit2/include/git2/pathspec.h +10 -1
- data/vendor/libgit2/include/git2/proxy.h +11 -1
- data/vendor/libgit2/include/git2/rebase.h +18 -7
- data/vendor/libgit2/include/git2/refdb.h +5 -2
- data/vendor/libgit2/include/git2/reflog.h +4 -3
- data/vendor/libgit2/include/git2/refs.h +11 -8
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +295 -54
- data/vendor/libgit2/include/git2/repository.h +95 -25
- data/vendor/libgit2/include/git2/reset.h +18 -5
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +4 -4
- data/vendor/libgit2/include/git2/revwalk.h +7 -3
- data/vendor/libgit2/include/git2/signature.h +47 -2
- data/vendor/libgit2/include/git2/stash.h +78 -10
- data/vendor/libgit2/include/git2/status.h +24 -11
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -16
- data/vendor/libgit2/include/git2/submodule.h +27 -11
- 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 +110 -59
- 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 +10 -9
- 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 +53 -0
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +26 -3
- data/vendor/libgit2/include/git2/sys/transport.h +87 -41
- data/vendor/libgit2/include/git2/tag.h +4 -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 +20 -8
- data/vendor/libgit2/include/git2/types.h +26 -10
- data/vendor/libgit2/include/git2/version.h +63 -6
- data/vendor/libgit2/include/git2/worktree.h +30 -8
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +203 -420
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +56 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/{branch.h → cli/cmd.c} +10 -8
- data/vendor/libgit2/src/cli/cmd.h +37 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +202 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +190 -0
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +152 -0
- data/vendor/libgit2/src/cli/cmd_help.c +85 -0
- 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 +51 -0
- data/vendor/libgit2/src/cli/main.c +134 -0
- data/vendor/libgit2/src/cli/opt.c +695 -0
- data/vendor/libgit2/src/cli/opt.h +367 -0
- data/vendor/libgit2/src/cli/opt_usage.c +263 -0
- data/vendor/libgit2/src/cli/opt_usage.h +40 -0
- data/vendor/libgit2/src/cli/progress.c +395 -0
- data/vendor/libgit2/src/cli/progress.h +129 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +37 -0
- data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
- data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +140 -0
- data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +2 -2
- data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
- data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +32 -34
- data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
- data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +48 -31
- data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +25 -20
- data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +6 -4
- data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +87 -46
- data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +5 -9
- data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +152 -57
- data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +1 -0
- data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -2
- data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
- data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
- data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
- data/vendor/libgit2/src/libgit2/branch.h +31 -0
- data/vendor/libgit2/src/libgit2/buf.c +126 -0
- data/vendor/libgit2/src/libgit2/buf.h +50 -0
- data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +22 -17
- data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +7 -9
- data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +107 -91
- data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -2
- data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +14 -15
- data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +254 -203
- data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +4 -1
- data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +296 -77
- data/vendor/libgit2/src/libgit2/commit.h +87 -0
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +246 -135
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +33 -8
- data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +17 -7
- data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +1 -0
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +490 -360
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/{config.h → libgit2/config.h} +24 -6
- data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +8 -10
- data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +4 -5
- data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +212 -183
- 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 +374 -0
- data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +37 -32
- data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +24 -31
- data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
- data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +62 -51
- data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +44 -14
- data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +8 -10
- data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +46 -55
- data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +5 -5
- data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +45 -27
- data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +70 -20
- data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
- data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +22 -6
- data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +192 -105
- data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
- data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
- data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +49 -16
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
- data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +1 -1
- data/vendor/libgit2/src/{email.c → libgit2/email.c} +58 -40
- data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
- data/vendor/libgit2/src/{transports/ssh.h → libgit2/experimental.h.in} +3 -4
- data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +105 -30
- data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -3
- data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +30 -28
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +132 -58
- data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
- data/vendor/libgit2/src/{win32 → 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/{graph.c → libgit2/graph.c} +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
- data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +44 -39
- data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +460 -276
- data/vendor/libgit2/src/{index.h → libgit2/index.h} +21 -5
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +208 -124
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +102 -71
- data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +8 -5
- data/vendor/libgit2/src/libgit2/libgit2.c +268 -0
- data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +39 -37
- data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +83 -73
- data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
- data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +4 -4
- data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -5
- data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +174 -112
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +17 -6
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +53 -57
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +9 -2
- data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +29 -37
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +166 -35
- data/vendor/libgit2/src/{object.h → libgit2/object.h} +17 -2
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +261 -88
- data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
- data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
- data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +67 -22
- data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +162 -89
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +171 -92
- data/vendor/libgit2/src/libgit2/oid.h +284 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +89 -0
- data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +5 -1
- data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +126 -66
- data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +28 -12
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +146 -111
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +45 -25
- data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +8 -4
- data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +1 -1
- data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
- data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +8 -1
- data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +51 -16
- data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
- data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +42 -34
- data/vendor/libgit2/src/libgit2/path.c +375 -0
- data/vendor/libgit2/src/libgit2/path.h +68 -0
- data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +7 -7
- data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
- data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
- data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
- data/vendor/libgit2/src/{push.c → libgit2/push.c} +116 -60
- data/vendor/libgit2/src/{push.h → libgit2/push.h} +5 -16
- data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
- data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
- data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +147 -147
- data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +639 -254
- data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +8 -7
- data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +3 -2
- data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +67 -39
- data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +8 -3
- data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +60 -38
- data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +13 -2
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +821 -454
- data/vendor/libgit2/src/libgit2/remote.h +101 -0
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +1377 -594
- data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +43 -12
- data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
- data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +18 -22
- data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +76 -44
- data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +48 -19
- data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +3 -3
- data/vendor/libgit2/src/{libgit2.c → libgit2/settings.c} +162 -95
- data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +6 -2
- data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +144 -21
- data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -2
- data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +243 -68
- data/vendor/libgit2/src/{status.c → libgit2/status.c} +5 -2
- data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +62 -67
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +41 -24
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +2 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +11 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +6 -3
- 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 +428 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +3 -1
- data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +79 -19
- data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +5 -0
- data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +279 -220
- data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +10 -11
- data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
- data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +55 -18
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +74 -43
- data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
- data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
- data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
- data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +7 -7
- data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +27 -21
- data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +4 -1
- data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +14 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +3 -5
- data/vendor/libgit2/src/{transports/auth_negotiate.c → libgit2/transports/auth_gssapi.c} +44 -45
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +1 -2
- data/vendor/libgit2/src/{transports/auth_ntlm.c → libgit2/transports/auth_ntlmclient.c} +22 -22
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +1 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +16 -19
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +49 -24
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +188 -134
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +159 -127
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +142 -165
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +56 -36
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +307 -74
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +297 -97
- data/vendor/libgit2/src/libgit2/transports/ssh.c +85 -0
- 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/{transports/ssh.c → libgit2/transports/ssh_libssh2.c} +414 -268
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +101 -75
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +30 -20
- data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +7 -5
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +128 -110
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +7 -6
- data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +160 -121
- data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
- data/vendor/libgit2/src/util/CMakeLists.txt +77 -0
- data/vendor/libgit2/src/{alloc.c → util/alloc.c} +69 -7
- data/vendor/libgit2/src/util/alloc.h +65 -0
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/util/allocators/debugalloc.h +17 -0
- data/vendor/libgit2/src/util/allocators/failalloc.c +32 -0
- data/vendor/libgit2/src/util/allocators/failalloc.h +17 -0
- data/vendor/libgit2/src/util/allocators/stdalloc.c +37 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +50 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +25 -19
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +5 -1
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/{date.c → util/date.c} +35 -33
- data/vendor/libgit2/src/util/date.h +45 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{errors.h → util/errors.h} +22 -19
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +35 -30
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +21 -8
- data/vendor/libgit2/src/{path.c → util/fs_path.c} +591 -615
- data/vendor/libgit2/src/{path.h → util/fs_path.h} +257 -181
- data/vendor/libgit2/src/{futils.c → util/futils.c} +144 -95
- data/vendor/libgit2/src/{futils.h → util/futils.h} +40 -18
- data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +33 -2
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +26 -59
- data/vendor/libgit2/src/util/hash/builtin.c +53 -0
- data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
- data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
- data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +347 -0
- data/vendor/libgit2/src/util/hash/openssl.h +61 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
- data/vendor/libgit2/src/util/hash/sha.h +73 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/util/hash/win32.c +549 -0
- data/vendor/libgit2/src/util/hash/win32.h +60 -0
- data/vendor/libgit2/src/util/hash.c +158 -0
- data/vendor/libgit2/src/util/hash.h +61 -0
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/{integer.h → util/integer.h} +3 -1
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/util/net.c +1160 -0
- data/vendor/libgit2/src/{net.h → util/net.h} +45 -4
- data/vendor/libgit2/src/{pool.c → util/pool.c} +1 -1
- data/vendor/libgit2/src/{pool.h → util/pool.h} +6 -1
- data/vendor/libgit2/src/{posix.c → util/posix.c} +57 -3
- data/vendor/libgit2/src/{posix.h → util/posix.h} +26 -1
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +3 -3
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +230 -0
- data/vendor/libgit2/src/util/rand.h +37 -0
- data/vendor/libgit2/src/{regexp.c → util/regexp.c} +5 -5
- data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
- data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
- data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
- data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +15 -14
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +5 -5
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/{buffer.c → util/str.c} +159 -153
- data/vendor/libgit2/src/util/str.h +357 -0
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
- data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
- data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
- data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -6
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +24 -8
- data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
- data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
- data/vendor/libgit2/src/{util.c → util/util.c} +24 -19
- data/vendor/libgit2/src/{util.h → util/util.h} +30 -81
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.c → util/vector.c} +3 -3
- data/vendor/libgit2/src/{vector.h → util/vector.h} +4 -4
- data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +148 -17
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
- data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +42 -35
- data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
- data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
- data/vendor/libgit2/src/util/win32/utf-conv.c +144 -0
- data/vendor/libgit2/src/util/win32/utf-conv.h +127 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
- data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
- data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
- metadata +431 -362
- data/vendor/libgit2/cmake/FindIconv.cmake +0 -45
- 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/alloc.h +0 -40
- data/vendor/libgit2/src/allocators/failalloc.c +0 -92
- data/vendor/libgit2/src/allocators/failalloc.h +0 -23
- data/vendor/libgit2/src/allocators/stdalloc.c +0 -150
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +0 -118
- data/vendor/libgit2/src/buffer.h +0 -374
- data/vendor/libgit2/src/commit.h +0 -46
- data/vendor/libgit2/src/config_entries.c +0 -237
- data/vendor/libgit2/src/config_entries.h +0 -24
- data/vendor/libgit2/src/config_mem.c +0 -220
- data/vendor/libgit2/src/errors.c +0 -238
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
- data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
- data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
- data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
- data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
- data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
- data/vendor/libgit2/src/hash/sha1.h +0 -38
- data/vendor/libgit2/src/hash.c +0 -110
- data/vendor/libgit2/src/hash.h +0 -46
- data/vendor/libgit2/src/idxmap.c +0 -157
- data/vendor/libgit2/src/idxmap.h +0 -177
- data/vendor/libgit2/src/khash.h +0 -615
- data/vendor/libgit2/src/libgit2.h +0 -15
- data/vendor/libgit2/src/message.h +0 -17
- data/vendor/libgit2/src/net.c +0 -540
- data/vendor/libgit2/src/netops.c +0 -125
- data/vendor/libgit2/src/netops.h +0 -68
- data/vendor/libgit2/src/offmap.c +0 -101
- data/vendor/libgit2/src/offmap.h +0 -133
- data/vendor/libgit2/src/oid.h +0 -51
- data/vendor/libgit2/src/oidarray.c +0 -43
- data/vendor/libgit2/src/oidmap.c +0 -107
- data/vendor/libgit2/src/oidmap.h +0 -128
- data/vendor/libgit2/src/remote.h +0 -55
- data/vendor/libgit2/src/streams/socket.c +0 -239
- data/vendor/libgit2/src/strmap.c +0 -100
- data/vendor/libgit2/src/strmap.h +0 -131
- data/vendor/libgit2/src/sysdir.c +0 -347
- data/vendor/libgit2/src/threadstate.c +0 -84
- data/vendor/libgit2/src/threadstate.h +0 -24
- data/vendor/libgit2/src/win32/findfile.c +0 -230
- data/vendor/libgit2/src/win32/findfile.h +0 -19
- data/vendor/libgit2/src/win32/utf-conv.c +0 -146
- data/vendor/libgit2/src/win32/utf-conv.h +0 -60
- /data/vendor/libgit2/{src → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src → deps}/xdiff/xtypes.h +0 -0
- /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
- /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
- /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
- /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
- /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
- /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
- /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
- /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
- /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
- /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
- /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
- /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
- /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
- /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
- /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
- /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
- /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
- /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
- /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
- /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
- /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
@@ -5,28 +5,25 @@
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
6
6
|
*/
|
7
7
|
|
8
|
-
#include "
|
8
|
+
#include "ssh_libssh2.h"
|
9
|
+
|
10
|
+
#ifdef GIT_SSH_LIBSSH2
|
9
11
|
|
10
|
-
#ifdef GIT_SSH
|
11
12
|
#include <libssh2.h>
|
12
|
-
#endif
|
13
13
|
|
14
14
|
#include "runtime.h"
|
15
|
-
#include "git2.h"
|
16
|
-
#include "buffer.h"
|
17
15
|
#include "net.h"
|
18
|
-
#include "netops.h"
|
19
16
|
#include "smart.h"
|
17
|
+
#include "process.h"
|
20
18
|
#include "streams/socket.h"
|
19
|
+
#include "sysdir.h"
|
21
20
|
|
22
21
|
#include "git2/credential.h"
|
23
22
|
#include "git2/sys/credential.h"
|
24
23
|
|
25
|
-
#ifdef GIT_SSH
|
26
|
-
|
27
24
|
#define OWNING_SUBTRANSPORT(s) ((ssh_subtransport *)(s)->parent.subtransport)
|
28
25
|
|
29
|
-
|
26
|
+
extern int git_socket_stream__timeout;
|
30
27
|
|
31
28
|
static const char cmd_uploadpack[] = "git-upload-pack";
|
32
29
|
static const char cmd_receivepack[] = "git-receive-pack";
|
@@ -37,7 +34,7 @@ typedef struct {
|
|
37
34
|
LIBSSH2_SESSION *session;
|
38
35
|
LIBSSH2_CHANNEL *channel;
|
39
36
|
const char *cmd;
|
40
|
-
|
37
|
+
git_net_url url;
|
41
38
|
unsigned sent_command : 1;
|
42
39
|
} ssh_stream;
|
43
40
|
|
@@ -65,42 +62,26 @@ static void ssh_error(LIBSSH2_SESSION *session, const char *errmsg)
|
|
65
62
|
*
|
66
63
|
* For example: git-upload-pack '/libgit2/libgit2'
|
67
64
|
*/
|
68
|
-
static int gen_proto(
|
65
|
+
static int gen_proto(git_str *request, const char *cmd, git_net_url *url)
|
69
66
|
{
|
70
67
|
const char *repo;
|
71
|
-
int len;
|
72
|
-
size_t i;
|
73
|
-
|
74
|
-
for (i = 0; i < ARRAY_SIZE(ssh_prefixes); ++i) {
|
75
|
-
const char *p = ssh_prefixes[i];
|
76
68
|
|
77
|
-
|
78
|
-
url = url + strlen(p);
|
79
|
-
repo = strchr(url, '/');
|
80
|
-
if (repo && repo[1] == '~')
|
81
|
-
++repo;
|
69
|
+
repo = url->path;
|
82
70
|
|
83
|
-
|
84
|
-
|
85
|
-
}
|
86
|
-
repo = strchr(url, ':');
|
87
|
-
if (repo) repo++;
|
71
|
+
if (repo && repo[0] == '/' && repo[1] == '~')
|
72
|
+
repo++;
|
88
73
|
|
89
|
-
|
90
|
-
if (!repo) {
|
74
|
+
if (!repo || !repo[0]) {
|
91
75
|
git_error_set(GIT_ERROR_NET, "malformed git protocol URL");
|
92
76
|
return -1;
|
93
77
|
}
|
94
78
|
|
95
|
-
|
79
|
+
git_str_puts(request, cmd);
|
80
|
+
git_str_puts(request, " '");
|
81
|
+
git_str_puts(request, repo);
|
82
|
+
git_str_puts(request, "'");
|
96
83
|
|
97
|
-
|
98
|
-
git_buf_puts(request, cmd);
|
99
|
-
git_buf_puts(request, " '");
|
100
|
-
git_buf_decode_percent(request, repo, strlen(repo));
|
101
|
-
git_buf_puts(request, "'");
|
102
|
-
|
103
|
-
if (git_buf_oom(request))
|
84
|
+
if (git_str_oom(request))
|
104
85
|
return -1;
|
105
86
|
|
106
87
|
return 0;
|
@@ -109,9 +90,9 @@ done:
|
|
109
90
|
static int send_command(ssh_stream *s)
|
110
91
|
{
|
111
92
|
int error;
|
112
|
-
|
93
|
+
git_str request = GIT_STR_INIT;
|
113
94
|
|
114
|
-
error = gen_proto(&request, s->cmd, s->url);
|
95
|
+
error = gen_proto(&request, s->cmd, &s->url);
|
115
96
|
if (error < 0)
|
116
97
|
goto cleanup;
|
117
98
|
|
@@ -124,7 +105,7 @@ static int send_command(ssh_stream *s)
|
|
124
105
|
s->sent_command = 1;
|
125
106
|
|
126
107
|
cleanup:
|
127
|
-
|
108
|
+
git_str_dispose(&request);
|
128
109
|
return error;
|
129
110
|
}
|
130
111
|
|
@@ -134,8 +115,8 @@ static int ssh_stream_read(
|
|
134
115
|
size_t buf_size,
|
135
116
|
size_t *bytes_read)
|
136
117
|
{
|
137
|
-
int rc;
|
138
118
|
ssh_stream *s = GIT_CONTAINER_OF(stream, ssh_stream, parent);
|
119
|
+
ssize_t rc;
|
139
120
|
|
140
121
|
*bytes_read = 0;
|
141
122
|
|
@@ -154,7 +135,7 @@ static int ssh_stream_read(
|
|
154
135
|
*/
|
155
136
|
if (rc == 0) {
|
156
137
|
if ((rc = libssh2_channel_read_stderr(s->channel, buffer, buf_size)) > 0) {
|
157
|
-
git_error_set(GIT_ERROR_SSH, "%*s", rc, buffer);
|
138
|
+
git_error_set(GIT_ERROR_SSH, "%*s", (int)rc, buffer);
|
158
139
|
return GIT_EEOF;
|
159
140
|
} else if (rc < LIBSSH2_ERROR_NONE) {
|
160
141
|
ssh_error(s->session, "SSH could not read stderr");
|
@@ -162,7 +143,6 @@ static int ssh_stream_read(
|
|
162
143
|
}
|
163
144
|
}
|
164
145
|
|
165
|
-
|
166
146
|
*bytes_read = rc;
|
167
147
|
|
168
148
|
return 0;
|
@@ -226,13 +206,12 @@ static void ssh_stream_free(git_smart_subtransport_stream *stream)
|
|
226
206
|
s->io = NULL;
|
227
207
|
}
|
228
208
|
|
229
|
-
|
209
|
+
git_net_url_dispose(&s->url);
|
230
210
|
git__free(s);
|
231
211
|
}
|
232
212
|
|
233
213
|
static int ssh_stream_alloc(
|
234
214
|
ssh_subtransport *t,
|
235
|
-
const char *url,
|
236
215
|
const char *cmd,
|
237
216
|
git_smart_subtransport_stream **stream)
|
238
217
|
{
|
@@ -250,47 +229,10 @@ static int ssh_stream_alloc(
|
|
250
229
|
|
251
230
|
s->cmd = cmd;
|
252
231
|
|
253
|
-
s->url = git__strdup(url);
|
254
|
-
if (!s->url) {
|
255
|
-
git__free(s);
|
256
|
-
return -1;
|
257
|
-
}
|
258
|
-
|
259
232
|
*stream = &s->parent;
|
260
233
|
return 0;
|
261
234
|
}
|
262
235
|
|
263
|
-
static int git_ssh_extract_url_parts(
|
264
|
-
git_net_url *urldata,
|
265
|
-
const char *url)
|
266
|
-
{
|
267
|
-
char *colon, *at;
|
268
|
-
const char *start;
|
269
|
-
|
270
|
-
colon = strchr(url, ':');
|
271
|
-
|
272
|
-
|
273
|
-
at = strchr(url, '@');
|
274
|
-
if (at) {
|
275
|
-
start = at + 1;
|
276
|
-
urldata->username = git__substrdup(url, at - url);
|
277
|
-
GIT_ERROR_CHECK_ALLOC(urldata->username);
|
278
|
-
} else {
|
279
|
-
start = url;
|
280
|
-
urldata->username = NULL;
|
281
|
-
}
|
282
|
-
|
283
|
-
if (colon == NULL || (colon < start)) {
|
284
|
-
git_error_set(GIT_ERROR_NET, "malformed URL");
|
285
|
-
return -1;
|
286
|
-
}
|
287
|
-
|
288
|
-
urldata->host = git__substrdup(start, colon - start);
|
289
|
-
GIT_ERROR_CHECK_ALLOC(urldata->host);
|
290
|
-
|
291
|
-
return 0;
|
292
|
-
}
|
293
|
-
|
294
236
|
static int ssh_agent_auth(LIBSSH2_SESSION *session, git_credential_ssh_key *c) {
|
295
237
|
int rc = LIBSSH2_ERROR_NONE;
|
296
238
|
|
@@ -303,8 +245,10 @@ static int ssh_agent_auth(LIBSSH2_SESSION *session, git_credential_ssh_key *c) {
|
|
303
245
|
|
304
246
|
rc = libssh2_agent_connect(agent);
|
305
247
|
|
306
|
-
if (rc != LIBSSH2_ERROR_NONE)
|
248
|
+
if (rc != LIBSSH2_ERROR_NONE) {
|
249
|
+
rc = LIBSSH2_ERROR_AUTHENTICATION_FAILED;
|
307
250
|
goto shutdown;
|
251
|
+
}
|
308
252
|
|
309
253
|
rc = libssh2_agent_list_identities(agent);
|
310
254
|
|
@@ -400,7 +344,7 @@ static int _git_ssh_authenticate_session(
|
|
400
344
|
session, c->username, c->prompt_callback);
|
401
345
|
break;
|
402
346
|
}
|
403
|
-
#ifdef
|
347
|
+
#ifdef GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS
|
404
348
|
case GIT_CREDENTIAL_SSH_MEMORY: {
|
405
349
|
git_credential_ssh_key *c = (git_credential_ssh_key *)cred;
|
406
350
|
|
@@ -430,8 +374,8 @@ static int _git_ssh_authenticate_session(
|
|
430
374
|
return GIT_EAUTH;
|
431
375
|
|
432
376
|
if (rc != LIBSSH2_ERROR_NONE) {
|
433
|
-
if (
|
434
|
-
ssh_error(session, "
|
377
|
+
if (git_error_last()->klass == GIT_ERROR_NONE)
|
378
|
+
ssh_error(session, "failed to authenticate SSH session");
|
435
379
|
return -1;
|
436
380
|
}
|
437
381
|
|
@@ -443,11 +387,15 @@ static int request_creds(git_credential **out, ssh_subtransport *t, const char *
|
|
443
387
|
int error, no_callback = 0;
|
444
388
|
git_credential *cred = NULL;
|
445
389
|
|
446
|
-
if (!t->owner->
|
390
|
+
if (!t->owner->connect_opts.callbacks.credentials) {
|
447
391
|
no_callback = 1;
|
448
392
|
} else {
|
449
|
-
error = t->owner->
|
450
|
-
|
393
|
+
error = t->owner->connect_opts.callbacks.credentials(
|
394
|
+
&cred,
|
395
|
+
t->owner->url,
|
396
|
+
user,
|
397
|
+
auth_methods,
|
398
|
+
t->owner->connect_opts.callbacks.payload);
|
451
399
|
|
452
400
|
if (error == GIT_PASSTHROUGH) {
|
453
401
|
no_callback = 1;
|
@@ -475,15 +423,118 @@ static int request_creds(git_credential **out, ssh_subtransport *t, const char *
|
|
475
423
|
return 0;
|
476
424
|
}
|
477
425
|
|
426
|
+
#define SSH_DIR ".ssh"
|
427
|
+
#define KNOWN_HOSTS_FILE "known_hosts"
|
428
|
+
|
429
|
+
/*
|
430
|
+
* Load the known_hosts file.
|
431
|
+
*
|
432
|
+
* Returns success but leaves the output NULL if we couldn't find the file.
|
433
|
+
*/
|
434
|
+
static int load_known_hosts(LIBSSH2_KNOWNHOSTS **hosts, LIBSSH2_SESSION *session)
|
435
|
+
{
|
436
|
+
git_str path = GIT_STR_INIT, sshdir = GIT_STR_INIT;
|
437
|
+
LIBSSH2_KNOWNHOSTS *known_hosts = NULL;
|
438
|
+
int error;
|
439
|
+
|
440
|
+
GIT_ASSERT_ARG(hosts);
|
441
|
+
|
442
|
+
if ((error = git_sysdir_expand_homedir_file(&sshdir, SSH_DIR)) < 0 ||
|
443
|
+
(error = git_str_joinpath(&path, git_str_cstr(&sshdir), KNOWN_HOSTS_FILE)) < 0)
|
444
|
+
goto out;
|
445
|
+
|
446
|
+
if ((known_hosts = libssh2_knownhost_init(session)) == NULL) {
|
447
|
+
ssh_error(session, "error initializing known hosts");
|
448
|
+
error = -1;
|
449
|
+
goto out;
|
450
|
+
}
|
451
|
+
|
452
|
+
/*
|
453
|
+
* Try to read the file and consider not finding it as not trusting the
|
454
|
+
* host rather than an error.
|
455
|
+
*/
|
456
|
+
error = libssh2_knownhost_readfile(known_hosts, git_str_cstr(&path), LIBSSH2_KNOWNHOST_FILE_OPENSSH);
|
457
|
+
if (error == LIBSSH2_ERROR_FILE)
|
458
|
+
error = 0;
|
459
|
+
if (error < 0)
|
460
|
+
ssh_error(session, "error reading known_hosts");
|
461
|
+
|
462
|
+
out:
|
463
|
+
*hosts = known_hosts;
|
464
|
+
|
465
|
+
git_str_dispose(&sshdir);
|
466
|
+
git_str_dispose(&path);
|
467
|
+
|
468
|
+
return error;
|
469
|
+
}
|
470
|
+
|
471
|
+
static void add_hostkey_pref_if_avail(
|
472
|
+
LIBSSH2_KNOWNHOSTS *known_hosts,
|
473
|
+
const char *hostname,
|
474
|
+
int port,
|
475
|
+
git_str *prefs,
|
476
|
+
int type,
|
477
|
+
const char *type_name)
|
478
|
+
{
|
479
|
+
struct libssh2_knownhost *host = NULL;
|
480
|
+
const char key = '\0';
|
481
|
+
int mask = LIBSSH2_KNOWNHOST_TYPE_PLAIN | LIBSSH2_KNOWNHOST_KEYENC_RAW | type;
|
482
|
+
int error;
|
483
|
+
|
484
|
+
error = libssh2_knownhost_checkp(known_hosts, hostname, port, &key, 1, mask, &host);
|
485
|
+
if (error == LIBSSH2_KNOWNHOST_CHECK_MISMATCH) {
|
486
|
+
if (git_str_len(prefs) > 0) {
|
487
|
+
git_str_putc(prefs, ',');
|
488
|
+
}
|
489
|
+
git_str_puts(prefs, type_name);
|
490
|
+
}
|
491
|
+
}
|
492
|
+
|
493
|
+
/*
|
494
|
+
* We figure out what kind of key we want to ask the remote for by trying to
|
495
|
+
* look it up with a nonsense key and using that mismatch to figure out what key
|
496
|
+
* we do have stored for the host.
|
497
|
+
*
|
498
|
+
* Populates prefs with the string to pass to libssh2_session_method_pref.
|
499
|
+
*/
|
500
|
+
static void find_hostkey_preference(
|
501
|
+
LIBSSH2_KNOWNHOSTS *known_hosts,
|
502
|
+
const char *hostname,
|
503
|
+
int port,
|
504
|
+
git_str *prefs)
|
505
|
+
{
|
506
|
+
/*
|
507
|
+
* The order here is important as it indicates the priority of what will
|
508
|
+
* be preferred.
|
509
|
+
*/
|
510
|
+
#ifdef LIBSSH2_KNOWNHOST_KEY_ED25519
|
511
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_ED25519, "ssh-ed25519");
|
512
|
+
#endif
|
513
|
+
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_256
|
514
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_ECDSA_256, "ecdsa-sha2-nistp256");
|
515
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_ECDSA_384, "ecdsa-sha2-nistp384");
|
516
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_ECDSA_521, "ecdsa-sha2-nistp521");
|
517
|
+
#endif
|
518
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_SSHRSA, "rsa-sha2-512");
|
519
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_SSHRSA, "rsa-sha2-256");
|
520
|
+
add_hostkey_pref_if_avail(known_hosts, hostname, port, prefs, LIBSSH2_KNOWNHOST_KEY_SSHRSA, "ssh-rsa");
|
521
|
+
}
|
522
|
+
|
478
523
|
static int _git_ssh_session_create(
|
479
524
|
LIBSSH2_SESSION **session,
|
525
|
+
LIBSSH2_KNOWNHOSTS **hosts,
|
526
|
+
const char *hostname,
|
527
|
+
int port,
|
480
528
|
git_stream *io)
|
481
529
|
{
|
482
|
-
int rc = 0;
|
483
|
-
LIBSSH2_SESSION *s;
|
484
530
|
git_socket_stream *socket = GIT_CONTAINER_OF(io, git_socket_stream, parent);
|
531
|
+
LIBSSH2_SESSION *s;
|
532
|
+
LIBSSH2_KNOWNHOSTS *known_hosts;
|
533
|
+
git_str prefs = GIT_STR_INIT;
|
534
|
+
int rc = 0;
|
485
535
|
|
486
536
|
GIT_ASSERT_ARG(session);
|
537
|
+
GIT_ASSERT_ARG(hosts);
|
487
538
|
|
488
539
|
s = libssh2_session_init();
|
489
540
|
if (!s) {
|
@@ -491,19 +542,223 @@ static int _git_ssh_session_create(
|
|
491
542
|
return -1;
|
492
543
|
}
|
493
544
|
|
545
|
+
if (git_socket_stream__timeout > 0) {
|
546
|
+
libssh2_session_set_timeout(s, git_socket_stream__timeout);
|
547
|
+
}
|
548
|
+
|
549
|
+
if ((rc = load_known_hosts(&known_hosts, s)) < 0) {
|
550
|
+
ssh_error(s, "error loading known_hosts");
|
551
|
+
libssh2_session_free(s);
|
552
|
+
return -1;
|
553
|
+
}
|
554
|
+
|
555
|
+
find_hostkey_preference(known_hosts, hostname, port, &prefs);
|
556
|
+
if (git_str_len(&prefs) > 0) {
|
557
|
+
do {
|
558
|
+
rc = libssh2_session_method_pref(s, LIBSSH2_METHOD_HOSTKEY, git_str_cstr(&prefs));
|
559
|
+
} while (LIBSSH2_ERROR_EAGAIN == rc || LIBSSH2_ERROR_TIMEOUT == rc);
|
560
|
+
if (rc != LIBSSH2_ERROR_NONE) {
|
561
|
+
ssh_error(s, "failed to set hostkey preference");
|
562
|
+
goto on_error;
|
563
|
+
}
|
564
|
+
}
|
565
|
+
git_str_dispose(&prefs);
|
566
|
+
|
494
567
|
do {
|
495
568
|
rc = libssh2_session_handshake(s, socket->s);
|
496
569
|
} while (LIBSSH2_ERROR_EAGAIN == rc || LIBSSH2_ERROR_TIMEOUT == rc);
|
497
570
|
|
498
571
|
if (rc != LIBSSH2_ERROR_NONE) {
|
499
572
|
ssh_error(s, "failed to start SSH session");
|
500
|
-
|
501
|
-
return -1;
|
573
|
+
goto on_error;
|
502
574
|
}
|
503
575
|
|
504
576
|
libssh2_session_set_blocking(s, 1);
|
505
577
|
|
506
578
|
*session = s;
|
579
|
+
*hosts = known_hosts;
|
580
|
+
|
581
|
+
return 0;
|
582
|
+
|
583
|
+
on_error:
|
584
|
+
libssh2_knownhost_free(known_hosts);
|
585
|
+
libssh2_session_free(s);
|
586
|
+
return -1;
|
587
|
+
}
|
588
|
+
|
589
|
+
|
590
|
+
/*
|
591
|
+
* Returns the typemask argument to pass to libssh2_knownhost_check{,p} based on
|
592
|
+
* the type of key that libssh2_session_hostkey returns.
|
593
|
+
*/
|
594
|
+
static int fingerprint_type_mask(int keytype)
|
595
|
+
{
|
596
|
+
int mask = LIBSSH2_KNOWNHOST_TYPE_PLAIN | LIBSSH2_KNOWNHOST_KEYENC_RAW;
|
597
|
+
return mask;
|
598
|
+
|
599
|
+
switch (keytype) {
|
600
|
+
case LIBSSH2_HOSTKEY_TYPE_RSA:
|
601
|
+
mask |= LIBSSH2_KNOWNHOST_KEY_SSHRSA;
|
602
|
+
break;
|
603
|
+
case LIBSSH2_HOSTKEY_TYPE_DSS:
|
604
|
+
mask |= LIBSSH2_KNOWNHOST_KEY_SSHDSS;
|
605
|
+
break;
|
606
|
+
#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
|
607
|
+
case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
|
608
|
+
mask |= LIBSSH2_KNOWNHOST_KEY_ECDSA_256;
|
609
|
+
break;
|
610
|
+
case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
|
611
|
+
mask |= LIBSSH2_KNOWNHOST_KEY_ECDSA_384;
|
612
|
+
break;
|
613
|
+
case LIBSSH2_HOSTKEY_TYPE_ECDSA_521:
|
614
|
+
mask |= LIBSSH2_KNOWNHOST_KEY_ECDSA_521;
|
615
|
+
break;
|
616
|
+
#endif
|
617
|
+
#ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
|
618
|
+
case LIBSSH2_HOSTKEY_TYPE_ED25519:
|
619
|
+
mask |= LIBSSH2_KNOWNHOST_KEY_ED25519;
|
620
|
+
break;
|
621
|
+
#endif
|
622
|
+
}
|
623
|
+
|
624
|
+
return mask;
|
625
|
+
}
|
626
|
+
|
627
|
+
/*
|
628
|
+
* Check the host against the user's known_hosts file.
|
629
|
+
*
|
630
|
+
* Returns 1/0 for valid/''not-valid or <0 for an error
|
631
|
+
*/
|
632
|
+
static int check_against_known_hosts(
|
633
|
+
LIBSSH2_SESSION *session,
|
634
|
+
LIBSSH2_KNOWNHOSTS *known_hosts,
|
635
|
+
const char *hostname,
|
636
|
+
int port,
|
637
|
+
const char *key,
|
638
|
+
size_t key_len,
|
639
|
+
int key_type)
|
640
|
+
{
|
641
|
+
int check, typemask, ret = 0;
|
642
|
+
struct libssh2_knownhost *host = NULL;
|
643
|
+
|
644
|
+
if (known_hosts == NULL)
|
645
|
+
return 0;
|
646
|
+
|
647
|
+
typemask = fingerprint_type_mask(key_type);
|
648
|
+
check = libssh2_knownhost_checkp(known_hosts, hostname, port, key, key_len, typemask, &host);
|
649
|
+
if (check == LIBSSH2_KNOWNHOST_CHECK_FAILURE) {
|
650
|
+
ssh_error(session, "error checking for known host");
|
651
|
+
return -1;
|
652
|
+
}
|
653
|
+
|
654
|
+
ret = check == LIBSSH2_KNOWNHOST_CHECK_MATCH ? 1 : 0;
|
655
|
+
|
656
|
+
return ret;
|
657
|
+
}
|
658
|
+
|
659
|
+
/*
|
660
|
+
* Perform the check for the session's certificate against known hosts if
|
661
|
+
* possible and then ask the user if they have a callback.
|
662
|
+
*
|
663
|
+
* Returns 1/0 for valid/not-valid or <0 for an error
|
664
|
+
*/
|
665
|
+
static int check_certificate(
|
666
|
+
LIBSSH2_SESSION *session,
|
667
|
+
LIBSSH2_KNOWNHOSTS *known_hosts,
|
668
|
+
git_transport_certificate_check_cb check_cb,
|
669
|
+
void *check_cb_payload,
|
670
|
+
const char *host,
|
671
|
+
int port)
|
672
|
+
{
|
673
|
+
git_cert_hostkey cert = {{ 0 }};
|
674
|
+
const char *key;
|
675
|
+
size_t cert_len;
|
676
|
+
int cert_type, cert_valid = 0, error = GIT_ECERTIFICATE;
|
677
|
+
|
678
|
+
if ((key = libssh2_session_hostkey(session, &cert_len, &cert_type)) == NULL) {
|
679
|
+
ssh_error(session, "failed to retrieve hostkey");
|
680
|
+
return -1;
|
681
|
+
}
|
682
|
+
|
683
|
+
if ((cert_valid = check_against_known_hosts(session, known_hosts, host, port, key, cert_len, cert_type)) < 0)
|
684
|
+
return -1;
|
685
|
+
|
686
|
+
cert.parent.cert_type = GIT_CERT_HOSTKEY_LIBSSH2;
|
687
|
+
if (key != NULL) {
|
688
|
+
cert.type |= GIT_CERT_SSH_RAW;
|
689
|
+
cert.hostkey = key;
|
690
|
+
cert.hostkey_len = cert_len;
|
691
|
+
switch (cert_type) {
|
692
|
+
case LIBSSH2_HOSTKEY_TYPE_RSA:
|
693
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_RSA;
|
694
|
+
break;
|
695
|
+
case LIBSSH2_HOSTKEY_TYPE_DSS:
|
696
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_DSS;
|
697
|
+
break;
|
698
|
+
|
699
|
+
#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
|
700
|
+
case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
|
701
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_256;
|
702
|
+
break;
|
703
|
+
case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
|
704
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_384;
|
705
|
+
break;
|
706
|
+
case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
|
707
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_521;
|
708
|
+
break;
|
709
|
+
#endif
|
710
|
+
|
711
|
+
#ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
|
712
|
+
case LIBSSH2_HOSTKEY_TYPE_ED25519:
|
713
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ED25519;
|
714
|
+
break;
|
715
|
+
#endif
|
716
|
+
default:
|
717
|
+
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_UNKNOWN;
|
718
|
+
}
|
719
|
+
}
|
720
|
+
|
721
|
+
#ifdef LIBSSH2_HOSTKEY_HASH_SHA256
|
722
|
+
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA256);
|
723
|
+
if (key != NULL) {
|
724
|
+
cert.type |= GIT_CERT_SSH_SHA256;
|
725
|
+
memcpy(&cert.hash_sha256, key, 32);
|
726
|
+
}
|
727
|
+
#endif
|
728
|
+
|
729
|
+
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
|
730
|
+
if (key != NULL) {
|
731
|
+
cert.type |= GIT_CERT_SSH_SHA1;
|
732
|
+
memcpy(&cert.hash_sha1, key, 20);
|
733
|
+
}
|
734
|
+
|
735
|
+
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
|
736
|
+
if (key != NULL) {
|
737
|
+
cert.type |= GIT_CERT_SSH_MD5;
|
738
|
+
memcpy(&cert.hash_md5, key, 16);
|
739
|
+
}
|
740
|
+
|
741
|
+
if (cert.type == 0) {
|
742
|
+
git_error_set(GIT_ERROR_SSH, "unable to get the host key");
|
743
|
+
return -1;
|
744
|
+
}
|
745
|
+
|
746
|
+
if (check_cb != NULL) {
|
747
|
+
git_cert_hostkey *cert_ptr = &cert;
|
748
|
+
|
749
|
+
error = check_cb((git_cert *)cert_ptr, cert_valid, host,
|
750
|
+
check_cb_payload);
|
751
|
+
|
752
|
+
if (error == 0)
|
753
|
+
cert_valid = 1;
|
754
|
+
else if (error != GIT_PASSTHROUGH)
|
755
|
+
cert_valid = 0;
|
756
|
+
}
|
757
|
+
|
758
|
+
if (!cert_valid) {
|
759
|
+
git_error_set(GIT_ERROR_SSH, "invalid or unknown remote ssh hostkey");
|
760
|
+
return (error == GIT_PASSTHROUGH) ? GIT_ECERTIFICATE : error;
|
761
|
+
}
|
507
762
|
|
508
763
|
return 0;
|
509
764
|
}
|
@@ -516,150 +771,75 @@ static int _git_ssh_setup_conn(
|
|
516
771
|
const char *cmd,
|
517
772
|
git_smart_subtransport_stream **stream)
|
518
773
|
{
|
519
|
-
|
520
|
-
int auth_methods, error = 0;
|
521
|
-
size_t i;
|
774
|
+
int auth_methods, error = 0, port;
|
522
775
|
ssh_stream *s;
|
523
776
|
git_credential *cred = NULL;
|
524
777
|
LIBSSH2_SESSION *session=NULL;
|
525
778
|
LIBSSH2_CHANNEL *channel=NULL;
|
779
|
+
LIBSSH2_KNOWNHOSTS *known_hosts = NULL;
|
526
780
|
|
527
781
|
t->current_stream = NULL;
|
528
782
|
|
529
783
|
*stream = NULL;
|
530
|
-
if (ssh_stream_alloc(t,
|
784
|
+
if (ssh_stream_alloc(t, cmd, stream) < 0)
|
531
785
|
return -1;
|
532
786
|
|
533
787
|
s = (ssh_stream *)*stream;
|
534
788
|
s->session = NULL;
|
535
789
|
s->channel = NULL;
|
536
790
|
|
537
|
-
|
538
|
-
|
791
|
+
if (git_net_str_is_url(url))
|
792
|
+
error = git_net_url_parse(&s->url, url);
|
793
|
+
else
|
794
|
+
error = git_net_url_parse_scp(&s->url, url);
|
539
795
|
|
540
|
-
|
541
|
-
if ((error = git_net_url_parse(&urldata, url)) < 0)
|
542
|
-
goto done;
|
543
|
-
|
544
|
-
goto post_extract;
|
545
|
-
}
|
546
|
-
}
|
547
|
-
if ((error = git_ssh_extract_url_parts(&urldata, url)) < 0)
|
796
|
+
if (error < 0)
|
548
797
|
goto done;
|
549
798
|
|
550
|
-
|
551
|
-
|
799
|
+
/* Safety check: like git, we forbid paths that look like an option as
|
800
|
+
* that could lead to injection on the remote side */
|
801
|
+
if (git_process__is_cmdline_option(s->url.path)) {
|
802
|
+
git_error_set(GIT_ERROR_NET, "cannot ssh: path '%s' is ambiguous with command-line option", s->url.path);
|
803
|
+
error = -1;
|
804
|
+
goto done;
|
805
|
+
}
|
552
806
|
|
553
|
-
GIT_ERROR_CHECK_ALLOC(urldata.port);
|
554
807
|
|
555
|
-
|
556
|
-
if ((error = git_socket_stream_new(&s->io, urldata.host, urldata.port)) < 0 ||
|
808
|
+
if ((error = git_socket_stream_new(&s->io, s->url.host, s->url.port)) < 0 ||
|
557
809
|
(error = git_stream_connect(s->io)) < 0)
|
558
810
|
goto done;
|
559
811
|
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
cert.parent.cert_type = GIT_CERT_HOSTKEY_LIBSSH2;
|
570
|
-
|
571
|
-
key = libssh2_session_hostkey(session, &cert_len, &cert_type);
|
572
|
-
if (key != NULL) {
|
573
|
-
cert.type |= GIT_CERT_SSH_RAW;
|
574
|
-
cert.hostkey = key;
|
575
|
-
cert.hostkey_len = cert_len;
|
576
|
-
switch (cert_type) {
|
577
|
-
case LIBSSH2_HOSTKEY_TYPE_RSA:
|
578
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_RSA;
|
579
|
-
break;
|
580
|
-
case LIBSSH2_HOSTKEY_TYPE_DSS:
|
581
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_DSS;
|
582
|
-
break;
|
583
|
-
|
584
|
-
#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
|
585
|
-
case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
|
586
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_256;
|
587
|
-
break;
|
588
|
-
case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
|
589
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_384;
|
590
|
-
break;
|
591
|
-
case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
|
592
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_521;
|
593
|
-
break;
|
594
|
-
#endif
|
595
|
-
|
596
|
-
#ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
|
597
|
-
case LIBSSH2_HOSTKEY_TYPE_ED25519:
|
598
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_KEY_ED25519;
|
599
|
-
break;
|
600
|
-
#endif
|
601
|
-
default:
|
602
|
-
cert.raw_type = GIT_CERT_SSH_RAW_TYPE_UNKNOWN;
|
603
|
-
}
|
604
|
-
}
|
605
|
-
|
606
|
-
#ifdef LIBSSH2_HOSTKEY_HASH_SHA256
|
607
|
-
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA256);
|
608
|
-
if (key != NULL) {
|
609
|
-
cert.type |= GIT_CERT_SSH_SHA256;
|
610
|
-
memcpy(&cert.hash_sha256, key, 32);
|
611
|
-
}
|
612
|
-
#endif
|
613
|
-
|
614
|
-
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
|
615
|
-
if (key != NULL) {
|
616
|
-
cert.type |= GIT_CERT_SSH_SHA1;
|
617
|
-
memcpy(&cert.hash_sha1, key, 20);
|
618
|
-
}
|
619
|
-
|
620
|
-
key = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
|
621
|
-
if (key != NULL) {
|
622
|
-
cert.type |= GIT_CERT_SSH_MD5;
|
623
|
-
memcpy(&cert.hash_md5, key, 16);
|
624
|
-
}
|
625
|
-
|
626
|
-
if (cert.type == 0) {
|
627
|
-
git_error_set(GIT_ERROR_SSH, "unable to get the host key");
|
628
|
-
error = -1;
|
629
|
-
goto done;
|
630
|
-
}
|
631
|
-
|
632
|
-
/* We don't currently trust any hostkeys */
|
633
|
-
git_error_clear();
|
634
|
-
|
635
|
-
cert_ptr = &cert;
|
636
|
-
|
637
|
-
error = t->owner->certificate_check_cb((git_cert *) cert_ptr, 0, urldata.host, t->owner->message_cb_payload);
|
812
|
+
/*
|
813
|
+
* Try to parse the port as a number, if we can't then fall back to
|
814
|
+
* default. It would be nice if we could get the port that was resolved
|
815
|
+
* as part of the stream connection, but that's not something that's
|
816
|
+
* exposed.
|
817
|
+
*/
|
818
|
+
if (git__strntol32(&port, s->url.port, strlen(s->url.port), NULL, 10) < 0)
|
819
|
+
port = -1;
|
638
820
|
|
639
|
-
|
640
|
-
|
641
|
-
git_error_set(GIT_ERROR_NET, "user cancelled hostkey check");
|
821
|
+
if ((error = _git_ssh_session_create(&session, &known_hosts, s->url.host, port, s->io)) < 0)
|
822
|
+
goto done;
|
642
823
|
|
643
|
-
|
644
|
-
|
645
|
-
}
|
824
|
+
if ((error = check_certificate(session, known_hosts, t->owner->connect_opts.callbacks.certificate_check, t->owner->connect_opts.callbacks.payload, s->url.host, port)) < 0)
|
825
|
+
goto done;
|
646
826
|
|
647
827
|
/* we need the username to ask for auth methods */
|
648
|
-
if (!
|
828
|
+
if (!s->url.username) {
|
649
829
|
if ((error = request_creds(&cred, t, NULL, GIT_CREDENTIAL_USERNAME)) < 0)
|
650
830
|
goto done;
|
651
831
|
|
652
|
-
|
832
|
+
s->url.username = git__strdup(((git_credential_username *) cred)->username);
|
653
833
|
cred->free(cred);
|
654
834
|
cred = NULL;
|
655
|
-
if (!
|
835
|
+
if (!s->url.username)
|
656
836
|
goto done;
|
657
|
-
} else if (
|
658
|
-
if ((error = git_credential_userpass_plaintext_new(&cred,
|
837
|
+
} else if (s->url.username && s->url.password) {
|
838
|
+
if ((error = git_credential_userpass_plaintext_new(&cred, s->url.username, s->url.password)) < 0)
|
659
839
|
goto done;
|
660
840
|
}
|
661
841
|
|
662
|
-
if ((error = list_auth_methods(&auth_methods, session,
|
842
|
+
if ((error = list_auth_methods(&auth_methods, session, s->url.username)) < 0)
|
663
843
|
goto done;
|
664
844
|
|
665
845
|
error = GIT_EAUTH;
|
@@ -673,10 +853,10 @@ post_extract:
|
|
673
853
|
cred = NULL;
|
674
854
|
}
|
675
855
|
|
676
|
-
if ((error = request_creds(&cred, t,
|
856
|
+
if ((error = request_creds(&cred, t, s->url.username, auth_methods)) < 0)
|
677
857
|
goto done;
|
678
858
|
|
679
|
-
if (strcmp(
|
859
|
+
if (strcmp(s->url.username, git_credential_get_username(cred))) {
|
680
860
|
git_error_set(GIT_ERROR_SSH, "username does not match previous request");
|
681
861
|
error = -1;
|
682
862
|
goto done;
|
@@ -686,7 +866,7 @@ post_extract:
|
|
686
866
|
|
687
867
|
if (error == GIT_EAUTH) {
|
688
868
|
/* refresh auth methods */
|
689
|
-
if ((error = list_auth_methods(&auth_methods, session,
|
869
|
+
if ((error = list_auth_methods(&auth_methods, session, s->url.username)) < 0)
|
690
870
|
goto done;
|
691
871
|
else
|
692
872
|
error = GIT_EAUTH;
|
@@ -711,6 +891,9 @@ post_extract:
|
|
711
891
|
t->current_stream = s;
|
712
892
|
|
713
893
|
done:
|
894
|
+
if (known_hosts)
|
895
|
+
libssh2_knownhost_free(known_hosts);
|
896
|
+
|
714
897
|
if (error < 0) {
|
715
898
|
ssh_stream_free(*stream);
|
716
899
|
|
@@ -721,8 +904,6 @@ done:
|
|
721
904
|
if (cred)
|
722
905
|
cred->free(cred);
|
723
906
|
|
724
|
-
git_net_url_dispose(&urldata);
|
725
|
-
|
726
907
|
return error;
|
727
908
|
}
|
728
909
|
|
@@ -835,11 +1016,12 @@ static int list_auth_methods(int *out, LIBSSH2_SESSION *session, const char *use
|
|
835
1016
|
|
836
1017
|
*out = 0;
|
837
1018
|
|
838
|
-
list = libssh2_userauth_list(session, username,
|
1019
|
+
list = libssh2_userauth_list(session, username,
|
1020
|
+
(unsigned int)strlen(username));
|
839
1021
|
|
840
1022
|
/* either error, or the remote accepts NONE auth, which is bizarre, let's punt */
|
841
1023
|
if (list == NULL && !libssh2_userauth_authenticated(session)) {
|
842
|
-
ssh_error(session, "
|
1024
|
+
ssh_error(session, "remote rejected authentication");
|
843
1025
|
return GIT_EAUTH;
|
844
1026
|
}
|
845
1027
|
|
@@ -851,7 +1033,7 @@ static int list_auth_methods(int *out, LIBSSH2_SESSION *session, const char *use
|
|
851
1033
|
if (!git__prefixcmp(ptr, SSH_AUTH_PUBLICKEY)) {
|
852
1034
|
*out |= GIT_CREDENTIAL_SSH_KEY;
|
853
1035
|
*out |= GIT_CREDENTIAL_SSH_CUSTOM;
|
854
|
-
#ifdef
|
1036
|
+
#ifdef GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS
|
855
1037
|
*out |= GIT_CREDENTIAL_SSH_MEMORY;
|
856
1038
|
#endif
|
857
1039
|
ptr += strlen(SSH_AUTH_PUBLICKEY);
|
@@ -870,18 +1052,18 @@ static int list_auth_methods(int *out, LIBSSH2_SESSION *session, const char *use
|
|
870
1052
|
continue;
|
871
1053
|
}
|
872
1054
|
|
873
|
-
/*
|
1055
|
+
/* Skip it if we don't know it */
|
874
1056
|
ptr = strchr(ptr, ',');
|
875
1057
|
}
|
876
1058
|
|
877
1059
|
return 0;
|
878
1060
|
}
|
879
|
-
#endif
|
880
1061
|
|
881
|
-
int
|
882
|
-
git_smart_subtransport **out,
|
1062
|
+
int git_smart_subtransport_ssh_libssh2(
|
1063
|
+
git_smart_subtransport **out,
|
1064
|
+
git_transport *owner,
|
1065
|
+
void *param)
|
883
1066
|
{
|
884
|
-
#ifdef GIT_SSH
|
885
1067
|
ssh_subtransport *t;
|
886
1068
|
|
887
1069
|
GIT_ASSERT_ARG(out);
|
@@ -898,83 +1080,47 @@ int git_smart_subtransport_ssh(
|
|
898
1080
|
|
899
1081
|
*out = (git_smart_subtransport *) t;
|
900
1082
|
return 0;
|
901
|
-
#else
|
902
|
-
GIT_UNUSED(owner);
|
903
|
-
GIT_UNUSED(param);
|
904
|
-
|
905
|
-
GIT_ASSERT_ARG(out);
|
906
|
-
*out = NULL;
|
907
|
-
|
908
|
-
git_error_set(GIT_ERROR_INVALID, "cannot create SSH transport. Library was built without SSH support");
|
909
|
-
return -1;
|
910
|
-
#endif
|
911
1083
|
}
|
912
1084
|
|
913
|
-
int
|
1085
|
+
int git_smart_subtransport_ssh_libssh2_set_paths(
|
1086
|
+
git_smart_subtransport *subtransport,
|
1087
|
+
const char *cmd_uploadpack,
|
1088
|
+
const char *cmd_receivepack)
|
914
1089
|
{
|
915
|
-
|
916
|
-
git_strarray *paths = (git_strarray *) payload;
|
917
|
-
git_transport *transport;
|
918
|
-
transport_smart *smart;
|
919
|
-
ssh_subtransport *t;
|
920
|
-
int error;
|
921
|
-
git_smart_subtransport_definition ssh_definition = {
|
922
|
-
git_smart_subtransport_ssh,
|
923
|
-
0, /* no RPC */
|
924
|
-
NULL,
|
925
|
-
};
|
926
|
-
|
927
|
-
if (paths->count != 2) {
|
928
|
-
git_error_set(GIT_ERROR_SSH, "invalid ssh paths, must be two strings");
|
929
|
-
return GIT_EINVALIDSPEC;
|
930
|
-
}
|
1090
|
+
ssh_subtransport *t = (ssh_subtransport *)subtransport;
|
931
1091
|
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
smart = (transport_smart *) transport;
|
936
|
-
t = (ssh_subtransport *) smart->wrapped;
|
1092
|
+
git__free(t->cmd_uploadpack);
|
1093
|
+
git__free(t->cmd_receivepack);
|
937
1094
|
|
938
|
-
t->cmd_uploadpack = git__strdup(
|
1095
|
+
t->cmd_uploadpack = git__strdup(cmd_uploadpack);
|
939
1096
|
GIT_ERROR_CHECK_ALLOC(t->cmd_uploadpack);
|
940
|
-
|
1097
|
+
|
1098
|
+
t->cmd_receivepack = git__strdup(cmd_receivepack);
|
941
1099
|
GIT_ERROR_CHECK_ALLOC(t->cmd_receivepack);
|
942
1100
|
|
943
|
-
*out = transport;
|
944
1101
|
return 0;
|
945
|
-
#else
|
946
|
-
GIT_UNUSED(owner);
|
947
|
-
GIT_UNUSED(payload);
|
948
|
-
|
949
|
-
GIT_ASSERT_ARG(out);
|
950
|
-
*out = NULL;
|
951
|
-
|
952
|
-
git_error_set(GIT_ERROR_INVALID, "cannot create SSH transport. Library was built without SSH support");
|
953
|
-
return -1;
|
954
|
-
#endif
|
955
1102
|
}
|
956
1103
|
|
957
|
-
|
958
|
-
static void shutdown_ssh(void)
|
1104
|
+
static void shutdown_libssh2(void)
|
959
1105
|
{
|
960
1106
|
libssh2_exit();
|
961
1107
|
}
|
962
|
-
#endif
|
963
1108
|
|
964
|
-
int
|
1109
|
+
int git_transport_ssh_libssh2_global_init(void)
|
965
1110
|
{
|
966
|
-
#ifdef GIT_SSH
|
967
1111
|
if (libssh2_init(0) < 0) {
|
968
1112
|
git_error_set(GIT_ERROR_SSH, "unable to initialize libssh2");
|
969
1113
|
return -1;
|
970
1114
|
}
|
971
1115
|
|
972
|
-
return git_runtime_shutdown_register(
|
1116
|
+
return git_runtime_shutdown_register(shutdown_libssh2);
|
1117
|
+
}
|
973
1118
|
|
974
|
-
#else
|
1119
|
+
#else /* GIT_SSH */
|
975
1120
|
|
976
|
-
|
1121
|
+
int git_transport_ssh_libssh2_global_init(void)
|
1122
|
+
{
|
977
1123
|
return 0;
|
1124
|
+
}
|
978
1125
|
|
979
1126
|
#endif
|
980
|
-
}
|