git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Vadim Zeitlin <vz-git@zeitlins.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] fetch: allow running as different users in shared repositories
Date: Wed, 25 Mar 2020 20:04:09 +0100 (CET)	[thread overview]
Message-ID: <nycvar.QRO.7.76.6.2003252001560.46@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <20200319010321.18614-1-vz-git@zeitlins.org>

Hi Vadim,

On Thu, 19 Mar 2020, Vadim Zeitlin wrote:

> The function fopen_for_writing(), which was added in 79d7582e32 (commit:
> allow editing the commit message even in shared repos, 2016-01-06) and
> used for overwriting FETCH_HEAD since ea56518dfe (Handle more file
> writes correctly in shared repos, 2016-01-11), didn't do it correctly in
> shared repositories under Linux.
>
> This happened because in this situation the file FETCH_HEAD has mode 644

I wonder why that is. In a shared repository, it should have mode 664, I
thought.

> and attempting to overwrite it when running git-fetch under an account
> different from the one that was had originally created it, failed with
> EACCES, and not EPERM. However fopen_for_writing() only checked for the
> latter, and not the former, so it didn't even try removing the existing
> file and recreating it, as it was supposed to do.
>
> Fix this by checking for either EACCES or EPERM. The latter doesn't seem
> to be ever returned in a typical situation by open(2) under Linux, but
> keep checking for it as it is presumably returned under some other
> platform, although it's not really clear where does this happen.
>
> Signed-off-by: Vadim Zeitlin <vz-git@zeitlins.org>
> ---
> I couldn't find any system that would return EPERM for a "normal"
> permissions denied error, so maybe it's not worth checking for it, but I
> wanted to minimize the number of changes to the existing behaviour. At the
> very least, testing for EACCES is definitely necessary under Linux, where
> openat(2) returns it, and not EPERM, in the situation described above, i.e.
> non-writable file (even if it's in a writable directory, allowing to unlink
> it without problems).

That rationale makes sense to me, as does the patch.

Thanks,
Johannes

> ---
>  wrapper.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/wrapper.c b/wrapper.c
> index e1eaef2e16..f5607241da 100644
> --- a/wrapper.c
> +++ b/wrapper.c
> @@ -373,11 +373,12 @@ FILE *fopen_for_writing(const char *path)
>  {
>  	FILE *ret = fopen(path, "w");
>
> -	if (!ret && errno == EPERM) {
> +	if (!ret && (errno == EACCES || errno == EPERM)) {
> +		int open_error = errno;
>  		if (!unlink(path))
>  			ret = fopen(path, "w");
>  		else
> -			errno = EPERM;
> +			errno = open_error;
>  	}
>  	return ret;
>  }
> --
> 2.26.0.rc2
>

  reply	other threads:[~2020-03-25 19:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-19  1:03 [PATCH] fetch: allow running as different users in shared repositories Vadim Zeitlin
2020-03-25 19:04 ` Johannes Schindelin [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-03-26  0:44 Vadim Zeitlin
2020-03-26 14:40 ` Johannes Schindelin
2020-05-01 23:11   ` Re[2]: " Vadim Zeitlin
2020-05-04 16:32     ` Junio C Hamano
2020-05-04 17:04       ` Re[2]: " Vadim Zeitlin
2020-05-04 20:39         ` 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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=nycvar.QRO.7.76.6.2003252001560.46@tvgsbejvaqbjf.bet \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=vz-git@zeitlins.org \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).