From 40e2f79e60b48e724a77c8eeeb9ad5bd136373ad Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 24 Feb 2026 14:23:00 +0100 Subject: [PATCH] Add support for reading backups using securetar v3 (#163920) --- homeassistant/components/backup/util.py | 16 +++-- ...ed_protected.tar => backup_compressed.tar} | Bin 10240 -> 10240 bytes ...tar => backup_compressed_protected_v2.tar} | Bin 10240 -> 10240 bytes .../backup_compressed_protected_v3.tar | Bin 0 -> 10240 bytes ...compressed.tar => backup_uncompressed.tar} | Bin 30720 -> 30720 bytes .../backup_uncompressed_protected_v2.tar | Bin 0 -> 20480 bytes .../backup_uncompressed_protected_v3.tar | Bin 0 -> 20480 bytes .../backup_v2_uncompressed_protected.tar | Bin 20480 -> 0 bytes .../backup/snapshots/test_websocket.ambr | 23 +++++- tests/components/backup/test_util.py | 67 ++++++++++++++---- tests/components/backup/test_websocket.py | 6 +- 11 files changed, 89 insertions(+), 23 deletions(-) rename tests/components/backup/fixtures/test_backups/{backup_v2_compressed_protected.tar => backup_compressed.tar} (91%) rename tests/components/backup/fixtures/test_backups/{backup_v2_compressed.tar => backup_compressed_protected_v2.tar} (89%) create mode 100644 tests/components/backup/fixtures/test_backups/backup_compressed_protected_v3.tar rename tests/components/backup/fixtures/test_backups/{backup_v2_uncompressed.tar => backup_uncompressed.tar} (98%) create mode 100644 tests/components/backup/fixtures/test_backups/backup_uncompressed_protected_v2.tar create mode 100644 tests/components/backup/fixtures/test_backups/backup_uncompressed_protected_v3.tar delete mode 100644 tests/components/backup/fixtures/test_backups/backup_v2_uncompressed_protected.tar diff --git a/homeassistant/components/backup/util.py b/homeassistant/components/backup/util.py index c5899315524..23e230e8e24 100644 --- a/homeassistant/components/backup/util.py +++ b/homeassistant/components/backup/util.py @@ -16,6 +16,7 @@ from typing import IO, Any, cast import aiohttp from securetar import ( + InvalidPasswordError, SecureTarArchive, SecureTarError, SecureTarFile, @@ -165,7 +166,7 @@ def validate_password(path: Path, password: str | None) -> bool: ): # If we can read the tar file, the password is correct return True - except tarfile.ReadError, SecureTarReadError: + except tarfile.ReadError, InvalidPasswordError, SecureTarReadError: LOGGER.debug("Invalid password") return False except Exception: # noqa: BLE001 @@ -192,13 +193,14 @@ def validate_password_stream( for obj in input_archive.tar: if not obj.name.endswith((".tar", ".tgz", ".tar.gz")): continue - with input_archive.extract_tar(obj) as decrypted: - if decrypted.plaintext_size is None: - raise UnsupportedSecureTarVersion - try: + try: + with input_archive.extract_tar(obj) as decrypted: + if decrypted.plaintext_size is None: + raise UnsupportedSecureTarVersion decrypted.read(1) # Read a single byte to trigger the decryption - except SecureTarReadError as err: - raise IncorrectPassword from err + except (InvalidPasswordError, SecureTarReadError) as err: + raise IncorrectPassword from err + else: return raise BackupEmpty diff --git a/tests/components/backup/fixtures/test_backups/backup_v2_compressed_protected.tar b/tests/components/backup/fixtures/test_backups/backup_compressed.tar similarity index 91% rename from tests/components/backup/fixtures/test_backups/backup_v2_compressed_protected.tar rename to tests/components/backup/fixtures/test_backups/backup_compressed.tar index caef8f6131bccb326c40cbf16b486562c7e5587b..0fd055f4dc70189d1f58e6f7926993084ba6fb86 100644 GIT binary patch delta 603 zcmV-h0;K(bP=HX7h8HjZFfcGMFfcGMFfcFxFflMPGdBPrFq07hWU~PQLjo3NVQh0{ zEFdCtY;|WMIv^rqVPk7`aFbjEq_h454gwG{IWaddGd3ZA5%{7C%R5YKs^mSd{PMy5|8wTcHJN@aNV_ zlQ4{5+NS@Dy1f7Hd%HgWqj2&+`G4hqWpblHA95RlH01vQaCv$%IzQ#rO~f3bsg2fO z``>e+fcsgFN^C1)%%i5D1dLZl0@$avp8Gb@xAOzrX)!>z_ar zTKaQPQewhnC=Oy(^~%8KKlz{hPyQb+onj;J06YKh+W&3&Ul@h7|LcR_;eYt#e__f0 zQGFos!~PGEfe-^+fz|1s7`@cRo*vls6JZolY pT1;mPwm%MAzpL(f*#GI`2!bF8f{4NkH?8;*04THJ3m+VjAQN=Y8{Yr` delta 619 zcmZn&Xb70lCT_%FfB*~zh6Y9^h71Y@lLZ-5HZw9hGf9*bm8R+_C>7_FrYl(~C?zE( zXO|Ylml;itVqUU|g@;MNz|zpv!qQmJ$im3N+`@!w^F{6_jFUK8B}@z$3{4G9j7dR%*gn^J~%bGv?w(sv51KQ2{5jLapIWD)_MQ0VY90(yIkLYZ<0>X z?X_(zsynuO`^b zjLG&*CLRXui;6Qgh-xTYnYErnjP;Ge+oY$*fy}KK^`u?G&49_v5*zj(k-!@#p7aI3--Z_GIxxlP5P1tkkjJXwVhMwo?Am^$R^; xZ$;Urx5cP`t9FiTQC#zweaqVisRCcN-DKkT|9P-)PRN=YtA2F30TY9Q3;=k<2d)4B diff --git a/tests/components/backup/fixtures/test_backups/backup_v2_compressed.tar b/tests/components/backup/fixtures/test_backups/backup_compressed_protected_v2.tar similarity index 89% rename from tests/components/backup/fixtures/test_backups/backup_v2_compressed.tar rename to tests/components/backup/fixtures/test_backups/backup_compressed_protected_v2.tar index b678d1920e5381769dee41024dcbfbf03854a8b7..05ece51f03b65f88d9f051f6d98fbf909abe9c7a 100644 GIT binary patch delta 683 zcmZn&Xb70lDq&>8V1NJ&28ISkCMFCD29pIDQ#La)Iy32(6qTmxC@2-@l%^|LDJUf+ zCTEux#3$$H78Iox7pJDg7Zl}}q$ZaDS!G6(Gno4)v9yU}nrdjopiluabul9=qqK!W zZb@cts;!~9xuK<@xq-2no`t!EiMgdY*XE1dPZ%e0v`Uy5Fc_K|nwT4zm>Zj#0-a`L zU~CL^+GIw?|MkJC$)!c9A&Esy3`l@+C5$t};`ggnHFI>>x?eor*>)g$o{9NkpBCwZ zljFYkx$4;_Jcv7I-FG}{+6SJkEQT5qaYn8ct{hGIn(9Wsug&A?3q*0 zdB2nj-}Rp8ef!`>d-4YL?)uz@M?CfWL>abAPb_A?F)b&u=wzgj?$0>~983#yr`y$~ zi&<{mlr^KL$U*s_GtZo6Lz&&b=dJQ=+w_fZgF<_ub5%6=o;Uwan>uDkOYz?np2qb* z%Kpmw{m(OP+=HE7{`~OY*5F>t7PfhjbA;b|xMvi6n3T24Hm8DNI&Z+~d13|A*#f)f z)Ym>(dLsL5>n+56hc>?Y@-sIx;QH_uWAgzIUrPH*1)xzAySFvnx(TxLTw} z<*>uf?()C~n;VVa*PKb8usT=pa+FwNl1Nyaj)$O6?)yKJT0W$n?@rMdSZgPc!F#)X zrRoWug_4<>2lgHn6RtQYc{1(8Z)>ZcqKR>KS+|qVeu;Zhx0&@2OU&F;bq(S*Ts?bO zzsm~t-#UG3>ka#)&k8b}SKdk1KfJek>b%=V`Ew2im02aMY3~XXi+D2W-j#$~mkauA pEL@4`=ai-^St%$b zB_?N=7Q~ks#V6hT?PUZ@jAAy!m{E z#+C&aycce{=Y7Q^XugWzoBi+CZHtP&a@p8taso=Zv} zm~I#87^yw^cPEzpSR;GN+vRhd!&0Y;nAOVeTqhtmIkJB0`Ag9TZKV>I-GT+V^|tcp z$4Wnvm->1B;jCL4Pn9H&?mr%TzL`n0%Ss|DBFUHM|LU%yj+5f3^>IcE7j#_9EwrVS9F#?$g5m*&Gg1oI%-Zx4f<2@LrK| zUhhX?yRDts>{jAn9Y>O+1qxrfgMtTr+E$M(cmpbM!T3TF^ zSOjzus_2N}RVyW?q~zxnD_JQ-S1aWu=B5H!N+GGmB}zI9O2s*)=^%aylwX!wRGgWg z2NE*WGte_os*MGzO3u$MC`v6ZPE7$yloXYw0>x4iOTZ=>TACZ^8W;jmh=G9>80i5c zISOQYYDGy=B2Y`UQf3}77V?r)<1;}*+50*nI#$ViKQj^xrrs2$??Uh zB_)}8=^*!lY^nvSNXySj0lEt)60MY*nv$6ac6ml(QK}Nibs71&sfoqKnIIcVz_z7U zB}6PBK{8Z4 zB2?nxisQ?SL5?e_EC2^iL1Ix!W?~LV2w|~NEj<&Tp1z*GLqKAMM`|K45NTsGC{qIg zdcKG84GfGi^S_}HgF*#uoP%oW2+#jU77Do~nYpR9hUVsmmWJjA#%6jJmPY0V1}0pn z0X51Sjv;_jI_d$dLcR1VYWowE`SH~MhQR8c!O+yu#N5cl+}PBV!N3qy_Kw#7)Q$&i z<^`uFmlmalBo;9v%QCKn@zS~0@63A2z%+v|F8nuZMoiTHw0D+M?Zw{iyb+>*qv2J( z-HF_3MPckxFI(F#F-|+HrIB9oz9&bTHT(+e)~;_?ExLQ{&i`cX1#69}+st;;wz)I@K>Kx9VFYUcckKkh~}7{*;HDTQ(>!&}tP}^TxY6uF2xT zs{5MV^3$4(e!Q-DD=@j@k<2GE$0>coY*dw#9^ zD0k$>*{cWik~z2C$oyA!Gvtw%x$N2IaVr-+*ixmR_v1a-lNi)ZDX_i%9hth zwq45GT9V89!Q}WXhlMi^d^u=)g~w%g!~;Hir}dU9E4Rkke*eSH_TA=?;oOR6{KwY4 zv_Gl#zjA&=;+$3Y^8;EsntZ&&%cnCJPSvhq{poQ`;>Y8(cc)FiU2IJ)ofZE{{iN8> zpx*AsEY3SlKh{vGVhqE3$jvw@8?*Q)i#)9vbzU!&NDJB zm-u7%qjthBdzE*;4_6+~U%5apW$lI62YIet^-6Kd-Fsb9vgqxaO*T6u_V}>slwX+Y z#~vN6!))_TA|zF`ZmhiK7G)Y zChM0yWu4p3uv_KdR@gij)Z^R+ODUuDXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J shQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz(9up0P=j#J^%m! literal 0 HcmV?d00001 diff --git a/tests/components/backup/fixtures/test_backups/backup_v2_uncompressed.tar b/tests/components/backup/fixtures/test_backups/backup_uncompressed.tar similarity index 98% rename from tests/components/backup/fixtures/test_backups/backup_v2_uncompressed.tar rename to tests/components/backup/fixtures/test_backups/backup_uncompressed.tar index b55a9e6ca4caad6feaff89c6d54dfaca287d4dd0..2d5338c112eb05dafb02e5bd6065fafa123d3e1c 100644 GIT binary patch delta 154 zcmZqpz}WDCaYCE8F@pgDFc=sb7?~I`C>Tr@WK7x2$QaEuIi7jp=D*DROag|MhUNyw zW_lKu2Idwfrd*p9wVp6e;^+}HH!?9dHZ=umHZ(CbfNSRDW)?8CFtIQ&Hr6vTGBY$b fHHPZp1L`p_F)%eT1X^xxZe+%wU<$F2|9=JmUxFl` delta 156 zcmZqpz}WDCaYCE88G``=Fc=sb7@3$dC>Tr@WK7x2$QaGURAw|ent9PC79J)614~0w z3rk}?BTF*_GYb>0&5Bx27$8Iu0<{|&ne|KLY?$;v`c5 diff --git a/tests/components/backup/fixtures/test_backups/backup_uncompressed_protected_v2.tar b/tests/components/backup/fixtures/test_backups/backup_uncompressed_protected_v2.tar new file mode 100644 index 0000000000000000000000000000000000000000..70412ad438135b0def76a9b889cbb458796b477d GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/tests/components/backup/fixtures/test_backups/backup_uncompressed_protected_v3.tar b/tests/components/backup/fixtures/test_backups/backup_uncompressed_protected_v3.tar new file mode 100644 index 0000000000000000000000000000000000000000..f65947c9b3e51a23fb9cd3e50d032519b179bbe5 GIT binary patch literal 20480 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 Nz$bxE0{=S%{u@pm)vo{m literal 0 HcmV?d00001 diff --git a/tests/components/backup/fixtures/test_backups/backup_v2_uncompressed_protected.tar b/tests/components/backup/fixtures/test_backups/backup_v2_uncompressed_protected.tar deleted file mode 100644 index 2f0db1a4105a770e63da0a3406a002505314dd4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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 W;GMubfp-G$1l|d}6Zjt`@V@{}Fv=YO diff --git a/tests/components/backup/snapshots/test_websocket.ambr b/tests/components/backup/snapshots/test_websocket.ambr index 2bac144a258..5b241ea347f 100644 --- a/tests/components/backup/snapshots/test_websocket.ambr +++ b/tests/components/backup/snapshots/test_websocket.ambr @@ -188,7 +188,7 @@ 'type': 'result', }) # --- -# name: test_can_decrypt_on_download[backup.local-c0cb53bd-hunter2] +# name: test_can_decrypt_on_download[backup.local-backup_compressed_protected_v2-hunter2] dict({ 'id': 1, 'result': None, @@ -196,7 +196,26 @@ 'type': 'result', }) # --- -# name: test_can_decrypt_on_download[backup.local-c0cb53bd-wrong_password] +# name: test_can_decrypt_on_download[backup.local-backup_compressed_protected_v2-wrong_password] + dict({ + 'error': dict({ + 'code': 'password_incorrect', + 'message': 'Incorrect password', + }), + 'id': 1, + 'success': False, + 'type': 'result', + }) +# --- +# name: test_can_decrypt_on_download[backup.local-backup_compressed_protected_v3-hunter2] + dict({ + 'id': 1, + 'result': None, + 'success': True, + 'type': 'result', + }) +# --- +# name: test_can_decrypt_on_download[backup.local-backup_compressed_protected_v3-wrong_password] dict({ 'error': dict({ 'code': 'password_incorrect', diff --git a/tests/components/backup/test_util.py b/tests/components/backup/test_util.py index 021a33dcb32..47bb1160812 100644 --- a/tests/components/backup/test_util.py +++ b/tests/components/backup/test_util.py @@ -131,32 +131,75 @@ def test_read_backup(backup_json_content: bytes, expected_backup: AgentBackup) - @pytest.mark.parametrize( - ("backup", "password", "validation_result"), + ("backup", "password", "validation_result", "expected_messages"), [ # Backup not protected, no password provided -> validation passes - (Path("backup_v2_compressed.tar"), None, True), - (Path("backup_v2_uncompressed.tar"), None, True), + (Path("backup_compressed.tar"), None, True, []), + (Path("backup_uncompressed.tar"), None, True, []), # Backup not protected, password provided -> validation fails - (Path("backup_v2_compressed.tar"), "hunter2", False), - (Path("backup_v2_uncompressed.tar"), "hunter2", False), + (Path("backup_compressed.tar"), "hunter2", False, ["Invalid password"]), + (Path("backup_uncompressed.tar"), "hunter2", False, ["Invalid password"]), # Backup protected, correct password provided -> validation passes - (Path("backup_v2_compressed_protected.tar"), "hunter2", True), - (Path("backup_v2_uncompressed_protected.tar"), "hunter2", True), + (Path("backup_compressed_protected_v2.tar"), "hunter2", True, []), + (Path("backup_uncompressed_protected_v2.tar"), "hunter2", True, []), + (Path("backup_compressed_protected_v3.tar"), "hunter2", True, []), + (Path("backup_uncompressed_protected_v3.tar"), "hunter2", True, []), # Backup protected, no password provided -> validation fails - (Path("backup_v2_compressed_protected.tar"), None, False), - (Path("backup_v2_uncompressed_protected.tar"), None, False), + (Path("backup_compressed_protected_v2.tar"), None, False, ["Invalid password"]), + ( + Path("backup_uncompressed_protected_v2.tar"), + None, + False, + ["Invalid password"], + ), + (Path("backup_compressed_protected_v3.tar"), None, False, ["Invalid password"]), + ( + Path("backup_uncompressed_protected_v3.tar"), + None, + False, + ["Invalid password"], + ), # Backup protected, wrong password provided -> validation fails - (Path("backup_v2_compressed_protected.tar"), "wrong_password", False), - (Path("backup_v2_uncompressed_protected.tar"), "wrong_password", False), + ( + Path("backup_compressed_protected_v2.tar"), + "wrong_password", + False, + ["Invalid password"], + ), + ( + Path("backup_uncompressed_protected_v2.tar"), + "wrong_password", + False, + ["Invalid password"], + ), + ( + Path("backup_compressed_protected_v3.tar"), + "wrong_password", + False, + ["Invalid password"], + ), + ( + Path("backup_uncompressed_protected_v3.tar"), + "wrong_password", + False, + ["Invalid password"], + ), ], ) def test_validate_password( - password: str | None, backup: Path, validation_result: bool + password: str | None, + backup: Path, + validation_result: bool, + expected_messages: list[str], + caplog: pytest.LogCaptureFixture, ) -> None: """Test validating a password.""" test_backups = get_fixture_path("test_backups", DOMAIN) assert validate_password(test_backups / backup, password) == validation_result + for message in expected_messages: + assert message in caplog.text + assert "Unexpected error validating password" not in caplog.text @pytest.mark.parametrize("password", [None, "hunter2"]) diff --git a/tests/components/backup/test_websocket.py b/tests/components/backup/test_websocket.py index 590cd48875e..bfb2c185d41 100644 --- a/tests/components/backup/test_websocket.py +++ b/tests/components/backup/test_websocket.py @@ -4048,8 +4048,10 @@ async def test_subscribe_event( # Legacy backup, which can't be streamed ("backup.local", "2bcb3113", "hunter2"), # New backup, which can be streamed, try with correct and wrong password - ("backup.local", "c0cb53bd", "hunter2"), - ("backup.local", "c0cb53bd", "wrong_password"), + ("backup.local", "backup_compressed_protected_v2", "hunter2"), + ("backup.local", "backup_compressed_protected_v2", "wrong_password"), + ("backup.local", "backup_compressed_protected_v3", "hunter2"), + ("backup.local", "backup_compressed_protected_v3", "wrong_password"), ], ) @pytest.mark.usefixtures("mock_backups")