Fix compressed backups with split archives

Change-Id: I8b9197a18cd83c304e5d4ed29ef55ba67e4e42f7
This commit is contained in:
Ethan Yonker
2016-09-12 16:07:19 -05:00
parent 724c5148a5
commit ea2fcf0179

View File

@@ -69,6 +69,8 @@ twrpTar::twrpTar(void) {
tar_type.openfunc = open;
tar_type.closefunc = close;
tar_type.readfunc = read;
input_fd = -1;
output_fd = -1;
}
twrpTar::~twrpTar(void) {
@@ -915,10 +917,12 @@ int twrpTar::createTar() {
// pigz Child
close(pipes[1]);
close(pipes[2]);
close(0);
dup2(pipes[0], 0);
close(1);
dup2(pipes[3], 1);
int stdinfd = fileno(stdin);
int stdoutfd = fileno(stdout);
close(stdinfd);
dup2(pipes[0], stdinfd);
close(stdoutfd);
dup2(pipes[3], stdoutfd);
if (execlp("pigz", "pigz", "-", NULL) < 0) {
LOGINFO("execlp pigz ERROR!\n");
gui_err("backup_error=Error creating backup.");
@@ -943,10 +947,12 @@ int twrpTar::createTar() {
close(pipes[0]);
close(pipes[1]);
close(pipes[3]);
close(0);
dup2(pipes[2], 0);
close(1);
dup2(output_fd, 1);
int stdinfd = fileno(stdin);
int stdoutfd = fileno(stdout);
close(stdinfd);
dup2(pipes[2], stdinfd);
close(stdoutfd);
dup2(output_fd, stdoutfd);
if (execlp("openaes", "openaes", "enc", "--key", password.c_str(), NULL) < 0) {
LOGINFO("execlp openaes ERROR!\n");
gui_err("backup_error=Error creating backup.");
@@ -1007,8 +1013,8 @@ int twrpTar::createTar() {
} else if (pigz_pid == 0) {
// Child
close(pigzfd[1]); // close unused output pipe
dup2(pigzfd[0], 0); // remap stdin
dup2(output_fd, 1); // remap stdout to output file
dup2(pigzfd[0], fileno(stdin)); // remap stdin
dup2(output_fd, fileno(stdout)); // remap stdout to output file
if (execlp("pigz", "pigz", "-", NULL) < 0) {
LOGINFO("execlp pigz ERROR!\n");
gui_err("backup_error=Error creating backup.");
@@ -1057,8 +1063,8 @@ int twrpTar::createTar() {
} else if (oaes_pid == 0) {
// Child
close(oaesfd[1]); // close unused
dup2(oaesfd[0], 0); // remap stdin
dup2(output_fd, 1); // remap stdout to output file
dup2(oaesfd[0], fileno(stdin)); // remap stdin
dup2(output_fd, fileno(stdout)); // remap stdout to output file
if (execlp("openaes", "openaes", "enc", "--key", password.c_str(), NULL) < 0) {
LOGINFO("execlp openaes ERROR!\n");
gui_err("backup_error=Error creating backup.");
@@ -1147,10 +1153,12 @@ int twrpTar::openTar() {
close(pipes[0]); // Close pipes that are not used by this child
close(pipes[2]);
close(pipes[3]);
close(0);
dup2(input_fd, 0);
close(1);
dup2(pipes[1], 1);
int stdinfd = fileno(stdin);
int stdoutfd = fileno(stdout);
close(stdinfd);
dup2(input_fd, stdinfd);
close(stdoutfd);
dup2(pipes[1], stdoutfd);
if (execlp("openaes", "openaes", "dec", "--key", password.c_str(), NULL) < 0) {
LOGINFO("execlp openaes ERROR!\n");
gui_err("restore_error=Error during restore process.");
@@ -1173,10 +1181,12 @@ int twrpTar::openTar() {
// pigz Child
close(pipes[1]); // Close pipes not used by this child
close(pipes[2]);
close(0);
dup2(pipes[0], 0);
close(1);
dup2(pipes[3], 1);
int stdinfd = fileno(stdin);
int stdoutfd = fileno(stdout);
close(stdinfd);
dup2(pipes[0], stdinfd);
close(stdoutfd);
dup2(pipes[3], stdoutfd);
if (execlp("pigz", "pigz", "-d", "-c", NULL) < 0) {
LOGINFO("execlp pigz ERROR!\n");
gui_err("restore_error=Error during restore process.");
@@ -1226,9 +1236,10 @@ int twrpTar::openTar() {
} else if (oaes_pid == 0) {
// Child
close(oaesfd[0]); // Close unused pipe
close(0); // close stdin
dup2(oaesfd[1], 1); // remap stdout
dup2(input_fd, 0); // remap input fd to stdin
int stdinfd = fileno(stdin);
close(stdinfd); // close stdin
dup2(oaesfd[1], fileno(stdout)); // remap stdout
dup2(input_fd, stdinfd); // remap input fd to stdin
if (execlp("openaes", "openaes", "dec", "--key", password.c_str(), NULL) < 0) {
LOGINFO("execlp openaes ERROR!\n");
gui_err("restore_error=Error during restore process.");
@@ -1281,8 +1292,8 @@ int twrpTar::openTar() {
} else if (pigz_pid == 0) {
// Child
close(pigzfd[0]);
dup2(pigzfd[1], 1); // remap stdout
dup2(input_fd, 0); // remap input fd to stdin
dup2(pigzfd[1], fileno(stdout)); // remap stdout
dup2(input_fd, fileno(stdin)); // remap input fd to stdin
if (execlp("pigz", "pigz", "-d", "-c", NULL) < 0) {
close(pigzfd[1]);
close(input_fd);
@@ -1396,8 +1407,10 @@ int twrpTar::closeTar() {
if (!twadbbu::Write_TWEOF())
return -1;
}
close(input_fd);
close(output_fd);
if (input_fd >= 0)
close(input_fd);
if (output_fd >= 0)
close(output_fd);
return 0;
}