All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brandon Williams <bmwill@google.com>
To: git@vger.kernel.org
Cc: Brandon Williams <bmwill@google.com>,
	peff@peff.net, sbeller@google.com, bburky@bburky.com,
	jrnieder@gmail.com
Subject: [PATCH v8 2/5] transport: add protocol policy config option
Date: Thu,  1 Dec 2016 16:00:59 -0800	[thread overview]
Message-ID: <1480636862-40489-3-git-send-email-bmwill@google.com> (raw)
In-Reply-To: <1480636862-40489-1-git-send-email-bmwill@google.com>

Previously the `GIT_ALLOW_PROTOCOL` environment variable was used to
specify a whitelist of protocols to be used in clone/fetch/push
commands.  This patch introduces new configuration options for more
fine-grained control for allowing/disallowing protocols.  This also has
the added benefit of allowing easier construction of a protocol
whitelist on systems where setting an environment variable is
non-trivial.

Now users can specify a policy to be used for each type of protocol via
the 'protocol.<name>.allow' config option.  A default policy for all
unconfigured protocols can be set with the 'protocol.allow' config
option.  If no user configured default is made git will allow known-safe
protocols (http, https, git, ssh, file), disallow known-dangerous
protocols (ext), and have a default policy of `user` for all other
protocols.

The supported policies are `always`, `never`, and `user`.  The `user`
policy can be used to configure a protocol to be usable when explicitly
used by a user, while disallowing it for commands which run
clone/fetch/push commands without direct user intervention (e.g.
recursive initialization of submodules).  Commands which can potentially
clone/fetch/push from untrusted repositories without user intervention
can export `GIT_PROTOCOL_FROM_USER` with a value of '0' to prevent
protocols configured to the `user` policy from being used.

Fix remote-ext tests to use the new config to allow the ext
protocol to be tested.

Based on a patch by Jeff King <peff@peff.net>

Signed-off-by: Brandon Williams <bmwill@google.com>
---
 Documentation/config.txt         |  46 ++++++++++++++
 Documentation/git.txt            |  38 +++++-------
 git-submodule.sh                 |  12 ++--
 t/lib-proto-disable.sh           | 130 +++++++++++++++++++++++++++++++++++++--
 t/t5509-fetch-push-namespaces.sh |   1 +
 t/t5802-connect-helper.sh        |   1 +
 transport.c                      |  75 +++++++++++++++++++++-
 7 files changed, 264 insertions(+), 39 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 27069ac..5fe50bc 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -2308,6 +2308,52 @@ pretty.<name>::
 	Note that an alias with the same name as a built-in format
 	will be silently ignored.
 
+protocol.allow::
+	If set, provide a user defined default policy for all protocols which
+	don't explicitly have a policy (`protocol.<name>.allow`).  By default,
+	if unset, known-safe protocols (http, https, git, ssh, file) have a
+	default policy of `always`, known-dangerous protocols (ext) have a
+	default policy of `never`, and all other protocols have a default
+	policy of `user`.  Supported policies:
++
+--
+
+* `always` - protocol is always able to be used.
+
+* `never` - protocol is never able to be used.
+
+* `user` - protocol is only able to be used when `GIT_PROTOCOL_FROM_USER` is
+  either unset or has a value of 1.  This policy should be used when you want a
+  protocol to be directly usable by the user but don't want it used by commands which
+  execute clone/fetch/push commands without user input, e.g. recursive
+  submodule initialization.
+
+--
+
+protocol.<name>.allow::
+	Set a policy to be used by protocol `<name>` with clone/fetch/push
+	commands. See `protocol.allow` above for the available policies.
++
+The protocol names currently used by git are:
++
+--
+  - `file`: any local file-based path (including `file://` URLs,
+    or local paths)
+
+  - `git`: the anonymous git protocol over a direct TCP
+    connection (or proxy, if configured)
+
+  - `ssh`: git over ssh (including `host:path` syntax,
+    `ssh://`, etc).
+
+  - `http`: git over http, both "smart http" and "dumb http".
+    Note that this does _not_ include `https`; if you want to configure
+    both, you must do so individually.
+
+  - any external helpers are named by their protocol (e.g., use
+    `hg` to allow the `git-remote-hg` helper)
+--
+
 pull.ff::
 	By default, Git does not create an extra merge commit when merging
 	a commit that is a descendant of the current commit. Instead, the
