Hello community, here is the log from the commit of package bindfs for openSUSE:Factory checked in at 2016-03-21 12:45:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bindfs (Old) and /work/SRC/openSUSE:Factory/.bindfs.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bindfs" Changes: -------- --- /work/SRC/openSUSE:Factory/bindfs/bindfs.changes 2015-11-15 12:48:03.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.bindfs.new/bindfs.changes 2016-03-21 12:45:34.000000000 +0100 @@ -1,0 +2,9 @@ +Sat Mar 12 21:10:37 UTC 2016 - jeng...@inai.de + +- Update to new upstream release 1.13.1 +* Fixed an issue that some users had with reading large directories. +* Source directory now shown in /etc/mtab. +* Fixed some test suite compatibility issues with Fedora. +* Rate limits are now expressed as 64-bit ints. + +------------------------------------------------------------------- Old: ---- bindfs-1.13.0.tar.gz New: ---- bindfs-1.13.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bindfs.spec ++++++ --- /var/tmp/diff_new_pack.iTmvWX/_old 2016-03-21 12:45:35.000000000 +0100 +++ /var/tmp/diff_new_pack.iTmvWX/_new 2016-03-21 12:45:35.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package bindfs # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: bindfs -Version: 1.13.0 +Version: 1.13.1 Release: 0 Summary: Mount Directories to other Locations and alter Permission Bits License: GPL-2.0+ ++++++ bindfs-1.13.0.tar.gz -> bindfs-1.13.1.tar.gz ++++++ ++++ 1752 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/.travis.yml new/bindfs-1.13.1/.travis.yml --- old/bindfs-1.13.0/.travis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/bindfs-1.13.1/.travis.yml 2016-02-17 04:52:01.000000000 +0100 @@ -0,0 +1,11 @@ +language: c +sudo: required +dist: trusty +compiler: + - clang + - gcc +script: ./autogen.sh -d && make && sudo make check +before_install: + - sudo apt-get update + - sudo apt-get install -qq fuse libfuse-dev valgrind + - sudo /bin/sh -c 'echo user_allow_other > /etc/fuse.conf' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/ChangeLog new/bindfs-1.13.1/ChangeLog --- old/bindfs-1.13.0/ChangeLog 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/ChangeLog 2016-02-17 04:52:01.000000000 +0100 @@ -1,6 +1,15 @@ +2016-02-17 Martin Pärtel <martin dot partel at gmail dot com> + + * Fixed an issue that some users had with reading large + directories (#28). Thanks to reporters! + * Source directory now shown in /etc/mtab. + * Fixed some test suite compatibility issues with Fedora. Thanks @tyll! + * Rate limits are now expressed as 64-bit ints. + * Released 1.13.1 + 2015-09-26 Martin Pärtel <martin dot partel at gmail dot com> - * Merged --resolve-symlinks by hstern@ (#23). Thanks! + * Merged --resolve-symlinks by @hstern (#23). Thanks! * Implemented --resolved-symlink-deletion. * Released 1.13.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/README new/bindfs-1.13.1/README --- old/bindfs-1.13.0/README 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/README 1970-01-01 01:00:00.000000000 +0100 @@ -1,47 +0,0 @@ - -bindfs - http://bindfs.org/ - --- Overview -- - -bindfs is a FUSE filesystem for mirroring a directory to another -directory, similarly to mount --bind. The permissions of the mirrored -directory can be altered in various ways. - -Some things bindfs can be used for: - - Making a directory read-only. - - Making all executables non-executable. - - Sharing a directory with a list of users (or groups). - - Modifying permission bits using rules with chmod-like syntax. - - Changing the permissions with which files are created. - -Non-root users can use almost all features, but most interesting -use-cases need user_allow_other to be defined in /etc/fuse.conf - - --- Installation -- - -Make sure fuse 2.6.0 or above is installed (http://fuse.sf.net/). -Then compile and install as usual: -./configure -make -make install - -If you want the mounts made by non-root users to be visible to other users, -you may have to add the line user_allow_other to /etc/fuse.conf. - - --- Usage -- - -See the bindfs --help or the man-page for instructions and examples. - --- OS X note -- - -The following extra options may be useful under osxfuse: --o local,allow_other,extended_security,noappledouble - -See https://github.com/osxfuse/osxfuse/wiki/Mount-options for details. - --- License -- - -GNU General Public License version 2 or any later version. -See the file COPYING. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/README.md new/bindfs-1.13.1/README.md --- old/bindfs-1.13.0/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/bindfs-1.13.1/README.md 2016-02-17 04:52:01.000000000 +0100 @@ -0,0 +1,67 @@ + +## Overview ## + +bindfs - http://bindfs.org/ + +bindfs is a FUSE filesystem for mirroring a directory to another +directory, similarly to `mount --bind`. The permissions of the mirrored +directory can be altered in various ways. + +Some things bindfs can be used for: +- Making a directory read-only. +- Making all executables non-executable. +- Sharing a directory with a list of users (or groups). +- Modifying permission bits using rules with chmod-like syntax. +- Changing the permissions with which files are created. + +Non-root users can use almost all features, but most interesting +use-cases need `user_allow_other` to be defined in `/etc/fuse.conf`. + + +## Installation ## + +Make sure FUSE 2.6.0 or above is installed (http://fuse.sf.net/). +Then compile and install as usual: + + ./configure + make + make install + +If you want the mounts made by non-root users to be visible to other users, +you may have to add the line `user_allow_other` to `/etc/fuse.conf`. + +In Linux-based OSes, you may have to add your user to the `fuse` group. + + +## Usage ## + +See the `bindfs --help` or the man-page for instructions and examples. + + +## OS X note ## + +The following extra options may be useful under osxfuse: + + -o local,allow_other,extended_security,noappledouble + +See https://github.com/osxfuse/osxfuse/wiki/Mount-options for details. + + +## Test suite ## + +[![Build Status](https://travis-ci.org/mpartel/bindfs.svg?branch=master)](https://travis-ci.org/mpartel/bindfs) + +Bindfs comes with a (somewhat brittle and messy) test suite. +The test suite has two kinds of tests: those that have to be run as root and +those that have to be run as non-root. To run all of the tests, do +`make check` both as root and as non-root. + +The test suite requires Ruby 2.0+ (1.9+ might also work). If you're using +[RVM](https://rvm.io/) then you may need to use `rvmsudo` instead of plain +`sudo` to run the root tests. + + +## License ## + +GNU General Public License version 2 or any later version. +See the file COPYING. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/configure.ac new/bindfs-1.13.1/configure.ac --- old/bindfs-1.13.0/configure.ac 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/configure.ac 2016-02-17 04:52:01.000000000 +0100 @@ -1,6 +1,6 @@ -AC_INIT([bindfs],[1.13.0],[martin.par...@gmail.com]) +AC_INIT([bindfs],[1.13.1],[martin.par...@gmail.com]) -AM_INIT_AUTOMAKE([foreign]) +AM_INIT_AUTOMAKE([foreign serial-tests]) AC_CONFIG_HEADERS([config.h]) AC_PROG_CC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/src/bindfs.c new/bindfs-1.13.1/src/bindfs.c --- old/bindfs-1.13.0/src/bindfs.c 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/src/bindfs.c 2016-02-17 04:52:01.000000000 +0100 @@ -36,6 +36,8 @@ /* For stat() nanosecond precision and lutimes() */ #define _BSD_SOURCE +/* The new non-deprecated version of _BSD_SOURCE */ +#define _DEFAULT_SOURCE #include <stdlib.h> #include <stddef.h> @@ -606,8 +608,17 @@ memset(&st, 0, sizeof(st)); st.st_ino = de->d_ino; st.st_mode = de->d_type << 12; - if (filler(buf, de->d_name, &st, telldir(dp))) + + // See issue #28 for why we pass a 0 offset to `filler`. + // Given a 0 offset, `filler` should never return non-zero, so we + // consider it an error if it does. It is undocumented whether it sets + // errno in that case, so we zero it first and set it ourself if it + // doesn't. + errno = 0; + if (filler(buf, de->d_name, &st, 0) != 0) { + result = errno != 0 ? -errno : -EIO; break; + } } free(de_buf); @@ -1991,6 +2002,13 @@ fuse_opt_add_arg(&args, "-ouse_ino"); fuse_opt_add_arg(&args, "-oreaddir_ino"); + /* Show the source dir in the first field on /etc/mtab. */ + { + char *tmp = sprintf_new("-ofsname=%s", settings.mntsrc); + fuse_opt_add_arg(&args, tmp); + free(tmp); + } + /* We need to disable the attribute cache whenever two users can see different attributes. For now, only mirroring can do that. */ if (is_mirroring_enabled()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/src/misc.c new/bindfs-1.13.1/src/misc.c --- old/bindfs-1.13.0/src/misc.c 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/src/misc.c 2016-02-17 04:52:01.000000000 +0100 @@ -18,6 +18,8 @@ */ #include "misc.h" +#include <stdarg.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> @@ -68,6 +70,31 @@ } } +char *sprintf_new(const char *format, ...) +{ + va_list ap; + size_t buffer_size = strlen(format) + 32; + char *buffer = malloc(buffer_size); + if (buffer == NULL) { + return NULL; + } + + while (1) { + va_start(ap, format); + size_t len = (size_t)vsnprintf(buffer, buffer_size, format, ap); + va_end(ap); + if (len < buffer_size) { + return buffer; + } + free(buffer); + buffer_size *= 2; + buffer = malloc(buffer_size); + if (buffer == NULL) { + return NULL; + } + } +} + const char *my_basename(const char *path) { const char *p; @@ -125,7 +152,7 @@ { char* end; double base = strtod(str, &end); - long mul = 1; + long long mul = 1; if (*end == '\0') { mul = 1L; } else if (strcmp(end, "k") == 0) { @@ -135,7 +162,7 @@ } else if (strcmp(end, "G") == 0) { mul = 1024L * 1024L * 1024L; } else if (strcmp(end, "T") == 0) { - mul = 1024L * 1024L * 1024L * 1024L; + mul = 1024LL * 1024LL * 1024LL * 1024LL; } else { return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/src/misc.h new/bindfs-1.13.1/src/misc.h --- old/bindfs-1.13.0/src/misc.h 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/src/misc.h 2016-02-17 04:52:01.000000000 +0100 @@ -31,6 +31,9 @@ an end character is reached. */ char *strdup_until(const char *s, const char *endchars); +/* Like sprintf but writes to an automatically malloc'ed buffer. */ +char *sprintf_new(const char *format, ...); + /* Returns a pointer to the first character after the final slash of path, or path itself if it contains no slashes. If the path ends with a slash, then the result is an empty diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/test-driver new/bindfs-1.13.1/test-driver --- old/bindfs-1.13.0/test-driver 2015-09-27 00:11:43.000000000 +0200 +++ new/bindfs-1.13.1/test-driver 1970-01-01 01:00:00.000000000 +0100 @@ -1,139 +0,0 @@ -#! /bin/sh -# test-driver - basic testsuite driver script. - -scriptversion=2013-07-13.22; # UTC - -# Copyright (C) 2011-2013 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, 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, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to <bug-autom...@gnu.org> or send patches to -# <automake-patc...@gnu.org>. - -# Make unconditional expansion of undefined variables an error. This -# helps a lot in preventing typo-related bugs. -set -u - -usage_error () -{ - echo "$0: $*" >&2 - print_usage >&2 - exit 2 -} - -print_usage () -{ - cat <<END -Usage: - test-driver --test-name=NAME --log-file=PATH --trs-file=PATH - [--expect-failure={yes|no}] [--color-tests={yes|no}] - [--enable-hard-errors={yes|no}] [--] - TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] -The '--test-name', '--log-file' and '--trs-file' options are mandatory. -END -} - -test_name= # Used for reporting. -log_file= # Where to save the output of the test script. -trs_file= # Where to save the metadata of the test run. -expect_failure=no -color_tests=no -enable_hard_errors=yes -while test $# -gt 0; do - case $1 in - --help) print_usage; exit $?;; - --version) echo "test-driver $scriptversion"; exit $?;; - --test-name) test_name=$2; shift;; - --log-file) log_file=$2; shift;; - --trs-file) trs_file=$2; shift;; - --color-tests) color_tests=$2; shift;; - --expect-failure) expect_failure=$2; shift;; - --enable-hard-errors) enable_hard_errors=$2; shift;; - --) shift; break;; - -*) usage_error "invalid option: '$1'";; - *) break;; - esac - shift -done - -missing_opts= -test x"$test_name" = x && missing_opts="$missing_opts --test-name" -test x"$log_file" = x && missing_opts="$missing_opts --log-file" -test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" -if test x"$missing_opts" != x; then - usage_error "the following mandatory options are missing:$missing_opts" -fi - -if test $# -eq 0; then - usage_error "missing argument" -fi - -if test $color_tests = yes; then - # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. - red='[0;31m' # Red. - grn='[0;32m' # Green. - lgn='[1;32m' # Light green. - blu='[1;34m' # Blue. - mgn='[0;35m' # Magenta. - std='[m' # No color. -else - red= grn= lgn= blu= mgn= std= -fi - -do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' -trap "st=129; $do_exit" 1 -trap "st=130; $do_exit" 2 -trap "st=141; $do_exit" 13 -trap "st=143; $do_exit" 15 - -# Test script is run here. -"$@" >$log_file 2>&1 -estatus=$? -if test $enable_hard_errors = no && test $estatus -eq 99; then - estatus=1 -fi - -case $estatus:$expect_failure in - 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; - 0:*) col=$grn res=PASS recheck=no gcopy=no;; - 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; - 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; - *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; - *:*) col=$red res=FAIL recheck=yes gcopy=yes;; -esac - -# Report outcome to console. -echo "${col}${res}${std}: $test_name" - -# Register the test result, and other relevant metadata. -echo ":test-result: $res" > $trs_file -echo ":global-test-result: $res" >> $trs_file -echo ":recheck: $recheck" >> $trs_file -echo ":copy-in-global-log: $gcopy" >> $trs_file - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/tests/internals/test_internals.c new/bindfs-1.13.1/tests/internals/test_internals.c --- old/bindfs-1.13.0/tests/internals/test_internals.c 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/tests/internals/test_internals.c 2016-02-17 04:52:01.000000000 +0100 @@ -52,4 +52,21 @@ test_my_dirname(buf, ".."); } -TEST_MAIN(my_dirname_suite); +void sprintf_new_suite() { + char *result; + + result = sprintf_new("Hello %d %s", 123, "World"); + TEST_ASSERT(strcmp(result, "Hello 123 World") == 0); + free(result); + + result = sprintf_new("A %s", "loooooooooooooooooooooooooong result"); + TEST_ASSERT(strcmp(result, "A loooooooooooooooooooooooooong result") == 0); + free(result); +} + +void test_internal_suite() { + my_dirname_suite(); + sprintf_new_suite(); +} + +TEST_MAIN(test_internal_suite); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/tests/test_bindfs.rb new/bindfs-1.13.1/tests/test_bindfs.rb --- old/bindfs-1.13.0/tests/test_bindfs.rb 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/tests/test_bindfs.rb 2016-02-17 04:52:01.000000000 +0100 @@ -36,7 +36,8 @@ # Some useful shorthands $nobody_uid = nobody_uid = Etc.getpwnam('nobody').uid -$nogroup_gid = nogroup_gid = Etc.getgrnam('nogroup').gid +$nobody_gid = nobody_gid = Etc.getpwnam('nobody').gid +$nobody_group = nobody_group = Etc.getgrgid(nobody_gid).name $tests_dir = File.dirname(File.realpath(__FILE__)) @@ -45,11 +46,11 @@ assert { File.basename(pwd) == TESTDIR_NAME } end -testenv("-u nobody -g nogroup") do +testenv("-u nobody -g #{nobody_group}") do touch('src/file') assert { File.stat('mnt/file').uid == nobody_uid } - assert { File.stat('mnt/file').gid == nogroup_gid } + assert { File.stat('mnt/file').gid == nobody_gid } end testenv("-p 0600:u+D") do @@ -73,24 +74,24 @@ root_testenv("", :title => "--create-as-user should be default for root") do chmod(0777, 'src') - `sudo -u nobody -g nogroup touch mnt/file` - `sudo -u nobody -g nogroup mkdir mnt/dir` - `sudo -u nobody -g nogroup ln -sf /tmp/foo mnt/lnk` + `sudo -u nobody -g #{nobody_group} touch mnt/file` + `sudo -u nobody -g #{nobody_group} mkdir mnt/dir` + `sudo -u nobody -g #{nobody_group} ln -sf /tmp/foo mnt/lnk` assert { File.stat('mnt/file').uid == nobody_uid } - assert { File.stat('mnt/file').gid == nogroup_gid } + assert { File.stat('mnt/file').gid == nobody_gid } assert { File.stat('src/file').uid == nobody_uid } - assert { File.stat('src/file').gid == nogroup_gid } + assert { File.stat('src/file').gid == nobody_gid } assert { File.stat('mnt/dir').uid == nobody_uid } - assert { File.stat('mnt/dir').gid == nogroup_gid } + assert { File.stat('mnt/dir').gid == nobody_gid } assert { File.stat('src/dir').uid == nobody_uid } - assert { File.stat('src/dir').gid == nogroup_gid } + assert { File.stat('src/dir').gid == nobody_gid } assert { File.lstat('mnt/lnk').uid == nobody_uid } - assert { File.lstat('mnt/lnk').gid == nogroup_gid } + assert { File.lstat('mnt/lnk').gid == nobody_gid } assert { File.lstat('src/lnk').uid == nobody_uid } - assert { File.lstat('src/lnk').gid == nogroup_gid } + assert { File.lstat('src/lnk').gid == nobody_gid } end testenv("--create-with-perms=og=r:ogd+x") do @@ -168,8 +169,8 @@ mntfile = 'mnt/file' tests = [ lambda { chown('nobody', nil, mntfile) }, - lambda { chown(nil, 'nogroup', mntfile) }, - lambda { chown('nobody', 'nogroup', mntfile) } + lambda { chown(nil, $nobody_group, mntfile) }, + lambda { chown('nobody', $nobody_group, mntfile) } ] for testcase, expect in tests.zip expectations @@ -185,16 +186,16 @@ case expect when :uid assert { uid == $nobody_uid } - assert { gid != $nogroup_gid } + assert { gid != $nobody_gid } when :gid assert { uid != $nobody_uid } - assert { gid == $nogroup_gid } + assert { gid == $nobody_gid } when :both assert { uid == $nobody_uid } - assert { gid == $nogroup_gid } + assert { gid == $nobody_gid } when nil assert { uid != $nobody_uid } - assert { gid != $nogroup_gid } + assert { gid != $nobody_gid } end end end @@ -211,16 +212,16 @@ touch('src/file') assert_exception(EPERM) { chown('nobody', nil, 'mnt/file') } - assert_exception(EPERM) { chown('nobody', 'nogroup', 'mnt/file') } - chown(nil, 'nogroup', 'mnt/file') + assert_exception(EPERM) { chown('nobody', nobody_group, 'mnt/file') } + chown(nil, nobody_group, 'mnt/file') end root_testenv("--mirror=root") do touch('src/file') - chown('nobody', 'nogroup', 'src/file') + chown('nobody', nobody_group, 'src/file') assert { File.stat('mnt/file').uid == 0 } - assert { File.stat('mnt/file').gid == $nogroup_gid } + assert { File.stat('mnt/file').gid == $nobody_gid } end testenv("--chmod-allow-x --chmod-ignore") do @@ -265,9 +266,9 @@ assert { File.stat('src/file').mode & 0777 == 0640 } end -root_testenv("--map=nobody/root:@nogroup/@root") do +root_testenv("--map=nobody/root:@#{nobody_group}/@root") do touch('src/file') - chown('nobody', 'nogroup', 'src/file') + chown('nobody', nobody_group, 'src/file') assert { File.stat('mnt/file').uid == 0 } assert { File.stat('mnt/file').gid == 0 } @@ -276,9 +277,9 @@ mkdir('mnt/newdir') assert { File.stat('src/newfile').uid == $nobody_uid } - assert { File.stat('src/newfile').gid == $nogroup_gid } + assert { File.stat('src/newfile').gid == $nobody_gid } assert { File.stat('src/newdir').uid == $nobody_uid } - assert { File.stat('src/newdir').gid == $nogroup_gid } + assert { File.stat('src/newdir').gid == $nobody_gid } assert { File.stat('mnt/newfile').uid == 0 } assert { File.stat('mnt/newfile').gid == 0 } @@ -286,9 +287,9 @@ assert { File.stat('mnt/newdir').gid == 0 } end -root_testenv("--map=@nogroup/@root") do +root_testenv("--map=@#{nobody_group}/@root") do touch('src/file') - chown('nobody', 'nogroup', 'src/file') + chown('nobody', nobody_group, 'src/file') assert { File.stat('mnt/file').gid == 0 } end @@ -360,14 +361,14 @@ root_testenv("", :title => "setgid directories") do mkdir('mnt/dir') chmod("g+s", 'mnt/dir') - chown(nil, $nogroup_gid, 'mnt/dir') + chown(nil, $nobody_gid, 'mnt/dir') touch('mnt/dir/file') assert { File.stat('src/dir').mode & 07000 == 02000 } - assert { File.stat('src/dir/file').gid == $nogroup_gid } + assert { File.stat('src/dir/file').gid == $nobody_gid } assert { File.stat('mnt/dir').mode & 07000 == 02000 } - assert { File.stat('mnt/dir/file').gid == $nogroup_gid } + assert { File.stat('mnt/dir/file').gid == $nobody_gid } end testenv("", :title => "utimens on symlinks") do @@ -558,6 +559,18 @@ end end +# Issue #28 reproduction attempt. +testenv("", :title => "many files in a directory") do + mkdir('src/dir') + expected_entries = ['.', '..'] + 10000.times do |i| + touch("src/dir/#{i}") + expected_entries << i.to_s + end + + assert { Dir.entries('mnt/dir').sort == expected_entries.sort } +end + # FIXME: this stuff around testenv is a hax, and testenv may also exit(), which defeats the 'ensure' below. # the test setup ought to be refactored. It might well use MiniTest or something. if Process.uid == 0 @@ -570,7 +583,7 @@ chown('nobody', nil, 'src/file') assert { File.stat('mnt/file').uid == $nobody_uid } - `adduser root bindfs_test_group` + `usermod root -G bindfs_test_group -a` raise "Failed to add root to test group" if !$?.success? # Cache not refreshed yet diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/bindfs-1.13.0/tests/utimens_nofollow.c new/bindfs-1.13.1/tests/utimens_nofollow.c --- old/bindfs-1.13.0/tests/utimens_nofollow.c 2015-09-27 00:11:40.000000000 +0200 +++ new/bindfs-1.13.1/tests/utimens_nofollow.c 2016-02-17 04:52:01.000000000 +0100 @@ -1,5 +1,8 @@ -#define _BSD_SOURCE /* For atoll and lutimes */ +/* For atoll and lutimes */ +#define _BSD_SOURCE +/* The new non-deprecated version of _BSD_SOURCE */ +#define _DEFAULT_SOURCE #include <config.h> #include <stdlib.h>