From 6a54235536ba1bb6e39bbf597fe719173dae6b933c832fdb2fb2dea858645ad5 Mon Sep 17 00:00:00 2001 From: Kurt Garloff Date: Sun, 26 Jan 2025 08:05:31 +0000 Subject: [PATCH] - Update to dd_rescue-1.99.20: * Fix an overrun in sparse block detection. * Fix an off-by-one memory handling issue in ddr_lzo, resulting in breakage on s390x. (Surprisingly, glibc memory allocator was graceful on most architectures.) * Better test coverage, including chains with sparse files. * Documented (and somewhat cleaner) design of handling sparse files through chains of plugins. * Test and support compression+encryption (and reverse decryption+decompression) chains. * Improved debug output, including numbering plugins. - Update to dd_rescue-1.99.19: * ddr_crypt: Clean hole support with and without skiphole. (This works cleanly only for CTR and ECB modes.) * ddr_crypt: Fix backwards copies including holes. Note that this could result in different files from the forward copies before (bug). Add test case for the latter. * Many more testcases for sparse files with plugins: Also use odd sizes and holes at the beginning and end of the file. * Also skip over holes with -a when copying in reverse dir. * Allow setting unsparse and some other flags for ddr_null for testing. * Fix lzma compression with hole at the end. * Warn on lzma buf error (was debug msg only before). OBS-URL: https://build.opensuse.org/package/show/Base:System/dd_rescue?expand=0&rev=89 --- .gitattributes | 23 + .gitignore | 1 + dd_rescue-1.99.13.tar.bz2 | 3 + dd_rescue-1.99.13.tar.bz2.asc | 16 + dd_rescue-1.99.15.tar.bz2 | 3 + dd_rescue-1.99.15.tar.bz2.asc | 16 + dd_rescue-1.99.17.tar.bz2 | 3 + dd_rescue-1.99.17.tar.bz2.asc | 16 + dd_rescue-1.99.18.tar.bz2 | 3 + dd_rescue-1.99.18.tar.bz2.asc | 16 + dd_rescue-1.99.20.tar.bz2 | 3 + dd_rescue-1.99.20.tar.bz2.asc | 16 + dd_rescue-md5-unaligned-armv7.diff | 44 ++ dd_rescue-ossl3-evpcipherctx.diff | 26 + dd_rescue-u-emptyout-segfault.diff | 21 + dd_rescue.changes | 953 +++++++++++++++++++++++++++++ dd_rescue.keyring | Bin 0 -> 117108 bytes dd_rescue.spec | 190 ++++++ 18 files changed, 1353 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 dd_rescue-1.99.13.tar.bz2 create mode 100644 dd_rescue-1.99.13.tar.bz2.asc create mode 100644 dd_rescue-1.99.15.tar.bz2 create mode 100644 dd_rescue-1.99.15.tar.bz2.asc create mode 100644 dd_rescue-1.99.17.tar.bz2 create mode 100644 dd_rescue-1.99.17.tar.bz2.asc create mode 100644 dd_rescue-1.99.18.tar.bz2 create mode 100644 dd_rescue-1.99.18.tar.bz2.asc create mode 100644 dd_rescue-1.99.20.tar.bz2 create mode 100644 dd_rescue-1.99.20.tar.bz2.asc create mode 100644 dd_rescue-md5-unaligned-armv7.diff create mode 100644 dd_rescue-ossl3-evpcipherctx.diff create mode 100644 dd_rescue-u-emptyout-segfault.diff create mode 100644 dd_rescue.changes create mode 100644 dd_rescue.keyring create mode 100644 dd_rescue.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/dd_rescue-1.99.13.tar.bz2 b/dd_rescue-1.99.13.tar.bz2 new file mode 100644 index 0000000..6d9c2d6 --- /dev/null +++ b/dd_rescue-1.99.13.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f40fe9c770ff5d27d323297ee73d0bbed332d3eafac4e4732e542eadb1c5c1e8 +size 182574 diff --git a/dd_rescue-1.99.13.tar.bz2.asc b/dd_rescue-1.99.13.tar.bz2.asc new file mode 100644 index 0000000..38d38b3 --- /dev/null +++ b/dd_rescue-1.99.13.tar.bz2.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEZmn3NA0x6V7FVlSQ3k8bOiv/xb8FAmQUG7oACgkQ3k8bOiv/ +xb84QA//QaYmz3mugFQJbyktEQ8KVbR5sKIqxLcMsjw3OOo33rq37J3dXYKo1uf5 +pCnbk97L+X8D5NXKWjxLvSXA8Nbx9J5N/OduEfAMGWA1mTQKJs9bwX8RLyZ56yt1 +V5lvDGRNoL0j/bIeHxx9u/nBcPqpQSt2sq7g/BvMSoYVcg/qBhJGRV+mzDuB4NX+ +q0EvyQVofdfE9qLJ532j6SssBVu0xJ/eHniUcmwr/H8Od5TQLDTMPKOQwgG2R1iR +aJLzoxBYBbzhrbhEe6Qw4k33I/rs3Uu1g3J+RZSh0cVn5ojiFGGn6ZXNicHYzVo2 +LBAOahlR/p12OxWiFlYQcKwGBURFmlwwty0X1ZtRiE+GyUPRkZmxZ8w+Je+VMtIk +nbZVD26IinWK/Jx8XyX2jZkc+0+GIPvnwelzP+OBH1Sn4btuEJ9oAnuSx3kuLDBw +DdUW/GkuRTSwPIoKz22kCsaPq+9Tx1qxw41wBXn1MDjn0C3qL1mN4Kmy1GvjoPiB +0k2WeVmxiia5397SI8n90EJ/iyJCQuBysaGvvo2FOBCOcHbkqLbz+tscowkoy3kJ +gQYkOtpnRB21w4+zt41iOKojfkm/7u3BKriQU7zw+FUYGbTeungIeRiXHRVhVrRx +f+L1NaITRJduIK8EMIK5ah5OeFYyMcELjHKlbEdxrxFaaMo3hrM= +=T6nE +-----END PGP SIGNATURE----- diff --git a/dd_rescue-1.99.15.tar.bz2 b/dd_rescue-1.99.15.tar.bz2 new file mode 100644 index 0000000..b88c59d --- /dev/null +++ b/dd_rescue-1.99.15.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83936f24fbb9ff70722b55f69cd0dff71bc4a4aabfcf9b56b5128f98bfe16f89 +size 184905 diff --git a/dd_rescue-1.99.15.tar.bz2.asc b/dd_rescue-1.99.15.tar.bz2.asc new file mode 100644 index 0000000..7e8279b --- /dev/null +++ b/dd_rescue-1.99.15.tar.bz2.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEZmn3NA0x6V7FVlSQ3k8bOiv/xb8FAmbpg30ACgkQ3k8bOiv/ +xb/PJg/+IKNN7vkJSsYRCoC0Lj2NDWvCvmFrjqG+oLD8CUMQUrc00gMx+4qoALvx +LDGFX21+W86vOmtwcM4k7DhBKuhc50rXbo/UFaxeQLd45gHkmXbxav1qX3D3oduB +WMggBuUnazIAhuVxqyw0cPS/OH6UNUY5xsB7FpNtWTQ1dkBlVKXybgnVRmaol1hs +yT/kKetCBjKvY1fgJLKszzJhMdnSRo6HpHG1TFQXdl7hxIC3aEjTnbfz8kGYM2M4 +FoGddif3okgkZPKUA51JYsgyDhTW86IQ4w1zdmiAgDu0qIcCao7CAdJEz6v9BFw1 +7GC8eyRpHI1Vk2A5MVXk3ikswjBNRDZb39eK4chmhXFd/LY4iMXB5+hHzDfJ6V0T +QdlRWGTCAeGop3ZKw363WDMwyYmzuIu3al/PaiPkh07KjWmsNCdiSUMT9bkSAxge +/RY/u+k/Szfem+/0J+fjLKP6QvDxjqmexy2hJa8XRFY2hpFkaxfJrUCZ7U0tYFJ/ +cmc+3616hZsfojrS8VV/IDSMATg5IBuSA+a94JL8+Sd2RVt8Yq0wTJOUJM94MUgO +xeBichIrpHU32cQxakjqUJKx7vXBHzcqum8E/lkhKj01G92MEIOxd4t83nLoOnLl +oEoNAHe0oUKjVD3REGxO8Dmtv+9v/3IVP0HBwUVxUIRo5xE+Vgs= +=YcCw +-----END PGP SIGNATURE----- diff --git a/dd_rescue-1.99.17.tar.bz2 b/dd_rescue-1.99.17.tar.bz2 new file mode 100644 index 0000000..2563448 --- /dev/null +++ b/dd_rescue-1.99.17.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec013309cdd034101d0f129682bc296b86bc94b7168b5a7577a12b395fb1a5cd +size 199774 diff --git a/dd_rescue-1.99.17.tar.bz2.asc b/dd_rescue-1.99.17.tar.bz2.asc new file mode 100644 index 0000000..e6dee82 --- /dev/null +++ b/dd_rescue-1.99.17.tar.bz2.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEZmn3NA0x6V7FVlSQ3k8bOiv/xb8FAmcmTKUACgkQ3k8bOiv/ +xb9fIw//bywMhTJZ0k2R0W2uMpUa9R1w7VqXJB6G0AvEKoiTx0KhpZn+n691/Tyv +SI0vTEbU6ILMMTaRJCrRbFJ8nKRG64m7PyQkkV7srz54pRNOf49PJA+f1p+ZLOGs +6BOt8zdruI5y4cLbS/eoPxWIFWQUw/KBBJXZgIIwApaqXS4RMJwhQLTXvtNFtpU7 +3OsFrWBw/JxyVZVJOfqkf35VLW0likvs1p0cKJV0F9gWyl/Yc6VlwpV/TpSFTHMJ +FfrHbOh65C3WyrmgJ+7PFeXOjZCbPoTddZP8ceMe2HePrI7jwMRuI7fkH//EeoBp +dkTYuCgG6QUD/ySdYECEgFvo0A02voflX13s6p0x2r5tDB7TN+8nVP5YfgJwoArH +T1k9f83DOV5AuV6Xx79GUvxbbTnsjDdgQmWu7OX5grEH5iCV26Sg2dUBQVZedn7d +dlDFD4H43kwyqO+5oqtjxKIfIGfVn57hkbCauT9hLlBVw3XKL1EvKHF5qsjPXdG2 +4B9TE0AaOBsXrEBLWNoZwPVdQckmeGKQcSYTVFcZKZwCUqWLaGWRaLVOeoLMMauM +Sm15p5exEQcyXdkk8cWEWlsObwDOAnp1UdyQI13znTuGAI/sEe+Fuz/mTSehP9e4 +oeciXShedeS3/zklueOGbySn1BOePYQCqdHfSK9EziNT30Kp3g4= +=2BQw +-----END PGP SIGNATURE----- diff --git a/dd_rescue-1.99.18.tar.bz2 b/dd_rescue-1.99.18.tar.bz2 new file mode 100644 index 0000000..72d3058 --- /dev/null +++ b/dd_rescue-1.99.18.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:245590c0028e87d2be0e5aa8b7ecf2df75e0552d943952890698f6e458ca6944 +size 199571 diff --git a/dd_rescue-1.99.18.tar.bz2.asc b/dd_rescue-1.99.18.tar.bz2.asc new file mode 100644 index 0000000..9a771be --- /dev/null +++ b/dd_rescue-1.99.18.tar.bz2.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEZmn3NA0x6V7FVlSQ3k8bOiv/xb8FAmdxe8UACgkQ3k8bOiv/ +xb8K9xAAmTZyzSB1iL2zoAqrAgGdY1Y1YCP6J57Jjmo/Ynf0lDxsK3kXxJzShRrf +EcwkCQh/Ib+NSUCDHojgjOaG62m/CmxCfnR4ZqmTQ+RhiIQ/jW4Xy2GvM/pItq9P +FlFkegxriwUlq2FjVrIwpgy7053IvaoxkjxLFX8gpigF3PXp0oZFfekmoCQkpn5u +6pGFbMJZLFlpySKI+PhD3dBHKFcf/Gmm61M6R8r4WVyRz2IPdpTV+UvfQE5FRvfL +Dc9iQ9TaP4I9dhOqGPqD9SmZnRILtodTf+Q0BfWuzfuUZdGJ+d0iw/XNEKvtmFc8 +iUfQYtodWsBj1HucsESc5VQl4rygc2ZWbHT8C23yuwPTcTxmL7zokxm3GsETz/ER +IwS3/tLirkMkdueLl0dpKK9S9idVcJvZBseTxEpXvyOyHyBy4Vs48fDEPHH3M00X +tCsp2TN6nE4T5ej4VxiKG5mYIUdWMz48t4/sn6cKdMhwPVIrnh33R32FSftQVyqe +nJN8Vm48WSqFyU+9x4odncVwbpIImU2L0FXFJBCuYto+lPAZ1QAo2vT7q2YLl5iB +mYVMiMcO3hSQ8brmFDqNM4E8Iaw2wvWCJANFpqoFQe5S9Zb9df7RyQBt+nbgzQXo +bU48d+yiKZLmuMo8vR5/ctUzIB6+JooL2dxJQiseh+4Kn3YyEwI= +=f9ei +-----END PGP SIGNATURE----- diff --git a/dd_rescue-1.99.20.tar.bz2 b/dd_rescue-1.99.20.tar.bz2 new file mode 100644 index 0000000..23275e2 --- /dev/null +++ b/dd_rescue-1.99.20.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6b6dd649566b0886028d6a36c433a7af23cd7675c8dd9fe244d6ed2e234c485 +size 211142 diff --git a/dd_rescue-1.99.20.tar.bz2.asc b/dd_rescue-1.99.20.tar.bz2.asc new file mode 100644 index 0000000..3d87d47 --- /dev/null +++ b/dd_rescue-1.99.20.tar.bz2.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEZmn3NA0x6V7FVlSQ3k8bOiv/xb8FAmeOYTMACgkQ3k8bOiv/ +xb9nXxAAmB2UyLdjfMZbwdw2ldc/LTkkkir7AxE7oMXXpc4HDmbJE5lrrVwaofFU +VlEhkGGdv52x6BDMZ+hmftY8uTqbKhalfhJvTy0BlHdRy1iUSSdxrXTzMyipy/dg +VAptSq5BloreL54SelTAyA2dLcw+2jUkQxVcbfmEFZw1rC14cjXrfDPwEikWT7JJ +NHLO/dJBwvgcxp+ZDP8esUr632tguZGlLTScaEWBD43su5kYWGNlxB6UrlzDy4xk +yUrFEK0ipvuRujlk9RgwonDyzdikxRPWoroke3nxwbgNlQVHsnX68SNDhVlg66WJ +JKq7CDS5u4vj2+pNPaGKsayjkR0B35p1U1M5JxyOIE5alceqIyXyQJbb4J8DRxNB +DZGPkrnS74yQbkA3UwfxtwcsLAKvfweHZ1ERTDXzGibhcurK6vxdfloWMxITTI41 +Bn4YrMxJ8ZElmVeB+mvTDVEBneCzNKCdokwUf6KELgUT2mRU8jrN17zxAi/RACyf +dYf6rC3ZG8z8ko7bP5FHedT+f6R8Y1/+LvEneCDFM9MW6aSIM7eUqo5OKukfFA8Q +KLf3xf8aJUyxav1+9Vslko0lM3JPnUysnrWaIox17IBUAgl9WqhvA1tdpcOxGVl6 +g9i8Qg5supjqxsB54JILHdLUYrfRVnauB+IACkgID1LR+ACJTtQ= +=51Ju +-----END PGP SIGNATURE----- diff --git a/dd_rescue-md5-unaligned-armv7.diff b/dd_rescue-md5-unaligned-armv7.diff new file mode 100644 index 0000000..1c11d03 --- /dev/null +++ b/dd_rescue-md5-unaligned-armv7.diff @@ -0,0 +1,44 @@ +commit 19da344403f9d340d7343e99df6ec3e4b79684d9 +Author: Kurt Garloff +Date: Sun Mar 3 21:53:21 2024 +0100 + + Trouble is that we don't detect that ARMv7 requires extra buffering + is md5 input is not properly aligned. gcc-12 apparently is clever enough + to handle unlaigned memory access for us, which makes us succeed in the + testcase. It's not clever enough to also succeed in md5_64() :-O + + Signed-off-by: Kurt Garloff + +diff --git a/configure.ac b/configure.ac +index d99387c..7a7dccf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -60,7 +60,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[ + AC_DEFINE_UNQUOTED([HAVE_REP_NOP], 1, + [check whether asm rep nop works]) + ],[ +- AC_MSG_RESULT(yes) ++ AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(no -- cross compiling) + ]) +@@ -79,7 +79,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[ + AC_DEFINE_UNQUOTED([HAVE_LFENCE], 1, + [check whether asm lfence works]) + ],[ +- AC_MSG_RESULT(yes) ++ AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(no -- cross compiling) + ]) +@@ -171,6 +171,10 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[ + fprintf(stderr, "Debug: Off %i, Ptr %08lx\n", off, (unsigned long)ptr); + copy((int*)b2, (const int*)ptr, 4); + fprintf(stderr, "Ints: %08x %08x %08x %08x\n", *(int*)b2, *(int*)(b2+4), *(int*)(b2+8), *(int*)(b2+12)); ++ /* HACK: Somehow this test does no longer trigger with gcc-12 on armhf, but it should */ ++ #ifdef __arm__ ++ return 1; ++ #endif + return 0; + } + ]])],[ diff --git a/dd_rescue-ossl3-evpcipherctx.diff b/dd_rescue-ossl3-evpcipherctx.diff new file mode 100644 index 0000000..39c7504 --- /dev/null +++ b/dd_rescue-ossl3-evpcipherctx.diff @@ -0,0 +1,26 @@ +commit ce925927fdcc5e41f1a8975f31405f913a6583d1 +Author: Kurt Garloff +Date: Wed Feb 28 22:49:18 2024 +0100 + + Adjust struct _evp_cipher_ctx_st to openssl-3.0.6+. + + This is only done if the version is indeed >= 3.0.6. + It's only relevant on 32bit, as the alignment rules on 64bit + do hide this difference. + + Signed-off-by: Kurt Garloff + +diff --git a/aes_ossl11.c b/aes_ossl11.c +index 2fa4468..e450f4e 100644 +--- a/aes_ossl11.c ++++ b/aes_ossl11.c +@@ -45,6 +45,9 @@ struct _evp_cipher_ctx_st { + /* FIXME: Should this even exist? It appears unused */ + void *app_data; /* application stuff */ + int key_len; /* May change for variable length cipher */ ++#if OPENSSL_VERSION_MAJOR >= 3 && (OPENSSL_VERSION_MINOR > 0 || OPENSSL_VERSION_PATCH >= 6) ++ int iv_len; /* IV length */ ++#endif + unsigned long flags; /* Various flags */ + void *cipher_data; /* per EVP data */ + int final_used; diff --git a/dd_rescue-u-emptyout-segfault.diff b/dd_rescue-u-emptyout-segfault.diff new file mode 100644 index 0000000..ffc7d7c --- /dev/null +++ b/dd_rescue-u-emptyout-segfault.diff @@ -0,0 +1,21 @@ +commit 250bf8baf8d7a59d09a8ef48d966019972d3ee5a +Author: Kurt Garloff +Date: Mon Aug 12 15:19:09 2024 +0200 + + Prevent segfault with -u and empty output filename. + + Signed-off-by: Kurt Garloff + +diff --git a/dd_rescue.c b/dd_rescue.c +index 92f81d0..2d32084 100644 +--- a/dd_rescue.c ++++ b/dd_rescue.c +@@ -1466,7 +1466,7 @@ int real_cleanup(opt_t *op, fstate_t *fst, progress_t *prg, + copyxattr(op->iname, op->oname); + copytimes(op->iname, op->oname); + } +- if (op->rmvtrim) ++ if (op->rmvtrim && op->oname) + remove_and_trim(op->oname, op); + LISTFOREACH(ofiles, of) { + if (op->preserve) { diff --git a/dd_rescue.changes b/dd_rescue.changes new file mode 100644 index 0000000..eacde88 --- /dev/null +++ b/dd_rescue.changes @@ -0,0 +1,953 @@ +------------------------------------------------------------------- +Mon Jan 20 16:29:09 CET 2025 - kurt@garloff.de + +- Update to dd_rescue-1.99.20: + * Fix an overrun in sparse block detection. + * Fix an off-by-one memory handling issue in ddr_lzo, resulting + in breakage on s390x. (Surprisingly, glibc memory allocator + was graceful on most architectures.) + * Better test coverage, including chains with sparse files. + * Documented (and somewhat cleaner) design of handling sparse + files through chains of plugins. + * Test and support compression+encryption (and reverse + decryption+decompression) chains. + * Improved debug output, including numbering plugins. + +------------------------------------------------------------------- +Mon Jan 6 14:45:13 CET 2025 - kurt@garloff.de + +- Update to dd_rescue-1.99.19: + * ddr_crypt: Clean hole support with and without skiphole. + (This works cleanly only for CTR and ECB modes.) + * ddr_crypt: Fix backwards copies including holes. Note that + this could result in different files from the forward copies + before (bug). Add test case for the latter. + * Many more testcases for sparse files with plugins: Also use + odd sizes and holes at the beginning and end of the file. + * Also skip over holes with -a when copying in reverse dir. + * Allow setting unsparse and some other flags for ddr_null for + testing. + * Fix lzma compression with hole at the end. + * Warn on lzma buf error (was debug msg only before). + +------------------------------------------------------------------- +Sun Dec 29 17:45:37 CET 2024 - kurt@garloff.de + +- Update to dd_rescue-1.99.18: + * Cleanup libddr_lzma flags and memory handling; support sparse + input. Default preset to 4 now. + * Detect sparse output from unsparse plugins (decompression + and decryption may benefit from this). + * Testcase for (de)compression with sparse files. + * Fix calchmac.py for Python 3.12, so HMAC tests succeed again. + * Rationalize log level handling (control by -q, -v, -E). + * Move cache prefetching fomr plugins to main program. + +------------------------------------------------------------------- +Sat Nov 2 20:13:16 CET 2024 - kurt@garloff.de + +- Update to dd_rescue-1.99.17: + * Plugin libddr_lzma.so: LZMA2/xz de/compression from Dmitrii + Ivanov. Covering the other end of the spectrum of LZO, with + high compression ratios at high CPU cost for compression. + (Decompression is cheap for both.) + * Code review and streamlining for dd_rescue integration by + Kurt Garloff. + +------------------------------------------------------------------- +Sun Sep 29 20:48:16 CEST 2024 - kurt@garloff.de + +- Update to dd_rescue-1.99.16: + * Refactoring: Move CPU feature detection to archdep.c. + * libddr_cypt: Support passing in password via pipe and passfd= + * Add testcase for this + * Support sha256 acceleration on x86-64 and armv8. + * Improve detection of armv8 crypto (aes) acceleration (32bit). + +------------------------------------------------------------------- +Tue Sep 17 15:28:10 CEST 2024 - kurt@garloff.de + +- Update to dd_rescue-1.99.15: + * Build issue: Detect pread64() and pwrite64() support separately + and provide individual replacement functions. + Thanks to David Geiger for reporting (Mageia). + * Bugfix: printstatus() would not be called with odd offsets, + resulting in missing progress report and missing sync (-y) and + write throttling (-C). + * Optimization: Some unrolling for the hash functions gives up to + 10% better performance (on Zen4). + * Optimization: Rationalize prefetching for hash functions and + clear memory after using (avoid cleartext data on the stack). + * Optimization: Save function calls for fault injection and for + graph updates when unneeded. + * Usability: Better handle progress update frequency. + * Build improvement: Add -target linux-aarch64/arm-android28 + automatically where needed. + * Drop: ddr-autoconf-no-fortify.diff (included upstream). + +------------------------------------------------------------------- +Thu Aug 22 22:12:51 CEST 2024 - kurt@garloff.de + +- Avoid setting _FORTIFY_SOURCE in configure script, it may + conflict with flags passed in otherwise (e.g. rpmbuild). + +------------------------------------------------------------------- +Thu Aug 22 20:31:00 CEST 2024 - kurt@garloff.de + +- Update to dd_rescue-1.99.14: + * Drop patches dd_rescue-u-emptyout-segfault.diff:, + dd_rescue-fuzz-test-more-err.diff:, + dd_rescue-md5-unaligned-armv7.diff:, + dd_rescue-ossl3-evpcipherctx.diff: All integrated upstream. + * Fix detection of LFS function availability for musl. + * Include headers and settings to make it work on musl. + * Replaced basename() with mybasename.h. + * Prefetch lookup table for sha hashing. + * Fix verbose output when falling back to small blocksize. + * Fix clearing of errno (unaligned writes at EOF on musl) +- Final tarball with fixes for Android Makefiles. + +------------------------------------------------------------------- +Mon Aug 12 15:52:05 CEST 2024 - kurt@garloff.de + +- dd_rescue-u-emptyout-segfault.diff: Prevent (cosmetic) segfault + in cleanup path with option -u and empty output file name. + +------------------------------------------------------------------- +Sun Mar 3 22:47:17 CET 2024 - kurt@garloff.de + +- dd_rescue-md5-unaligned-armv7.diff: gcc-12 does make unaligned + accesses on armv7 work sometimes, which breaks a configure test + and then makes the make check fail with SIGBUS when using hash + after lzo compression. Hardcode knowledge about armv7. +- Drop %setup (not needed if using %autosetup, thanks Valentin!) +- Mention [bsc#1219882], as suggested by Valentin Lefebvre. + +------------------------------------------------------------------- +Thu Feb 29 09:20:59 CET 2024 - kurt@garloff.de + +- Fix openssl version detection for 3.0.x. +- dd_rescue-ossl3-evpcipherctx.diff: There's an additional field + in the (private) struct _evp_cipher_ctx_st in openssl-3 since + 3.0.6, which makes a difference on 32bit. (On 64bit, the effect + is hidden by the compiler's alignment rules.) + +------------------------------------------------------------------- +Wed Feb 28 20:21:01 CET 2024 - kurt@garloff.de + +- Specify libopenssl-devel as BuildRequirements. This will select + openssl-3 on new distributions. + This fixes [bsc#1219882]. + +------------------------------------------------------------------- +Fri Mar 17 08:54:11 CET 2023 - kurt@garloff.de + +- Readd detached signature. + +------------------------------------------------------------------- +Tue Feb 28 09:44:46 UTC 2023 - Dirk Müller + +- temporarily remove not-really-detached-signature + +------------------------------------------------------------------- +Fri Feb 24 09:37:35 CET 2023 - kurt@garloff.de + +- Update to 1.99.13: + * Drop fuzz-lzo-* patches, as they have been merged upstream. + * Allow overriding strip binary (not used in this build). + * Make -fanalyzer more happy: abort() and assert()ions to ensure + we always react to failed memory allocations. + * ddr_hash: Support reading/writing checksums from stdin/out "-". + * Fix aliasing issue with XORN function (in aes.h), spotted by + gcc-13: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108695 + Drop workaround from Martin Liška again. + * Higher optimization level for aes.c driver is beneficial for + key setup speed. + +------------------------------------------------------------------- +Wed Feb 8 16:00:38 UTC 2023 - Martin Liška + +- Disable strict aliasing due to its violation: + https://sourceforge.net/p/ddrescue/tickets/6/ + +------------------------------------------------------------------- +Tue Dec 27 10:31:33 UTC 2022 - Ludwig Nussel + +- Replace transitional %usrmerged macro with regular version check (boo#1206798) + +------------------------------------------------------------------- +Tue Jul 26 19:55:25 CEST 2022 - kurt@garloff.de + +- Update to dd_rescue-1.99.12: + * Works with openssl-3.0 now (using EVP_Cipher_Init to set IV). + * openssl-1.1 performs significantly better so we keep building + against it if available. + * nosalthdr option for libddr_crypt for compatibility with + openssl-3, no longer writing header when salt is passed. + * ARMv7 crypto support successfully compiles with clang now. +- Drop no-python2.patch (included in dd_rescue-1.99.12). + +------------------------------------------------------------------- +Mon Dec 6 14:21:06 UTC 2021 - Dirk Müller + +- build against openssl 1.1 (bsc#1193438) + +------------------------------------------------------------------- +Sat May 22 11:08:06 UTC 2021 - Matej Cepl + +- Don't break compatibility with SLE-12 + +------------------------------------------------------------------- +Mon May 17 09:47:33 UTC 2021 - Matej Cepl + +- Add no-python2.patch to remove the dependency on Python 2 + (sf#ddrescue#4). + +------------------------------------------------------------------- +Thu Apr 29 21:15:14 CEST 2021 - kurt@garloff.de + +- Update to dd_rescue-1.99.11: + * Drop (backported) checksum_file-clear-errno.diff. + * Minor scheduling improvements for x86_64 and ARM asm. + * Work around compiler weirdness, passing two in/out parameters + in the same register (when they are provably the same), + causing x2 breakage on armv7. + * 256bit VAES support on x86-64 (0.23 cycles/byte on Zen3!). + * Needed to compile aesni twice for this, once with avx. + * Full asm versions for (non-x2) CTR and CBC on arm64 + (achieving 0.40 cycles/byte on Cortex X-1). + * Avoid test failures with incompressible tweak in fuzz_lzo. + * test_aes improvements: Options, help, IV comparison, memcpy. + * Full crypto test coverage 0 -- 130 bytes len. + * Code safety against len==0 en/decryption. + +------------------------------------------------------------------- +Tue Mar 9 19:00:02 CET 2021 - kurt@garloff.de + +- checksum_file-clear-errno.diff: Avoid stale errno to be picked + up and report an error without any error actually occuring. + (This lead to occasional build fails on armv7 on Ubuntu 20.04 + and Fedora 32/33, nowhere else.) + +------------------------------------------------------------------- +Mon Mar 8 09:50:58 CET 2021 - kurt@garloff.de + +- Update to dd_rescue-1.99.10: + * Improve memory clobbers: Ensure we specify full array lengths + used as input to asm (boo#1181402). + * Improve ARM64 crypto by better insn scheduling in CTR calc, + avoiding dependencies and local vars (+40% performance!). + * Apply all ARM64 improvements also to ARMv8 crypto on ARM32. + * Fix warning int formatting on unaligned crypto. + * Address warnings on outdated autoconf usage. + +------------------------------------------------------------------- +Mon Mar 1 08:05:09 CET 2021 - Kurt Garloff + +- Update to dd_rescue-1.99.9: + * Includes aliasing fixes from boo#1181402. + * Additional mem clobbers for asm statements (boo#1181402). + * LTO disablement still needed (boo#1176219) on arm due to + differences in compiler flags (-march) per object. + * Fix dependency generation on PPC (preprocessing intrinsics). + * Support xattr decls in sys/xattr.h in addition to attr/xattr.h. + * More stringent check of mem alloc return values. + * Free all memory in error path before exiting (cosmetic). + * Don't need global variable in probe function. + * drop ddr_1998-alg-caseindep.diff, ddr_1998-check-nofail-noxattr.diff, + ddr_1998-ossl11-warn.diff, ddr_1998-sysrandom.diff, + ddr_1998-testhole.diff: patches all merged (they were backports) +- drop fix-aliasing-aarch64.patch: obsolete (fixed differently in new version) + +------------------------------------------------------------------- +Mon Feb 22 10:40:53 UTC 2021 - Guillaume GARDET + +- Revert last commit and fix bug boo#1181402 with a proper patch: + * fix-aliasing-aarch64.patch + +------------------------------------------------------------------- +Thu Jan 28 22:41:26 UTC 2021 - Dirk Müller + +- build with -fno-strict-aliasing on aarch64 to workaround (bsc#1181402) + +------------------------------------------------------------------- +Wed Jan 13 09:31:27 UTC 2021 - Dirk Müller + +- spec-cleaner run + +------------------------------------------------------------------- +Mon Oct 19 16:01:24 UTC 2020 - Ludwig Nussel + +- prepare usrmerge (boo#1029961) + +------------------------------------------------------------------- +Thu Sep 3 08:07:30 UTC 2020 - Guillaume GARDET + +- Disable LTO on %arm and aarch64 to fix UnitTests - boo#1176219 + +------------------------------------------------------------------- +Wed May 13 06:30:40 UTC 2020 - Josef Möllers + +- Dropped build dependency on libfallocate-devel as fallocate64 is + now in glibc and thus libfallocate is not required any more. + [dd_rescue.spec, jsc#SLE-11887] + +------------------------------------------------------------------- +Mon Apr 6 09:17:38 UTC 2020 - Martin Liška + +- Run tests with -fcommon in order to fix boo#1160261. + +------------------------------------------------------------------- +Thu Sep 20 13:16:41 UTC 2018 - schwab@suse.de + +- Avoid running dependency generation which can produce spurious errors +- Use %license + +------------------------------------------------------------------- +Sat May 12 12:06:29 CEST 2018 - kurt@garloff.de + +- ddr_1998-sysrandom.diff: Use getrandom() decl from sys/random.h. +- ddr_1998-testhole.diff: Ensure we have a hole before testing hole + encryption (fixes bsc#1092758). +- ddr_1998-ossl11-warn.diff: Avoid warn from memcpy to openssl-1.1 + to EVPCTX* internals. + +------------------------------------------------------------------- +Tue Apr 17 15:46:16 CEST 2018 - kurt@garloff.de + +- ddr_1998-alg-caseindep.diff: + * Use case-independent matching for algorithm names (hash, crypt). +- ddr_1998-check-nofail-noxattr.diff: + * Make testsuite succeed for builds w/o xattr support. + +------------------------------------------------------------------- +Sun Dec 3 22:11:29 CET 2017 - kurt@garloff.de + +- Update to 1.99.8: + * Support openssl-1.1 (patch from Marcus Meissner), patch + dd_rescue-openssl11.patch has been merged and is thus dropped. + * cryptalgo->recycle to reuse crypto context (neeeded for openssl) + * Fix memleak in test_aes + * Use test_aes in check target to ensure all algorithms work + * Use std probe mech in test_aes, so we don't fail with SIGILL + * Fix build without openssl + +------------------------------------------------------------------- +Wed Nov 29 17:25:01 UTC 2017 - meissner@suse.com + +- dd_rescue-openssl11.patch: ported to openssl 1.1 (bsc#1070369) + +------------------------------------------------------------------- +Fri Nov 10 15:08:21 CET 2017 - kurt@garloff.de + +- Update to 1.99.7: + * Work around gentoo dash echo -n breakage (reported by whissi). + * Optimize away strlen() calls in format_int. + +------------------------------------------------------------------- +Sat Nov 4 10:29:09 CET 2017 - kurt@garloff.de + +- Update to 1.99.7-pre2: + * ddr_crypt: compat for openssl enc -md sha256 KDF (openssl 1.1 + default) with new opbkdf11 option + +------------------------------------------------------------------- +Thu Nov 2 17:22:06 CET 2017 - kurt@garloff.de + +- Update to 1.99.7-pre: + * Fix for segfault on multi-overwrite with -2/-3/-4. + +------------------------------------------------------------------- +Mon Sep 4 23:25:28 CEST 2017 - kurt@garloff.de + +- libddr_hash-round-down-static.diff: Mark inline function static. + +------------------------------------------------------------------- +Fri Aug 25 15:19:24 CEST 2017 - kurt@garloff.de + +- Update to dd_rescue-1.99.6: + * Merge previous SSE2 detection patch from Michael Matz. + * Support calculating and validating checksums in the S3 + multipart format. + +------------------------------------------------------------------- +Thu Aug 10 16:05:11 UTC 2017 - matz@suse.com + +- Add dd_rescue-i586-sse2.diff to fix dd_rescue compile and + runtime problems when GCC defaults to SSE2 also on i586 + like with SLE-15. + +------------------------------------------------------------------- +Tue May 30 13:52:48 UTC 2017 - tchvatal@suse.com + +- Cleanup a bit the dependencies + * Run %configure as separate comand properly in build phase +- Remove support for < 12.0 +- Add condition for openSSL to build with verison 1.0.0 on Factory + +------------------------------------------------------------------- +Thu Dec 29 22:27:17 CET 2016 - kurt@garloff.de + +- Update to dd_rescue-1.99.5: + * Merge the two gcc7 patches from Martin Liska. + * Better transfer length estimate (thus better progress report) + * Optional ratecontrol (throttle transfer speed) + * fmt_no was unsafe against undetermined length (pre=0) and + visible digit grouping characters, resulting in memory + corruption when using a -b logfile. Thanks to Marc Thomas + for reporting and debugging! + * A few more minor cleanups and bugfixes. + * Fix segfault with graph in reverse direction with + too large transfer limit. + * Fix build with AES but not AVX2 support. +- Update to dd_rescue-1.99: + * ddr_crypt plugin: Add support for ARMv8 aes hardware acceleration + (works as well in 32bit mode). + * ddr_crypt: Fix CTR iv initialization. + * ddr_crypt: Support for openSSL Salted__ header. + * Support ranges in fault injection. + * Clean up write retry logic. + * Improved documentation, Makefiles and test coverage. + +------------------------------------------------------------------- +Fri Dec 23 09:26:20 UTC 2016 - mliska@suse.cz + +- Add gcc7-fix-htonl.patch patch. + +------------------------------------------------------------------- +Fri Dec 9 11:56:45 UTC 2016 - mliska@suse.cz + +- Add gcc7-static-inline.patch. + +------------------------------------------------------------------- +Sun Jun 7 10:20:47 CEST 2015 - kurt@garloff.de + +- Add three missing doc files. + +------------------------------------------------------------------- +Sat May 30 09:58:37 CEST 2015 - kurt@garloff.de + +- Update to dd_rescue-1.98: + * Fix AESNI detection (x86) + * Avoid test failures due to insufficient entropy + +------------------------------------------------------------------- +Fri May 29 22:23:54 CEST 2015 - kurt@garloff.de + +- Update to dd_rescue-1.98pre: + * crypt plugin: Encrypt and decrypt the data stream using various + AES variants. There are -CBC, -ECB, -CTR stream ciphers, and + 128, 192, 256 bit variants, also with enhanced number of rounds, + and with twice the rounds. Keys can generated, saved, or derived + from password with salt. On x86, the hardware AES support is + used if featured by the CPU. + * Speed up PRNG generation. + * Fault injection framework for testing. + * Some minor improvements of the plugin interface and fixes all + over the place. + +------------------------------------------------------------------- +Thu May 21 17:53:19 UTC 2015 - mpluskal@suse.com + +- Add gpg signature and keyring +- Cleanup spec file with spec-cleaner + +------------------------------------------------------------------- +Thu Feb 5 08:07:26 UTC 2015 - coolo@suse.com + +- include the .changes file in the .src.rpm as its used during build + +------------------------------------------------------------------- +Sat Aug 9 23:26:59 CEST 2014 - kurt@garloff.de + +- Update to dd_rescue-1.46: + * Support for HMAC creation/verification in ddr_hash module. + * Mix rdrand into seed if 0 is specified and if available. + +------------------------------------------------------------------- +Tue May 27 13:45:42 CEST 2014 - kurt@garloff.de + +- Update to dd_rescue-1.45: + * ddr_hash: Fix potential sha512/sha384 buffer overflow. + * ddr_hash: Support sha1 + * ddr_hash: Support checking and storing hash in xattrs and + md5sum/sha256sum/... style files. + * New ddr_null plugin. + +------------------------------------------------------------------- +Fri May 23 11:25:20 CEST 2014 - kurt@garloff.de + +- Update to dd_rescue-1.44: + * MD5 plugin has been renamed to hash, reflecting that it supports + sha1, sha256, sha224, sha512, sha384 now as well. + +------------------------------------------------------------------- +Fri May 23 09:56:10 CEST 2014 - kurt@garloff.de + +- dd_rescue-1.43-1.43.1.diff: Delete (integrated upstream) +- dd_rescue-fix_insn_probe.diff: Delete (integrated upstsream) + +------------------------------------------------------------------- +Wed May 21 10:44:18 CEST 2014 - kurt@garloff.de + +- dd_rescue-1.43-1.43.1.diff: Document 256kiB limit of lzop in + man page, output warning in ddr_lzo and respect limit in test + suite. + +------------------------------------------------------------------- +Tue May 20 09:29:40 CEST 2014 - kurt@garloff.de + +- Update to 1.43-final: Make make check succeed without lzop. + +------------------------------------------------------------------- +Mon May 19 21:03:04 CEST 2014 - kurt@garloff.de + +- Update to 1.43-pre: + * Fix bug in extend, which previously would disallow to append + more data than existed before. + * Some minor improvements on messages and manpage. + * ARMv8 (AArch64) optimized find_nonzero for fast zero-block + detection. + * Significant rework of plugin interface, leading also to some + refactoring of option parsing and passing. + * Refactoring of MD5 plugin, improving tolerance against holes + e.g. at the end of a file. Better test coverage. Consistent + message prefix. output option to produce md5sum check files. + * Add libddr_lzo plugin, allowing transparent de/compression + of the data. Supports sparse files, appending, ... and a variety + of algorithms and has a number of ways to handle somewhat + damaged files. With the lzo1x_ algorithms, it's compatible with + lzop. Comes with a good number of tests and an own fuzzer to + test robustness of the decompressor. Shipped with an own man + page and is packaged into the dd_rescue-lzo sub package. + +------------------------------------------------------------------- +Sat Mar 8 18:58:56 CET 2014 - kurt@garloff.de + +- dd_rescue-fix_insn_probe.diff: Brings dd_rescue to 1.42.1, + fixing the process' signal mask after SIGILL delivery (probing), + an issue related to the longjmp() signal handler return fix + to bnc#860779. +- Update to dd_rescue-1.42: + * Addition of plugin interface + * MD5 plugin + * Use posix_fadvise() if available + * Short usage message rather than full help on error +- Update to dd_rescue-1.41: + * Support for building against Andoid NDK + * Consistent use of (improved) int no formatting functions + * Fix off-by-one block dev size issue (cosmetic) + * Enable AVX2 optimized sparse block detection + * Refactored CPU feature detection and selection + * New option -u/--rmvtrim to delete output file and issue fstrim +- Remove suboptimal fix for bnc#860779, it's fixed properly + upstream by returning with longjmp() from the signal handler. + +------------------------------------------------------------------- +Tue Feb 11 14:00:38 UTC 2014 - bwiedemann@suse.com + +- disable SSE2 on i586 (bnc#860779) + +------------------------------------------------------------------- +Thu Aug 18 23:52:41 CEST 2013 - kurt@garloff.de + +- Update to dd_rescue-1.40: + * Copy xattrs on -p/--preserve + * For odd file offsets, do odd-sized write first, so subsequent + writes are aligned. + * Support half-empty block sparse detection and double softbs + default for buffered IO. + * Add a lot more test cases to make check. + +------------------------------------------------------------------- +Thu Aug 8 13:59:39 CEST 2013 - kurt@garloff.de + +- Update to dd_rescue-1.39: + * Fix an issue with the last block being appended zeros if + hardbs==softbs (bnc #833765). + * A little ARM asm speedup (~15%) for sparse detection. + * Clarify help/man page w.r.t. interpretation of -y/--syncfreq. + * We use autoconf for feature detection now. +- Build version with libdl by default now. + +------------------------------------------------------------------- +Fri Aug 2 22:05:52 CEST 2013 - kurt@garloff.de + +- Update to dd_rescue-1.38: + * Further optimized SSE2 sparse detection. (Also added AVX2 + version, not enabled by default though.) + * --force allows to ignore non-seekable output with non zero + output position. + * make check does some testing ... + * improved cur.rate and ETA calculation. + +------------------------------------------------------------------- +Thu Aug 1 22:02:16 CEST 2013 - kurt@garloff.de + +- Update to dd_rescue-1.37: + * Important bugfix for SSE2 sparse detection. + * Fix exact zero-length on big endian machines (irrelevant). + +------------------------------------------------------------------- +Wed Jul 24 16:58:13 CEST 2013 - kurt@garloff.de + +- Update to dd_rescue-1.36: + * Fix overflow with avg.load display + * Enable SSE2 on (32bit)x86 with runtime detection + * Add optimized zero block detection on ARM (3x faster with asm ...) + +------------------------------------------------------------------- +Wed Jul 17 22:30:40 CEST 2013 - kurt@garloff.de + +- Update to dd_rescue-1.35: + * Better readability for reports with (optional) colors and rate + limitation on progress updates. + * Simple rewrite logic. + * SSE2 optimized version for finding zero blocks (sparse detection). + +------------------------------------------------------------------- +Sun Jul 7 17:09:32 UTC 2013 - asterios.dramis@gmail.com + +- Update to version 1.34: + * Better support for various *nix systems (specifically has a few fixes for + FreeBSD). + * Better compatibility with compilers (clang and g++ and clang++). + * It can now also load libfallocate at runtime (libdl). + * Detects a few more fatal write errors as such. + +------------------------------------------------------------------- +Sun May 26 17:22:08 UTC 2013 - asterios.dramis@gmail.com + +- Update to version 1.33: + * Long options + * New double overwrite mode (-2) + * Man page added + +------------------------------------------------------------------- +Mon Feb 11 00:15:58 CET 2013 - kurt@garloff.de + +- Update to dd_rescue-1.32: + * New option -x to append to outfile. + * New option -Y (can be used multiple times) to specify 2ndary + output files. + +------------------------------------------------------------------- +Sun Feb 3 21:54:54 CET 2013 - kurt@garloff.de + +- Update to dd_rescue-1.31: + * Some minor output cleanups. + * Implementation of safe triple overwrite (options -3 and -4) + following BSI GSDS M7.15. +- Update to dd_rescue-1.30: + * Fix issue with double free (1.29) + * Fix output to stdout ("-") + * Rationalize messages a bit. + * Option to init PRNG from file (e.g. -Z /dev/urandom) + * Option -W to avoid writes (if output block is identical) +- Update to dd_rescue-1.29: + * Correctly handle last bytes before EOF when hardbs == softbs. + * New option -M (dont extend output file). + * New option -R (repeated output of one block, auto for dev/zero) + * New options -z x, -Z x to use userspace pseudo RNG to overwrite + disks / files with random data. + +------------------------------------------------------------------- +Sat May 26 10:10:51 UTC 2012 - zaitor@opensuse.org + +- Update to version 1.28: + * Better defaults for hard and softblock sizes (4k/64k for + buffered I/O, 512/1M for direct IO). + * Copying of access times with the option -p fixed. + +------------------------------------------------------------------- +Sat May 19 18:49:20 UTC 2012 - asterios.dramis@gmail.com + +- Update to version 1.27: + * Allow to do 512b direct IO (which is possible in latest Linux kernels). + Change posix_memalign() variable assignment. It has a number of fixes; most + importantly, when exiting because of an error, it updates the variables + that are output. dd_rescue now avoids special characters in the logfile. It + handles situations gracefully, where wrong positions resulted in the + progress graph causing faults. Some come from illegal input (negative + offset ...), which is now detected. + +------------------------------------------------------------------- +Mon Mar 12 17:42:25 UTC 2012 - asterios.dramis@gmail.com + +- Update to version 1.25: + * Fix for spurious "Success" messages that resulted from overwritten + (cleared) errno. Bad blocks are formatted in a way that they are not + overwritten on screen and block numbers are output as unsigned. +- Removed dd_rhelp from the package (dd_rhelp will become a separate package. A + recommended entry for dd_rhelp was added in dd_rescue). +- Spec file updates: + * Updated License: to "GPL-2.0 or GPL-3.0". + * Removed bc from BuildRequires: (not needed since dd_rhelp was removed). + +------------------------------------------------------------------- +Tue Feb 7 21:51:22 UTC 2012 - rschweikert@suse.com + +- place binaries in /usr tree (UsrMerge project) + +------------------------------------------------------------------- +Wed Oct 5 12:52:27 CEST 2011 - garloff@suse.de + +- Update to dd_rescue-1.24: + * Handle directory as output filename (append input basename). +- Fix dd_rhelp.test script and add to %check. + +------------------------------------------------------------------- +Sun Sep 18 17:17:12 UTC 2011 - jengelh@medozas.de + +- Remove redundant tags/sections from specfile + (cf. packaging guidelines) + +------------------------------------------------------------------- +Sat Sep 3 20:31:45 UTC 2011 - asterios.dramis@gmail.com + +- Spec file updates: + * Changed License: to GPL-2.0 (bnc#714914). + * Minor other updates. + +------------------------------------------------------------------- +Sat May 14 19:15:25 UTC 2011 - asterios.dramis@gmail.com + +- Update to dd_rhelp-0.1.2: + * IMPROVEMENT : will check the log file destination for sane conditions and + will try some other locations if not. + * IMPROVEMENT : will manage max_err parameter to avoid creating to much + chunks. + * More and better information displayed at 'info' time. + From dd_rhelp-0.1.0: + * INSTALL : No more ./configure && make && make install ... all detection + were done at runtime anyway + * UPDATE : updated libs provided in dd_rhelp + * UPDATE : finally compatible with recent tail/head "-n" arguments + * Added some sanity tests. + * TEST : Started to create dd_rhelp.test which unit tests dd_rhelp. +- Spec file updates: + * Changes based on rpmdevtools templates and spec-cleaner run. + * Added description for the patches based on openSUSE Patches Guidelines. + * Added a fix inside the spec file to remove build time references + * dd_rhelp no longer needs auto* tools. + * Minor other updates. +- Removed dd_rhelp_src.diff patch (fixed upstream). +- Rebased the other patches to apply cleanly. + +------------------------------------------------------------------- +Tue Nov 2 23:55:27 CET 2010 - garloff@suse.de + +- Move autoconf/configure stuff to %build section. + +------------------------------------------------------------------- +Thu Oct 14 11:22:30 CEST 2010 - garloff@suse.de + +- Adapt BuildRequires to new naming of libfallocate-devel-static. + +------------------------------------------------------------------- +Mon Oct 11 23:23:50 CEST 2010 - garloff@suse.de + +- dd_rescue-1.23: + * A short read (because of EOF) is not regarded an error anymore. + This fixes confusing exit codes as well as non-quietness for -q. + * We now REALLY default to -y0. + +------------------------------------------------------------------- +Thu Sep 9 01:04:55 CEST 2010 - garloff@suse.de + +- dd_rescue-1.22: + * Display compiler, compile time, enabled options. + * If hardbs == softbs, don't repeat copy attempts. + * Fix FPE in progress bar for non-seekable input reverse copy. + * Document some of the goodies in the README. + * Make code more digestable for non-GCC compilers, optional + fallbacks for strsignal, pread, pwrite. + +------------------------------------------------------------------- +Mon Aug 30 23:46:30 CEST 2010 - garloff@suse.de + +- dd_rescue 1.21: + * Display warnings when using sparse writing. + +------------------------------------------------------------------- +Sun Aug 22 16:56:51 CEST 2010 - garloff@suse.de + +- dd_rescue 1.20: + * Update docs to document the overwrite disk with itself case + * Also display progress bar if we know that the copy size due + to -m. + +------------------------------------------------------------------- +Sat Aug 21 21:23:19 CEST 2010 - garloff@suse.de + +- Really fix dd_rhelp to not break on new Summary line. + +------------------------------------------------------------------- +Sat Aug 21 19:11:18 CEST 2010 - garloff@suse.de + +- Update to dd_rescue-1.19: + * Fix 32bit screwup with display of total amount of date to copy + * Support fallocate (using libfallocate) with -P (Prealloc) + * More consistent use of ddrescue: (info): prefix (splice, Summary) + * dd_rhelp adjusted for Summary change. + +------------------------------------------------------------------- +Fri Aug 13 23:18:30 CEST 2010 - garloff@suse.de + +- Update to dd_rescue-1.18: + * Change default for sync to -y0. +- Update to dd_rescue-1.17: + * Display progress bar, percent completion and ETA + * Better estimte current vs. avg speed + * Exit on ENOSPC on target + * Warn ONCE on EINVAL for fsync +- Update to dd_rescue-1.16: + * Determine and display total amount of data to copy + +------------------------------------------------------------------- +Fri Aug 13 21:45:00 CEST 2010 - garloff@suse.de + +- Adjust dd_rhelp to changes in dd_rescue. + +------------------------------------------------------------------- +Fri Aug 13 18:06:17 CEST 2010 - garloff@suse.de + +- Update to dd_rescue-1.15: + * Support for splice() to do zerocopy file copies + * Better information on warnings and errors + * Avoid repeated warning on fsync returning EINVAL + +------------------------------------------------------------------- +Fri Aug 13 17:59:31 CEST 2010 - garloff@suse.de + +- Rename package to dd_rescue. + +------------------------------------------------------------------- +Wed Aug 29 23:04:53 CEST 2007 - garloff@suse.de + +- Update to dd_rescue-1.14: + * Fix bug with sparse (-a) mode that could lead to the target + file not having the correct size. + +------------------------------------------------------------------- +Mon Mar 19 06:34:24 CET 2007 - garloff@suse.de + +- Update to dd_rescue-1.13: + * Write full block of '0' for read errors and non-seekable + output. (#255671) + +------------------------------------------------------------------- +Tue Nov 7 00:59:36 CET 2006 - garloff@suse.de + +- dd_rhelp: head/tail require -n option (thanks to Bryant Ling) +- dd_rhelp: Use -y0 if ddrescue is 1.12 or newer. +- dd_rhelp: Require bc. + +------------------------------------------------------------------- +Sat Jul 29 00:39:45 CEST 2006 - garloff@suse.de + +- Update to dd_rescue-1.12: + * Option -b: Log bad blocks to ASCII file + * Option -y: Change fsync frequency (performance) + +------------------------------------------------------------------- +Mon May 22 21:03:22 CEST 2006 - schwab@suse.de + +- Don't strip binaries. + +------------------------------------------------------------------- +Wed Jan 25 21:35:25 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Mon Feb 21 12:23:08 CET 2005 - garloff@suse.de + +- Add autoreconf to dd_rhelp. + +------------------------------------------------------------------- +Mon Feb 14 01:28:51 CET 2005 - garloff@suse.de + +- Update to dd_rescue-1.11: + * O_DIRECT needs aligned buffers (Raymund Will) + * Compile fix for systems without O_DIRECT +- Update to dd_rhelp 0.06 + +------------------------------------------------------------------- +Sun Aug 29 01:07:20 CEST 2004 - garloff@suse.de + +- Update to dd_rescue-1.10: + * Support for non-seekable in-/output (pipes). + +------------------------------------------------------------------- +Sun Aug 29 00:59:42 CEST 2004 - garloff@suse.de + +- Update to dd_rescue-1.04: + * Include fix from Lab Valentin for dd_rhelp + * Fix CPU load display overflow + * Default soft block size now 64k instead of 16k + * O_DIRECT supported (-d/-D) + * option -p to copy permissions/owner/times +- Include dd_rhelp script (0.0.5) from Lab Valentin. + +------------------------------------------------------------------- +Thu Jul 26 14:53:25 MEST 2001 - garloff@suse.de + +- Update to version 1.02: + * Better handling of partially successful reads. + * Don't loop on EFBIG when writing. + * Avoid errno checking if not necessary. + +------------------------------------------------------------------- +Mon Apr 30 16:11:45 MEST 2001 - garloff@suse.de + +- Bugfix release 1.01: + * Don't loop trying to write to full partition (ENOSPC) + * Fix compiler format warning (\% -> %%) + * Add lots of const qualifiers + * Optimize block zero checking routine + +------------------------------------------------------------------- +Fri Feb 9 17:32:56 MET 2001 - garloff@suse.de + +- #include to fix compilation error on variadic fns + +------------------------------------------------------------------- +Sat Dec 9 18:25:20 MET 2000 - nashif@suse.de + +- sorted + +------------------------------------------------------------------- +Wed Aug 30 22:59:45 CEST 2000 - garloff@suse.de + +- Update to 1.00: Some preparation for supporting non-seekable + in- or output. No support yet: Print warning and abort. + +------------------------------------------------------------------- +Sat May 27 00:18:42 CEST 2000 - garloff@suse.de + +- Update to 0.99: Use stderr to print messages instead of stdout +- Prepare allowing - as stdin/stdout (but pread/pwrite() will fail) +- Fix spelling in README +- Use BuildRoot + +------------------------------------------------------------------- +Fri Jan 14 18:14:17 CET 2000 - garloff@suse.de + +- Fixed README.dd_rescue. + +------------------------------------------------------------------- +Wed Oct 27 03:42:25 CEST 1999 - garloff@suse.de + +- Removed flushb. It belongs into util-linux. + +------------------------------------------------------------------- +Wed Oct 20 01:47:59 CEST 1999 - garloff@suse.de + +- Fixed typo in help. (b <-> B) + +------------------------------------------------------------------- +Fri Oct 15 15:57:27 CEST 1999 - garloff@suse.de + +- Initial release: 0.98. + diff --git a/dd_rescue.keyring b/dd_rescue.keyring new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..08a5e80b5ed6411e9693d4caeb73e3a54d681391694159e34e784cdb08ae01df GIT binary patch literal 117108 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 literal 0 HcmV?d00001 diff --git a/dd_rescue.spec b/dd_rescue.spec new file mode 100644 index 0000000..fb6eea1 --- /dev/null +++ b/dd_rescue.spec @@ -0,0 +1,190 @@ +# +# spec file for package dd_rescue +# +# Copyright (c) 2025 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%ifarch aarch64 %{arm} +# boo#1176219 +%define _lto_cflags %{nil} +%endif +Name: dd_rescue +Version: 1.99.20 +Release: 0 +Summary: Data copying in the presence of I/O Errors +License: GPL-2.0-only OR GPL-3.0-only +Group: System/Base +URL: http://www.garloff.de/kurt/linux/ddrescue/ +Source0: http://garloff.de/kurt/linux/ddrescue/%{name}-%{version}.tar.bz2 +Source1: http://garloff.de/kurt/linux/ddrescue/%{name}-%{version}.tar.bz2.asc +Source2: %{name}.keyring +Source99: %{name}.changes +# PATCH-FIX-UPSTREAM no-python2.patch sf#ddrescue#4 mcepl@suse.com +# Remove dependency on python2 +BuildRequires: autoconf +BuildRequires: libattr-devel +# Workaround for bsc#1193438 +BuildRequires: libopenssl-devel +BuildRequires: lzo-devel +BuildRequires: lzop +BuildRequires: pkgconfig +BuildRequires: python3-base +BuildRequires: xz-devel +Requires: bc +Recommends: dd_rescue-crypt +Recommends: dd_rescue-lzo +Recommends: dd_rhelp +# ddrescue was last used in openSUSE 11.4 (version 1.14_0.0.6) +Provides: ddrescue = %{version} +Obsoletes: ddrescue < %{version} + +%description +dd_rescue helps when nothing else can: your disk has crashed and you +try to copy it over to another one. While standard Unix tools like cp, +cat, and dd will "abort" on every I/O error, dd_rescue does not. + +dd_rescue has many other goodies; optimization by using large blocks +as long as no errors are in sight and falling back to small ones; reverse +direction copy; splice in-kernel zerocopy; O_DIRECT support; preallocation +with fallocate(). + +dd_rescue also provides data protection features by overwriting files +or disks with fast random numbers, optionally multiple times. + +dd_rescue supports plugins; currently a hash, an lzo and a crypt plugin +exist, supporting on the fly hash/HMAC calculation/validation, lzo +de/compression and de/encryption. The lzo plugin is packaged in the +dd_rescue-lzo, the crypt plugin in the dd_rescue-crypt subpackage. + +%package crypt +Summary: Crypt plugin for dd_rescue +Group: System/Base +Requires: dd_rescue = %{version} + +%description crypt +This plugin allows you do de/encrypt files during recovery copying +with dd_rescue using the AES family of algorithms. The plugin +supports various numbers of bits and rounds and uses the x86 AESNI +CPU support if available. + +The plugin does offer a variety of options to handle the keys +and IVs including the generating keys from password and salt. + +The plugin is new as of 1.98 and it despite diligent testing it +might be careful to expect some bugs and future changes. + +%package lzo +Summary: LZO plugin for dd_rescue +Group: System/Base +Requires: dd_rescue = %{version} + +%description lzo +This plugin allows you do de/compress files during recovery copying +with dd_rescue using the lzo family of algorithms. lzo algorithms +are very fast to decompress and most algorithms are very fast to +compress as well -- at the expense of somewhat worse compression than +zlib's deflate. + +The plugin does offer a variety of options to handle corrupted .lzo +files with some grace; it does skip over bad blocks (if the block +headers are still intact) by default, but does offer an option (nodiscard) +to allow to attempt decompression on faulty input, hoping to produce +some usable bytes. It can also search for valid block headers after +synchronization has been lost due to a corrupt one. + +The plugin also handles sparse files (files with holes) and supports +appending to .lzo files, so it fits neatly into dd_rescue. + +Some fuzz testing has been applied to the plugin's decompression routines, +though more will have to be done to feel confident about feeding untrusted +data to the decompressor. + +%package lzma +Summary: LZMA (xz) de/compression plugin for dd_rescue +Group: System/Base +Requires: dd_rescue = %{version} + +%description lzma +This plugin allows you do de/compress files during recovery copying +with dd_rescue using the lzma compression algorithm. The lzma algorithm +is fairly slow when compressing, but achieves a good compression ratio. +Decompression is much faster. + +This plugin is still new and may not be very mature yet. It may be +a bad idea to feed it with untrusted data, especially when running +with elevated privileges. + +Authors: +-------- + Dmitrii Ivanov + Kurt Garloff + +%prep +%autosetup -p1 + +# Remove build time references so build-compare can do its work +FAKE_BUILDTIME=$(LC_ALL=C date -u -r %{SOURCE99} '+%%H:%%M') +FAKE_BUILDDATE=$(LC_ALL=C date -u -r %{SOURCE99} '+%%b %%e %%Y') +sed -i "s/__TIME__/\"$FAKE_BUILDTIME\"/g" dd_rescue.c +sed -i "s/__DATE__/\"$FAKE_BUILDDATE\"/g" dd_rescue.c + +%build +autoheader +autoconf +%configure + +# avoid running dependency generation step +touch .dep + +%make_build RPM_OPT_FLAGS="%{optflags}" LIBDIR=%{_libdir} LIB=%{_lib} + +%install +%make_install RPM_OPT_FLAGS="%{optflags}" INSTALLDIR=%{buildroot}/%{_bindir} LIB=%{_lib} LIBDIR=%{_libdir} \ + INSTASROOT= INSTALLFLAGS= + +%if 0%{?suse_version} < 1550 +mkdir %{buildroot}/bin +ln -sf %{_bindir}/dd_rescue %{buildroot}/bin +%endif + +%check +%make_build RPM_OPT_FLAGS="%{optflags} -fcommon -fno-strict-aliasing" check + +%files +%doc README.dd_rescue TODO +%license COPYING +%{_bindir}/dd_rescue +%if 0%{?suse_version} < 1550 +/bin/dd_rescue +%endif +%{_libdir}/libddr_hash.so +%{_libdir}/libddr_MD5.so +%{_libdir}/libddr_null.so +%{_mandir}/man1/dd_rescue.1%{?ext_man} + +%files crypt +%{_mandir}/man1/ddr_crypt.1%{?ext_man} +%{_libdir}/libddr_crypt.so +%doc CRYPT_TODO PADDING + +%files lzo +%{_libdir}/libddr_lzo.so +%{_mandir}/man1/ddr_lzo.1%{?ext_man} + +%files lzma +%{_libdir}/libddr_lzma.so +%{_mandir}/man1/ddr_lzma.1%{?ext_man} + +%changelog