checkout: fchown symlink to proper uid/gid

When commiting a symlink we do store the uid/gid of the actual
symlink (i.e. not target). However, this was not restored
on non-user-mode checkout as it should.

This commit fixes that, and additionally it ensures xattrs
on symlinks are not set in user-mode checkout.

https://bugzilla.gnome.org/show_bug.cgi?id=741125
This commit is contained in:
Alexander Larsson 2014-12-04 20:19:09 +01:00
parent 37a059925f
commit bb82c17701
1 changed files with 17 additions and 5 deletions

View File

@ -190,11 +190,23 @@ checkout_file_from_input_at (OstreeRepoCheckoutMode mode,
goto out;
}
if (xattrs)
if (mode != OSTREE_REPO_CHECKOUT_MODE_USER)
{
if (!gs_dfd_and_name_set_all_xattrs (destination_dfd, destination_name,
xattrs, cancellable, error))
goto out;
if (G_UNLIKELY (fchownat (destination_dfd, destination_name,
g_file_info_get_attribute_uint32 (file_info, "unix::uid"),
g_file_info_get_attribute_uint32 (file_info, "unix::gid"),
AT_SYMLINK_NOFOLLOW) == -1))
{
ot_util_set_error_from_errno (error, errno);
goto out;
}
if (xattrs)
{
if (!gs_dfd_and_name_set_all_xattrs (destination_dfd, destination_name,
xattrs, cancellable, error))
goto out;
}
}
}
else if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_REGULAR)