git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/3] Allow debugging unsafe directories' ownership

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jul 15, 2022, 14:33 UTC
Message-ID
<8rqqnqp1-q613-ron6-6q8s-n7sq57o980q9@tzk.qr>
In-Reply-To
<xmqqy1wv2x1n.fsf@gitster.g>
Hi Junio,
On Thu, 14 Jul 2022, Junio C Hamano wrote:
Show 18 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
> > ... I am not sure about this part.  Do we have any other codepath to
> > show "to debug, run the program with this" suggestion?  Adding it in
> > the documentation is probably good, but this is an extra message
> > that is much larger than the "owned by X but you are Y" message that
> > would be shown.  With or without the environment set, the output
> > will become noisier with this patch.  I wonder if we are better off
> > giving the information that is given in the warning (in compat/ part
> > of the patch) _unconditionally_ in the message, which would make it
> > less noisy overall.
>
> I am wondering if passing a struct to allow is_path_owned_by*()
> helper(s) to report the detail of the failures they discover a
> cleaner way to do this.  To illustrate what I meant, along the
> lines of the following patch, with any additional code to actually
> stuff messages in the strbuf report, in the is_path_owned_by*()
> implementation.

I like it! Let me play with this, after this coming week (during which I plan to be mostly offline).

Thanks, Dscho

Show 68 quoted lines
>
> I am perfectly OK if we make it a debug-only option by hiding this
> behind an environment variable, but if we were to do so, I do not
> want to see us advertize the environment variable in the die()
> message (a debug-only option can be documented, but not worth
> surfacing in and contaminating the usual UI output).
>
> Comments?
>
>  compat/mingw.c    |  2 +-
>  git-compat-util.h |  3 ++-
>  setup.c           | 12 +++++++++---
>  3 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git c/compat/mingw.c w/compat/mingw.c
> index 2607de93af..f12b7df16d 100644
> --- c/compat/mingw.c
> +++ w/compat/mingw.c
> @@ -2673,7 +2673,7 @@ static PSID get_current_user_sid(void)
>  	return result;
>  }
>
> -int is_path_owned_by_current_sid(const char *path)
> +int is_path_owned_by_current_sid(const char *path, struct strbuf *report)
>  {
>  	WCHAR wpath[MAX_PATH];
>  	PSID sid = NULL;
> diff --git c/git-compat-util.h w/git-compat-util.h
> index 58d7708296..de34b0ea7e 100644
> --- c/git-compat-util.h
> +++ w/git-compat-util.h
> @@ -487,7 +487,8 @@ static inline void extract_id_from_env(const char *env, uid_t *id)
>  	}
>  }
>
> -static inline int is_path_owned_by_current_uid(const char *path)
> +struct strbuf;
> +static inline int is_path_owned_by_current_uid(const char *path, struct strbuf *report)
>  {
>  	struct stat st;
>  	uid_t euid;
> diff --git c/setup.c w/setup.c
> index 09b6549ba9..ed823585f7 100644
> --- c/setup.c
> +++ w/setup.c
> @@ -1143,12 +1143,18 @@ static int ensure_valid_ownership(const char *gitfile,
>  	struct safe_directory_data data = {
>  		.path = worktree ? worktree : gitdir
>  	};
> +	struct strbuf report = STRBUF_INIT;
>
>  	if (!git_env_bool("GIT_TEST_ASSUME_DIFFERENT_OWNER", 0) &&
> -	   (!gitfile || is_path_owned_by_current_user(gitfile)) &&
> -	   (!worktree || is_path_owned_by_current_user(worktree)) &&
> -	   (!gitdir || is_path_owned_by_current_user(gitdir)))
> +	    (!gitfile || is_path_owned_by_current_user(gitfile, &report)) &&
> +	    (!worktree || is_path_owned_by_current_user(worktree, &report)) &&
> +	    (!gitdir || is_path_owned_by_current_user(gitdir, &report))) {
> +		if (report.len) {
> +			fputs(report.buf, stderr);
> +			strbuf_release(&report);
> +		}
>  		return 1;
> +	}
>
>  	/*
>  	 * data.path is the "path" that identifies the repository and it is
>
Previous: Junio C HamanoNext: Johannes Schindelin
Message 5 of 16 in “Some improvements to safe.directory on Windows”
  1. 0/3 Some improvements to safe.directory on WindowsJohannes Schindelin via GitGitGadget, Jul 13, 2022
  2. 1/3 Allow debugging unsafe directories' ownershipJohannes Schindelin via GitGitGadget, Jul 13, 2022
  3. Junio C HamanoJul 13, 2022
  4. Junio C HamanoJul 14, 2022
  5. Johannes SchindelinJul 15, 2022
  6. Johannes SchindelinAug 8, 2022
  7. 2/3 mingw: handle a file owned by the Administrators group correctlyJohannes Schindelin via GitGitGadget, Jul 13, 2022
  8. 3/3 mingw: be more informative when ownership check fails on FAT32Johannes Schindelin via GitGitGadget, Jul 13, 2022
  9. 0/5 Some improvements to safe.directory on WindowsJohannes Schindelin via GitGitGadget, Aug 8, 2022
  10. 1/5 setup: fix some formattingJohannes Schindelin via GitGitGadget, Aug 8, 2022
  11. 2/5 Prepare for more detailed "dubious ownership" messagesJohannes Schindelin via GitGitGadget, Aug 8, 2022
  12. 3/5 mingw: provide details about unsafe directories' ownershipJohannes Schindelin via GitGitGadget, Aug 8, 2022
  13. 4/5 mingw: be more informative when ownership check fails on FAT32Johannes Schindelin via GitGitGadget, Aug 8, 2022
  14. 5/5 mingw: handle a file owned by the Administrators group correctlyJohannes Schindelin via GitGitGadget, Aug 8, 2022
  15. Junio C HamanoAug 8, 2022
  16. Johannes SchindelinAug 9, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.