From 8dcbab162c914631641792f8b5a20f82f4919f9b Mon Sep 17 00:00:00 2001 From: Gordon Hecker Date: Mon, 7 Dec 2009 13:37:31 +0100 Subject: [PATCH] tar: do not rely on -j and -z flags, use --bzip2 and --gzip instead Signed-off-by: Gordon Hecker --- generic/e2-su-2.2.c | 38 ++++++++++++++++++++------------------ generic/e2lib.lua | 6 +++--- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/generic/e2-su-2.2.c b/generic/e2-su-2.2.c index 8476eac..5cd1154 100644 --- a/generic/e2-su-2.2.c +++ b/generic/e2-su-2.2.c @@ -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); diff --git a/generic/e2lib.lua b/generic/e2lib.lua index a3a861a..ef67d10 100644 --- a/generic/e2lib.lua +++ b/generic/e2lib.lua @@ -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 -- 2.39.5