* [pve-devel] [PATCH installer v2] fetch-answer: encode unsafe characters in partition label
@ 2024-11-19 15:56 Filip Schauer
2024-11-19 17:47 ` [pve-devel] applied: " Thomas Lamprecht
0 siblings, 1 reply; 2+ messages in thread
From: Filip Schauer @ 2024-11-19 15:56 UTC (permalink / raw)
To: pve-devel
Ensure potentially unsafe characters in the partition label are encoded,
preventing the installer from failing to find the answer partition when
the label contains whitespaces or !"$%&'()*,/;<>?[\]^`{|}~
The encoding is done according to `blkid_encode_string` [0] in the blkid
util, which is used by `/lib/udev/rules.d/60-persistent-storage.rules`
to create a symlink under `/dev/disk/by-label/`.
For example: "ANSWER PART" is encoded to "ANSWER\x20PART"
[0] https://github.com/util-linux/util-linux/blob/master/libblkid/src/encode.c
Signed-off-by: Filip Schauer <f.schauer@proxmox.com>
Tested-by: Christoph Heiss <c.heiss@proxmox.com>
---
Changed since v1:
* Log the non-encoded label instead of the encoded one when a partition
is found.
.../src/fetch_plugins/partition.rs | 22 ++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/proxmox-fetch-answer/src/fetch_plugins/partition.rs b/proxmox-fetch-answer/src/fetch_plugins/partition.rs
index 131f422..0f1fa7b 100644
--- a/proxmox-fetch-answer/src/fetch_plugins/partition.rs
+++ b/proxmox-fetch-answer/src/fetch_plugins/partition.rs
@@ -41,6 +41,19 @@ fn path_exists_logged(file_name: &str, search_path: &str) -> Option<PathBuf> {
}
}
+fn encode_partlabel(input: &str) -> String {
+ input
+ .chars()
+ .map(|c| {
+ if (' '..='~').contains(&c) && !(c.is_ascii_alphanumeric() || "#+-.:=@_".contains(c)) {
+ format!("\\x{:02x}", c as u32)
+ } else {
+ c.to_string()
+ }
+ })
+ .collect()
+}
+
/// Searches for the exact case, upper and finally lower case existence of the partlabel in the
/// search_path, in that order.
///
@@ -52,19 +65,22 @@ fn path_exists_logged(file_name: &str, search_path: &str) -> Option<PathBuf> {
/// * `partlabel_source` - Partition Label, used for matching, in the exact, upper and lower case
/// * `search_path` - Path where to search for the partition label
fn scan_partlabels(partlabel: &str, search_path: &str) -> Result<PathBuf> {
- if let Some(path) = path_exists_logged(partlabel, search_path) {
+ let partlabel_enc = encode_partlabel(partlabel);
+ if let Some(path) = path_exists_logged(&partlabel_enc, search_path) {
info!("Found partition with label '{partlabel}'");
return Ok(path);
}
let partlabel_upper_case = partlabel.to_uppercase();
- if let Some(path) = path_exists_logged(&partlabel_upper_case, search_path) {
+ let partlabel_upper_case_enc = encode_partlabel(&partlabel_upper_case);
+ if let Some(path) = path_exists_logged(&partlabel_upper_case_enc, search_path) {
info!("Found partition with label '{partlabel_upper_case}'");
return Ok(path);
}
let partlabel_lower_case = partlabel.to_lowercase();
- if let Some(path) = path_exists_logged(&partlabel_lower_case, search_path) {
+ let partlabel_lower_case_enc = encode_partlabel(&partlabel_lower_case);
+ if let Some(path) = path_exists_logged(&partlabel_lower_case_enc, search_path) {
info!("Found partition with label '{partlabel_lower_case}'");
return Ok(path);
}
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
* [pve-devel] applied: [PATCH installer v2] fetch-answer: encode unsafe characters in partition label
2024-11-19 15:56 [pve-devel] [PATCH installer v2] fetch-answer: encode unsafe characters in partition label Filip Schauer
@ 2024-11-19 17:47 ` Thomas Lamprecht
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Lamprecht @ 2024-11-19 17:47 UTC (permalink / raw)
To: Proxmox VE development discussion, Filip Schauer
Am 19.11.24 um 16:56 schrieb Filip Schauer:
> Ensure potentially unsafe characters in the partition label are encoded,
> preventing the installer from failing to find the answer partition when
> the label contains whitespaces or !"$%&'()*,/;<>?[\]^`{|}~
>
> The encoding is done according to `blkid_encode_string` [0] in the blkid
> util, which is used by `/lib/udev/rules.d/60-persistent-storage.rules`
> to create a symlink under `/dev/disk/by-label/`.
>
> For example: "ANSWER PART" is encoded to "ANSWER\x20PART"
>
> [0] https://github.com/util-linux/util-linux/blob/master/libblkid/src/encode.c
>
> Signed-off-by: Filip Schauer <f.schauer@proxmox.com>
> Tested-by: Christoph Heiss <c.heiss@proxmox.com>
> ---
> Changed since v1:
> * Log the non-encoded label instead of the encoded one when a partition
> is found.
>
> .../src/fetch_plugins/partition.rs | 22 ++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
>
applied, thanks!
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-11-19 17:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-19 15:56 [pve-devel] [PATCH installer v2] fetch-answer: encode unsafe characters in partition label Filip Schauer
2024-11-19 17:47 ` [pve-devel] applied: " Thomas Lamprecht
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal