]> git.e2factory.org Git - e2factory.git/commitdiff
tar: do not rely on -j and -z flags, use --bzip2 and --gzip instead
authorGordon Hecker <gh@emlix.com>
Mon, 7 Dec 2009 12:37:31 +0000 (13:37 +0100)
committerGordon Hecker <gh@emlix.com>
Wed, 16 Dec 2009 11:41:58 +0000 (12:41 +0100)
Signed-off-by: Gordon Hecker <gh@emlix.com>
generic/e2-su-2.2.c
generic/e2lib.lua

index 8476eacfe38e7284199e521f858581ecb53b8456..5cd115474c2e952ed33682c48436e851c1e55a4d 100644 (file)
@@ -180,21 +180,22 @@ int main(int argc, char *argv[])
                char *tartype = argv[3];
                char *file = argv[4];
                char *tararg = NULL;
+               int n = 0;
+               arg[n++] = basename(tar_tool);
+               arg[n++] = "-C";
+               arg[n++] = path;
                if(!strcmp(tartype, "tar.gz")) {
-                       tararg = "-xzf";
+                       arg[n++] = "--gzip";
                } else if(!strcmp(tartype, "tar.bz2")) {
-                       tararg = "-xjf";
+                       arg[n++] = "--bzip2";
                } else if(!strcmp(tartype, "tar")) {
-                       tararg = "-xf";
+                       /* nothing */
                } else {
                        perr("wrong tararg argument");
                }
-               arg[0] = basename(tar_tool);
-               arg[1] = "-C";
-               arg[2] = path;
-               arg[3] = tararg;
-               arg[4] = file;
-               arg[5] = NULL;
+               arg[n++] = "-xf";
+               arg[n++] = file;
+               arg[n++] = NULL;
                print_arg(arg);
                setuid_root();
                rc = execv(tar_tool, arg);
@@ -272,21 +273,22 @@ int main(int argc, char *argv[])
                char *tartype = argv[3];
                char *file = argv[4];
                char *tararg = NULL;
+               int n = 0;
+               arg[n++] = basename(tar_tool);
+               arg[n++] = "-C";
+               arg[n++] = path;
                if(!strcmp(tartype, "tar.gz")) {
-                       tararg = "-xzf";
+                       arg[n++] = "--gzip";
                } else if(!strcmp(tartype, "tar.bz2")) {
-                       tararg = "-xjf";
+                       arg[n++] = "--bzip2";
                } else if(!strcmp(tartype, "tar")) {
-                       tararg = "-xf";
+                       /* nothing */
                } else {
                        perr("wrong tararg argument");
                }
-               arg[0] = basename(tar_tool);
-               arg[1] = "-C";
-               arg[2] = path;
-               arg[3] = tararg;
-               arg[4] = file;
-               arg[5] = NULL;
+               arg[n++] = "-xf";
+               arg[n++] = file;
+               arg[n++] = NULL;
                print_arg(arg);
                setuid_root();
                rc = execv(tar_tool, arg);
index a3a861abb7d12fc7129aa37b4ffec9b18bd8aa1d..ef67d10f65ec6773a67edab0168e1e7c2eaa7871 100644 (file)
@@ -633,8 +633,8 @@ function e2lib.tartype(path)
   local c = nil
   f:close()
   if l > 261 and string.sub(d, 258, 262) == "ustar" then c = ""
-  elseif l > 1 and string.sub(d, 1, 2) == "\031\139" then c = "z"
-  elseif l > 2 and string.sub(d, 1, 3) == "BZh" then c = "j"
+  elseif l > 1 and string.sub(d, 1, 2) == "\031\139" then c = "--gzip"
+  elseif l > 2 and string.sub(d, 1, 3) == "BZh" then c = "--bzip2"
   elseif l > 3 and string.sub(d, 1, 4) == "PK\003\004" then c = "zip"
   end
   return c
@@ -650,7 +650,7 @@ function e2lib.howtounpack(physpath, virtpath, destdir)
   if c == "zip" then
     c = "unzip \"" .. virtpath .. "\" -d \"" .. destdir .. "\""
   elseif c then
-    c = "tar x" .. c .. "f \"" .. virtpath .. "\" -C \"" .. destdir .. "\""
+    c = string.format("tar -C '%s' %s -xf '%s'", destdir, c, virtpath)
   end
   return c
 end