Package: duplicity Version: 0.8.04-2ubuntu1 Severity: normal Dear Maintainer,
Many years ago, duplicity had a bug that allowed you to resume a backup with a different password than the one with which you started the backup. This left your backup chain in an unrecoverable state, since duplicity doesn't know how to restore from a chain like that. It was fixed upstream. But the fix didn't properly handle using a gpg encryption key (rather than a symmetric password). So Debian added the patch 01-reverify that disabled the fix upstream. But then duplicity fixed the issue with gpg encryption keys and Debian never dropped its patch. Which left the original password-swap bug in place. Can Debian drop 01-reverify please? I've attached two scripts that demonstrate each bug and you can test that both work after dropping the patch. You can run switchpass.sh to test the original password-swap bug. And run gpgkey.sh to test the gpg encryption key issue (this one needs you to specify both KEY and PASSPHRASE environment variables -- your gpg key id and passphrase respectively). Both should report "Everything worked!" at the end if the bugs are fixed. Or "Bug exists! :(" if the bug is present. Upstream password-swap bug: https://bugs.launchpad.net/duplicity/+bug/878964 Upstream gpg-key bug: https://bugs.launchpad.net/duplicity/+bug/946988 Thanks! -- System Information: Debian Release: buster/sid APT prefers eoan-updates APT policy: (500, 'eoan-updates'), (500, 'eoan-security'), (500, 'eoan') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.3.0-19-generic (SMP w/4 CPU cores) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages duplicity depends on: ii gnupg 2.2.12-1ubuntu3 ii gnupg1 1.4.23-1 ii libc6 2.30-0ubuntu2 ii librsync2 2.0.2-1ubuntu1 ii python3 3.7.5-1 ii python3-fasteners 0.12.0-5 ii python3-future 0.16.0-1 ii python3-lockfile 1:0.12.2-2ubuntu1 Versions of packages duplicity recommends: ii python3-oauthlib 2.1.0-1 ii python3-paramiko 2.6.0-1 ii python3-pexpect 4.6.0-1 ii python3-urllib3 1.24.1-1ubuntu1 ii rsync 3.1.3-6 Versions of packages duplicity suggests: pn lftp <none> pn ncftp <none> ii par2 0.8.0-1 pn python3-boto <none> ii python3-pip 18.1-5 pn python3-swiftclient <none> pn tahoe-lafs <none> -- no debconf information
#!/bin/sh rm -rf /tmp/dupbadpass /tmp/dupbadrestore echo "Making first, interrupted backup" PASSPHRASE=testpass duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass --volsize 1 --fail-on-volume 2 --verbosity 1 echo "Finishing that backup with the wrong password" PASSPHRASE=badpass duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass --volsize 1 --fail-on-volume 3 --verbosity 1 echo -n "Now, is vol1 encrypted with right pass? " if gpg --decrypt --passphrase testpass --pinentry-mode=loopback /tmp/dupbadpass/duplicity-full*.vol1.difftar.gpg >/dev/null 2>&1; then echo "Yes!" else echo "Nope...? Something is deeply wrong" fi echo -n "And vol3 with the wrong one? " if [ -z "$(ls /tmp/dupbadpass/duplicity-full*.vol3.difftar.gpg 2>/dev/null)" ]; then echo "No vol3 exists" echo "Everything worked!" elif gpg --decrypt --passphrase badpass --pinentry-mode=loopback /tmp/dupbadpass/duplicity-full*.vol3.difftar.gpg >/dev/null 2>&1; then echo "Yes!" echo "Bug exists! :(" else echo "Nope...? Something is deeply wrong" fi
#!/bin/sh killall gpg-agent rm -rf ~/.cache/duplicity/dupbadpass /tmp/dupbadpass /tmp/dupbadrestore echo "Making first, interrupted backup" duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass --volsize 1 --fail-on-volume 2 --encrypt-key $KEY echo "Finishing that backup" duplicity /usr/bin file:///tmp/dupbadpass --name dupbadpass --volsize 1 --fail-on-volume 3 --encrypt-key $KEY if [ -n "$(ls /tmp/dupbadpass/duplicity-full*.vol3.difftar.gpg 2>/dev/null)" ]; then echo "Everything worked!" else echo "Bug exists! :(" fi