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 <[email protected]> --- 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 _______________________________________________ pve-devel mailing list [email protected] https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
