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

Re: [PATCH] t/lib-httpd: switch SANITY check for NOT_ROOT

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 16, 2015, 18:32 UTC
Message-ID
<xmqqfvba37bq.fsf@gitster.dls.corp.google.com>
In-Reply-To
<20150116091648.GA2450@peff.net>
Jeff King <peff@peff.net> writes:
Show 10 quoted lines
> So here's a re-roll with `id -u`, as that may be the simplest way to get
> people to test (with the patch applied, running t5550 as a normal user
> should work, and as root should skip the tests).
>
> -- >8 --
> Subject: [PATCH] t/lib-httpd: switch SANITY check for NOT_ROOT
>
> The SANITY prerequisite is really about whether the
> filesystem will respect the permissions we set, and being
> root is only one part of that....

I checked the use of POSIXPERM that is not tied to SANITY and found a few questionable ones (this is orthogonal from the earlier list of glitches I mentioned, which is SANITY without POSIXPERM).

I think we will later make SANITY to require NOT_ROOT and POSIXPERM, at which point many existing tests that require POSIXPERM,SANITY can be simplified to require only SANITY, but that will be a follow-up change to this fix.

-- >8 --
Subject: tests: correct misuses of POSIXPERM

POSIXPERM requires that a later call to stat(2) (hence "ls -l") faithfully reproduces what an earlier chmod(2) did. Some filesystems cannot satisify this.

SANITY requires that a file or a directory is indeed accessible (or inaccessible) when its permission bits would say it ought to be accessible (or inaccessible). Running tests as root would lose this prerequisite for obvious reasons.

Fix a few tests that misuse POSIXPERM.
t0061-run-command.sh has two uses of POSIXPERM.
 - One checks that an attempt to execute a file that is marked as
   unexecutable results in a failure with EACCES; I do not think
   having root-ness or any other capability that busts the
   filesystem permission mode bits will make you run an unexecutable
   file, so this should be left as-is.  The test does not have
   anything to do with SANITY.
 - The other one expects 'git nitfol' runs the alias when an
   alias.nitfol is defined and a directory on the PATH is marked as
   unreadable and unsearchable.  I _think_ the test tries to reject
   the alternative expectation that we want to refuse to run the
   alias because it would break "no alias may mask a command" rule
   if a file 'git-nitfol' exists in the unreadable directory but we
   cannot even determine if that is the case.  Under !SANITY that
   busts the permission bits, this test no longer checks that, so it
   must be protected with SANITY.

t1509-root-worktree.sh expects to be run on a / that is writable by the user and sees if Git behaves "sensibly" when /.git is the repository to govern a worktree that is the whole filesystem, and also if Git behaves "sensibly" when / itself is a bare repository with refs, objects, and friends (I find the definition of "behaves sensibly" under these conditions hard to fathom, but it is a different matter).

The implementation of the test is very much problematic.
 - It requires POSIXPERM, but it does not do chmod or checks modes
   in any way.
 - It runs "rm /*" and "rm -fr /refs /objects ..." in one of the
   tests, and also does "cd / && git init --bare".  If done on a
   live system that takes advantages of the "feature" being tested,
   these obviously will clobber the system.  But there is no guard
   against such a breakage.
 - It uses "test $UID = 0" to see rootness, which now should be
   spelled "! test_have_prereq NOT_ROOT"
 t/t0061-run-command.sh   |  2 +-
 t/t1509-root-worktree.sh | 17 +++++++++++++----
 2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/t/t0061-run-command.sh b/t/t0061-run-command.sh
index 17e969d..9acf628 100755
--- a/t/t0061-run-command.sh
+++ b/t/t0061-run-command.sh
@@ -34,7 +34,7 @@ test_expect_success POSIXPERM 'run_command reports EACCES' '
 	grep "fatal: cannot exec.*hello.sh" err
 '
 
-test_expect_success POSIXPERM 'unreadable directory in PATH' '
+test_expect_success POSIXPERM,SANITY 'unreadable directory in PATH' '
 	mkdir local-command &&
 	test_when_finished "chmod u+rwx local-command && rm -fr local-command" &&
 	git config alias.nitfol "!echo frotz" &&
diff --git a/t/t1509-root-worktree.sh b/t/t1509-root-worktree.sh
index 335420f..b6977d4 100755
--- a/t/t1509-root-worktree.sh
+++ b/t/t1509-root-worktree.sh
@@ -98,8 +98,16 @@ test_foobar_foobar() {
 	'
 }
 
-if ! test_have_prereq POSIXPERM || ! [ -w / ]; then
-	skip_all="Dangerous test skipped. Read this test if you want to execute it"
+if ! test -w /
+then
+	skip_all="Test requiring writable / skipped. Read this test if you want to run it"
+	test_done
+fi
+
+if  test -e /refs || test -e /objects || test -e /info || test -e /hooks ||
+    test -e /.git || test -e /foo || test -e /me
+then
+	skip_all="Skip test that clobbers existing files in /"
 	test_done
 fi
 
@@ -108,8 +116,9 @@ if [ "$IKNOWWHATIAMDOING" != "YES" ]; then
 	test_done
 fi
 
-if [ "$UID" = 0 ]; then
-	skip_all="No you can't run this with root"
+if ! test_have_prereq NOT_ROOT
+then
+	skip_all="No you can't run this as root"
 	test_done
 fi
 
-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "Git for Windows" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Previous: Jeff KingNext: Junio C Hamano
Message 15 of 33 in “t5539 broken under Mac OS X”
  1. Torsten BögershausenJan 14, 2015
  2. Junio C HamanoJan 14, 2015
  3. Torsten BögershausenJan 14, 2015
  4. Jeff KingJan 14, 2015
  5. Kyle J. McKayJan 15, 2015
  6. Junio C HamanoJan 15, 2015
  7. Jeff KingJan 15, 2015
  8. Junio C HamanoJan 15, 2015
  9. Jeff KingJan 15, 2015
  10. Junio C HamanoJan 16, 2015
  11. t/lib-httpd: switch SANITY check for NOT_ROOTJeff King, Jan 16, 2015
  12. Kyle J. McKayJan 16, 2015
  13. Jeff KingJan 16, 2015
  14. Jeff KingJan 16, 2015
  15. Junio C HamanoJan 16, 2015
  16. Junio C HamanoJan 16, 2015
  17. Torsten BögershausenJan 17, 2015
  18. Junio C HamanoJan 21, 2015
  19. Torsten BögershausenJan 22, 2015
  20. Junio C HamanoJan 22, 2015
  21. Torsten BögershausenJan 23, 2015
  22. Junio C HamanoFeb 12, 2015
  23. Torsten BögershausenFeb 14, 2015
  24. Junio C HamanoFeb 15, 2015
  25. Torsten BögershausenJan 23, 2015
  26. Junio C HamanoJan 23, 2015
  27. Johannes SchindelinJan 24, 2015
  28. Kyle J. McKayJan 16, 2015
  29. Kyle J. McKayJan 16, 2015
  30. Achim GratzJan 16, 2015
  31. Erik Faye-LundJan 27, 2015
  32. Junio C HamanoJan 27, 2015
  33. Erik Faye-LundJan 27, 2015

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.