if (repo->disable_xattrs)
flags |= OSTREE_CHECKSUM_FLAGS_IGNORE_XATTRS;
+ if (repo->mode == OSTREE_REPO_MODE_BARE_USER_ONLY)
+ flags |= OSTREE_CHECKSUM_FLAGS_CANONICAL_PERMISSIONS;
+
g_autofree char *actual_checksum = NULL;
if (!ostree_checksum_file_at (destination_dfd, destination_name,
&dest_stbuf, OSTREE_OBJECT_TYPE_FILE,
* */
OstreeChecksumFlags flags = 0;
if (self->disable_xattrs)
- flags |= OSTREE_CHECKSUM_FLAGS_IGNORE_XATTRS;
+ flags |= OSTREE_CHECKSUM_FLAGS_IGNORE_XATTRS;
+
+ if (self->mode == OSTREE_REPO_MODE_BARE_USER_ONLY)
+ flags |= OSTREE_CHECKSUM_FLAGS_CANONICAL_PERMISSIONS;
g_autofree char *actual_checksum = NULL;
if (!ostree_checksum_file_at (destination_dfd, destination_name,
# In bare-user-only repos we can only represent files with uid/gid 0, no
# xattrs and canonical permissions, so we need to commit them as such, or
# we end up with repos that don't pass fsck
- COMMIT_ARGS="--canonical-permissions"
+ COMMIT_ARGS="--canonical-permissions --no-xattrs"
DIFF_ARGS="--owner-uid=0 --owner-gid=0 --no-xattrs"
# Also, since we can't check out uid=0 files we need to check out in user mode
CHECKOUT_U_ARG="-U"
# But they share the GPL
echo 'this is the GPL' > pkg${x}/usr/share/licenses/COPYING
ln -s COPYING pkg${x}/usr/share/licenses/LICENSE
- $OSTREE commit -b union-identical-pkg${x} --tree=dir=pkg${x}
+ $OSTREE commit ${COMMIT_ARGS} -b union-identical-pkg${x} --tree=dir=pkg${x}
done
rm union-identical-test -rf
for x in $(seq 3); do
rm files -rf && mkdir files
touch files/anemptyfile
touch files/anotheremptyfile
-$CMD_PREFIX ostree --repo=repo commit --consume -b tree-with-empty-files --tree=dir=files
+$CMD_PREFIX ostree --repo=repo commit ${COMMIT_ARGS} --consume -b tree-with-empty-files --tree=dir=files
$CMD_PREFIX ostree --repo=repo checkout ${CHECKOUT_H_ARGS} tree-with-empty-files tree-with-empty-files
if files_are_hardlinked tree-with-empty-files/an{,other}emptyfile; then
fatal "--force-copy-zerosized failed"
$CMD_PREFIX ostree --repo=repo checkout ${CHECKOUT_H_ARGS} --union-identical -z tree-with-empty-files tree-with-empty-files
$CMD_PREFIX ostree --repo=repo checkout ${CHECKOUT_H_ARGS} --union-identical -z tree-with-empty-files tree-with-empty-files
echo notempty > tree-with-empty-files/anemptyfile.new && mv tree-with-empty-files/anemptyfile{.new,}
-$CMD_PREFIX ostree --repo=repo commit --consume -b tree-with-conflicting-empty-files --tree=dir=tree-with-empty-files
+$CMD_PREFIX ostree --repo=repo commit ${COMMIT_ARGS} --consume -b tree-with-conflicting-empty-files --tree=dir=tree-with-empty-files
# Reset back to base
rm tree-with-empty-files -rf
$CMD_PREFIX ostree --repo=repo checkout ${CHECKOUT_H_ARGS} --union-identical -z tree-with-empty-files tree-with-empty-files
mode="bare-user-only"
setup_test_repository "$mode"
-extra_basic_tests=5
+extra_basic_tests=6
. $(dirname $0)/basic-test.sh
$CMD_PREFIX ostree --version > version.yaml
cd ${test_tmpdir}
rm repo-input -rf
ostree_repo_init repo-input init --mode=archive
+
cd ${test_tmpdir}
cat > statoverride.txt <<EOF
2048 /some-setuid
$OSTREE fsck -q
echo "ok hardlink pull from bare-user"
fi
+
+cd ${test_tmpdir}
+rm repo -rf
+ostree_repo_init repo init --mode=bare-user-only
+rm files -rf && mkdir files
+echo afile > files/afile
+$OSTREE commit ${COMMIT_ARGS} -b perms files
+rm out -rf
+$OSTREE checkout --force-copy perms out
+$OSTREE checkout ${CHECKOUT_H_ARGS} --union-identical perms out
+$OSTREE fsck
+echo "ok checkout checksum with canonical perms"