bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pwd fails to traverse unreadable directory


From: Jim Meyering
Subject: Re: pwd fails to traverse unreadable directory
Date: Sun, 04 Feb 2007 12:57:06 +0100

I wrote:
...
> I'll add tests to coreutils some time next week.

I've added the test.
However, in its current state, it will fail on systems with
inadequate getcwd.  So before long, I'll have to find a work-around.
Either skip the test on such systems, or maybe change gnulib's getcwd.c
to try the value of $PWD from the environment when all else fails.

diff --git a/ChangeLog b/ChangeLog
index dbd3059..8b41ce7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-02-03  Jim Meyering  <address@hidden>
+
+       Test for today's gnulib/lib/getcwd.c fix affecting pwd and readlink
+       * NEWS: Mention the bug fix.
+       * tests/misc/pwd-unreadable-parent: New file.
+       * tests/misc/Makefile.am (TESTS): Ad pwd-unreadable-parent.
+
 2007-02-02  Paul Eggert  <address@hidden>

        * NEWS: Document fix for cp --preserve=mode.
diff --git a/NEWS b/NEWS
index bd307c1..e0b8298 100644
--- a/NEWS
+++ b/NEWS
@@ -34,6 +34,9 @@ GNU coreutils NEWS                                    -*- 
outline -*-
   a reasonable diagnostic.  Before, it would print this:
   "mv: cannot remove `/etc/passwd': Not a directory".

+  pwd and "readlink -e ." no longer fail unnecessarily when a parent
+  directory is unreadable.
+
   "rm -rf /etc/passwd" (run by non-root) now prints a diagnostic.
   Before it would print nothing.

diff --git a/tests/misc/Makefile.am b/tests/misc/Makefile.am
index c4c279d..145afbe 100644
--- a/tests/misc/Makefile.am
+++ b/tests/misc/Makefile.am
@@ -37,6 +37,7 @@ TESTS_ENVIRONMENT = \
 # will execute the test script rather than the standard utility.

 TESTS = \
+  pwd-unreadable-parent \
   cut \
   wc-files0-from \
   wc-files0 \
diff --git a/tests/misc/pwd-unreadable-parent b/tests/misc/pwd-unreadable-parent
new file mode 100755
index 0000000..f84627e
--- /dev/null
+++ b/tests/misc/pwd-unreadable-parent
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Ensure that pwd and "readlink -e ." work even when a parent directory
+# is unreadable.  Perform this test only on systems with a usable getcwd
+# function that has this capability.
+
+# Copyright (C) 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  pwd --version
+  readlink --version
+fi
+
+pwd=`pwd`
+t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
+trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit 
$status' 0
+trap '(exit $?); exit $?' 1 2 13 15
+
+framework_failure=0
+mkdir -p $tmp || framework_failure=1
+cd $tmp || framework_failure=1
+
+mkdir -p a/b || framework_failure=1
+cd a/b || framework_failure=1
+chmod a=x .. || framework_failure=1
+
+if test $framework_failure = 1; then
+  echo "$0: failure in testing framework" 1>&2
+  (exit 1); exit 1
+fi
+
+pwd_exe=$pwd/../../src/pwd
+
+fail=0
+$pwd_exe > exp || fail=1
+readlink -ev . > out || fail=1
+
+cmp out exp || fail=1
+test $fail = 1 && diff out exp 2> /dev/null
+
+(exit $fail); exit $fail
--
1.5.0.rc2.81.g73a2-dirty




reply via email to

[Prev in Thread] Current Thread [Next in Thread]