[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