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
@@ -22,6 +22,7 @@ typedef struct transport_definition {
|
|
22
22
|
|
23
23
|
static git_smart_subtransport_definition http_subtransport_definition = { git_smart_subtransport_http, 1, NULL };
|
24
24
|
static git_smart_subtransport_definition git_subtransport_definition = { git_smart_subtransport_git, 0, NULL };
|
25
|
+
|
25
26
|
#ifdef GIT_SSH
|
26
27
|
static git_smart_subtransport_definition ssh_subtransport_definition = { git_smart_subtransport_ssh, 0, NULL };
|
27
28
|
#endif
|
@@ -33,11 +34,13 @@ static transport_definition transports[] = {
|
|
33
34
|
{ "http://", git_transport_smart, &http_subtransport_definition },
|
34
35
|
{ "https://", git_transport_smart, &http_subtransport_definition },
|
35
36
|
{ "file://", git_transport_local, NULL },
|
37
|
+
|
36
38
|
#ifdef GIT_SSH
|
37
39
|
{ "ssh://", git_transport_smart, &ssh_subtransport_definition },
|
38
40
|
{ "ssh+git://", git_transport_smart, &ssh_subtransport_definition },
|
39
41
|
{ "git+ssh://", git_transport_smart, &ssh_subtransport_definition },
|
40
42
|
#endif
|
43
|
+
|
41
44
|
{ NULL, 0, 0 }
|
42
45
|
};
|
43
46
|
|
@@ -200,7 +203,7 @@ int git_transport_unregister(const char *scheme)
|
|
200
203
|
git__free(d);
|
201
204
|
|
202
205
|
if (!custom_transports.length)
|
203
|
-
|
206
|
+
git_vector_dispose(&custom_transports);
|
204
207
|
|
205
208
|
error = 0;
|
206
209
|
goto done;
|
@@ -20,13 +20,13 @@
|
|
20
20
|
#include <krb5.h>
|
21
21
|
#endif
|
22
22
|
|
23
|
-
static gss_OID_desc
|
23
|
+
static gss_OID_desc gssapi_oid_spnego =
|
24
24
|
{ 6, (void *) "\x2b\x06\x01\x05\x05\x02" };
|
25
|
-
static gss_OID_desc
|
25
|
+
static gss_OID_desc gssapi_oid_krb5 =
|
26
26
|
{ 9, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02" };
|
27
27
|
|
28
|
-
static gss_OID
|
29
|
-
{ &
|
28
|
+
static gss_OID gssapi_oids[] =
|
29
|
+
{ &gssapi_oid_spnego, &gssapi_oid_krb5, NULL };
|
30
30
|
|
31
31
|
typedef struct {
|
32
32
|
git_http_auth_context parent;
|
@@ -36,9 +36,9 @@ typedef struct {
|
|
36
36
|
char *challenge;
|
37
37
|
gss_ctx_id_t gss_context;
|
38
38
|
gss_OID oid;
|
39
|
-
}
|
39
|
+
} http_auth_gssapi_context;
|
40
40
|
|
41
|
-
static void
|
41
|
+
static void gssapi_err_set(
|
42
42
|
OM_uint32 status_major,
|
43
43
|
OM_uint32 status_minor,
|
44
44
|
const char *message)
|
@@ -58,11 +58,11 @@ static void negotiate_err_set(
|
|
58
58
|
}
|
59
59
|
}
|
60
60
|
|
61
|
-
static int
|
61
|
+
static int gssapi_set_challenge(
|
62
62
|
git_http_auth_context *c,
|
63
63
|
const char *challenge)
|
64
64
|
{
|
65
|
-
|
65
|
+
http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
|
66
66
|
|
67
67
|
GIT_ASSERT_ARG(ctx);
|
68
68
|
GIT_ASSERT_ARG(challenge);
|
@@ -76,7 +76,7 @@ static int negotiate_set_challenge(
|
|
76
76
|
return 0;
|
77
77
|
}
|
78
78
|
|
79
|
-
static void
|
79
|
+
static void gssapi_context_dispose(http_auth_gssapi_context *ctx)
|
80
80
|
{
|
81
81
|
OM_uint32 status_minor;
|
82
82
|
|
@@ -92,12 +92,12 @@ static void negotiate_context_dispose(http_auth_negotiate_context *ctx)
|
|
92
92
|
ctx->challenge = NULL;
|
93
93
|
}
|
94
94
|
|
95
|
-
static int
|
95
|
+
static int gssapi_next_token(
|
96
96
|
git_str *buf,
|
97
97
|
git_http_auth_context *c,
|
98
98
|
git_credential *cred)
|
99
99
|
{
|
100
|
-
|
100
|
+
http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
|
101
101
|
OM_uint32 status_major, status_minor;
|
102
102
|
gss_buffer_desc target_buffer = GSS_C_EMPTY_BUFFER,
|
103
103
|
input_token = GSS_C_EMPTY_BUFFER,
|
@@ -126,7 +126,7 @@ static int negotiate_next_token(
|
|
126
126
|
GSS_C_NT_HOSTBASED_SERVICE, &server);
|
127
127
|
|
128
128
|
if (GSS_ERROR(status_major)) {
|
129
|
-
|
129
|
+
gssapi_err_set(status_major, status_minor,
|
130
130
|
"could not parse principal");
|
131
131
|
error = -1;
|
132
132
|
goto done;
|
@@ -152,10 +152,10 @@ static int negotiate_next_token(
|
|
152
152
|
input_token.length = input_buf.size;
|
153
153
|
input_token_ptr = &input_token;
|
154
154
|
} else if (ctx->gss_context != GSS_C_NO_CONTEXT) {
|
155
|
-
|
155
|
+
gssapi_context_dispose(ctx);
|
156
156
|
}
|
157
157
|
|
158
|
-
mech = &
|
158
|
+
mech = &gssapi_oid_spnego;
|
159
159
|
|
160
160
|
status_major = gss_init_sec_context(
|
161
161
|
&status_minor,
|
@@ -173,14 +173,14 @@ static int negotiate_next_token(
|
|
173
173
|
NULL);
|
174
174
|
|
175
175
|
if (GSS_ERROR(status_major)) {
|
176
|
-
|
176
|
+
gssapi_err_set(status_major, status_minor, "negotiate failure");
|
177
177
|
error = -1;
|
178
178
|
goto done;
|
179
179
|
}
|
180
180
|
|
181
181
|
/* This message merely told us auth was complete; we do not respond. */
|
182
182
|
if (status_major == GSS_S_COMPLETE) {
|
183
|
-
|
183
|
+
gssapi_context_dispose(ctx);
|
184
184
|
ctx->complete = 1;
|
185
185
|
goto done;
|
186
186
|
}
|
@@ -204,20 +204,20 @@ done:
|
|
204
204
|
return error;
|
205
205
|
}
|
206
206
|
|
207
|
-
static int
|
207
|
+
static int gssapi_is_complete(git_http_auth_context *c)
|
208
208
|
{
|
209
|
-
|
209
|
+
http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
|
210
210
|
|
211
211
|
GIT_ASSERT_ARG(ctx);
|
212
212
|
|
213
213
|
return (ctx->complete == 1);
|
214
214
|
}
|
215
215
|
|
216
|
-
static void
|
216
|
+
static void gssapi_context_free(git_http_auth_context *c)
|
217
217
|
{
|
218
|
-
|
218
|
+
http_auth_gssapi_context *ctx = (http_auth_gssapi_context *)c;
|
219
219
|
|
220
|
-
|
220
|
+
gssapi_context_dispose(ctx);
|
221
221
|
|
222
222
|
ctx->configured = 0;
|
223
223
|
ctx->complete = 0;
|
@@ -226,8 +226,8 @@ static void negotiate_context_free(git_http_auth_context *c)
|
|
226
226
|
git__free(ctx);
|
227
227
|
}
|
228
228
|
|
229
|
-
static int
|
230
|
-
|
229
|
+
static int gssapi_init_context(
|
230
|
+
http_auth_gssapi_context *ctx,
|
231
231
|
const git_net_url *url)
|
232
232
|
{
|
233
233
|
OM_uint32 status_major, status_minor;
|
@@ -239,13 +239,13 @@ static int negotiate_init_context(
|
|
239
239
|
status_major = gss_indicate_mechs(&status_minor, &mechanism_list);
|
240
240
|
|
241
241
|
if (GSS_ERROR(status_major)) {
|
242
|
-
|
242
|
+
gssapi_err_set(status_major, status_minor,
|
243
243
|
"could not query mechanisms");
|
244
244
|
return -1;
|
245
245
|
}
|
246
246
|
|
247
247
|
if (mechanism_list) {
|
248
|
-
for (oid =
|
248
|
+
for (oid = gssapi_oids; *oid; oid++) {
|
249
249
|
for (i = 0; i < mechanism_list->count; i++) {
|
250
250
|
item = &mechanism_list->elements[i];
|
251
251
|
|
@@ -285,14 +285,14 @@ int git_http_auth_negotiate(
|
|
285
285
|
git_http_auth_context **out,
|
286
286
|
const git_net_url *url)
|
287
287
|
{
|
288
|
-
|
288
|
+
http_auth_gssapi_context *ctx;
|
289
289
|
|
290
290
|
*out = NULL;
|
291
291
|
|
292
|
-
ctx = git__calloc(1, sizeof(
|
292
|
+
ctx = git__calloc(1, sizeof(http_auth_gssapi_context));
|
293
293
|
GIT_ERROR_CHECK_ALLOC(ctx);
|
294
294
|
|
295
|
-
if (
|
295
|
+
if (gssapi_init_context(ctx, url) < 0) {
|
296
296
|
git__free(ctx);
|
297
297
|
return -1;
|
298
298
|
}
|
@@ -300,10 +300,10 @@ int git_http_auth_negotiate(
|
|
300
300
|
ctx->parent.type = GIT_HTTP_AUTH_NEGOTIATE;
|
301
301
|
ctx->parent.credtypes = GIT_CREDENTIAL_DEFAULT;
|
302
302
|
ctx->parent.connection_affinity = 1;
|
303
|
-
ctx->parent.set_challenge =
|
304
|
-
ctx->parent.next_token =
|
305
|
-
ctx->parent.is_complete =
|
306
|
-
ctx->parent.free =
|
303
|
+
ctx->parent.set_challenge = gssapi_set_challenge;
|
304
|
+
ctx->parent.next_token = gssapi_next_token;
|
305
|
+
ctx->parent.is_complete = gssapi_is_complete;
|
306
|
+
ctx->parent.free = gssapi_context_free;
|
307
307
|
|
308
308
|
*out = (git_http_auth_context *)ctx;
|
309
309
|
|
@@ -23,7 +23,7 @@ typedef struct {
|
|
23
23
|
bool complete;
|
24
24
|
} http_auth_ntlm_context;
|
25
25
|
|
26
|
-
static int
|
26
|
+
static int ntlmclient_set_challenge(
|
27
27
|
git_http_auth_context *c,
|
28
28
|
const char *challenge)
|
29
29
|
{
|
@@ -40,7 +40,7 @@ static int ntlm_set_challenge(
|
|
40
40
|
return 0;
|
41
41
|
}
|
42
42
|
|
43
|
-
static int
|
43
|
+
static int ntlmclient_set_credentials(http_auth_ntlm_context *ctx, git_credential *_cred)
|
44
44
|
{
|
45
45
|
git_credential_userpass_plaintext *cred;
|
46
46
|
const char *sep, *username;
|
@@ -76,7 +76,7 @@ done:
|
|
76
76
|
return error;
|
77
77
|
}
|
78
78
|
|
79
|
-
static int
|
79
|
+
static int ntlmclient_next_token(
|
80
80
|
git_str *buf,
|
81
81
|
git_http_auth_context *c,
|
82
82
|
git_credential *cred)
|
@@ -104,7 +104,7 @@ static int ntlm_next_token(
|
|
104
104
|
*/
|
105
105
|
ctx->complete = true;
|
106
106
|
|
107
|
-
if (cred &&
|
107
|
+
if (cred && ntlmclient_set_credentials(ctx, cred) != 0)
|
108
108
|
goto done;
|
109
109
|
|
110
110
|
if (challenge_len < 4) {
|
@@ -162,7 +162,7 @@ done:
|
|
162
162
|
return error;
|
163
163
|
}
|
164
164
|
|
165
|
-
static int
|
165
|
+
static int ntlmclient_is_complete(git_http_auth_context *c)
|
166
166
|
{
|
167
167
|
http_auth_ntlm_context *ctx = (http_auth_ntlm_context *)c;
|
168
168
|
|
@@ -170,7 +170,7 @@ static int ntlm_is_complete(git_http_auth_context *c)
|
|
170
170
|
return (ctx->complete == true);
|
171
171
|
}
|
172
172
|
|
173
|
-
static void
|
173
|
+
static void ntlmclient_context_free(git_http_auth_context *c)
|
174
174
|
{
|
175
175
|
http_auth_ntlm_context *ctx = (http_auth_ntlm_context *)c;
|
176
176
|
|
@@ -179,7 +179,7 @@ static void ntlm_context_free(git_http_auth_context *c)
|
|
179
179
|
git__free(ctx);
|
180
180
|
}
|
181
181
|
|
182
|
-
static int
|
182
|
+
static int ntlmclient_init_context(
|
183
183
|
http_auth_ntlm_context *ctx,
|
184
184
|
const git_net_url *url)
|
185
185
|
{
|
@@ -206,7 +206,7 @@ int git_http_auth_ntlm(
|
|
206
206
|
ctx = git__calloc(1, sizeof(http_auth_ntlm_context));
|
207
207
|
GIT_ERROR_CHECK_ALLOC(ctx);
|
208
208
|
|
209
|
-
if (
|
209
|
+
if (ntlmclient_init_context(ctx, url) < 0) {
|
210
210
|
git__free(ctx);
|
211
211
|
return -1;
|
212
212
|
}
|
@@ -214,10 +214,10 @@ int git_http_auth_ntlm(
|
|
214
214
|
ctx->parent.type = GIT_HTTP_AUTH_NTLM;
|
215
215
|
ctx->parent.credtypes = GIT_CREDENTIAL_USERPASS_PLAINTEXT;
|
216
216
|
ctx->parent.connection_affinity = 1;
|
217
|
-
ctx->parent.set_challenge =
|
218
|
-
ctx->parent.next_token =
|
219
|
-
ctx->parent.is_complete =
|
220
|
-
ctx->parent.free =
|
217
|
+
ctx->parent.set_challenge = ntlmclient_set_challenge;
|
218
|
+
ctx->parent.next_token = ntlmclient_next_token;
|
219
|
+
ctx->parent.is_complete = ntlmclient_is_complete;
|
220
|
+
ctx->parent.free = ntlmclient_context_free;
|
221
221
|
|
222
222
|
*out = (git_http_auth_context *)ctx;
|
223
223
|
|
@@ -0,0 +1,341 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
3
|
+
*
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include "auth_ntlm.h"
|
9
|
+
#include "auth_negotiate.h"
|
10
|
+
|
11
|
+
#ifdef GIT_WIN32
|
12
|
+
|
13
|
+
#define SECURITY_WIN32
|
14
|
+
|
15
|
+
#include "git2.h"
|
16
|
+
#include "auth.h"
|
17
|
+
#include "git2/sys/credential.h"
|
18
|
+
|
19
|
+
#include <windows.h>
|
20
|
+
#include <security.h>
|
21
|
+
|
22
|
+
typedef struct {
|
23
|
+
git_http_auth_context parent;
|
24
|
+
wchar_t *target;
|
25
|
+
|
26
|
+
const char *package_name;
|
27
|
+
size_t package_name_len;
|
28
|
+
wchar_t *package_name_w;
|
29
|
+
SecPkgInfoW *package_info;
|
30
|
+
SEC_WINNT_AUTH_IDENTITY_W identity;
|
31
|
+
CredHandle cred;
|
32
|
+
CtxtHandle context;
|
33
|
+
|
34
|
+
int has_identity : 1,
|
35
|
+
has_credentials : 1,
|
36
|
+
has_context : 1,
|
37
|
+
complete : 1;
|
38
|
+
git_str challenge;
|
39
|
+
} http_auth_sspi_context;
|
40
|
+
|
41
|
+
static void sspi_reset_context(http_auth_sspi_context *ctx)
|
42
|
+
{
|
43
|
+
if (ctx->has_identity) {
|
44
|
+
git__free(ctx->identity.User);
|
45
|
+
git__free(ctx->identity.Domain);
|
46
|
+
git__free(ctx->identity.Password);
|
47
|
+
|
48
|
+
memset(&ctx->identity, 0, sizeof(SEC_WINNT_AUTH_IDENTITY_W));
|
49
|
+
|
50
|
+
ctx->has_identity = 0;
|
51
|
+
}
|
52
|
+
|
53
|
+
if (ctx->has_credentials) {
|
54
|
+
FreeCredentialsHandle(&ctx->cred);
|
55
|
+
memset(&ctx->cred, 0, sizeof(CredHandle));
|
56
|
+
|
57
|
+
ctx->has_credentials = 0;
|
58
|
+
}
|
59
|
+
|
60
|
+
if (ctx->has_context) {
|
61
|
+
DeleteSecurityContext(&ctx->context);
|
62
|
+
memset(&ctx->context, 0, sizeof(CtxtHandle));
|
63
|
+
|
64
|
+
ctx->has_context = 0;
|
65
|
+
}
|
66
|
+
|
67
|
+
ctx->complete = 0;
|
68
|
+
|
69
|
+
git_str_dispose(&ctx->challenge);
|
70
|
+
}
|
71
|
+
|
72
|
+
static int sspi_set_challenge(
|
73
|
+
git_http_auth_context *c,
|
74
|
+
const char *challenge)
|
75
|
+
{
|
76
|
+
http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
|
77
|
+
size_t challenge_len = strlen(challenge);
|
78
|
+
|
79
|
+
git_str_clear(&ctx->challenge);
|
80
|
+
|
81
|
+
if (strncmp(challenge, ctx->package_name, ctx->package_name_len) != 0) {
|
82
|
+
git_error_set(GIT_ERROR_NET, "invalid %s challenge from server", ctx->package_name);
|
83
|
+
return -1;
|
84
|
+
}
|
85
|
+
|
86
|
+
/*
|
87
|
+
* A package type indicator without a base64 payload indicates the
|
88
|
+
* mechanism; it's not an actual challenge. Ignore it.
|
89
|
+
*/
|
90
|
+
if (challenge[ctx->package_name_len] == 0) {
|
91
|
+
return 0;
|
92
|
+
} else if (challenge[ctx->package_name_len] != ' ') {
|
93
|
+
git_error_set(GIT_ERROR_NET, "invalid %s challenge from server", ctx->package_name);
|
94
|
+
return -1;
|
95
|
+
}
|
96
|
+
|
97
|
+
if (git_str_decode_base64(&ctx->challenge,
|
98
|
+
challenge + (ctx->package_name_len + 1),
|
99
|
+
challenge_len - (ctx->package_name_len + 1)) < 0) {
|
100
|
+
git_error_set(GIT_ERROR_NET, "invalid %s challenge from server", ctx->package_name);
|
101
|
+
return -1;
|
102
|
+
}
|
103
|
+
|
104
|
+
GIT_ASSERT(ctx->challenge.size <= ULONG_MAX);
|
105
|
+
return 0;
|
106
|
+
}
|
107
|
+
|
108
|
+
static int create_identity(
|
109
|
+
SEC_WINNT_AUTH_IDENTITY_W **out,
|
110
|
+
http_auth_sspi_context *ctx,
|
111
|
+
git_credential *cred)
|
112
|
+
{
|
113
|
+
git_credential_userpass_plaintext *userpass;
|
114
|
+
wchar_t *username = NULL, *domain = NULL, *password = NULL;
|
115
|
+
int username_len = 0, domain_len = 0, password_len = 0;
|
116
|
+
const char *sep;
|
117
|
+
|
118
|
+
if (cred->credtype == GIT_CREDENTIAL_DEFAULT) {
|
119
|
+
*out = NULL;
|
120
|
+
return 0;
|
121
|
+
}
|
122
|
+
|
123
|
+
if (cred->credtype != GIT_CREDENTIAL_USERPASS_PLAINTEXT) {
|
124
|
+
git_error_set(GIT_ERROR_NET, "unknown credential type: %d", cred->credtype);
|
125
|
+
return -1;
|
126
|
+
}
|
127
|
+
|
128
|
+
userpass = (git_credential_userpass_plaintext *)cred;
|
129
|
+
|
130
|
+
if ((sep = strchr(userpass->username, '\\')) != NULL) {
|
131
|
+
GIT_ASSERT(sep - userpass->username < INT_MAX);
|
132
|
+
|
133
|
+
username_len = git_utf8_to_16_alloc(&username, sep + 1);
|
134
|
+
domain_len = git_utf8_to_16_alloc_with_len(&domain,
|
135
|
+
userpass->username, (int)(sep - userpass->username));
|
136
|
+
} else {
|
137
|
+
username_len = git_utf8_to_16_alloc(&username,
|
138
|
+
userpass->username);
|
139
|
+
}
|
140
|
+
|
141
|
+
password_len = git_utf8_to_16_alloc(&password, userpass->password);
|
142
|
+
|
143
|
+
if (username_len < 0 || domain_len < 0 || password_len < 0) {
|
144
|
+
git__free(username);
|
145
|
+
git__free(domain);
|
146
|
+
git__free(password);
|
147
|
+
return -1;
|
148
|
+
}
|
149
|
+
|
150
|
+
ctx->identity.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
|
151
|
+
ctx->identity.User = username;
|
152
|
+
ctx->identity.UserLength = (unsigned long)username_len;
|
153
|
+
ctx->identity.Password = password;
|
154
|
+
ctx->identity.PasswordLength = (unsigned long)password_len;
|
155
|
+
ctx->identity.Domain = domain;
|
156
|
+
ctx->identity.DomainLength = (unsigned long)domain_len;
|
157
|
+
|
158
|
+
ctx->has_identity = 1;
|
159
|
+
|
160
|
+
*out = &ctx->identity;
|
161
|
+
|
162
|
+
return 0;
|
163
|
+
}
|
164
|
+
|
165
|
+
static int sspi_next_token(
|
166
|
+
git_str *buf,
|
167
|
+
git_http_auth_context *c,
|
168
|
+
git_credential *cred)
|
169
|
+
{
|
170
|
+
http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
|
171
|
+
SEC_WINNT_AUTH_IDENTITY_W *identity = NULL;
|
172
|
+
TimeStamp timestamp;
|
173
|
+
DWORD context_flags;
|
174
|
+
SecBuffer input_buf = { 0, SECBUFFER_TOKEN, NULL };
|
175
|
+
SecBuffer output_buf = { 0, SECBUFFER_TOKEN, NULL };
|
176
|
+
SecBufferDesc input_buf_desc = { SECBUFFER_VERSION, 1, &input_buf };
|
177
|
+
SecBufferDesc output_buf_desc = { SECBUFFER_VERSION, 1, &output_buf };
|
178
|
+
SECURITY_STATUS status;
|
179
|
+
|
180
|
+
if (ctx->complete)
|
181
|
+
sspi_reset_context(ctx);
|
182
|
+
|
183
|
+
if (!ctx->has_context) {
|
184
|
+
if (create_identity(&identity, ctx, cred) < 0)
|
185
|
+
return -1;
|
186
|
+
|
187
|
+
status = AcquireCredentialsHandleW(NULL, ctx->package_name_w,
|
188
|
+
SECPKG_CRED_BOTH, NULL, identity, NULL,
|
189
|
+
NULL, &ctx->cred, ×tamp);
|
190
|
+
|
191
|
+
if (status != SEC_E_OK) {
|
192
|
+
git_error_set(GIT_ERROR_OS, "could not acquire credentials");
|
193
|
+
return -1;
|
194
|
+
}
|
195
|
+
|
196
|
+
ctx->has_credentials = 1;
|
197
|
+
}
|
198
|
+
|
199
|
+
context_flags = ISC_REQ_ALLOCATE_MEMORY |
|
200
|
+
ISC_REQ_CONFIDENTIALITY |
|
201
|
+
ISC_REQ_MUTUAL_AUTH;
|
202
|
+
|
203
|
+
if (ctx->challenge.size > 0) {
|
204
|
+
input_buf.BufferType = SECBUFFER_TOKEN;
|
205
|
+
input_buf.cbBuffer = (unsigned long)ctx->challenge.size;
|
206
|
+
input_buf.pvBuffer = ctx->challenge.ptr;
|
207
|
+
}
|
208
|
+
|
209
|
+
status = InitializeSecurityContextW(&ctx->cred,
|
210
|
+
ctx->has_context ? &ctx->context : NULL,
|
211
|
+
ctx->target,
|
212
|
+
context_flags,
|
213
|
+
0,
|
214
|
+
SECURITY_NETWORK_DREP,
|
215
|
+
ctx->has_context ? &input_buf_desc : NULL,
|
216
|
+
0,
|
217
|
+
ctx->has_context ? NULL : &ctx->context,
|
218
|
+
&output_buf_desc,
|
219
|
+
&context_flags,
|
220
|
+
NULL);
|
221
|
+
|
222
|
+
if (status == SEC_I_COMPLETE_AND_CONTINUE ||
|
223
|
+
status == SEC_I_COMPLETE_NEEDED)
|
224
|
+
status = CompleteAuthToken(&ctx->context, &output_buf_desc);
|
225
|
+
|
226
|
+
if (status == SEC_E_OK) {
|
227
|
+
ctx->complete = 1;
|
228
|
+
} else if (status != SEC_I_CONTINUE_NEEDED) {
|
229
|
+
git_error_set(GIT_ERROR_OS, "could not initialize security context");
|
230
|
+
return -1;
|
231
|
+
}
|
232
|
+
|
233
|
+
ctx->has_context = 1;
|
234
|
+
git_str_clear(&ctx->challenge);
|
235
|
+
|
236
|
+
if (output_buf.cbBuffer > 0) {
|
237
|
+
git_str_put(buf, ctx->package_name, ctx->package_name_len);
|
238
|
+
git_str_putc(buf, ' ');
|
239
|
+
git_str_encode_base64(buf, output_buf.pvBuffer, output_buf.cbBuffer);
|
240
|
+
|
241
|
+
FreeContextBuffer(output_buf.pvBuffer);
|
242
|
+
|
243
|
+
if (git_str_oom(buf))
|
244
|
+
return -1;
|
245
|
+
}
|
246
|
+
|
247
|
+
return 0;
|
248
|
+
}
|
249
|
+
|
250
|
+
static int sspi_is_complete(git_http_auth_context *c)
|
251
|
+
{
|
252
|
+
http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
|
253
|
+
|
254
|
+
return ctx->complete;
|
255
|
+
}
|
256
|
+
|
257
|
+
static void sspi_context_free(git_http_auth_context *c)
|
258
|
+
{
|
259
|
+
http_auth_sspi_context *ctx = (http_auth_sspi_context *)c;
|
260
|
+
|
261
|
+
sspi_reset_context(ctx);
|
262
|
+
|
263
|
+
FreeContextBuffer(ctx->package_info);
|
264
|
+
git__free(ctx->target);
|
265
|
+
git__free(ctx);
|
266
|
+
}
|
267
|
+
|
268
|
+
static int sspi_init_context(
|
269
|
+
git_http_auth_context **out,
|
270
|
+
git_http_auth_t type,
|
271
|
+
const git_net_url *url)
|
272
|
+
{
|
273
|
+
http_auth_sspi_context *ctx;
|
274
|
+
git_str target = GIT_STR_INIT;
|
275
|
+
|
276
|
+
*out = NULL;
|
277
|
+
|
278
|
+
ctx = git__calloc(1, sizeof(http_auth_sspi_context));
|
279
|
+
GIT_ERROR_CHECK_ALLOC(ctx);
|
280
|
+
|
281
|
+
switch (type) {
|
282
|
+
case GIT_HTTP_AUTH_NTLM:
|
283
|
+
ctx->package_name = "NTLM";
|
284
|
+
ctx->package_name_len = CONST_STRLEN("NTLM");
|
285
|
+
ctx->package_name_w = L"NTLM";
|
286
|
+
ctx->parent.credtypes = GIT_CREDENTIAL_USERPASS_PLAINTEXT |
|
287
|
+
GIT_CREDENTIAL_DEFAULT;
|
288
|
+
break;
|
289
|
+
case GIT_HTTP_AUTH_NEGOTIATE:
|
290
|
+
ctx->package_name = "Negotiate";
|
291
|
+
ctx->package_name_len = CONST_STRLEN("Negotiate");
|
292
|
+
ctx->package_name_w = L"Negotiate";
|
293
|
+
ctx->parent.credtypes = GIT_CREDENTIAL_DEFAULT;
|
294
|
+
break;
|
295
|
+
default:
|
296
|
+
git_error_set(GIT_ERROR_NET, "unknown SSPI auth type: %d", ctx->parent.type);
|
297
|
+
git__free(ctx);
|
298
|
+
return -1;
|
299
|
+
}
|
300
|
+
|
301
|
+
if (QuerySecurityPackageInfoW(ctx->package_name_w, &ctx->package_info) != SEC_E_OK) {
|
302
|
+
git_error_set(GIT_ERROR_OS, "could not query security package");
|
303
|
+
git__free(ctx);
|
304
|
+
return -1;
|
305
|
+
}
|
306
|
+
|
307
|
+
if (git_str_printf(&target, "http/%s", url->host) < 0 ||
|
308
|
+
git_utf8_to_16_alloc(&ctx->target, target.ptr) < 0) {
|
309
|
+
FreeContextBuffer(ctx->package_info);
|
310
|
+
git__free(ctx);
|
311
|
+
return -1;
|
312
|
+
}
|
313
|
+
|
314
|
+
ctx->parent.type = type;
|
315
|
+
ctx->parent.connection_affinity = 1;
|
316
|
+
ctx->parent.set_challenge = sspi_set_challenge;
|
317
|
+
ctx->parent.next_token = sspi_next_token;
|
318
|
+
ctx->parent.is_complete = sspi_is_complete;
|
319
|
+
ctx->parent.free = sspi_context_free;
|
320
|
+
|
321
|
+
*out = (git_http_auth_context *)ctx;
|
322
|
+
|
323
|
+
git_str_dispose(&target);
|
324
|
+
return 0;
|
325
|
+
}
|
326
|
+
|
327
|
+
int git_http_auth_negotiate(
|
328
|
+
git_http_auth_context **out,
|
329
|
+
const git_net_url *url)
|
330
|
+
{
|
331
|
+
return sspi_init_context(out, GIT_HTTP_AUTH_NEGOTIATE, url);
|
332
|
+
}
|
333
|
+
|
334
|
+
int git_http_auth_ntlm(
|
335
|
+
git_http_auth_context **out,
|
336
|
+
const git_net_url *url)
|
337
|
+
{
|
338
|
+
return sspi_init_context(out, GIT_HTTP_AUTH_NTLM, url);
|
339
|
+
}
|
340
|
+
|
341
|
+
#endif /* GIT_WIN32 */
|
@@ -204,7 +204,7 @@ int git_credential_ssh_key_memory_new(
|
|
204
204
|
const char *privatekey,
|
205
205
|
const char *passphrase)
|
206
206
|
{
|
207
|
-
#ifdef
|
207
|
+
#ifdef GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS
|
208
208
|
return git_credential_ssh_key_type_new(
|
209
209
|
cred,
|
210
210
|
username,
|