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);
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);
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
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