mirror of
https://github.com/ostreedev/ostree.git
synced 2024-12-22 17:35:55 +03:00
3348baf6eb
Some of the Jenkins jobs for Fedora Atomic Host broke after updating to 2017.7, and it turns out that we regressed handling unreadable files in `bare-user` mode. An example of this is `/etc/shadow`, which ends up in the ostree-as-host content as `/usr/etc/shadow`. Now there are better fixes here; we should probably delete it and create it during the config merge if it doesn't exist. In general, having secret files in ostree really isn't supported, so it doesn't make sense to include them. But let's fix this regression - when operating as an unprivileged user we don't have `CAP_DAC_OVERRIDE` and hence will fail to open un-user-readable objects. (We still preserve the actual `0` mode of course in the xattr and will apply it in `bare`) Closes: #989 Approved by: jlebon
80 lines
2.6 KiB
Bash
Executable File
80 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2011 Colin Walters <walters@verbum.org>
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2 of the License, or (at your option) any later version.
|
|
#
|
|
# This library 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
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the
|
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
# Boston, MA 02111-1307, USA.
|
|
|
|
set -euo pipefail
|
|
|
|
. $(dirname $0)/libtest.sh
|
|
|
|
skip_without_user_xattrs
|
|
|
|
setup_test_repository "bare-user"
|
|
|
|
extra_basic_tests=4
|
|
. $(dirname $0)/basic-test.sh
|
|
|
|
# Reset things so we don't inherit a lot of state from earlier tests
|
|
rm repo files -rf
|
|
setup_test_repository "bare-user"
|
|
|
|
cd ${test_tmpdir}
|
|
objpath_nonexec=$(ostree_file_path_to_object_path repo test2 baz/cow)
|
|
# Sigh, umask
|
|
touch testfile
|
|
default_mode=$(stat -c '%a' testfile)
|
|
rm testfile
|
|
assert_file_has_mode ${objpath_nonexec} ${default_mode}
|
|
objpath_ro=$(ostree_file_path_to_object_path repo test2 baz/cowro)
|
|
assert_file_has_mode ${objpath_ro} 600
|
|
objpath_exec=$(ostree_file_path_to_object_path repo test2 baz/deeper/ohyeahx)
|
|
assert_file_has_mode ${objpath_exec} 755
|
|
echo "ok bare-user committed modes"
|
|
|
|
rm test2-checkout -rf
|
|
$OSTREE checkout -U -H test2 test2-checkout
|
|
cd test2-checkout
|
|
assert_file_has_mode baz/cow ${default_mode}
|
|
assert_file_has_mode baz/cowro 600
|
|
assert_file_has_mode baz/deeper/ohyeahx 755
|
|
echo "ok bare-user checkout modes"
|
|
|
|
rm test2-checkout -rf
|
|
$OSTREE checkout -U -H test2 test2-checkout
|
|
touch test2-checkout/unwritable
|
|
chmod 0400 test2-checkout/unwritable
|
|
$OSTREE commit -b test2-unwritable --tree=dir=test2-checkout
|
|
chmod 0600 test2-checkout/unwritable
|
|
rm test2-checkout -rf
|
|
$OSTREE checkout -U -H test2-unwritable test2-checkout
|
|
cd test2-checkout
|
|
assert_file_has_mode unwritable 400
|
|
echo "ok bare-user unwritable"
|
|
|
|
rm test2-checkout -rf
|
|
$OSTREE checkout -U -H test2 test2-checkout
|
|
cat > statoverride.txt <<EOF
|
|
=0 /unreadable
|
|
EOF
|
|
touch test2-checkout/unreadable
|
|
$OSTREE commit -b test2-unreadable --statoverride=statoverride.txt --tree=dir=test2-checkout
|
|
$OSTREE fsck
|
|
rm test2-checkout -rf
|
|
$OSTREE checkout -U -H test2-unreadable test2-checkout
|
|
assert_file_has_mode test2-checkout/unreadable 400
|
|
echo "ok bare-user handled unreadable file"
|