ldap-authentication
ldap-authentication copied to clipboard
Bug when user cn has utf8 characters
Add function :
function unescapeLdapResult(ldapResult) {
// Regular expression to match the escaped sequences
const regex = /\\([0-9a-fA-F]{2})\\([0-9a-fA-F]{2})/g;
// Replace each escaped sequence with its Unicode character
return ldapResult.replace(regex, (match, p1, p2) => {
// Convert the hex codes to a Buffer
const bytes = Buffer.from([parseInt(p1, 16), parseInt(p2, 16)]);
// Convert the Buffer to a UTF-8 String
return bytes.toString('utf8');
});
}
and use it to unescape the result :
ldapAdminClient.unbind()
if (!user || !user.dn) {
ldapOpts.log &&
ldapOpts.log.trace(
`admin did not find user! (${usernameAttribute}=${username})`
)
throw new LdapAuthenticationError(
'user not found or usernameAttribute is wrong'
)
}
var userDn = user.dn
userDn = unescapeLdapResult(userDn)
let ldapUserClient
try {
ldapUserClient = await _ldapBind(userDn, userPassword, starttls, ldapOpts)
} catch (error) {
throw error
}
ldapUserClient.unbind()
if (groupsSearchBase && groupClass && groupMemberAttribute) {
try {
ldapAdminClient = await _ldapBind(