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

Re: permissions

From
William Pursell <bill.pursell@gmail.com>
Date
Jun 9, 2010, 10:29 UTC
Message-ID
<4C0F6CF0.3020603@wpursell.net>
In-Reply-To
<AANLkTikGpbeP1ba0y0oUsWGQXsrL8Z-GKjybCB83W_FJ@mail.gmail.com>
Alex Riesen wrote:
Show 17 quoted lines
> On Wed, Jun 9, 2010 at 00:27, William Pursell <bill.pursell@gmail.com> wrote:
>> Junio C Hamano wrote:
>>> Alex Riesen <raa.lkml@gmail.com> writes:
>>>
>>>> On Tue, Jun 8, 2010 at 12:25, William Pursell <bill.pursell@gmail.com> wrote:
>>>>> Here's a patch.  This doesn't address the issue of a damaged
>>>>> repository, but just catches access errors and permissions.
>>>> The change looks fishy.
>>>>
>>>> The patch moves the function is_git_directory at the level of user
>>>> interface where it wasn't before: it now complains and die.
>>>> Not all callers of the function call it only to die if it fails.
>>> Thanks for shooting it down before I had to look at it ;-)
>> The point of the patch is that it now complains and dies.
> 
> At wrong point. Points, actually. There are many callers of the
> function you modified. You should have looked at them all.

I did look at all 4 calls, and it seemed to me that localizing the change in one location is a better design than adding logic to 4 different locations.

>> Perhaps I'm being obtuse, but can you describe a situation
>> in which this causes git to terminate inappropriately?
> 
> Maybe. BTW, can you? (if you try, I mean).

No, I can't. As far as I can tell, the patch adds exactly the functionality that I want it to add. You do make good points about its problems below, however, and you are right that I did miss the point of your criticism. Thank you for clarifying.

Show 7 quoted lines
> But your questions
> misses the point of my complaint about your patch:
> 
> The patch makes the function you modified act not as one
> can guess from its other uses. Imagine someone replaced
> open(2) implementation to kill your program everytime you
> tried to open /etc/passwd. How'd you like that?

I think there is a substantial difference between changing a basic library call and changing a statically linked function called from only 4 locations, but I'll agree that you have a valid point about the function not behaving as expected. The functionality I've added disagrees with the name of the function, so on that point alone I will agree that the patch is no good.

Show 5 quoted lines
> 
> That alone is reason enough to dislike the change and put
> you personally into a list of persons to be careful with (as
> you don't seem to care about what happens with the code
> after you changed it).

I do care quite a lot actually. My primary goal was to minimize the changes, and it seemed that is_git_directory() was the right place to make the change with minimal impact. Perhaps the following patch would be more to your liking:

diff --git a/setup.c b/setup.c
index 7e04602..b25da21 100644
--- a/setup.c
+++ b/setup.c
@@ -303,6 +303,9 @@ const char *read_gitfile_gently(const char *path)
 		buf = dir;
 	}

+	if (access(dir, X_OK))
+		die_errno("Unable to access %s", dir);
+
 	if (!is_git_directory(dir))
 		die("Not a git repository: %s", dir);
 	path = make_absolute_path(dir);
@@ -370,6 +373,9 @@ const char *setup_git_directory_gently(int *nongit_ok)
 			*nongit_ok = 1;
 			return NULL;
 		}
+		if (access(gitdirenv, X_OK))
+			die_errno("Unable to access %s", gitdirenv);
+
 		die("Not a git repository: '%s'", gitdirenv);
 	}

@@ -407,6 +413,11 @@ const char *setup_git_directory_gently(int *nongit_ok)
 		}
 		if (is_git_directory(DEFAULT_GIT_DIR_ENVIRONMENT))
 			break;
+		if (access(DEFAULT_GIT_DIR_ENVIRONMENT, X_OK)
+				 && errno != ENOENT )
+			die_errno("Unable to access %s/%s",
+				 cwd, DEFAULT_GIT_DIR_ENVIRONMENT);
+
 		if (is_git_directory(".")) {
 			inside_git_dir = 1;
 			if (!work_tree_env)
diff --git a/t/t0002-gitfile.sh b/t/t0002-gitfile.sh
index cb14425..9f6f756 100755
--- a/t/t0002-gitfile.sh
+++ b/t/t0002-gitfile.sh
@@ -46,7 +46,7 @@ test_expect_success 'bad setup: invalid .git file path' '
 		echo "git rev-parse accepted an invalid .git file path"
 		false
 	fi &&
-	if ! grep "Not a git repository" .err
+	if ! grep "Unable to access $REAL.not" .err
 	then
 		echo "git rev-parse returned wrong error"
 		false
-- 
William Pursell
Previous: Alex RiesenNext: Thomas Rast
Message 13 of 17 in “permissions”
  1. William PursellJun 5, 2010
  2. Andreas SchwabJun 5, 2010
  3. William PursellJun 5, 2010
  4. Alex RiesenJun 6, 2010
  5. William PursellJun 6, 2010
  6. Alex RiesenJun 6, 2010
  7. Junio C HamanoJun 6, 2010
  8. William PursellJun 8, 2010
  9. Alex RiesenJun 8, 2010
  10. Junio C HamanoJun 8, 2010
  11. William PursellJun 8, 2010
  12. Alex RiesenJun 9, 2010
  13. William PursellJun 9, 2010
  14. Thomas RastJun 9, 2010
  15. Alex RiesenJun 9, 2010
  16. Alex RiesenJun 9, 2010
  17. Steven MichalskeJun 9, 2010

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.