From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 5D2211FF298 for ; Fri, 10 Apr 2026 12:03:36 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2C7861A04B; Fri, 10 Apr 2026 12:04:06 +0200 (CEST) From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= To: pve-devel@lists.proxmox.com Subject: [RFC proxmox-backup 3/6] subscription: adapt to multiple server ID variants Date: Fri, 10 Apr 2026 12:02:20 +0200 Message-ID: <20260410100326.3199377-4-f.gruenbichler@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260410100326.3199377-1-f.gruenbichler@proxmox.com> References: <20260410100326.3199377-1-f.gruenbichler@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: 1775815340714 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: D2ASFYVTUOQKSKG2LZ5FHH5NCSTGFTFW X-Message-ID-Hash: D2ASFYVTUOQKSKG2LZ5FHH5NCSTGFTFW 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 VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: if there already is a subscription info, re-use the server ID contained within. if not, use the first candidate. Signed-off-by: Fabian Grünbichler --- Notes: requires bumped librust-proxmox-subscription-dev src/api2/node/subscription.rs | 38 ++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/api2/node/subscription.rs b/src/api2/node/subscription.rs index 03d613ee2..6935e4e3f 100644 --- a/src/api2/node/subscription.rs +++ b/src/api2/node/subscription.rs @@ -102,7 +102,15 @@ pub fn check_subscription(force: bool) -> Result<(), Error> { Ok(None) => return Ok(()), }; - let server_id = proxmox_subscription::get_hardware_address()?; + let server_id = if let Some(existing) = info.serverid.as_ref() { + existing.to_owned() + } else { + proxmox_subscription::get_hardware_address_candidates()? + .first() + .ok_or_else(|| format_err!("Failed to generate serverid"))? + .to_string() + }; + let key = if let Some(key) = info.key.as_ref() { // always update apt auth if we have a key to ensure user can access enterprise repo proxmox_subscription::files::update_apt_auth( @@ -110,7 +118,7 @@ pub fn check_subscription(force: bool) -> Result<(), Error> { apt_auth_file_opts(), APT_AUTH_URL, Some(key.to_owned()), - Some(server_id.to_owned()), + Some(server_id.clone()), )?; key.to_owned() } else { @@ -124,6 +132,7 @@ pub fn check_subscription(force: bool) -> Result<(), Error> { if !force && info.status == SubscriptionStatus::Active { // will set to INVALID if last check too long ago info.check_age(true); + if info.status == SubscriptionStatus::Active { return Ok(()); } @@ -156,13 +165,19 @@ pub fn get_subscription( ) { Err(err) => bail!("could not read subscription status: {}", err), Ok(Some(info)) => info, - Ok(None) => SubscriptionInfo { - status: SubscriptionStatus::NotFound, - message: Some("There is no subscription key".into()), - serverid: Some(proxmox_subscription::get_hardware_address()?), - url: Some(PRODUCT_URL.into()), - ..Default::default() - }, + Ok(None) => { + let candidates = proxmox_subscription::get_hardware_address_candidates()?; + let serverid = candidates + .first() + .ok_or_else(|| format_err!("Failed to generate serverid"))?; + SubscriptionInfo { + status: SubscriptionStatus::NotFound, + message: Some("There is no subscription key".into()), + serverid: Some(serverid.to_string()), + url: Some(PRODUCT_URL.into()), + ..Default::default() + } + } }; let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?; @@ -200,7 +215,10 @@ pub fn get_subscription( )] /// Set a subscription key and check it. pub fn set_subscription(key: String) -> Result<(), Error> { - let server_id = proxmox_subscription::get_hardware_address()?; + let server_id = proxmox_subscription::get_hardware_address_candidates()? + .first() + .ok_or_else(|| format_err!("Failed to generate serverid"))? + .to_string(); check_and_write_subscription(key, server_id) } -- 2.47.3