diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -811,30 +811,38 @@ int unpackJob(char *outdir, char *pathto a = archive_read_new(); ae = archive_entry_new(); - archive_read_support_compression_all(a); - archive_read_support_format_raw(a); - astatus = archive_read_open_filename(a, pathtoTar, 8192); - if (astatus != ARCHIVE_OK) + if(!a + || !ae) { - fprintf(stderr, "Error opening archive!\n"); + if(a) + archive_read_finish(a); + if(ae) + archive_entry_free(ae); return 1; } - for(astatus = ARCHIVE_OK; - astatus == ARCHIVE_OK - || astatus == ARCHIVE_WARN; - ) + fprintf(stderr, "Trying to unpack %s into %s\n", pathtoTar, outdir); + + archive_read_support_compression_all(a); + archive_read_support_format_all(a); + astatus = archive_read_open_filename(a, pathtoTar, 1); + if (astatus != ARCHIVE_OK) { - astatus = archive_read_next_header2(a, ae); - if(astatus == ARCHIVE_WARN) - fprintf(stderr, "Encountered nonfatal read error somehow!\n"); + fprintf(stderr, "Error opening archive!\n"); + archive_read_finish(a); + archive_entry_free(ae); + return 1; + } - if(astatus == ARCHIVE_OK - || astatus == ARCHIVE_WARN) - astatus = archive_read_extract(a, ae, - ARCHIVE_EXTRACT_NO_OVERWRITE - | ARCHIVE_EXTRACT_SECURE_SYMLINKS - | ARCHIVE_EXTRACT_SECURE_NODOTDOT); + while((astatus = archive_read_next_header2(a, ae)) == ARCHIVE_OK) + { + astatus = archive_read_extract(a, ae, + ARCHIVE_EXTRACT_NO_OVERWRITE + | ARCHIVE_EXTRACT_SECURE_SYMLINKS + | ARCHIVE_EXTRACT_SECURE_NODOTDOT); + if(astatus != ARCHIVE_OK) + fprintf(stderr, "Encountered error or warning when attempting to extract file: %s\n", + archive_entry_pathname(ae)); } archive_entry_free(ae); archive_read_finish(a);