core: Don't strip setuid bits when creating files
This ugly regression occurred because I overlooked the fact that our chown() invocation would strip off setuid.
This commit is contained in:
parent
3e2d2f3e9e
commit
67823beb1f
|
|
@ -31,6 +31,7 @@ testfiles = test-basic \
|
||||||
test-pull-corruption \
|
test-pull-corruption \
|
||||||
test-admin-deploy-1 \
|
test-admin-deploy-1 \
|
||||||
test-admin-deploy-2 \
|
test-admin-deploy-2 \
|
||||||
|
test-setuid \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
insttest_SCRIPTS = $(addprefix tests/,$(testfiles:=.sh))
|
insttest_SCRIPTS = $(addprefix tests/,$(testfiles:=.sh))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 939cd18d39b1abf39543c83c406246b12dbfa03a
|
Subproject commit f56702ef40a5df056097d2e14ee0dac3614b744c
|
||||||
|
|
@ -1220,9 +1220,21 @@ ostree_create_file_from_input (GFile *dest_file,
|
||||||
}
|
}
|
||||||
else if (S_ISREG (mode))
|
else if (S_ISREG (mode))
|
||||||
{
|
{
|
||||||
if (!gs_file_create (dest_file, mode, &out,
|
if (finfo != NULL)
|
||||||
cancellable, error))
|
{
|
||||||
goto out;
|
uid = g_file_info_get_attribute_uint32 (finfo, "unix::uid");
|
||||||
|
gid = g_file_info_get_attribute_uint32 (finfo, "unix::gid");
|
||||||
|
|
||||||
|
if (!gs_file_create_with_uidgid (dest_file, mode, uid, gid, &out,
|
||||||
|
cancellable, error))
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!gs_file_create (dest_file, mode, &out,
|
||||||
|
cancellable, error))
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (input)
|
if (input)
|
||||||
{
|
{
|
||||||
|
|
@ -1250,7 +1262,10 @@ ostree_create_file_from_input (GFile *dest_file,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finfo != NULL)
|
/* We only need to chown for directories and symlinks; we already
|
||||||
|
* did a chown for files above via fchown().
|
||||||
|
*/
|
||||||
|
if (finfo != NULL && !S_ISREG (mode))
|
||||||
{
|
{
|
||||||
uid = g_file_info_get_attribute_uint32 (finfo, "unix::uid");
|
uid = g_file_info_get_attribute_uint32 (finfo, "unix::uid");
|
||||||
gid = g_file_info_get_attribute_uint32 (finfo, "unix::gid");
|
gid = g_file_info_get_attribute_uint32 (finfo, "unix::gid");
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 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 -e
|
||||||
|
|
||||||
|
echo "1..1"
|
||||||
|
|
||||||
|
. $(dirname $0)/libtest.sh
|
||||||
|
|
||||||
|
setup_test_repository "bare"
|
||||||
|
|
||||||
|
cd ${test_tmpdir}
|
||||||
|
cat > test-statoverride.txt <<EOF
|
||||||
|
+2048 /abinary
|
||||||
|
EOF
|
||||||
|
$OSTREE checkout test2 test2-checkout
|
||||||
|
touch test2-checkout/abinary
|
||||||
|
chmod a+x test2-checkout/abinary
|
||||||
|
(cd test2-checkout && $OSTREE commit -b test2 -s "with statoverride" --statoverride=../test-statoverride.txt)
|
||||||
|
rm -rf test2-checkout
|
||||||
|
$OSTREE checkout test2 test2-checkout
|
||||||
|
test -u test2-checkout/abinary
|
||||||
Loading…
Reference in New Issue