From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 767091FF140 for ; Fri, 24 Apr 2026 14:46:19 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4E2F81937B; Fri, 24 Apr 2026 14:46:19 +0200 (CEST) From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= To: pbs-devel@lists.proxmox.com Subject: [PATCH proxmox-backup 1/2] pull: decrypt: use let else to reduce indentation Date: Fri, 24 Apr 2026 14:46:08 +0200 Message-ID: <20260424124615.654666-1-f.gruenbichler@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260424103607.531400-1-c.ebner@proxmox.com> References: <20260424103607.531400-1-c.ebner@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1777034685750 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.054 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: JNYP3EXCPNQDX322XJW32KAEW646UYTP X-Message-ID-Hash: JNYP3EXCPNQDX322XJW32KAEW646UYTP X-MailFrom: f.gruenbichler@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Signed-off-by: Fabian Grünbichler --- best viewed with -w src/server/pull.rs | 56 +++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/server/pull.rs b/src/server/pull.rs index d0f886cb5..3dc5770f9 100644 --- a/src/server/pull.rs +++ b/src/server/pull.rs @@ -926,48 +926,44 @@ async fn optionally_use_decryption_key( prefix: String, log_sender: Arc, ) -> Result<(Option>, bool), Error> { - let key_fp = match manifest.fingerprint().with_context(|| prefix.clone())? { - Some(key_fp) => key_fp, - None => return Ok((None, false)), // no fingerprint on source, regular pull + let Some(key_fp) = manifest.fingerprint().with_context(|| prefix.clone())? else { + return Ok((None, false)); // no fingerprint on source, regular pull }; // source got key fingerprint, expect contents to be signed or encrypted - let (key_id, config) = match params + let Some((key_id, config)) = params .crypt_configs .iter() .find(|(_id, crypt_conf)| crypt_conf.fingerprint() == *key_fp.bytes()) - { - Some(key_id_and_config) => key_id_and_config, - None => { - // no matching key found in list of configured ones - if let Some(existing_target_manifest) = existing_target_manifest { - if let Some(existing_fingerprint) = existing_target_manifest - .fingerprint() - .with_context(|| prefix.clone())? - { - if existing_fingerprint != key_fp { - // pre-existing local manifest for encrypted snapshot with key mismatch - bail!( + else { + // no matching key found in list of configured ones + if let Some(existing_target_manifest) = existing_target_manifest { + if let Some(existing_fingerprint) = existing_target_manifest + .fingerprint() + .with_context(|| prefix.clone())? + { + if existing_fingerprint != key_fp { + // pre-existing local manifest for encrypted snapshot with key mismatch + bail!( "Local encrypted or signed snapshot with different key detected, refuse to sync" ); - } - } else { - // pre-existing local manifest without key-fingerprint was previously decrypted, - // never overwrite with encrypted - bail!( + } + } else { + // pre-existing local manifest without key-fingerprint was previously decrypted, + // never overwrite with encrypted + bail!( "local snapshot was previously decrypted but no matching decryption key is configured, refuse to sync" ); - } - } else if !params.crypt_configs.is_empty() { - log_sender - .log( - Level::INFO, - format!("{prefix}: No matching key found, sync without decryption"), - ) - .await?; } - return Ok((None, false)); + } else if !params.crypt_configs.is_empty() { + log_sender + .log( + Level::INFO, + format!("{prefix}: No matching key found, sync without decryption"), + ) + .await?; } + return Ok((None, false)); }; // check if source is encrypted or contents signed -- 2.47.3