[Libguestfs] [PATCH 1/2] daemon: glob: do not return directories with trailing slash

Pino Toscano ptoscano at redhat.com
Wed Feb 3 15:31:36 UTC 2016


Do not pass GLOB_MARK as flag for glob(3) in the daemon implementation
of glob, so names of directories will not have a trailing slash.
This allows users to have filenames that can be used with other tools,
such as rm.  Add a new test to check this (based on RHBZ#1293271).

A mild behaviour change is that users of the glob API now need to append
the slash when building paths using its results.  The test-glob.sh test
of guestfish is adapted to this.

Related to RHBZ#1293271.
---
 daemon/glob.c                    |  2 +-
 fish/test-glob.sh                |  2 +-
 tests/regressions/Makefile.am    |  2 ++
 tests/regressions/rhbz1293271.sh | 70 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 74 insertions(+), 2 deletions(-)
 create mode 100755 tests/regressions/rhbz1293271.sh

diff --git a/daemon/glob.c b/daemon/glob.c
index 45fb30f..0e646bd 100644
--- a/daemon/glob.c
+++ b/daemon/glob.c
@@ -33,7 +33,7 @@ do_glob_expand (const char *pattern)
 
   /* glob(3) in glibc never calls chdir, so this seems to be safe: */
   CHROOT_IN;
-  r = glob (pattern, GLOB_MARK|GLOB_BRACE, NULL, &buf);
+  r = glob (pattern, GLOB_BRACE, NULL, &buf);
   CHROOT_OUT;
 
   if (r == GLOB_NOMATCH) {	/* Return an empty list instead of an error. */
diff --git a/fish/test-glob.sh b/fish/test-glob.sh
index c520319..854d898 100755
--- a/fish/test-glob.sh
+++ b/fish/test-glob.sh
@@ -64,7 +64,7 @@ echo end
 EOF
 
 if [ "$(cat test-glob.out)" != "files
-/foo/
+/foo
 /foo/bar1
 /foo/bar2
 /foo/not*
diff --git a/tests/regressions/Makefile.am b/tests/regressions/Makefile.am
index 3aae57b..27ad118 100644
--- a/tests/regressions/Makefile.am
+++ b/tests/regressions/Makefile.am
@@ -48,6 +48,7 @@ EXTRA_DIST = \
 	rhbz1232192.sh \
 	rhbz1232192.xml \
 	rhbz1285847.sh \
+	rhbz1293271.sh \
 	test-noexec-stack.pl
 
 TESTS = \
@@ -77,6 +78,7 @@ TESTS = \
 	rhbz1175196.sh \
 	rhbz1232192.sh \
 	rhbz1285847.sh \
+	rhbz1293271.sh \
 	test-big-heap \
 	test-noexec-stack.pl
 
diff --git a/tests/regressions/rhbz1293271.sh b/tests/regressions/rhbz1293271.sh
new file mode 100755
index 0000000..bbd334e
--- /dev/null
+++ b/tests/regressions/rhbz1293271.sh
@@ -0,0 +1,70 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2016 Red Hat 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.
+
+# Regression test for:
+# https://bugzilla.redhat.com/show_bug.cgi?id=1293271
+# rm-rf does not remove symlinks to directories
+
+set -e
+export LANG=C
+
+if [ -n "$SKIP_TEST_RHBZ1293271_SH" ]; then
+    echo "$0: test skipped because environment variable is set."
+    exit 77
+fi
+
+rm -f rhbz1293271.img rhbz1293271.out
+
+guestfish -N rhbz1293271.img=fs -m /dev/sda1 > rhbz1293271.out <<EOF
+touch /hello
+touch /test-file
+touch /world
+mkdir /somedir
+touch /somedir/file
+ln-s somedir /test-link
+
+ls / | sort
+
+echo -----
+
+glob rm-rf /*test*
+
+ls / | sort
+
+echo ----- END
+
+EOF
+
+if [ "$(cat rhbz1293271.out)" != "hello
+lost+found
+somedir
+test-file
+test-link
+world
+-----
+hello
+lost+found
+somedir
+world
+----- END" ]; then
+    echo "$0: unexpected output:"
+    cat rhbz1293271.out
+    exit 1
+fi
+
+rm rhbz1293271.img rhbz1293271.out
-- 
2.5.0




More information about the Libguestfs mailing list