]> git.ipfire.org Git - people/ms/pakfire.git/blobdiff - src/libpakfire/compress.c
file: Write capabilities
[people/ms/pakfire.git] / src / libpakfire / compress.c
index 10120587c058057c5e43648bf49a8fa4d969013f..c25613837d45311d275b3f24d07130ae8c561cc9 100644 (file)
@@ -682,6 +682,7 @@ static void pakfire_extract_progress(void* p) {
 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;
 
@@ -760,6 +761,17 @@ static int __pakfire_extract(struct pakfire* pakfire, struct archive* a,
                // 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) {