summaryrefslogtreecommitdiff
path: root/src/archive.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/archive.c')
-rw-r--r--src/archive.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/archive.c b/src/archive.c
index 765b786..8ffb921 100644
--- a/src/archive.c
+++ b/src/archive.c
@@ -241,6 +241,12 @@ int apk_archive_entry_extract(const struct apk_file_info *ae,
if (r < 0)
apk_error("Failed to set ownership on %s: %s", fn,
strerror(errno));
+ /* chown resets suid bit so we need set it again */
+ if (ae->mode & 07000)
+ r = chmod(fn, ae->mode & 07777);
+ if (r < 0)
+ apk_error("Failed to set file permissions on %s: %s",
+ fn, strerror(errno));
} else {
apk_error("Failed to extract %s\n", ae->name);
}