rugged 1.4.2 → 1.5.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 +1 -0
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- data/ext/rugged/rugged_remote.c +10 -10
- data/ext/rugged/rugged_repo.c +2 -7
- data/ext/rugged/rugged_settings.c +5 -0
- data/lib/rugged/tree.rb +4 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +16 -3
- data/vendor/libgit2/COPYING +40 -0
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
- data/vendor/libgit2/cmake/FindPCRE.cmake +3 -4
- data/vendor/libgit2/cmake/FindPCRE2.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHashes.cmake +62 -14
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
- data/vendor/libgit2/deps/zlib/adler32.c +7 -0
- data/vendor/libgit2/deps/zlib/crc32.c +975 -288
- data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
- data/vendor/libgit2/deps/zlib/deflate.c +83 -31
- data/vendor/libgit2/deps/zlib/deflate.h +12 -15
- data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
- data/vendor/libgit2/deps/zlib/infback.c +2 -1
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +39 -8
- data/vendor/libgit2/deps/zlib/inflate.h +3 -2
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +27 -48
- data/vendor/libgit2/deps/zlib/zlib.h +126 -100
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +12 -9
- data/vendor/libgit2/include/git2/branch.h +2 -2
- data/vendor/libgit2/include/git2/common.h +22 -1
- data/vendor/libgit2/include/git2/config.h +6 -6
- data/vendor/libgit2/include/git2/deprecated.h +2 -0
- data/vendor/libgit2/include/git2/errors.h +19 -4
- data/vendor/libgit2/include/git2/merge.h +1 -1
- data/vendor/libgit2/include/git2/status.h +5 -2
- data/vendor/libgit2/include/git2/sys/remote.h +15 -0
- data/vendor/libgit2/include/git2/sys/transport.h +9 -5
- data/vendor/libgit2/include/git2/version.h +27 -6
- data/vendor/libgit2/src/CMakeLists.txt +104 -214
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +53 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/cli/cli.h +20 -0
- data/vendor/libgit2/src/cli/cmd.c +21 -0
- data/vendor/libgit2/src/cli/cmd.h +33 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +135 -0
- data/vendor/libgit2/src/cli/cmd_help.c +86 -0
- data/vendor/libgit2/src/cli/error.h +51 -0
- data/vendor/libgit2/src/cli/main.c +106 -0
- data/vendor/libgit2/src/cli/opt.c +669 -0
- data/vendor/libgit2/src/cli/opt.h +349 -0
- data/vendor/libgit2/src/cli/opt_usage.c +194 -0
- data/vendor/libgit2/src/cli/opt_usage.h +35 -0
- data/vendor/libgit2/src/cli/progress.c +345 -0
- data/vendor/libgit2/src/cli/progress.h +117 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
- data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -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/features.h.in +9 -0
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +131 -0
- data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +0 -0
- data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +0 -0
- data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +0 -0
- data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +0 -0
- data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +0 -0
- data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
- data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +0 -0
- data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +0 -0
- data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +0 -0
- data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
- data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +0 -0
- data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
- data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +0 -0
- data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +1 -1
- data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +0 -0
- data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +14 -9
- data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +0 -0
- data/vendor/libgit2/src/{buf.c → libgit2/buf.c} +0 -0
- data/vendor/libgit2/src/{buf.h → libgit2/buf.h} +0 -0
- data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
- data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
- data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +0 -0
- data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
- data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +0 -0
- data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +0 -0
- data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
- data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +0 -0
- data/vendor/libgit2/src/{commit.h → libgit2/commit.h} +0 -0
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +20 -17
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +1 -1
- data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +0 -0
- data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +14 -7
- data/vendor/libgit2/src/{config.h → libgit2/config.h} +0 -0
- data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
- data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
- data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
- data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
- data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +0 -0
- data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +0 -0
- data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +0 -0
- data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
- data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +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/{describe.c → libgit2/describe.c} +0 -0
- data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +0 -0
- data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +0 -0
- data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +0 -0
- data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +0 -0
- data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +0 -0
- data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
- data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +0 -0
- data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +0 -0
- data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
- data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
- data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +5 -0
- data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +0 -0
- data/vendor/libgit2/src/{diff_stats.h → libgit2/diff_stats.h} +0 -0
- data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +0 -0
- data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +1 -0
- data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
- data/vendor/libgit2/src/{email.c → libgit2/email.c} +0 -0
- data/vendor/libgit2/src/{email.h → libgit2/email.h} +0 -0
- data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +0 -0
- data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
- data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +5 -2
- data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +0 -0
- data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +0 -0
- data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +31 -1
- data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +0 -0
- data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
- data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
- data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +0 -0
- data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
- data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
- data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +0 -0
- data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +0 -0
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +6 -6
- data/vendor/libgit2/src/{index.h → libgit2/index.h} +0 -0
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +2 -2
- data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +3 -3
- data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +0 -0
- data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +13 -0
- data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
- data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +0 -0
- data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
- data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +0 -0
- data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +0 -0
- data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +0 -0
- data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
- data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +0 -0
- data/vendor/libgit2/src/{message.c → libgit2/message.c} +0 -0
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +28 -26
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +2 -1
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +9 -9
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +1 -1
- data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +0 -1
- data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +0 -0
- data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +0 -0
- data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +1 -0
- data/vendor/libgit2/src/{object.h → libgit2/object.h} +0 -0
- data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +2 -2
- data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +0 -0
- data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +0 -0
- data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +0 -0
- data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +0 -0
- data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
- data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +2 -21
- data/vendor/libgit2/src/{oid.h → libgit2/oid.h} +35 -2
- data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
- data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
- data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
- data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
- data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +0 -0
- data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +0 -0
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +24 -18
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +3 -2
- data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +0 -0
- data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
- data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +0 -0
- data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +0 -0
- data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +0 -0
- data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +0 -0
- data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +0 -0
- data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
- data/vendor/libgit2/src/{path.c → libgit2/path.c} +1 -0
- data/vendor/libgit2/src/{path.h → libgit2/path.h} +0 -0
- data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +0 -0
- data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +0 -0
- data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +0 -0
- data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +0 -0
- data/vendor/libgit2/src/{push.c → libgit2/push.c} +0 -0
- data/vendor/libgit2/src/{push.h → libgit2/push.h} +0 -0
- data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +0 -0
- data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +0 -0
- data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +11 -1
- 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/{refdb_fs.c → libgit2/refdb_fs.c} +6 -2
- data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +0 -0
- data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +0 -0
- data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +0 -0
- data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +0 -0
- data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +0 -0
- data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +0 -0
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +6 -3
- data/vendor/libgit2/src/{remote.h → libgit2/remote.h} +1 -1
- data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +155 -22
- data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +1 -0
- data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +0 -0
- data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +0 -0
- data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +0 -0
- data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +0 -0
- data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
- data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
- data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +0 -0
- data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +0 -0
- data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +0 -0
- data/vendor/libgit2/src/{status.c → libgit2/status.c} +0 -0
- data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
- data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +0 -0
- data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.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}/socket.c +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +0 -0
- data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +0 -0
- data/vendor/libgit2/src/{sysdir.c → libgit2/sysdir.c} +0 -0
- data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +0 -0
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +15 -5
- data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +0 -0
- data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +0 -0
- data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +0 -0
- data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +0 -0
- data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +0 -0
- data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +0 -0
- data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +0 -0
- data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
- data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +1 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +12 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +0 -0
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +1 -1
- data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +0 -0
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +16 -23
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +1 -1
- data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +0 -0
- data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/git-xdiff.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +0 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
- data/vendor/libgit2/src/util/CMakeLists.txt +74 -0
- data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
- data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
- data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +0 -0
- data/vendor/libgit2/src/{date.c → util/date.c} +4 -3
- data/vendor/libgit2/src/{date.h → util/date.h} +0 -0
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +1 -1
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +1 -1
- data/vendor/libgit2/src/{fs_path.c → util/fs_path.c} +219 -65
- data/vendor/libgit2/src/{fs_path.h → util/fs_path.h} +47 -9
- data/vendor/libgit2/src/{futils.c → util/futils.c} +44 -2
- data/vendor/libgit2/src/{futils.h → util/futils.h} +2 -1
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +13 -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 +1 -1
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.c +55 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.c +46 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +194 -0
- data/vendor/libgit2/src/util/hash/openssl.h +45 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +355 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
- data/vendor/libgit2/src/util/hash/sha.h +70 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +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/util/hash/win32.c +549 -0
- data/vendor/libgit2/src/util/hash/win32.h +60 -0
- data/vendor/libgit2/src/{hash.c → util/hash.c} +17 -1
- data/vendor/libgit2/src/{hash.h → util/hash.h} +5 -3
- data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
- data/vendor/libgit2/src/{khash.h → util/khash.h} +0 -0
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/{net.c → util/net.c} +0 -1
- data/vendor/libgit2/src/{net.h → util/net.h} +1 -1
- data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
- data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
- data/vendor/libgit2/src/{posix.c → util/posix.c} +0 -0
- data/vendor/libgit2/src/{posix.h → util/posix.h} +1 -1
- data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +1 -1
- data/vendor/libgit2/src/{rand.c → util/rand.c} +7 -3
- data/vendor/libgit2/src/{rand.h → util/rand.h} +1 -1
- data/vendor/libgit2/src/{regexp.c → util/regexp.c} +0 -0
- 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} +0 -0
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +1 -1
- data/vendor/libgit2/src/{str.c → util/str.c} +0 -0
- data/vendor/libgit2/src/{str.h → util/str.h} +1 -1
- data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
- data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
- data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
- data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
- data/vendor/libgit2/src/{thread.h → util/thread.h} +0 -0
- data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -1
- 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} +1 -1
- data/vendor/libgit2/src/{util.h → util/util.h} +1 -1
- data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
- data/vendor/libgit2/src/{vector.h → util/vector.h} +1 -1
- data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
- data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/findfile.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/findfile.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- 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}/path_w32.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +1 -1
- 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/{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}/thread.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
- data/vendor/libgit2/src/{zstream.c → util/zstream.c} +0 -0
- data/vendor/libgit2/src/{zstream.h → util/zstream.h} +1 -1
- metadata +394 -365
- 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/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 -40
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
#include "fs_path.h"
|
|
9
9
|
|
|
10
|
+
#include "git2_util.h"
|
|
11
|
+
#include "futils.h"
|
|
10
12
|
#include "posix.h"
|
|
11
|
-
#include "repository.h"
|
|
12
13
|
#ifdef GIT_WIN32
|
|
13
14
|
#include "win32/posix.h"
|
|
14
15
|
#include "win32/w32_buffer.h"
|
|
@@ -21,6 +22,13 @@
|
|
|
21
22
|
#include <stdio.h>
|
|
22
23
|
#include <ctype.h>
|
|
23
24
|
|
|
25
|
+
#define ensure_error_set(code) do { \
|
|
26
|
+
const git_error *e = git_error_last(); \
|
|
27
|
+
if (!e || !e->message) \
|
|
28
|
+
git_error_set(e ? e->klass : GIT_ERROR_CALLBACK, \
|
|
29
|
+
"filesystem callback returned %d", code); \
|
|
30
|
+
} while(0)
|
|
31
|
+
|
|
24
32
|
static int dos_drive_prefix_length(const char *path)
|
|
25
33
|
{
|
|
26
34
|
int i;
|
|
@@ -101,7 +109,7 @@ int git_fs_path_basename_r(git_str *buffer, const char *path)
|
|
|
101
109
|
/* Empty or NULL string gets treated as "." */
|
|
102
110
|
if (path == NULL || *path == '\0') {
|
|
103
111
|
startp = ".";
|
|
104
|
-
len
|
|
112
|
+
len = 1;
|
|
105
113
|
goto Exit;
|
|
106
114
|
}
|
|
107
115
|
|
|
@@ -113,7 +121,7 @@ int git_fs_path_basename_r(git_str *buffer, const char *path)
|
|
|
113
121
|
/* All slashes becomes "/" */
|
|
114
122
|
if (endp == path && *endp == '/') {
|
|
115
123
|
startp = "/";
|
|
116
|
-
len
|
|
124
|
+
len = 1;
|
|
117
125
|
goto Exit;
|
|
118
126
|
}
|
|
119
127
|
|
|
@@ -185,8 +193,7 @@ int git_fs_path_dirname_r(git_str *buffer, const char *path)
|
|
|
185
193
|
|
|
186
194
|
if (endp - path + 1 > INT_MAX) {
|
|
187
195
|
git_error_set(GIT_ERROR_INVALID, "path too long");
|
|
188
|
-
|
|
189
|
-
goto Exit;
|
|
196
|
+
return -1;
|
|
190
197
|
}
|
|
191
198
|
|
|
192
199
|
if ((len = win32_prefix_length(path, (int)(endp - path + 1))) > 0) {
|
|
@@ -211,8 +218,7 @@ int git_fs_path_dirname_r(git_str *buffer, const char *path)
|
|
|
211
218
|
|
|
212
219
|
if (endp - path + 1 > INT_MAX) {
|
|
213
220
|
git_error_set(GIT_ERROR_INVALID, "path too long");
|
|
214
|
-
|
|
215
|
-
goto Exit;
|
|
221
|
+
return -1;
|
|
216
222
|
}
|
|
217
223
|
|
|
218
224
|
if ((len = win32_prefix_length(path, (int)(endp - path + 1))) > 0) {
|
|
@@ -530,7 +536,7 @@ int git_fs_path_walk_up(
|
|
|
530
536
|
if (!scan) {
|
|
531
537
|
error = cb(data, "");
|
|
532
538
|
if (error)
|
|
533
|
-
|
|
539
|
+
ensure_error_set(error);
|
|
534
540
|
return error;
|
|
535
541
|
}
|
|
536
542
|
|
|
@@ -543,7 +549,7 @@ int git_fs_path_walk_up(
|
|
|
543
549
|
iter.ptr[scan] = oldc;
|
|
544
550
|
|
|
545
551
|
if (error) {
|
|
546
|
-
|
|
552
|
+
ensure_error_set(error);
|
|
547
553
|
break;
|
|
548
554
|
}
|
|
549
555
|
|
|
@@ -563,7 +569,7 @@ int git_fs_path_walk_up(
|
|
|
563
569
|
if (!error && stop == 0 && iter.ptr[0] != '/') {
|
|
564
570
|
error = cb(data, "");
|
|
565
571
|
if (error)
|
|
566
|
-
|
|
572
|
+
ensure_error_set(error);
|
|
567
573
|
}
|
|
568
574
|
|
|
569
575
|
return error;
|
|
@@ -1167,7 +1173,7 @@ int git_fs_path_direach(
|
|
|
1167
1173
|
/* Only set our own error if the callback did not set one already */
|
|
1168
1174
|
if (error != 0) {
|
|
1169
1175
|
if (!git_error_last())
|
|
1170
|
-
|
|
1176
|
+
ensure_error_set(error);
|
|
1171
1177
|
|
|
1172
1178
|
break;
|
|
1173
1179
|
}
|
|
@@ -1779,80 +1785,228 @@ done:
|
|
|
1779
1785
|
return supported;
|
|
1780
1786
|
}
|
|
1781
1787
|
|
|
1782
|
-
|
|
1788
|
+
static git_fs_path_owner_t mock_owner = GIT_FS_PATH_OWNER_NONE;
|
|
1789
|
+
|
|
1790
|
+
void git_fs_path__set_owner(git_fs_path_owner_t owner)
|
|
1791
|
+
{
|
|
1792
|
+
mock_owner = owner;
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
#ifdef GIT_WIN32
|
|
1796
|
+
static PSID *sid_dup(PSID sid)
|
|
1797
|
+
{
|
|
1798
|
+
DWORD len;
|
|
1799
|
+
PSID dup;
|
|
1800
|
+
|
|
1801
|
+
len = GetLengthSid(sid);
|
|
1802
|
+
|
|
1803
|
+
if ((dup = git__malloc(len)) == NULL)
|
|
1804
|
+
return NULL;
|
|
1805
|
+
|
|
1806
|
+
if (!CopySid(len, dup, sid)) {
|
|
1807
|
+
git_error_set(GIT_ERROR_OS, "could not duplicate sid");
|
|
1808
|
+
git__free(dup);
|
|
1809
|
+
return NULL;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
return dup;
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1815
|
+
static int current_user_sid(PSID *out)
|
|
1783
1816
|
{
|
|
1784
|
-
#ifndef GIT_WIN32
|
|
1785
|
-
GIT_UNUSED(path);
|
|
1786
|
-
return GIT_OK;
|
|
1787
|
-
#else
|
|
1788
|
-
git_win32_path buf;
|
|
1789
|
-
PSID owner_sid;
|
|
1790
|
-
PSECURITY_DESCRIPTOR descriptor = NULL;
|
|
1791
|
-
HANDLE token;
|
|
1792
1817
|
TOKEN_USER *info = NULL;
|
|
1793
|
-
|
|
1794
|
-
|
|
1818
|
+
HANDLE token = NULL;
|
|
1819
|
+
DWORD len = 0;
|
|
1820
|
+
int error = -1;
|
|
1795
1821
|
|
|
1796
|
-
if (
|
|
1797
|
-
|
|
1822
|
+
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token)) {
|
|
1823
|
+
git_error_set(GIT_ERROR_OS, "could not lookup process information");
|
|
1824
|
+
goto done;
|
|
1825
|
+
}
|
|
1798
1826
|
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1827
|
+
if (GetTokenInformation(token, TokenUser, NULL, 0, &len) ||
|
|
1828
|
+
GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
|
|
1829
|
+
git_error_set(GIT_ERROR_OS, "could not lookup token metadata");
|
|
1830
|
+
goto done;
|
|
1831
|
+
}
|
|
1803
1832
|
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1833
|
+
info = git__malloc(len);
|
|
1834
|
+
GIT_ERROR_CHECK_ALLOC(info);
|
|
1835
|
+
|
|
1836
|
+
if (!GetTokenInformation(token, TokenUser, info, len, &len)) {
|
|
1837
|
+
git_error_set(GIT_ERROR_OS, "could not lookup current user");
|
|
1838
|
+
goto done;
|
|
1807
1839
|
}
|
|
1808
1840
|
|
|
1809
|
-
if (
|
|
1841
|
+
if ((*out = sid_dup(info->User.Sid)))
|
|
1842
|
+
error = 0;
|
|
1843
|
+
|
|
1844
|
+
done:
|
|
1845
|
+
if (token)
|
|
1846
|
+
CloseHandle(token);
|
|
1847
|
+
|
|
1848
|
+
git__free(info);
|
|
1849
|
+
return error;
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
static int file_owner_sid(PSID *out, const char *path)
|
|
1853
|
+
{
|
|
1854
|
+
git_win32_path path_w32;
|
|
1855
|
+
PSECURITY_DESCRIPTOR descriptor = NULL;
|
|
1856
|
+
PSID owner_sid;
|
|
1857
|
+
DWORD ret;
|
|
1858
|
+
int error = -1;
|
|
1859
|
+
|
|
1860
|
+
if (git_win32_path_from_utf8(path_w32, path) < 0)
|
|
1861
|
+
return -1;
|
|
1862
|
+
|
|
1863
|
+
ret = GetNamedSecurityInfoW(path_w32, SE_FILE_OBJECT,
|
|
1864
|
+
OWNER_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
|
|
1865
|
+
&owner_sid, NULL, NULL, NULL, &descriptor);
|
|
1866
|
+
|
|
1867
|
+
if (ret == ERROR_FILE_NOT_FOUND || ret == ERROR_PATH_NOT_FOUND)
|
|
1868
|
+
error = GIT_ENOTFOUND;
|
|
1869
|
+
else if (ret != ERROR_SUCCESS)
|
|
1810
1870
|
git_error_set(GIT_ERROR_OS, "failed to get security information");
|
|
1811
|
-
|
|
1812
|
-
|
|
1871
|
+
else if (!IsValidSid(owner_sid))
|
|
1872
|
+
git_error_set(GIT_ERROR_OS, "file owner is not valid");
|
|
1873
|
+
else if ((*out = sid_dup(owner_sid)))
|
|
1874
|
+
error = 0;
|
|
1875
|
+
|
|
1876
|
+
if (descriptor)
|
|
1877
|
+
LocalFree(descriptor);
|
|
1878
|
+
|
|
1879
|
+
return error;
|
|
1880
|
+
}
|
|
1881
|
+
|
|
1882
|
+
int git_fs_path_owner_is(
|
|
1883
|
+
bool *out,
|
|
1884
|
+
const char *path,
|
|
1885
|
+
git_fs_path_owner_t owner_type)
|
|
1886
|
+
{
|
|
1887
|
+
PSID owner_sid = NULL, user_sid = NULL;
|
|
1888
|
+
BOOL is_admin, admin_owned;
|
|
1889
|
+
int error;
|
|
1890
|
+
|
|
1891
|
+
if (mock_owner) {
|
|
1892
|
+
*out = ((mock_owner & owner_type) != 0);
|
|
1893
|
+
return 0;
|
|
1813
1894
|
}
|
|
1814
1895
|
|
|
1815
|
-
if (
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1896
|
+
if ((error = file_owner_sid(&owner_sid, path)) < 0)
|
|
1897
|
+
goto done;
|
|
1898
|
+
|
|
1899
|
+
if ((owner_type & GIT_FS_PATH_OWNER_CURRENT_USER) != 0) {
|
|
1900
|
+
if ((error = current_user_sid(&user_sid)) < 0)
|
|
1901
|
+
goto done;
|
|
1902
|
+
|
|
1903
|
+
if (EqualSid(owner_sid, user_sid)) {
|
|
1904
|
+
*out = true;
|
|
1905
|
+
goto done;
|
|
1906
|
+
}
|
|
1819
1907
|
}
|
|
1820
1908
|
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1909
|
+
admin_owned =
|
|
1910
|
+
IsWellKnownSid(owner_sid, WinBuiltinAdministratorsSid) ||
|
|
1911
|
+
IsWellKnownSid(owner_sid, WinLocalSystemSid);
|
|
1912
|
+
|
|
1913
|
+
if (admin_owned &&
|
|
1914
|
+
(owner_type & GIT_FS_PATH_OWNER_ADMINISTRATOR) != 0) {
|
|
1915
|
+
*out = true;
|
|
1916
|
+
goto done;
|
|
1825
1917
|
}
|
|
1826
1918
|
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
git__free(info);
|
|
1834
|
-
info = NULL;
|
|
1835
|
-
}
|
|
1919
|
+
if (admin_owned &&
|
|
1920
|
+
(owner_type & GIT_FS_PATH_USER_IS_ADMINISTRATOR) != 0 &&
|
|
1921
|
+
CheckTokenMembership(NULL, owner_sid, &is_admin) &&
|
|
1922
|
+
is_admin) {
|
|
1923
|
+
*out = true;
|
|
1924
|
+
goto done;
|
|
1836
1925
|
}
|
|
1837
1926
|
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1927
|
+
*out = false;
|
|
1928
|
+
|
|
1929
|
+
done:
|
|
1930
|
+
git__free(owner_sid);
|
|
1931
|
+
git__free(user_sid);
|
|
1932
|
+
return error;
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
#else
|
|
1936
|
+
|
|
1937
|
+
static int sudo_uid_lookup(uid_t *out)
|
|
1938
|
+
{
|
|
1939
|
+
git_str uid_str = GIT_STR_INIT;
|
|
1940
|
+
int64_t uid;
|
|
1941
|
+
int error;
|
|
1942
|
+
|
|
1943
|
+
if ((error = git__getenv(&uid_str, "SUDO_UID")) == 0 &&
|
|
1944
|
+
(error = git__strntol64(&uid, uid_str.ptr, uid_str.size, NULL, 10)) == 0 &&
|
|
1945
|
+
uid == (int64_t)((uid_t)uid)) {
|
|
1946
|
+
*out = (uid_t)uid;
|
|
1847
1947
|
}
|
|
1848
|
-
git__free(info);
|
|
1849
1948
|
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1949
|
+
git_str_dispose(&uid_str);
|
|
1950
|
+
return error;
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1953
|
+
int git_fs_path_owner_is(
|
|
1954
|
+
bool *out,
|
|
1955
|
+
const char *path,
|
|
1956
|
+
git_fs_path_owner_t owner_type)
|
|
1957
|
+
{
|
|
1958
|
+
struct stat st;
|
|
1959
|
+
uid_t euid, sudo_uid;
|
|
1960
|
+
|
|
1961
|
+
if (mock_owner) {
|
|
1962
|
+
*out = ((mock_owner & owner_type) != 0);
|
|
1963
|
+
return 0;
|
|
1964
|
+
}
|
|
1965
|
+
|
|
1966
|
+
euid = geteuid();
|
|
1967
|
+
|
|
1968
|
+
if (p_lstat(path, &st) != 0) {
|
|
1969
|
+
if (errno == ENOENT)
|
|
1970
|
+
return GIT_ENOTFOUND;
|
|
1971
|
+
|
|
1972
|
+
git_error_set(GIT_ERROR_OS, "could not stat '%s'", path);
|
|
1973
|
+
return -1;
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1976
|
+
if ((owner_type & GIT_FS_PATH_OWNER_CURRENT_USER) != 0 &&
|
|
1977
|
+
st.st_uid == euid) {
|
|
1978
|
+
*out = true;
|
|
1979
|
+
return 0;
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
if ((owner_type & GIT_FS_PATH_OWNER_ADMINISTRATOR) != 0 &&
|
|
1983
|
+
st.st_uid == 0) {
|
|
1984
|
+
*out = true;
|
|
1985
|
+
return 0;
|
|
1986
|
+
}
|
|
1987
|
+
|
|
1988
|
+
if ((owner_type & GIT_FS_PATH_OWNER_RUNNING_SUDO) != 0 &&
|
|
1989
|
+
euid == 0 &&
|
|
1990
|
+
sudo_uid_lookup(&sudo_uid) == 0 &&
|
|
1991
|
+
st.st_uid == sudo_uid) {
|
|
1992
|
+
*out = true;
|
|
1993
|
+
return 0;
|
|
1994
|
+
}
|
|
1995
|
+
|
|
1996
|
+
*out = false;
|
|
1997
|
+
return 0;
|
|
1998
|
+
}
|
|
1853
1999
|
|
|
1854
|
-
return ret;
|
|
1855
2000
|
#endif
|
|
2001
|
+
|
|
2002
|
+
int git_fs_path_owner_is_current_user(bool *out, const char *path)
|
|
2003
|
+
{
|
|
2004
|
+
return git_fs_path_owner_is(out, path, GIT_FS_PATH_OWNER_CURRENT_USER);
|
|
2005
|
+
}
|
|
2006
|
+
|
|
2007
|
+
int git_fs_path_owner_is_system(bool *out, const char *path)
|
|
2008
|
+
{
|
|
2009
|
+
return git_fs_path_owner_is(out, path, GIT_FS_PATH_OWNER_ADMINISTRATOR);
|
|
1856
2010
|
}
|
|
1857
2011
|
|
|
1858
2012
|
int git_fs_path_find_executable(git_str *fullpath, const char *executable)
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#ifndef INCLUDE_fs_path_h__
|
|
8
8
|
#define INCLUDE_fs_path_h__
|
|
9
9
|
|
|
10
|
-
#include "
|
|
10
|
+
#include "git2_util.h"
|
|
11
11
|
|
|
12
12
|
#include "posix.h"
|
|
13
13
|
#include "str.h"
|
|
@@ -731,17 +731,55 @@ int git_fs_path_normalize_slashes(git_str *out, const char *path);
|
|
|
731
731
|
|
|
732
732
|
bool git_fs_path_supports_symlinks(const char *dir);
|
|
733
733
|
|
|
734
|
+
typedef enum {
|
|
735
|
+
GIT_FS_PATH_OWNER_NONE = 0,
|
|
736
|
+
|
|
737
|
+
/** The file must be owned by the current user. */
|
|
738
|
+
GIT_FS_PATH_OWNER_CURRENT_USER = (1 << 0),
|
|
739
|
+
|
|
740
|
+
/** The file must be owned by the system account. */
|
|
741
|
+
GIT_FS_PATH_OWNER_ADMINISTRATOR = (1 << 1),
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* The file may be owned by a system account if the current
|
|
745
|
+
* user is in an administrator group. Windows only; this is
|
|
746
|
+
* a noop on non-Windows systems.
|
|
747
|
+
*/
|
|
748
|
+
GIT_FS_PATH_USER_IS_ADMINISTRATOR = (1 << 2),
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* The file is owned by the current user, who is running `sudo`.
|
|
752
|
+
*/
|
|
753
|
+
GIT_FS_PATH_OWNER_RUNNING_SUDO = (1 << 3),
|
|
754
|
+
|
|
755
|
+
/** The file may be owned by another user. */
|
|
756
|
+
GIT_FS_PATH_OWNER_OTHER = (1 << 4)
|
|
757
|
+
} git_fs_path_owner_t;
|
|
758
|
+
|
|
759
|
+
/**
|
|
760
|
+
* Sets the mock ownership for files; subsequent calls to
|
|
761
|
+
* `git_fs_path_owner_is_*` functions will return this data until
|
|
762
|
+
* cleared with `GIT_FS_PATH_OWNER_NONE`.
|
|
763
|
+
*/
|
|
764
|
+
void git_fs_path__set_owner(git_fs_path_owner_t owner);
|
|
765
|
+
|
|
766
|
+
/** Verify that the file in question is owned by the given owner. */
|
|
767
|
+
int git_fs_path_owner_is(
|
|
768
|
+
bool *out,
|
|
769
|
+
const char *path,
|
|
770
|
+
git_fs_path_owner_t owner_type);
|
|
771
|
+
|
|
734
772
|
/**
|
|
735
|
-
* Validate a system file's ownership
|
|
736
|
-
*
|
|
737
773
|
* Verify that the file in question is owned by an administrator or system
|
|
738
|
-
* account
|
|
739
|
-
*
|
|
740
|
-
* This function returns 0 if successful. If the file is not owned by any of
|
|
741
|
-
* these, or any other if there have been problems determining the file
|
|
742
|
-
* ownership, it returns -1.
|
|
774
|
+
* account.
|
|
743
775
|
*/
|
|
744
|
-
int
|
|
776
|
+
int git_fs_path_owner_is_system(bool *out, const char *path);
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* Verify that the file in question is owned by the current user;
|
|
780
|
+
*/
|
|
781
|
+
|
|
782
|
+
int git_fs_path_owner_is_current_user(bool *out, const char *path);
|
|
745
783
|
|
|
746
784
|
/**
|
|
747
785
|
* Search the current PATH for the given executable, returning the full
|
|
@@ -167,18 +167,60 @@ int git_futils_readbuffer_fd(git_str *buf, git_file fd, size_t len)
|
|
|
167
167
|
/* p_read loops internally to read len bytes */
|
|
168
168
|
read_size = p_read(fd, buf->ptr, len);
|
|
169
169
|
|
|
170
|
-
if (read_size
|
|
170
|
+
if (read_size < 0) {
|
|
171
171
|
git_error_set(GIT_ERROR_OS, "failed to read descriptor");
|
|
172
172
|
git_str_dispose(buf);
|
|
173
173
|
return -1;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
+
if ((size_t)read_size != len) {
|
|
177
|
+
git_error_set(GIT_ERROR_FILESYSTEM, "could not read (expected %" PRIuZ " bytes, read %" PRIuZ ")", len, (size_t)read_size);
|
|
178
|
+
git_str_dispose(buf);
|
|
179
|
+
return -1;
|
|
180
|
+
}
|
|
181
|
+
|
|
176
182
|
buf->ptr[read_size] = '\0';
|
|
177
183
|
buf->size = read_size;
|
|
178
184
|
|
|
179
185
|
return 0;
|
|
180
186
|
}
|
|
181
187
|
|
|
188
|
+
int git_futils_readbuffer_fd_full(git_str *buf, git_file fd)
|
|
189
|
+
{
|
|
190
|
+
static size_t blocksize = 10240;
|
|
191
|
+
size_t alloc_len = 0, total_size = 0;
|
|
192
|
+
ssize_t read_size = 0;
|
|
193
|
+
|
|
194
|
+
git_str_clear(buf);
|
|
195
|
+
|
|
196
|
+
while (true) {
|
|
197
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, blocksize);
|
|
198
|
+
|
|
199
|
+
if (git_str_grow(buf, alloc_len) < 0)
|
|
200
|
+
return -1;
|
|
201
|
+
|
|
202
|
+
/* p_read loops internally to read blocksize bytes */
|
|
203
|
+
read_size = p_read(fd, buf->ptr, blocksize);
|
|
204
|
+
|
|
205
|
+
if (read_size < 0) {
|
|
206
|
+
git_error_set(GIT_ERROR_OS, "failed to read descriptor");
|
|
207
|
+
git_str_dispose(buf);
|
|
208
|
+
return -1;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
total_size += read_size;
|
|
212
|
+
|
|
213
|
+
if ((size_t)read_size < blocksize) {
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
buf->ptr[total_size] = '\0';
|
|
219
|
+
buf->size = total_size;
|
|
220
|
+
|
|
221
|
+
return 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
182
224
|
int git_futils_readbuffer_updated(
|
|
183
225
|
git_str *out,
|
|
184
226
|
const char *path,
|
|
@@ -856,7 +898,7 @@ int git_futils_fake_symlink(const char *target, const char *path)
|
|
|
856
898
|
static int cp_by_fd(int ifd, int ofd, bool close_fd_when_done)
|
|
857
899
|
{
|
|
858
900
|
int error = 0;
|
|
859
|
-
char buffer[
|
|
901
|
+
char buffer[GIT_BUFSIZE_FILEIO];
|
|
860
902
|
ssize_t len = 0;
|
|
861
903
|
|
|
862
904
|
while (!error && (len = p_read(ifd, buffer, sizeof(buffer))) > 0)
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#ifndef INCLUDE_futils_h__
|
|
8
8
|
#define INCLUDE_futils_h__
|
|
9
9
|
|
|
10
|
-
#include "
|
|
10
|
+
#include "git2_util.h"
|
|
11
11
|
|
|
12
12
|
#include "map.h"
|
|
13
13
|
#include "posix.h"
|
|
@@ -27,6 +27,7 @@ extern int git_futils_readbuffer_updated(
|
|
|
27
27
|
const char *path,
|
|
28
28
|
unsigned char checksum[GIT_HASH_SHA1_SIZE],
|
|
29
29
|
int *updated);
|
|
30
|
+
extern int git_futils_readbuffer_fd_full(git_str *obj, git_file fd);
|
|
30
31
|
extern int git_futils_readbuffer_fd(git_str *obj, git_file fd, size_t len);
|
|
31
32
|
|
|
32
33
|
/* Additional constants for `git_futils_writebuffer`'s `open_flags`. We
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
6
|
*/
|
|
7
|
-
#ifndef
|
|
8
|
-
#define
|
|
7
|
+
#ifndef INCLUDE_git2_util_h__
|
|
8
|
+
#define INCLUDE_git2_util_h__
|
|
9
9
|
|
|
10
10
|
#ifndef LIBGIT2_NO_FEATURES_H
|
|
11
11
|
# include "git2/sys/features.h"
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
#include "git2/common.h"
|
|
15
15
|
#include "cc-compat.h"
|
|
16
16
|
|
|
17
|
+
typedef struct git_str git_str;
|
|
18
|
+
|
|
17
19
|
/** Declare a function as always inlined. */
|
|
18
20
|
#if defined(_MSC_VER)
|
|
19
21
|
# define GIT_INLINE(type) static __inline type
|
|
20
22
|
#elif defined(__GNUC__)
|
|
21
23
|
# define GIT_INLINE(type) static __inline__ type
|
|
22
|
-
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
|
23
|
-
# define GIT_INLINE(type) static inline type
|
|
24
24
|
#else
|
|
25
25
|
# define GIT_INLINE(type) static type
|
|
26
26
|
#endif
|
|
@@ -67,12 +67,12 @@
|
|
|
67
67
|
# include <ws2tcpip.h>
|
|
68
68
|
# include "win32/msvc-compat.h"
|
|
69
69
|
# include "win32/mingw-compat.h"
|
|
70
|
-
# include "win32/w32_common.h"
|
|
71
70
|
# include "win32/win32-compat.h"
|
|
72
|
-
# include "win32/
|
|
71
|
+
# include "win32/w32_common.h"
|
|
73
72
|
# include "win32/version.h"
|
|
73
|
+
# include "win32/error.h"
|
|
74
74
|
# ifdef GIT_THREADS
|
|
75
|
-
#
|
|
75
|
+
# include "win32/thread.h"
|
|
76
76
|
# endif
|
|
77
77
|
|
|
78
78
|
#else
|
|
@@ -99,24 +99,17 @@
|
|
|
99
99
|
|
|
100
100
|
#include "git2/types.h"
|
|
101
101
|
#include "git2/errors.h"
|
|
102
|
-
#include "errors.h"
|
|
103
102
|
#include "thread.h"
|
|
104
103
|
#include "integer.h"
|
|
105
104
|
#include "assert_safe.h"
|
|
106
|
-
#include "utf8.h"
|
|
107
|
-
|
|
108
|
-
/*
|
|
109
|
-
* Include the declarations for deprecated functions; this ensures
|
|
110
|
-
* that they're decorated with the proper extern/visibility attributes.
|
|
111
|
-
*/
|
|
112
|
-
#include "git2/deprecated.h"
|
|
113
105
|
|
|
114
106
|
#include "posix.h"
|
|
115
107
|
|
|
116
|
-
#define
|
|
117
|
-
#define
|
|
118
|
-
#define
|
|
119
|
-
#define
|
|
108
|
+
#define GIT_BUFSIZE_DEFAULT 65536
|
|
109
|
+
#define GIT_BUFSIZE_FILEIO GIT_BUFSIZE_DEFAULT
|
|
110
|
+
#define GIT_BUFSIZE_FILTERIO GIT_BUFSIZE_DEFAULT
|
|
111
|
+
#define GIT_BUFSIZE_NETIO GIT_BUFSIZE_DEFAULT
|
|
112
|
+
|
|
120
113
|
|
|
121
114
|
/**
|
|
122
115
|
* Check a pointer allocation result, returning -1 if it failed.
|
|
@@ -126,7 +119,7 @@
|
|
|
126
119
|
} while(0)
|
|
127
120
|
|
|
128
121
|
/**
|
|
129
|
-
* Check a
|
|
122
|
+
* Check a buffer allocation result, returning -1 if it failed.
|
|
130
123
|
*/
|
|
131
124
|
#define GIT_ERROR_CHECK_ALLOC_STR(buf) do { \
|
|
132
125
|
if ((void *)(buf) == NULL || git_str_oom(buf)) { return -1; } \
|
|
@@ -138,40 +131,6 @@
|
|
|
138
131
|
#define GIT_ERROR_CHECK_ERROR(code) \
|
|
139
132
|
do { int _err = (code); if (_err) return _err; } while (0)
|
|
140
133
|
|
|
141
|
-
/**
|
|
142
|
-
* Check a versioned structure for validity
|
|
143
|
-
*/
|
|
144
|
-
GIT_INLINE(int) git_error__check_version(const void *structure, unsigned int expected_max, const char *name)
|
|
145
|
-
{
|
|
146
|
-
unsigned int actual;
|
|
147
|
-
|
|
148
|
-
if (!structure)
|
|
149
|
-
return 0;
|
|
150
|
-
|
|
151
|
-
actual = *(const unsigned int*)structure;
|
|
152
|
-
if (actual > 0 && actual <= expected_max)
|
|
153
|
-
return 0;
|
|
154
|
-
|
|
155
|
-
git_error_set(GIT_ERROR_INVALID, "invalid version %d on %s", actual, name);
|
|
156
|
-
return -1;
|
|
157
|
-
}
|
|
158
|
-
#define GIT_ERROR_CHECK_VERSION(S,V,N) if (git_error__check_version(S,V,N) < 0) return -1
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Initialize a structure with a version.
|
|
162
|
-
*/
|
|
163
|
-
GIT_INLINE(void) git__init_structure(void *structure, size_t len, unsigned int version)
|
|
164
|
-
{
|
|
165
|
-
memset(structure, 0, len);
|
|
166
|
-
*((int*)structure) = version;
|
|
167
|
-
}
|
|
168
|
-
#define GIT_INIT_STRUCTURE(S,V) git__init_structure(S, sizeof(*S), V)
|
|
169
|
-
|
|
170
|
-
#define GIT_INIT_STRUCTURE_FROM_TEMPLATE(PTR,VERSION,TYPE,TPL) do { \
|
|
171
|
-
TYPE _tmpl = TPL; \
|
|
172
|
-
GIT_ERROR_CHECK_VERSION(&(VERSION), _tmpl.version, #TYPE); \
|
|
173
|
-
memcpy((PTR), &_tmpl, sizeof(_tmpl)); } while (0)
|
|
174
|
-
|
|
175
134
|
|
|
176
135
|
/** Check for additive overflow, setting an error if would occur. */
|
|
177
136
|
#define GIT_ADD_SIZET_OVERFLOW(out, one, two) \
|
|
@@ -204,11 +163,6 @@ GIT_INLINE(void) git__init_structure(void *structure, size_t len, unsigned int v
|
|
|
204
163
|
#define GIT_ERROR_CHECK_ALLOC_MULTIPLY(out, nelem, elsize) \
|
|
205
164
|
if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { return -1; }
|
|
206
165
|
|
|
207
|
-
/* NOTE: other git_error functions are in the public errors.h header file */
|
|
208
|
-
|
|
209
|
-
/* Forward declare git_str */
|
|
210
|
-
typedef struct git_str git_str;
|
|
211
|
-
|
|
212
166
|
#include "util.h"
|
|
213
167
|
|
|
214
168
|
#endif
|