diff --git a/Documentation/git.txt b/Documentation/git.txt
index ab7215e..c52cec8 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -1150,30 +1150,20 @@ of clones and fetches.
 	cloning a repository to make a backup).
 
 `GIT_ALLOW_PROTOCOL`::
-	If set, provide a colon-separated list of protocols which are
-	allowed to be used with fetch/push/clone. This is useful to
-	restrict recursive submodule initialization from an untrusted
-	repository. Any protocol not mentioned will be disallowed (i.e.,
-	this is a whitelist, not a blacklist). If the variable is not
-	set at all, all protocols are enabled.  The protocol names
-	currently used by git are:
-
-	  - `file`: any local file-based path (including `file://` URLs,
-	    or local paths)
-
-	  - `git`: the anonymous git protocol over a direct TCP
-	    connection (or proxy, if configured)
-
-	  - `ssh`: git over ssh (including `host:path` syntax,
-	    `ssh://`, etc).
-
-	  - `http`: git over http, both "smart http" and "dumb http".
-	    Note that this does _not_ include `https`; if you want both,
-	    you should specify both as `http:https`.
-
-	  - any external helpers are named by their protocol (e.g., use
-	    `hg` to allow the `git-remote-hg` helper)
-
+	If set to a colon-separated list of protocols, behave as if
+	`protocol.allow` is set to `never`, and each of the listed
+	protocols has `protocol.<name>.allow` set to `always`
+	(overriding any existing configuration). In other words, any
+	protocol not mentioned will be disallowed (i.e., this is a
+	whitelist, not a blacklist). See the description of
+	`protocol.allow` in linkgit:git-config[1] for more details.
+
+`GIT_PROTOCOL_FROM_USER`::
+	Set to 0 to prevent protocols used by fetch/push/clone which are
+	configured to the `user` state.  This is useful to restrict recursive
+	submodule initialization from an untrusted repository or for programs
+	which feed potentially-untrusted URLS to git commands.  See
+	linkgit:git-config[1] for more details.
 
 Discussion[[Discussion]]
 ------------------------
diff --git a/git-submodule.sh b/git-submodule.sh
index a024a13..0a477b4 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -21,14 +21,10 @@ require_work_tree
 wt_prefix=$(git rev-parse --show-prefix)
 cd_to_toplevel
 
-# Restrict ourselves to a vanilla subset of protocols; the URLs
-# we get are under control of a remote repository, and we do not
-# want them kicking off arbitrary git-remote-* programs.
-#
-# If the user has already specified a set of allowed protocols,
-# we assume they know what they're doing and use that instead.
-: ${GIT_ALLOW_PROTOCOL=file:git:http:https:ssh}
-export GIT_ALLOW_PROTOCOL
+# Tell the rest of git that any URLs we get don't come
+# directly from the user, so it can apply policy as appropriate.
+GIT_PROTOCOL_FROM_USER=0
+export GIT_PROTOCOL_FROM_USER
 
 command=
 branch=
diff --git a/t/lib-proto-disable.sh b/t/lib-proto-disable.sh
index be88e9a..02f49cb 100644
--- a/t/lib-proto-disable.sh
+++ b/t/lib-proto-disable.sh
@@ -1,10 +1,7 @@
 # Test routines for checking protocol disabling.
 
