From 9188d893fb00d11a0974582ab1575670777d96cf Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 23 Jun 2020 01:16:27 -0400 Subject: Handle unpacking when running as root: * Check available tar programs and pick one to use --- lib/archive.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'lib/archive.c') 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); -- cgit