On 11/04, Jeff King wrote: > > diff --git a/Documentation/config.txt b/Documentation/config.txt > > index 27069ac..5d845c4 100644 > > --- a/Documentation/config.txt > > +++ b/Documentation/config.txt > > @@ -2308,6 +2308,31 @@ 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 usable by the user but don't want it used by commands which > > + execute clone/fetch/pull commands without user input, e.g. recursive > > + submodule initialization. > > Makes sense. I wonder if it would be good to emphasize _directly_ usable > here. I.e., "...when you want a protocol to be directly usable by the > user but don't want...". > > Should clone/fetch/pull also include push? You're right, that should really have been clone/fetch/push. > > > +protocol.<name>.allow:: > > + Set a policy to be used by protocol <name> with clone/fetch/pull commands. > > + > > Nice that this matches protocol.allow, so we don't need to re-explain > that. > > Should the list of protocols be here? I know they're covered under > GIT_ALLOW_PROTOCOL already, but if this is the preferred system, we > should probably explain them here, and then just have GIT_ALLOW_PROTOCOL > refer the user. Right now the list of protocols under GIT_ALLOW_PROTOCOL looks like it has a bit more documentation with how the colon list works. The protocols are also mentioned above with their default behaviour. > > > diff --git a/Documentation/git.txt b/Documentation/git.txt > > index ab7215e..ab25580 100644 > > --- a/Documentation/git.txt > > +++ b/Documentation/git.txt > > @@ -1150,13 +1150,13 @@ 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: > > + The new way to configure allowed protocols is done through the config > > + interface, though this setting takes precedences. See > > + linkgit:git-config[1] for more details. If set, provide a > > + colon-separated list of protocols which are allowed to be used with > > + fetch/push/clone. Any protocol not mentioned will be disallowed (i.e., > > + this is a whitelist, not a blacklist). The protocol names currently > > + used by git are: > > I wonder if we can explain this in terms of the config system. Something > like: > > If set to a colon-separated list of zero or more protocols, behave as > if `protocol.allow` is set to `never`, and each of the listed > protocols has `protocol.$protocol.allow` set to `always`. Yeah that makes sense. > > > +`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. See > > + linkgit:git-config[1] for more details. > > Under "this is useful", it may make sense to make it clear that external > programs can use this, too. Something like: > > It may also be useful for programs which feed potentially-untrusted > URLs to git commands. I'll put that in too. > > > diff --git a/t/lib-proto-disable.sh b/t/lib-proto-disable.sh > > index b0917d9..5950fbf 100644 > > --- a/t/lib-proto-disable.sh > > +++ b/t/lib-proto-disable.sh > > @@ -1,15 +1,12 @@ > > # 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 > > > > - test_expect_success "clone $1 (enabled)" ' > > + test_expect_success "clone $desc (enabled)" ' > > Yeah, this should have been $desc all along. It makes the diff really > noisy, though. Should it be split out into a preparatory change? I'll pull it out to make the patch a bit cleaner. -- Brandon Williams