-# test cloning a particular protocol
-#   $1 - description of the protocol
-#   $2 - machine-readable name of the protocol
-#   $3 - the URL to try cloning
-test_proto () {
+# Test clone/fetch/push with GIT_ALLOW_PROTOCOL whitelist
+test_whitelist () {
 	desc=$1
 	proto=$2
 	url=$3
@@ -62,6 +59,129 @@ test_proto () {
 			test_must_fail git clone --bare "$url" tmp.git
 		)
 	'
+
+	test_expect_success "clone $desc (env var has precedence)" '
+		rm -rf tmp.git &&
+		(
+			GIT_ALLOW_PROTOCOL=none &&
+			export GIT_ALLOW_PROTOCOL &&
+			test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
+			test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
+		)
+	'
+}
+
+test_config () {
+	desc=$1
+	proto=$2
+	url=$3
+
+	# Test clone/fetch/push with protocol.<type>.allow config
+	test_expect_success "clone $desc (enabled with config)" '
+		rm -rf tmp.git &&
+		git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
+	'
+
+	test_expect_success "fetch $desc (enabled)" '
+		git -C tmp.git -c protocol.$proto.allow=always fetch
+	'
+
+	test_expect_success "push $desc (enabled)" '
+		git -C tmp.git -c protocol.$proto.allow=always  push origin HEAD:pushed
+	'
+
+	test_expect_success "push $desc (disabled)" '
+		test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
+	'
+
+	test_expect_success "fetch $desc (disabled)" '
+		test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
+	'
+
+	test_expect_success "clone $desc (disabled)" '
+		rm -rf tmp.git &&
+		test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
+	'
+
+	# Test clone/fetch/push with protocol.user.allow and its env var
+	test_expect_success "clone $desc (enabled)" '
+		rm -rf tmp.git &&
+		git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
+	'
+
+	test_expect_success "fetch $desc (enabled)" '
+		git -C tmp.git -c protocol.$proto.allow=user fetch
+	'
+
+	test_expect_success "push $desc (enabled)" '
+		git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
+	'
+
+	test_expect_success "push $desc (disabled)" '
+		(
+			cd tmp.git &&
+			GIT_PROTOCOL_FROM_USER=0 &&
+			export GIT_PROTOCOL_FROM_USER &&
+			test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
+		)
+	'
+
+	test_expect_success "fetch $desc (disabled)" '
+		(
+			cd tmp.git &&
+			GIT_PROTOCOL_FROM_USER=0 &&
+			export GIT_PROTOCOL_FROM_USER &&
+			test_must_fail git -c protocol.$proto.allow=user fetch
+		)
+	'
+
+	test_expect_success "clone $desc (disabled)" '
+		rm -rf tmp.git &&
+		(
+			GIT_PROTOCOL_FROM_USER=0 &&
+			export GIT_PROTOCOL_FROM_USER &&
+			test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
+		)
+	'
+
+	# Test clone/fetch/push with protocol.allow user defined default
+	test_expect_success "clone $desc (enabled)" '
+		rm -rf tmp.git &&
+		git config --global protocol.allow always &&
+		git clone --bare "$url" tmp.git
+	'
+
+	test_expect_success "fetch $desc (enabled)" '
+		git -C tmp.git fetch
+	'
+
+	test_expect_success "push $desc (enabled)" '
+		git -C tmp.git push origin HEAD:pushed
+	'
+
+	test_expect_success "push $desc (disabled)" '
+		git config --global protocol.allow never &&
+		test_must_fail git -C tmp.git push origin HEAD:pushed
+	'
+
+	test_expect_success "fetch $desc (disabled)" '
+		test_must_fail git -C tmp.git fetch
+	'
+
+	test_expect_success "clone $desc (disabled)" '
+		rm -rf tmp.git &&
+		test_must_fail git clone --bare "$url" tmp.git
+	'
+}
+
+# test cloning a particular protocol
+#   $1 - description of the protocol
+#   $2 - machine-readable name of the protocol
+#   $3 - the URL to try cloning
+test_proto () {
+	test_whitelist "$@"
+
+	test_config "$@"
 }
 
 # set up an ssh wrapper that will access $host/$repo in the
diff --git a/t/t5509-fetch-push-namespaces.sh b/t/t5509-fetch-push-namespaces.sh
index bc44ac3..75c570a 100755
--- a/t/t5509-fetch-push-namespaces.sh
+++ b/t/t5509-fetch-push-namespaces.sh
@@ -4,6 +4,7 @@ test_description='fetch/push involving ref namespaces'
 . ./test-lib.sh
 
 test_expect_success setup '
+	git config --global protocol.ext.allow user &&
 	test_tick &&
 	git init original &&
 	(
diff --git a/t/t5802-connect-helper.sh b/t/t5802-connect-helper.sh
index b7a7f9d..c6c2661 100755
--- a/t/t5802-connect-helper.sh
+++ b/t/t5802-connect-helper.sh
@@ -4,6 +4,7 @@ test_description='ext::cmd remote "connect" helper'
 . ./test-lib.sh
 
 test_expect_success setup '
+	git config --global protocol.ext.allow user &&
 	test_tick &&
 	git commit --allow-empty -m initial &&
 	test_tick &&
diff --git a/transport.c b/transport.c
index d57e8de..2c0ec76 100644
--- a/transport.c
+++ b/transport.c
@@ -664,10 +664,81 @@ static const struct string_list *protocol_whitelist(void)
 	return enabled ? &allowed : NULL;
 }
 
+enum protocol_allow_config {
+	PROTOCOL_ALLOW_NEVER = 0,
+	PROTOCOL_ALLOW_USER_ONLY,
+	PROTOCOL_ALLOW_ALWAYS
+};
+
+static enum protocol_allow_config parse_protocol_config(const char *key,
+							const char *value)
+{
+	if (!strcasecmp(value, "always"))
+		return PROTOCOL_ALLOW_ALWAYS;
+	else if (!strcasecmp(value, "never"))
+		return PROTOCOL_ALLOW_NEVER;
+	else if (!strcasecmp(value, "user"))
+		return PROTOCOL_ALLOW_USER_ONLY;
+
+	die("unknown value for config '%s': %s", key, value);
+}
+
+static enum protocol_allow_config get_protocol_config(const char *type)
+{
+	char *key = xstrfmt("protocol.%s.allow", type);
+	char *value;
+
+	/* first check the per-protocol config */
+	if (!git_config_get_string(key, &value)) {
+		enum protocol_allow_config ret =
+			parse_protocol_config(key, value);
+		free(key);
+		free(value);
+		return ret;
+	}
+	free(key);
+
+	/* if defined, fallback to user-defined default for unknown protocols */
+	if (!git_config_get_string("protocol.allow", &value)) {
+		enum protocol_allow_config ret =
+			parse_protocol_config("protocol.allow", value);
+		free(value);
+		return ret;
+	}
+
+	/* fallback to built-in defaults */
+	/* known safe */
+	if (!strcmp(type, "http") ||
+	    !strcmp(type, "https") ||
+	    !strcmp(type, "git") ||
+	    !strcmp(type, "ssh") ||
+	    !strcmp(type, "file"))
+		return PROTOCOL_ALLOW_ALWAYS;
+
+	/* known scary; err on the side of caution */
+	if (!strcmp(type, "ext"))
+		return PROTOCOL_ALLOW_NEVER;
+
+	/* unknown; by default let them be used only directly by the user */
+	return PROTOCOL_ALLOW_USER_ONLY;
+}
+
 int is_transport_allowed(const char *type)
 {
-	const struct string_list *allowed = protocol_whitelist();
-	return !allowed || string_list_has_string(allowed, type);
+	const struct string_list *whitelist = protocol_whitelist();
+	if (whitelist)
+		return string_list_has_string(whitelist, type);
+
+	switch (get_protocol_config(type)) {
+	case PROTOCOL_ALLOW_ALWAYS:
+		return 1;
+	case PROTOCOL_ALLOW_NEVER:
+		return 0;
+	case PROTOCOL_ALLOW_USER_ONLY:
+		return git_env_bool("GIT_PROTOCOL_FROM_USER", 1);
+	}
+
+	die("BUG: invalid protocol_allow_config type");
 }
 
 void transport_check_allowed(const char *type)
-- 
2.8.0.rc3.226.g39d4020


  parent reply	other threads:[~2016-12-02  0:01 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-02 22:20 [PATCH] transport: add core.allowProtocol config option Brandon Williams
2016-11-02 22:41 ` Stefan Beller
2016-11-02 22:47   ` Brandon Williams
2016-11-02 23:05 ` Jeff King
2016-11-02 23:08   ` Jeff King
2016-11-02 23:34     ` Brandon Williams
2016-11-02 23:33   ` Brandon Williams
2016-11-02 23:46     ` Brandon Williams
2016-11-03  0:08       ` Jeff King
2016-11-03  0:22 ` Jonathan Nieder
2016-11-03  0:41   ` Blake Burkhart
2016-11-03  2:44   ` Junio C Hamano
2016-11-03 14:38   ` Jeff King
2016-11-03 17:25     ` Brandon Williams
2016-11-03 17:39       ` Stefan Beller
2016-11-03 17:51         ` Brandon Williams
2016-11-03 18:02           ` Jeff King
2016-11-03 18:08             ` Brandon Williams
2016-11-03 18:00         ` Jeff King
2016-11-03 17:53       ` Jeff King
2016-11-03 18:19         ` Brandon Williams
2016-11-03 18:25           ` Jeff King
2016-11-03 18:24         ` Jeff King
2016-11-03 18:45           ` Brandon Williams
2016-11-03 18:50             ` Jeff King
2016-11-03 18:56               ` Brandon Williams
2016-11-03  0:50 ` [PATCH v2] " Brandon Williams
2016-11-04 20:55 ` [PATCH v3] transport: add protocol policy " Brandon Williams
2016-11-04 20:58   ` Brandon Williams
2016-11-04 21:35     ` Stefan Beller
2016-11-04 23:09       ` Jeff King
2016-11-05  0:18         ` Brandon Williams
2016-11-04 22:38   ` Stefan Beller
2016-11-07 18:14     ` Brandon Williams
2016-11-04 23:06   ` Jeff King
2016-11-07 19:17     ` Brandon Williams
2016-11-07 19:35   ` [PATCH v4 1/2] lib-proto-disable: variable name fix Brandon Williams
2016-11-07 19:35     ` [PATCH v4 2/2] transport: add protocol policy config option Brandon Williams
2016-11-07 20:44       ` Jeff King
2016-11-07 21:02         ` Brandon Williams
2016-11-07 20:26     ` [PATCH v4 1/2] lib-proto-disable: variable name fix Jeff King
2016-11-07 20:40       ` Brandon Williams
2016-11-07 20:48         ` Jeff King
2016-11-08  3:32           ` Jacob Keller
2016-11-08 20:52             ` Junio C Hamano
2016-11-07 21:51     ` [PATCH v5 " Brandon Williams
2016-11-07 21:51       ` [PATCH v5 2/2] transport: add protocol policy config option Brandon Williams
2016-11-08 22:04         ` Jeff King
2016-11-08 22:05           ` Brandon Williams
2016-12-01 19:44       ` [PATCH v6 0/4] transport protocol policy configuration Brandon Williams
2016-12-01 19:44         ` [PATCH v6 1/4] lib-proto-disable: variable name fix Brandon Williams
2016-12-01 19:44         ` [PATCH v6 2/4] transport: add protocol policy config option Brandon Williams
2016-12-01 19:44         ` [PATCH v6 3/4] http: always warn if libcurl version is too old Brandon Williams
2016-12-01 19:44         ` [PATCH v6 4/4] transport: check if protocol can be used on a redirect Brandon Williams
2016-12-01 19:48           ` Brandon Williams
2016-12-01 19:49             ` Brandon Williams
2016-12-01 19:50           ` Jeff King
2016-12-01 19:54             ` Junio C Hamano
2016-12-01 19:59               ` Jeff King
2016-12-01 20:01                 ` Brandon Williams
2016-12-01 20:25         ` [PATCH v7 0/4] transport protocol policy configuration Brandon Williams
2016-12-01 20:25           ` [PATCH v7 1/4] lib-proto-disable: variable name fix Brandon Williams
2016-12-01 20:25           ` [PATCH v7 2/4] transport: add protocol policy config option Brandon Williams
2016-12-01 20:25           ` [PATCH v7 3/4] http: always warn if libcurl version is too old Brandon Williams
2016-12-01 20:25           ` [PATCH v7 4/4] transport: add from_user parameter to is_transport_allowed Brandon Williams
2016-12-01 21:40             ` Jeff King
2016-12-01 22:25               ` Junio C Hamano
2016-12-01 23:07               ` Brandon Williams
2016-12-01 23:26                 ` Brandon Williams
2016-12-02  0:13                   ` Jeff King
2016-12-02 17:33                     ` Brandon Williams
2016-12-01 23:34                 ` Junio C Hamano
2016-12-01 23:58                   ` Brandon Williams
2016-12-05 20:04                     ` Junio C Hamano
2016-12-05 22:22                       ` Brandon Williams
2016-12-05 23:19                         ` Junio C Hamano
2016-12-05 23:22                           ` Brandon Williams
2016-12-06 13:51                       ` Jeff King
2016-12-06 17:53                         ` Junio C Hamano
2016-12-06 18:10                           ` Jeff King
2016-12-06 18:24                             ` [PATCH v2] jk/http-walker-limit-redirect rebased to maint-2.9 Jeff King
2016-12-06 18:24                               ` [PATCH v2 1/6] http: simplify update_url_from_redirect Jeff King
2016-12-06 18:24                               ` [PATCH v2 2/6] http: always update the base URL for redirects Jeff King
2016-12-06 18:24                               ` [PATCH v2 3/6] remote-curl: rename shadowed options variable Jeff King
2016-12-06 18:24                               ` [PATCH v2 4/6] http: make redirects more obvious Jeff King
2016-12-06 18:24                               ` [PATCH v2 5/6] http: treat http-alternates like redirects Jeff King
2016-12-06 18:25                               ` [PATCH v2 6/6] http-walker: complain about non-404 loose object errors Jeff King
2016-12-06 22:24                         ` [PATCH v7 4/4] transport: add from_user parameter to is_transport_allowed Brandon Williams
2016-12-02  0:00           ` [PATCH v8 0/5] transport protocol policy configuration Brandon Williams
2016-12-02  0:00             ` [PATCH v8 1/5] lib-proto-disable: variable name fix Brandon Williams
2016-12-02  0:00             ` Brandon Williams [this message]
2016-12-02  0:01             ` [PATCH v8 3/5] http: always warn if libcurl version is too old Brandon Williams
2016-12-02  0:01             ` [PATCH v8 4/5] http: create function to get curl allowed protocols Brandon Williams
2016-12-02  0:01             ` [PATCH v8 5/5] transport: add from_user parameter to is_transport_allowed Brandon Williams
2016-12-14  1:40             ` [PATCH v9 0/5] transport protocol policy configuration Brandon Williams
2016-12-14  1:40               ` [PATCH v9 1/5] lib-proto-disable: variable name fix Brandon Williams
2016-12-14  1:40               ` [PATCH v9 2/5] transport: add protocol policy config option Brandon Williams
2016-12-14  1:40               ` [PATCH v9 3/5] http: always warn if libcurl version is too old Brandon Williams
2016-12-14 16:01                 ` Jeff King
2016-12-14 17:56                   ` Brandon Williams
2016-12-14  1:40               ` [PATCH v9 4/5] http: create function to get curl allowed protocols Brandon Williams
2016-12-14 16:03                 ` Jeff King
2016-12-14 18:00                   ` Brandon Williams
2016-12-14  1:40               ` [PATCH v9 5/5] transport: add from_user parameter to is_transport_allowed Brandon Williams
2016-12-14 16:40                 ` Jeff King
2016-12-14 20:13                   ` Brandon Williams
2016-12-14 20:33                     ` Jeff King
2016-12-14 21:12                       ` Jeff King
2016-12-14 21:58                         ` Brandon Williams
     [not found]                       ` <CAP3OtXiOPbAkr5Mn+5tEmZZAZzJXQ4CvtpHCg=wt+k-bi6K2vA@mail.gmail.com>
     [not found]                         ` <CAP3OtXhH++szRws20MaHt-ftLBMUJuYiTmfL50mOFP4FA4Mn6Q@mail.gmail.com>
2016-12-14 22:52                           ` Jeff King
2016-12-14 20:37                     ` Brandon Williams
2016-12-14 20:41                       ` Jeff King
2016-12-14 20:50                         ` Brandon Williams
2016-12-14 22:39               ` [PATCH v10 0/6] transport protocol policy configuration Brandon Williams
2016-12-14 22:39                 ` [PATCH v10 1/6] lib-proto-disable: variable name fix Brandon Williams
2016-12-14 22:39                 ` [PATCH v10 2/6] http: always warn if libcurl version is too old Brandon Williams
2016-12-15  0:21                   ` Jeff King
2016-12-15 17:29                     ` Junio C Hamano
2016-12-14 22:39                 ` [PATCH v10 3/6] transport: add protocol policy config option Brandon Williams
2016-12-14 22:39                 ` [PATCH v10 4/6] http: create function to get curl allowed protocols Brandon Williams
2016-12-14 22:39                 ` [PATCH v10 5/6] transport: add from_user parameter to is_transport_allowed Brandon Williams
2016-12-14 22:39                 ` [PATCH v10 6/6] http: respect protocol.*.allow=user for http-alternates Brandon Williams
2016-12-14 23:25                 ` [PATCH v10 0/6] transport protocol policy configuration Junio C Hamano
2016-12-15  0:22                 ` Jeff King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1480636862-40489-3-git-send-email-bmwill@google.com \
    --to=bmwill@google.com \
    --cc=bburky@bburky.com \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    --cc=peff@peff.net \
    --cc=sbeller@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.