Re: [PATCH] Fallback on getpwuid if envar HOME is unset
- From
- Conley Owens <cco3@android.com>
- Date
- Aug 21, 2012, 17:18 UTC
- Message-ID
- <CAFFUb6UypNJ-8p8Hs14+QMGeU3KSG+pQX7NJTeh3OtBoTZoO3g@mail.gmail.com>
- In-Reply-To
- <20120821023033.GB20271@sigill.intra.peff.net>
On Mon, Aug 20, 2012 at 7:30 PM, Jeff King <peff@peff.net> wrote:
Show 15 quoted lines
> On Mon, Aug 20, 2012 at 06:28:57PM -0700, Conley Owens wrote: > >> From f64ba3c908b33a2ea5a5ad1f0e5800af76b82ce9 Mon Sep 17 00:00:00 2001 >> From: Conley Owens <cco3@android.com> >> Date: Mon, 20 Aug 2012 18:23:40 -0700 >> Subject: [PATCH] Fallback on getpwuid if envar HOME is unset > > Please drop these lines from the message body; they are redundant with > your email's headers. > > This seems sensible on the surface, but I'm a bit curious: why isn't > $HOME set? And are there any reasons that somebody who has unset HOME > would not want to fallback? For example, running under Apache, HOME is > often unset when calling CGI programs. Would it make sense for us to > look in ~www-data/.gitconfig in that case?
I think it might, but perhaps I'm wrong. As another example, upstart strips all the environment variables, so if you run a job as a particular user, that user's .gitconfig will not be read unless HOME is specified.
Show 37 quoted lines
>
>> diff --git a/path.c b/path.c
>> index 66acd24..60affab 100644
>> --- a/path.c
>> +++ b/path.c
>> @@ -144,6 +144,11 @@ void home_config_paths(char **global, char **xdg,
>> char *file)
>> char *to_free = NULL;
>>
>> if (!home) {
>> + struct passwd *pw = xgetpwuid_self();
>> + home = pw->pw_dir;
>> + }
>> +
>> + if (!home) {
>> if (global)
>> *global = NULL;
>> } else {
>
> If we do go this route, it would probably make sense to wrap this like:
>
> const char *home_directory(void)
> {
> const char *dir = getenv("HOME");
> if (!dir) {
> struct passwd *pw = xgetpwuid_self();
> dir = pw->pw_dir;
> }
> return dir;
> }
>
> and then call it consistently everywhere we do getenv("HOME"). You'd
> want to double-check that each caller only uses the result for a short
> period (unlike getenv, the results of getpwuid will be overwritten at
> the next call).
>
> -Peff