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
>
next prev parent 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).