From: Michael Haggerty <mhagger@alum.mit.edu>
To: Jeff King <peff@peff.net>
Cc: Jay Soffian <jaysoffian@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
git discussion list <git@vger.kernel.org>,
Jakub Narebski <jnareb@gmail.com>
Subject: Re: How to use git attributes to configure server-side checks?
Date: Sat, 24 Sep 2011 13:03:50 +0200 [thread overview]
Message-ID: <4E7DB916.6010606@alum.mit.edu> (raw)
In-Reply-To: <20110924061555.GB13974@sigill.intra.peff.net>
On 09/24/2011 08:15 AM, Jeff King wrote:
> On Sat, Sep 24, 2011 at 08:05:29AM +0200, Michael Haggerty wrote:
>> This could be implemented by having a single local config option that
>> enables the use of an in-tree .gitconfig file:
>>
>> git config core.useTreeConfig true
>>
>> (or whatever the correct naming convention would be). This option would
>> default to false, so the in-tree config would only occur following an
>> affirmative decision by the cloner.
>
> But once you've verified that the config looks OK and turned this option
> on, how do you protect yourself from malicious config entering the repo
> through a fetch?
For most software projects, the user does
git pull
make
daily. There is nothing that a nasty .gitconfig can do that can't be
done more easily by a nasty Makefile (or anything else in the build
process). The moment I pull from Junio's repository and run a build
without having personally done a full code review first, I've given
Junio complete pownership of my account. For projects in which I invest
such trust, "core.useTreeConfig=true" would be a convenience that does
not appreciably increase my risk.
>> If finer granularity is required, config options could be classified
>> into "security-relevant" and "non-security-relevant" options, where the
>> former group basically includes anything that can cause arbitrary code
>> to be executed. Then there could be a "core.useTreeConfig = safeonly"
>> option to allow only the harmless options.
>
> This is the "can of worms" I referred to earlier. You have to start
> classifying each option.
It is not a "can of worms" in the sense of insoluble. It is only a lot
of work. We could start today by setting a default that all config
options are dangerous, incrementally opening up options as they are vetted.
>> I think the priority of config options (highest to lowest) should be
>>
>> $GIT_DIR/config
>> in-tree .gitconfig
>> ~/.gitconfig
>> $(prefix)/etc/gitconfig
>
> One catch with any precedence scheme is that there are certain config
> constructs that cannot be overridden.
Good point, and good suggestion to allow config constructs to be cleared.
>> Of course, just like for attributes, it would have to be decided which
>> version of the .gitconfig to use in which situations.
>
> I'm not sure it makes sense to have it in the tree at all. For
> attributes it makes sense, because you are annotating a path at a
> _specific_ revision. But config is often much more meta- than that.
> Take textconv for an example. The gitattributes say "foo.pdf should use
> the 'pdf' diff driver". That makes sense to go in a revision. But the
> config will say "pdf files can be converted to text using
> /usr/bin/pdftotext". That is not something that is tied to the revision
> at all, and should exist outside of any revision. I.e., whether I am
> doing a "git show" on the HEAD, or on some ancient commit, I would want
> to use the same value, not whatever tool I used to convert PDFs years
> ago.
There are obviously config options that should not be versioned. These
should not be stored in the tree. (Perhaps they should be stored in
another branch, as you suggested.) But there's no need to prevent
people from versioning *any* config options just because they shouldn't
version *all* of them.
I think that your "config-file includes" proposal would make all of this
possible or nearly possible, but I'll have to read your proposal more
carefully before I can comment.
While we are on the topic of config settings, I have often thought that
it would be nice for git's default settings to be set via a
well-commented config file, installed along with git, rather than via
values compiled into the code. This file and Documentation/config.txt
could be generated from a single source file as part of the build
process. Advantages:
1. It would give a single place for people to see exactly what defaults
are being applied, and a good starting point for seeing what can be
changed locally.
2. It would ensure that the defaults listed in the documentation always
match those being used, and prevent different default values from being
used in different places in the code.
3. It would make it easy to discover what default values have changed
between two git versions (i.e., what new knobs there are to turn).
4. It would make it easy for packagers to tweak the built-in defaults,
and would make it obvious what defaults packagers had changed. (Of
course packagers can already just include an /etc/gitconfig, but it
would be better to reserve that file for sitewide changes).
The priority would obviously be:
$GIT_DIR/config
in-tree .gitconfig
~/.gitconfig
$(prefix)/etc/gitconfig
git's installed defaults
Michael
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
next prev parent reply other threads:[~2011-09-24 11:04 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-21 19:32 How to use git attributes to configure server-side checks? Michael Haggerty
2011-09-21 20:02 ` Jay Soffian
2011-09-21 20:17 ` Junio C Hamano
2011-09-22 8:28 ` Michael Haggerty
2011-09-22 15:41 ` Jay Soffian
2011-09-22 17:13 ` Jeff King
2011-09-22 18:41 ` Jay Soffian
2011-09-22 19:22 ` Junio C Hamano
2011-09-22 20:58 ` Jeff King
2011-09-22 21:04 ` Jeff King
2011-09-23 10:06 ` Michael Haggerty
2011-09-23 19:33 ` Jeff King
2011-09-23 19:40 ` Junio C Hamano
2011-09-23 19:44 ` Jeff King
2011-09-24 6:05 ` Michael Haggerty
2011-09-24 6:15 ` Jeff King
2011-09-24 11:03 ` Michael Haggerty [this message]
2011-09-26 4:09 ` Junio C Hamano
2011-09-26 4:28 ` Michael Haggerty
2011-09-26 11:05 ` Jeff King
2011-09-26 14:14 ` Jakub Narebski
2011-09-26 15:11 ` Michael Haggerty
2011-09-22 17:26 ` Junio C Hamano
2011-09-23 8:35 ` Michael Haggerty
2011-09-23 12:49 ` Stephen Bash
2011-09-23 13:31 ` Michael Haggerty
2011-09-22 22:54 ` Jakub Narebski
2011-09-23 10:38 ` Michael Haggerty
2012-02-17 18:42 ` Michael Haggerty
2012-02-17 19:26 ` Junio C Hamano
2012-02-17 19:59 ` Junio C Hamano
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=4E7DB916.6010606@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jaysoffian@gmail.com \
--cc=jnareb@gmail.com \
--cc=peff@peff.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).