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 is not valid UTF-8 in Perl's internal representation, which for example happens with a password like 'ääääöööö', 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]> --- Changes in v2: * Improve commit message - the ENV issues only happen when Perl's internal representation is not valid UTF-8 itself. 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 17e285a..d81628d 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
