From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id D5A9993CAB for ; Tue, 9 Apr 2024 16:21:13 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AF2EF644 for ; Tue, 9 Apr 2024 16:20:43 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 9 Apr 2024 16:20:42 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 6D4F34247E for ; Tue, 9 Apr 2024 16:20:42 +0200 (CEST) Message-ID: <8629d8b1-cdc7-49bf-98c2-5e3c03729d44@proxmox.com> Date: Tue, 9 Apr 2024 16:20:41 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox VE development discussion , Stefan Hanreich Cc: Wolfgang Bumiller References: <20240402171629.536804-1-s.hanreich@proxmox.com> <20240402171629.536804-7-s.hanreich@proxmox.com> Content-Language: de-AT, en-US From: Lukas Wagner In-Reply-To: <20240402171629.536804-7-s.hanreich@proxmox.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.006 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [lib.rs, mod.rs, utils.rs] Subject: Re: [pve-devel] [PATCH proxmox-firewall 06/37] config: host: add helpers for host network configuration X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Apr 2024 14:21:13 -0000 On 2024-04-02 19:15, Stefan Hanreich wrote: > Currently the helpers for obtaining the host network configuration > panic on error, which could be avoided by the use of > OnceLock::get_or_init, but this method is currently only available in > nightly versions. > > Generally, if there is a problem with obtaining a hostname for the > current node then something else is probably already quite broken, so > I would deem it acceptable for now, same goes for obtaining the > current network configuration. > > Co-authored-by: Wolfgang Bumiller > Signed-off-by: Stefan Hanreich > --- > proxmox-ve-config/Cargo.toml | 1 + > proxmox-ve-config/src/host/mod.rs | 1 + > proxmox-ve-config/src/host/utils.rs | 97 +++++++++++++++++++++++++++++ > proxmox-ve-config/src/lib.rs | 1 + > 4 files changed, 100 insertions(+) > create mode 100644 proxmox-ve-config/src/host/mod.rs > create mode 100644 proxmox-ve-config/src/host/utils.rs > > diff --git a/proxmox-ve-config/Cargo.toml b/proxmox-ve-config/Cargo.toml > index 7bb391e..480eb58 100644 > --- a/proxmox-ve-config/Cargo.toml > +++ b/proxmox-ve-config/Cargo.toml > @@ -13,6 +13,7 @@ license = "AGPL-3" > [dependencies] > log = "0.4" > anyhow = "1" > +nix = "0.26" > > serde = { version = "1", features = [ "derive" ] } > serde_json = "1" > diff --git a/proxmox-ve-config/src/host/mod.rs b/proxmox-ve-config/src/host/mod.rs > new file mode 100644 > index 0000000..b5614dd > --- /dev/null > +++ b/proxmox-ve-config/src/host/mod.rs > @@ -0,0 +1 @@ > +pub mod utils; > diff --git a/proxmox-ve-config/src/host/utils.rs b/proxmox-ve-config/src/host/utils.rs > new file mode 100644 > index 0000000..1636f95 > --- /dev/null > +++ b/proxmox-ve-config/src/host/utils.rs > @@ -0,0 +1,97 @@ > +use std::net::{IpAddr, ToSocketAddrs}; > +use std::sync::OnceLock; > + > +use crate::firewall::types::Cidr; > + > +use nix::sys::socket::{AddressFamily, SockaddrLike}; > + > +pub fn hostname() -> &'static str { > + static HOSTNAME: OnceLock = OnceLock::new(); > + > + // We should rather use get_or_try_init to avoid needing to panic > + // but it is currently experimental > + HOSTNAME.get_or_init(|| { > + use nix::libc::{c_char, gethostname, sysconf, _SC_HOST_NAME_MAX}; > + use std::ffi::CStr; > + > + let max_len = unsafe { sysconf(_SC_HOST_NAME_MAX) } as usize + 1; > + let mut buffer = vec![0; max_len]; > + > + let ret = unsafe { gethostname(buffer.as_mut_ptr() as *mut c_char, buffer.len()) }; > + > + if ret != 0 { > + // failing to get the hostname means something is *really* off > + panic!("gethostname failed with returncode {ret}"); > + } > + > + let c_str = CStr::from_bytes_until_nul(&buffer).expect("buffer contains a NUL byte"); > + > + String::from_utf8_lossy(c_str.to_bytes()).to_string() > + }) > +} ^ FYI: There is proxmox_sys::nodename() already, which also does caching. Unless I'm missing something you could just use that instead of re-implementing it? It uses `uname` from the nix-crate, not sure if there any differences to using `gethostname` (but I don't think so). -- - Lukas