static int __pakfire_extract(struct pakfire* pakfire, struct archive* a,
struct archive_entry* entry, void* p) {
struct pakfire_file* file = NULL;
+ struct vfs_cap_data cap_data = {};
char buffer[PATH_MAX];
int r;
// Remove any extended attributes which we never write to disk
archive_entry_xattr_clear(entry);
+ // Set capabilities
+ if (pakfire_file_has_caps(file)) {
+ r = pakfire_file_write_fcaps(file, &cap_data);
+ if (r)
+ goto ERROR;
+
+ // Store capabilities in archive entry
+ archive_entry_xattr_add_entry(entry, "security.capability",
+ &cap_data, sizeof(cap_data));
+ }
+
// Write payload
r = archive_read_extract2(data->archive, entry, data->writer);
switch (r) {