Go to file
Blake Burkhart f4113cac0c http: limit redirection to protocol-whitelist
Previously, libcurl would follow redirection to any protocol
it was compiled for support with. This is desirable to allow
redirection from HTTP to HTTPS. However, it would even
successfully allow redirection from HTTP to SFTP, a protocol
that git does not otherwise support at all. Furthermore
git's new protocol-whitelisting could be bypassed by
following a redirect within the remote helper, as it was
only enforced at transport selection time.

This patch limits redirects within libcurl to HTTP, HTTPS,
FTP and FTPS. If there is a protocol-whitelist present, this
list is limited to those also allowed by the whitelist. As
redirection happens from within libcurl, it is impossible
for an HTTP redirect to a protocol implemented within
another remote helper.

When the curl version git was compiled with is too old to
support restrictions on protocol redirection, we warn the
user if GIT_ALLOW_PROTOCOL restrictions were requested. This
is a little inaccurate, as even without that variable in the
environment, we would still restrict SFTP, etc, and we do
not warn in that case. But anything else means we would
literally warn every time git accesses an http remote.

This commit includes a test, but it is not as robust as we
would hope. It redirects an http request to ftp, and checks
that curl complained about the protocol, which means that we
are relying on curl's specific error message to know what
happened. Ideally we would redirect to a working ftp server
and confirm that we can clone without protocol restrictions,
and not with them. But we do not have a portable way of
providing an ftp server, nor any other protocol that curl
supports (https is the closest, but we would have to deal
with certificates).

