aboutsummaryrefslogtreecommitdiff
path: root/lib/archive.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/archive.c')
-rw-r--r--lib/archive.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/archive.c b/lib/archive.c
index 6452647..33c1dcd 100644
--- a/lib/archive.c
+++ b/lib/archive.c
@@ -35,7 +35,7 @@ int tar_extract_file(const char *_archive, const char* _filename, const char *_d
strchrdel(destination, SHELL_INVALID);
strchrdel(filename, SHELL_INVALID);
- sprintf(cmd, "bsdtar -x -f \"%s\" -C \"%s\" \"%s\" 2>&1", archive, destination, filename);
+ sprintf(cmd, "%s -x -f \"%s\" -C \"%s\" \"%s\" 2>&1", SPM_GLOBAL.tar_program, archive, destination, filename);
if (exists(archive) != 0) {
fprintf(stderr, "unable to find archive: %s\n", archive);
fprintf(SYSERROR);
@@ -92,7 +92,13 @@ int tar_extract_archive(const char *_archive, const char *_destination) {
// sanitize destination
strchrdel(destination, SHELL_INVALID);
- sprintf(cmd, "bsdtar -x -f %s -C %s 2>&1", archive, destination);
+ sprintf(cmd, "%s -x -f %s -C %s ", SPM_GLOBAL.tar_program, archive, destination);
+ if (SPM_GLOBAL.privileged) {
+ // Extract the package as if we were a regular user instead of root.
+ strcat(cmd, "--no-same-owner --no-same-permissions ");
+ }
+ strcat(cmd, "2>&1");
+
shell(&proc, SHELL_OUTPUT, cmd);
if (!proc) {
fprintf(SYSERROR);