From: Elias Huhsovitz <e.huhsovitz@proxmox.com>
To: pve-devel@lists.proxmox.com
Cc: Elias Huhsovitz <e.huhsovitz@proxmox.com>
Subject: [PATCH access-control v2] fix #7144: auth: ldap: force utf-8 encoding for bind credentials
Date: Fri, 10 Jul 2026 13:52:58 +0200 [thread overview]
Message-ID: <20260710115258.108502-1-e.huhsovitz@proxmox.com> (raw)
When saving the LDAP/AD bind password to /etc/pve/priv/realm/<realm>.pw,
the file was written using the default byte encoding. This caused
passwords containing non-ASCII characters (e.g., '£' or '§') to be
truncated to their lowest byte, resulting in authentication failures
during subsequent sync operations.
Pass the 'force_utf8' flag to file_set_contents to ensure the password
is encoded as UTF-8 before being written to disk.
Explicitly pass 0600 as the permission mask.
(Previously undef, using the default 0644 for
PVE::File::file_set_contents).
Decode the password into a UTF-8 string after reading from disk.
Signed-off-by: Elias Huhsovitz <e.huhsovitz@proxmox.com>
---
changes since v1:
* explain the choice of 0600 in the commit message.
* decode ldap bind credential as UTF-8 before sending it.
src/PVE/Auth/LDAP.pm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/PVE/Auth/LDAP.pm b/src/PVE/Auth/LDAP.pm
index 6a73ee8..bf6ba17 100755
--- a/src/PVE/Auth/LDAP.pm
+++ b/src/PVE/Auth/LDAP.pm
@@ -438,7 +438,7 @@ sub ldap_set_credentials {
my $cred_file = ldap_cred_file_name($realmid);
mkdir $ldap_pw_dir;
- PVE::Tools::file_set_contents($cred_file, $password);
+ PVE::Tools::file_set_contents($cred_file, $password, 0600, 1);
return $cred_file;
}
@@ -447,7 +447,8 @@ sub ldap_get_credentials {
my ($realmid) = @_;
if (my $cred_file = get_cred_file($realmid)) {
- return PVE::Tools::file_read_firstline($cred_file);
+ my $raw = PVE::Tools::file_read_firstline($cred_file);
+ return defined($raw) ? decode('UTF-8', $raw) : undef;
}
return undef;
}
--
2.47.3
reply other threads:[~2026-07-10 11:53 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260710115258.108502-1-e.huhsovitz@proxmox.com \
--to=e.huhsovitz@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox