For RAR archives created with the “hp” switch, file listings are impossible and unrar expects being given a password. Determine that we’re dealing with an encrypted file and set the flags accordingly.
Signed-off-by: Philipp Gesang <[email protected]> --- amavisd | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/amavisd b/amavisd index 1f975c9..c400002 100755 --- a/amavisd +++ b/amavisd @@ -32266,7 +32266,7 @@ sub do_unrar($$$;$) { # unrar exit codes: SUCCESS=0, WARNING=1, FATAL_ERROR=2, CRC_ERROR=3, # LOCK_ERROR=4, WRITE_ERROR=5, OPEN_ERROR=6, USER_ERROR=7, MEMORY_ERROR=8, # CREATE_ERROR=9, USER_BREAK=255 - my(@list); my $hypcount = 0; my $encryptedcount = 0; + my(@list); my $hypcount = 0; my $encryptedcount = 0; my $encryptedmeta = 0; my $lcnt = 0; my $member_name; my $bytes = 0; my $last_line; my $item_num = 0; my $parent_placement = $part->mime_placement; my $retval = 1; my $fn = $part->full_name; my($proc_fh,$pid); @@ -32288,6 +32288,12 @@ sub do_unrar($$$;$) { } elsif ($ln =~ /^------/) { $hypcount++; last if $hypcount >= 2; + } elsif ($hypcount < 1 && + $ln =~ /^Details: RAR 5, encrypted headers/) { + do_log(4,"do_unrar: %s", $ln); + $part->attributes_add('U','C'); + $encryptedmeta = 1; + last; } elsif ($hypcount < 1 && $ln =~ /^Encrypted file:/) { do_log(4,"do_unrar: %s", $ln); $part->attributes_add('U','C'); @@ -32375,6 +32381,10 @@ sub do_unrar($$$;$) { } elsif (proc_status_ok($rv,$err, 1) && @list && $bytes > 0) { # WARNING, probably still ok do_log(4,"do_unrar: warning, %s", exit_status_str($rv,$err)); + } elsif ($encryptedmeta == 1) { + do_log(1, + "do_unrar: %s, archive metadata is encrypted, archive retained", + $part->base_name); } elsif (!proc_status_ok($rv,$err)) { die("can't get a list of archive members: " . exit_status_str($rv,$err) ."; ".$last_line); -- 2.11.1