[jk: added test and version warning]

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-09-25 15:30:39 -07:00
Documentation http: limit redirection to protocol-whitelist 2015-09-25 15:30:39 -07:00
block-sha1
builtin Sync with 2.2.3 2015-09-04 10:29:28 -07:00
compat
contrib Merge branch 'ma/bash-completion-leaking-x' into maint 2015-04-27 12:23:51 -07:00
ewah Merge branch 'jk/pack-bitmap' into maint 2015-03-05 13:13:02 -08:00
git-gui
gitk-git
gitweb
mergetools
perl Merge branch 'ew/svn-maint-fixes' into maint 2015-03-06 14:57:55 -08:00
po l10n: ca.po: Fix trailing whitespace 2015-01-30 15:02:34 -07:00
ppc
t http: limit redirection to protocol-whitelist 2015-09-25 15:30:39 -07:00
templates
vcs-svn
xdiff
.gitattributes
.gitignore
.mailmap Update mailmap to spell out "Alexander Kuleshov" 2015-03-27 12:58:18 -07:00
COPYING
GIT-VERSION-GEN Git 2.3.9 2015-09-04 10:32:15 -07:00
INSTALL
LGPL-2.1
Makefile Makefile: handle broken curl version number in version check 2015-02-03 18:30:24 -08:00
README
RelNotes Git 2.3.9 2015-09-04 10:32:15 -07:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c zlib: initialize git_zstream in git_deflate_init{,_gzip,_raw} 2015-03-05 15:46:03 -08:00
archive.c
archive.h
argv-array.c
argv-array.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin.h
bulk-checkin.c Merge branch 'rs/deflate-init-cleanup' into maint 2015-03-23 11:23:38 -07:00
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'jc/report-path-error-to-dir' into maint 2015-03-31 14:53:08 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c parse_color: fix return value for numeric color values 0-8 2015-01-20 15:56:03 -08:00
color.h
column.c
column.h
combine-diff.c
command-list.txt
commit-slab.h
commit.c
commit.h
config.c Merge branch 'jk/config-no-ungetc-eof' into maint 2015-03-05 13:13:00 -08:00
config.mak.in
config.mak.uname
configure.ac
connect.c transport: add a protocol-whitelist environment variable 2015-09-23 11:35:48 -07:00
connect.h
connected.c
connected.h
convert.c
convert.h
copy.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c sha1fd_check: die when we cannot open the file 2015-03-19 13:35:15 -07:00
csum-file.h
ctype.c kwset: use unsigned char to store values with high-bit set 2015-03-02 12:32:24 -08:00
daemon.c Merge branch 'rs/daemon-interpolate' into maint 2015-03-13 22:56:01 -07:00
date.c Merge branch 'jc/epochtime-wo-tz' into maint-2.3 2015-05-11 14:33:58 -07:00
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff-no-index.c diff-no-index: align D/F handling with that of normal Git 2015-03-26 14:08:43 -07:00
diff.c Merge branch 'rs/deflate-init-cleanup' into maint 2015-03-23 11:23:38 -07:00
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c Merge branch 'jk/diffcore-rename-duplicate' into maint 2015-03-13 22:56:08 -07:00
diffcore.h
dir.c Merge branch 'jc/report-path-error-to-dir' into maint 2015-03-31 14:53:08 -07:00
dir.h Merge branch 'jc/report-path-error-to-dir' into maint 2015-03-31 14:53:08 -07:00
editor.c
entry.c
environment.c refs: introduce a "ref paranoia" flag 2015-03-20 12:40:49 -07:00
exec_cmd.c
exec_cmd.h
fast-import.c Merge branch 'rs/deflate-init-cleanup' into maint 2015-03-23 11:23:38 -07:00
fetch-pack.c fetch-pack: remove dead assignment to ref->new_sha1 2015-03-19 14:11:52 -07:00
fetch-pack.h
fmt-merge-msg.h
fsck.c
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl Merge branch 'ak/add-i-empty-candidates' into maint 2015-02-24 22:10:42 -08:00
git-am.sh
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'bw/kwset-use-unsigned' into maint 2015-03-13 22:56:07 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-parse-remote.sh
git-pull.sh
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh Merge branch 'es/rebase-i-count-todo' into maint 2015-03-23 11:23:17 -07:00
git-rebase--merge.sh
git-rebase.sh
git-relink.perl
git-remote-testgit.sh transport-helper: do not request symbolic refs to remote helpers 2015-01-21 22:46:59 -08:00
git-request-pull.sh
git-send-email.perl git-send-email.perl: support no- prefix with older GetOptions 2015-02-16 13:26:51 -08:00
git-sh-i18n.sh
git-sh-setup.sh
git-stash.sh
git-submodule.sh submodule: allow only certain protocols for submodule fetches 2015-09-23 11:35:48 -07:00
git-svn.perl git-svn: make it play nicely with submodules 2015-01-15 08:35:55 +00:00
git-web--browse.sh
git.c Merge branch 'ak/git-done-help-cleanup' into maint 2015-03-23 11:23:35 -07:00
git.rc
git.spec.in
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
grep.h
hashmap.c
hashmap.h
help.c
help.h
hex.c Merge branch 'sb/hex-object-name-is-at-most-41-bytes-long' into maint 2015-03-05 13:12:55 -08:00
http-backend.c
http-fetch.c
http-push.c Merge branch 'rs/deflate-init-cleanup' into maint 2015-03-23 11:23:38 -07:00
http-walker.c
http.c http: limit redirection to protocol-whitelist 2015-09-25 15:30:39 -07:00
http.h
ident.c
imap-send.c imap-send: use cURL automatically when NO_OPENSSL defined 2015-03-10 15:19:05 -07:00
khash.h
kwset.c kwset: use unsigned char to store values with high-bit set 2015-03-02 12:32:24 -08:00
kwset.h kwset: use unsigned char to store values with high-bit set 2015-03-02 12:32:24 -08:00
levenshtein.c
levenshtein.h
line-log.c log -L: improve error message on malformed argument 2015-04-20 11:06:10 -07:00
line-log.h
line-range.c
line-range.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
lockfile.h
log-tree.c Merge branch 'jc/decorate-leaky-separator-color' into maint 2015-03-23 11:23:28 -07:00
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c
merge-recursive.h
merge.c
mergesort.c
mergesort.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c Sync with 2.2.3 2015-09-04 10:29:28 -07:00
notes.h
object.c
object.h
pack-bitmap-write.c
pack-bitmap.c
pack-bitmap.h
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c Merge branch 'jk/decimal-width-for-uintmax' into maint 2015-03-05 13:12:59 -08:00
parse-options-cb.c
parse-options.c
parse-options.h Merge branch 'iu/fix-parse-options-h-comment' into maint 2015-04-21 12:12:20 -07:00
patch-delta.c
patch-ids.c
patch-ids.h
path.c Merge branch 'pt/enter-repo-comment-fix' into maint 2015-04-21 12:12:23 -07:00
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
pretty.c Merge branch 'rs/simple-cleanups' into maint 2015-03-06 14:57:57 -08:00
prio-queue.c
prio-queue.h
progress.c
progress.h
prompt.c
prompt.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c Merge branch 'tg/fix-check-order-with-split-index' into maint 2015-03-28 09:33:07 -07:00
reflog-walk.c
reflog-walk.h
refs.c refs.c: drop curate_packed_refs 2015-03-20 12:41:41 -07:00
refs.h
remote-curl.c Merge branch 'rs/deflate-init-cleanup' into maint 2015-03-23 11:23:38 -07:00
remote-testsvn.c
remote.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
remote.h
replace_object.c
rerere.c Merge branch 'jn/rerere-fail-on-auto-update-failure' into maint 2015-02-24 22:10:13 -08:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c
revision.h
run-command.c
run-command.h
send-pack.c Merge branch 'jc/push-cert' into maint 2015-04-27 12:23:50 -07:00
send-pack.h
sequencer.c
sequencer.h
server-info.c
setup.c
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c Sync with 2.2.3 2015-09-04 10:29:28 -07:00
sha1_name.c Merge branch 'rs/use-isxdigit' into maint 2015-03-23 11:23:41 -07:00
shallow.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
split-index.c
split-index.h
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
submodule.c
submodule.h
symlinks.c
tag.c
tag.h
tar.h
test-chmtime.c
test-config.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-dump-split-index.c
test-genrandom.c
test-hashmap.c
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-mergesort.c
test-mktemp.c
test-parse-options.c
test-path-utils.c
test-prio-queue.c
test-read-cache.c
test-regex.c
test-revision-walking.c
test-run-command.c
test-scrap-cache-tree.c
test-sha1-array.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-list.c
test-subprocess.c
test-svn-fe.c
test-urlmatch-normalization.c
test-wildmatch.c
thread-utils.c
thread-utils.h
trace.c
trace.h
trailer.c do not include the same header twice 2015-02-13 13:16:12 -08:00
trailer.h
transport-helper.c transport: add a protocol-whitelist environment variable 2015-09-23 11:35:48 -07:00
transport.c transport: refactor protocol whitelist code 2015-09-25 15:28:36 -07:00
transport.h transport: refactor protocol whitelist code 2015-09-25 15:28:36 -07:00
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unicode_width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Sync with 2.2.3 2015-09-04 10:29:28 -07:00
unpack-trees.h
update_unicode.sh
upload-pack.c Merge branch 'jk/smart-http-hide-refs' into maint 2015-03-27 13:00:21 -07:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c do not include the same header twice 2015-02-13 13:16:12 -08:00
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c Merge branch 'jk/blame-commit-label' into maint 2015-02-24 22:09:54 -08:00
walker.h
wildmatch.c
wildmatch.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c Merge branch 'jk/status-read-branch-name-fix' into maint 2015-02-24 22:10:22 -08:00
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c zlib: initialize git_zstream in git_deflate_init{,_gzip,_raw} 2015-03-05 15:46:03 -08:00

README

////////////////////////////////////////////////////////////////

	Git - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public
License version 2 (some parts of it are under different licenses,
compatible with the GPLv2). It was originally written by Linus
Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/giteveryday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org (read
Documentation/SubmittingPatches for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
available at http://news.gmane.org/gmane.comp.version-control.git/,
http://marc.info/?l=git and other archival sites.

The maintainer frequently sends the "What's cooking" reports that
list the current status of various development topics to the mailing
list.  The discussion following them give a good reference for
project status, development direction and remaining tasks.