[pve-devel] [PATCH storage 3/4] pbs plugin: raw client command: properly encode PBS password as UTF-8 when setting the environment variable

Fiona Ebner f.ebner at proxmox.com
Wed Oct 1 12:47:12 CEST 2025


The PBS password is saved as UTF-8 and decoded to Perl's internal
string representation upon reading from the password file. When the
password contains multi-byte UTF-8 characters, backing up a diskless
VM would fail with:
> Error: error building client for repository XXX -
> PBS_PASSWORD contains bad characters

This is fixed by properly encoding the value for the PBS_PASSWORD
environment variable value again as UTF-8.

For example, this fixes uploading the log file after backup, as well
as extracting the configuration file from backup.

Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
 src/PVE/Storage/PBSPlugin.pm | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/PVE/Storage/PBSPlugin.pm b/src/PVE/Storage/PBSPlugin.pm
index 5842004..f0f2ba3 100644
--- a/src/PVE/Storage/PBSPlugin.pm
+++ b/src/PVE/Storage/PBSPlugin.pm
@@ -5,7 +5,7 @@ package PVE::Storage::PBSPlugin;
 use strict;
 use warnings;
 
-use Encode qw(decode);
+use Encode qw(decode encode);
 use Fcntl qw(F_GETFD F_SETFD FD_CLOEXEC);
 use IO::File;
 use JSON;
@@ -327,7 +327,11 @@ my sub do_raw_client_cmd {
         push @$cmd, '--ns', $ns;
     }
 
-    local $ENV{PBS_PASSWORD} = pbs_get_password($scfg, $storeid);
+    my $password = pbs_get_password($scfg, $storeid);
+    # The password is saved as UTF-8 and is decoded upon reading. Need to re-encode when setting the
+    # environment variable.
+    $password = encode('UTF-8', $password, 1);
+    local $ENV{PBS_PASSWORD} = $password;
 
     local $ENV{PBS_FINGERPRINT} = $scfg->{fingerprint};
 
-- 
2.47.3





More information about the pve-devel mailing list