diff options
Diffstat (limited to 'paludis/fs_merger.cc')
-rw-r--r-- | paludis/fs_merger.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/paludis/fs_merger.cc b/paludis/fs_merger.cc index e8bba1658..6aa3f5411 100644 --- a/paludis/fs_merger.cc +++ b/paludis/fs_merger.cc @@ -795,6 +795,13 @@ FSMerger::try_to_copy_xattrs(const FSPath & src, int dst_fd, FSMergerStatusFlags } std::shared_ptr<char> value_holder(static_cast<char *>(::operator new(value_sz))); + + if (key == "security.selinux") + { + /* we handle selinux stuff specially */ + continue; + } + value_sz = fgetxattr(src_fd, key.c_str(), value_holder.get(), value_sz); if (-1 == value_sz) { @@ -808,8 +815,9 @@ FSMerger::try_to_copy_xattrs(const FSPath & src, int dst_fd, FSMergerStatusFlags if (ENOTSUP == errno) { Log::get_instance()->message("merger.xattrs.failure", ll_warning, lc_context) << - "Could not copy extended attributes from source file '" << src << "'"; - return; + "Could not copy extended attributes from source file '" << src << "', discarding attribute '" << + key << "' = '" << std::string(value_holder.get(), value_sz) << "'"; + continue; } else Log::get_instance()->message("merger.xattrs.failure", ll_warning, lc_context) << |