Package: dtrx / 8.0.1+git20200717-3

Metadata

Package Version Patches format
dtrx 8.0.1+git20200717-3 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
0001 fix python3 warning about warning.patch | (download)

scripts/dtrx | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 [patch 1/6] fix python3 warning about warning

/usr/bin/dtrx:1335: DeprecationWarning: The 'warn' method is deprecated, use 'warning' instead

0002 Add a 1 second timeout when running Extraction comma.patch | (download)

scripts/dtrx | 18 16 + 2 - 0 !
1 file changed, 16 insertions(+), 2 deletions(-)

 [patch 2/6] add a 1-second timeout when running extraction commands

Instead of endlessly waiting for an extractor to complete, add a timeout
that allows us to interact with the user in the event that the command is
stuck. Right now this does nothing, but we'll be using it to spit out
password prompts.

This also adds a 'timeout_check' to the BaseExtractor class to be overridden
by various extractors. I didn't name it 'check_for_password' because it
could easily be used to do other things.

I tried to maintain python2 compatibility, but this will add a
python-subprocess32 dependency for python2 installations.

0003 stop sending stderr to a file.patch | (download)

scripts/dtrx | 20 9 + 11 - 0 !
1 file changed, 9 insertions(+), 11 deletions(-)

 [patch 3/6] stop sending stderr to a file

Instead of using a tempfile, just save stderr to a variable. This shouldn't
change how error messages are handled.

0004 add support for password protected .zip files.patch | (download)

scripts/dtrx | 43 43 + 0 - 0 !
1 file changed, 43 insertions(+)

 [patch 4/6] add support for password-protected .zip files

Zip files can have passwords. Currently when there's a password, unzip
prompts the user (via stderr) and waits. Since dtrx doesn't display stderr
from unzip, it just appears to hang indefinitely while waiting for a
password.

This patch adds support for those password-protected zip files. It uses
a non-blocking read of stderr and the new timeout_check code to see if
unzip has sent a password string, and passes that through to the user.

The strings I see from unzip 6.0:

"[file.zip] test2 password:"
"password incorrect--reenter:"
"   skipping: test2                   incorrect password"

We could get fancier and do exact string matches or provide our own
prompt text, but just searching stderr for 'password' seems to work for now.

With this patch, if the password is incorrect, the Zip extractor will
fall back to the Seven extractor. Password support for 7z will come later.

0005 add support for password protected .7z files.patch | (download)

scripts/dtrx | 14 13 + 1 - 0 !
1 file changed, 13 insertions(+), 1 deletion(-)

 [patch 5/6] add support for password-protected .7z files

7z files can have passwords. Currently when there's a password, 7z
just hangs indefinitely waiting for input that never comes because
the user never sees the password prompt.

This patch adds support for those password-protected 7z files. It uses
0006 add support for password protected .rar files.patch | (download)

scripts/dtrx | 15 14 + 1 - 0 !
1 file changed, 14 insertions(+), 1 deletion(-)

 [patch 6/6] add support for password-protected .rar files

Rar files can have passwords. Currently when there's a password, unrar
(tested with version 5.9.4) just fails because stdin is closed when it
needs to prompts the user.

This patch adds support for those password-protected rar files. In
order to keep stdin open, we add a new flag in BaseExtractor called
user_stdin that tells run_pipes() whether to override stdin or leave it
alone. This keeps the same behavior for most instances of that class,
but NoPipeExtractor modifies user_stdin so that derived classes create
objects that leave stdin alone.

We then use the same non-blocking read and timeout infrastructure
that zip files use to check for a password prompt.

The strings that I see from unrar 5.9.4:

"Enter password (will not be echoed) for file:"

"The specified password is incorrect.
Enter password (will not be echoed) for file:"

Since the response is multi-line, we're passing along all output
rather than just the last line.

0007 Don t spit out random text on successful unpacking o.patch | (download)

scripts/dtrx | 13 12 + 1 - 0 !
1 file changed, 12 insertions(+), 1 deletion(-)

 [patch] don't spit out random text on successful unpacking of
 passworded archives

Normally stderr contains actual errors, which we display to the user if
they show up. In the case of archives with passwords, this is no longer
the case; stderr is used to prompt the user for a password. So, dtrx
would successfully decrypt an archive, but then spit out the following:

"WARNING:dtrx-log:Error output from this process:

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (406E3),ASM,AES-NI)

Scanning the drive for archives:
1 file, 113272063 bytes (109 MiB)

Extracting archive: /home/dilinger/test.7z

Enter password (will not be echoed):
"

This is obvious confusing and undesirable. Instead, what we do is
change the logging level for stderr when we're dealing with passworded
archives. Only output that stuff w/ the debug logging level (dtrx -vv).

There's one exception - if we hit an ExtractorError exception, that
means there are actual errors waiting in stderr (likely due to an
incorrect password). In that case, we no longer use the debug logging
level for stderr output.