all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [RFC common/cluster] cluster files: support registering UTF-8 configuration file
@ 2025-02-18 12:30 Fiona Ebner
  2025-02-18 12:30 ` [pve-devel] [RFC common 1/2] section config: prepare for supporting UTF-8 encoded configurations Fiona Ebner
  2025-02-18 12:30 ` [pve-devel] [RFC cluster 2/2] cluster files: support registering UTF-8 configuration file Fiona Ebner
  0 siblings, 2 replies; 3+ messages in thread
From: Fiona Ebner @ 2025-02-18 12:30 UTC (permalink / raw)
  To: pve-devel

A configuration file registered as UTF-8 will be automatically decoded
from UTF-8 to Perl's internal string format after reading and encoded
in the other direction before writing.

common:

Fiona Ebner (1):
  section config: prepare for supporting UTF-8 encoded configurations

 src/PVE/SectionConfig.pm | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

cluster:

Fiona Ebner (1):
  cluster files: support registering UTF-8 configuration file

 src/PVE/Cluster.pm | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

-- 
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] 3+ messages in thread

* [pve-devel] [RFC common 1/2] section config: prepare for supporting UTF-8 encoded configurations
  2025-02-18 12:30 [pve-devel] [RFC common/cluster] cluster files: support registering UTF-8 configuration file Fiona Ebner
@ 2025-02-18 12:30 ` Fiona Ebner
  2025-02-18 12:30 ` [pve-devel] [RFC cluster 2/2] cluster files: support registering UTF-8 configuration file Fiona Ebner
  1 sibling, 0 replies; 3+ messages in thread
From: Fiona Ebner @ 2025-02-18 12:30 UTC (permalink / raw)
  To: pve-devel

Configurations registered as UTF-8 will be decoded after reading to
Perl's internal string format and then contain wide characters. The
Digest::SHA::sha1_hex() function croaks on wide characters, so encode
again before calling the function if there are wide characters.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 src/PVE/SectionConfig.pm | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm
index 6a297d3..e7dbd4c 100644
--- a/src/PVE/SectionConfig.pm
+++ b/src/PVE/SectionConfig.pm
@@ -99,6 +99,7 @@ use warnings;
 
 use Carp;
 use Digest::SHA;
+use Encode;
 
 use PVE::Exception qw(raise_param_exc);
 use PVE::JSONSchema qw(get_standard_option);
@@ -1184,7 +1185,10 @@ sub parse_config {
 
     $raw = '' if !defined($raw);
 
-    my $digest = Digest::SHA::sha1_hex($raw);
+    my $bytes = $raw;
+    $bytes = encode('utf8', $raw) if $raw =~ /[^\x00-\xFF]/; # Digest::SHA croaks on wide characters
+
+    my $digest = Digest::SHA::sha1_hex($bytes);
 
     my $pri = 1;
 
-- 
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] 3+ messages in thread

* [pve-devel] [RFC cluster 2/2] cluster files: support registering UTF-8 configuration file
  2025-02-18 12:30 [pve-devel] [RFC common/cluster] cluster files: support registering UTF-8 configuration file Fiona Ebner
  2025-02-18 12:30 ` [pve-devel] [RFC common 1/2] section config: prepare for supporting UTF-8 encoded configurations Fiona Ebner
@ 2025-02-18 12:30 ` Fiona Ebner
  1 sibling, 0 replies; 3+ messages in thread
From: Fiona Ebner @ 2025-02-18 12:30 UTC (permalink / raw)
  To: pve-devel

A configuration file registered as UTF-8 will be automatically decoded
from UTF-8 to Perl's internal string format after reading and encoded
in the other direction before writing.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---

Tested a bit with the virtiofs directory mapping config opting into
this, which could be an initial user of this feature.

 src/PVE/Cluster.pm | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/PVE/Cluster.pm b/src/PVE/Cluster.pm
index b9311c7..fe1601e 100644
--- a/src/PVE/Cluster.pm
+++ b/src/PVE/Cluster.pm
@@ -519,7 +519,7 @@ sub verify_token {
 my $file_info = {};
 
 sub cfs_register_file {
-    my ($filename, $parser, $writer) = @_;
+    my ($filename, $parser, $writer, $utf8) = @_;
 
     $observed->{$filename} || die "unknown file '$filename'";
 
@@ -528,11 +528,12 @@ sub cfs_register_file {
     $file_info->{$filename} = {
 	parser => $parser,
 	writer => $writer,
+	utf8 => $utf8,
     };
 }
 
 my $ccache_read = sub {
-    my ($filename, $parser, $version) = @_;
+    my ($filename, $parser, $version, $utf8) = @_;
 
     $ccache->{$filename} = {} if !$ccache->{$filename};
 
@@ -542,6 +543,7 @@ my $ccache_read = sub {
 	# we always call the parser, even when the file does not exist
 	# (in that case $data is undef)
 	my $data = get_config($filename);
+	$data = decode('utf8', $data) if $utf8;
 	$ci->{data} = &$parser("/etc/pve/$filename", $data);
 	$ci->{version} = $version;
     }
@@ -579,7 +581,7 @@ sub cfs_read_file {
     my ($version, $info) = cfs_file_version($filename);
     my $parser = $info->{parser};
 
-    return &$ccache_read($filename, $parser, $version);
+    return &$ccache_read($filename, $parser, $version, $info->{utf8});
 }
 
 sub cfs_write_file {
@@ -597,6 +599,8 @@ sub cfs_write_file {
 	$ci->{version} = undef;
     }
 
+    $force_utf8 = 1 if $info->{utf8};
+
     PVE::Tools::file_set_contents($fsname, $raw, undef, $force_utf8);
 }
 
-- 
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] 3+ messages in thread

end of thread, other threads:[~2025-02-18 12:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-18 12:30 [pve-devel] [RFC common/cluster] cluster files: support registering UTF-8 configuration file Fiona Ebner
2025-02-18 12:30 ` [pve-devel] [RFC common 1/2] section config: prepare for supporting UTF-8 encoded configurations Fiona Ebner
2025-02-18 12:30 ` [pve-devel] [RFC cluster 2/2] cluster files: support registering UTF-8 configuration file Fiona Ebner

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