When using ldapsearch
's -y
option for password files, many developers encounter the "Invalid credentials" error (49) with data 52e. This typically occurs even when:
- The password is correct
- The DN is properly formatted
- The file contains only the password in plain text
The correct way to use password files with ldapsearch
:
# Correct password file format (single line, no trailing newline)
echo -n "your_password" > .ldappass
# Usage example
ldapsearch -x -D "cn=admin,dc=example,dc=com" -y .ldappass \
-h ldap.example.com -b "dc=example,dc=com" "(objectClass=*)"
1. File Permissions
Ensure strict permissions on the password file:
chmod 600 .ldappass
2. Newline Characters
Many text editors automatically add newlines. Use these methods to create clean files:
# Using printf (recommended)
printf '%s' "p@ssw0rd" > .ldappass
# Using echo -n
echo -n "p@ssw0rd" > .ldappass
Using Environment Variables
# Set password
LDAP_PASS="your_password"
export LDAP_PASS
# In your script
ldapsearch -x -D "$LDAP_DN" -w "$LDAP_PASS" \
-h ldap.server.com -b "dc=example,dc=com" "(cn=*)"
SASL Authentication
For more secure setups:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "dc=example,dc=com"
Add -v
for verbose output:
ldapsearch -v -x -D "$LDAP_DN" -y .ldappass -h server -b "dc=x,dc=y"
Check for common LDAP error codes:
- 52e: Invalid credentials
- 525: User not found
- 530: Not permitted at this time
When automating LDAP searches with ldapsearch
, many developers encounter authentication issues when trying to use the -y
option for password files. The common error:
ldap_bind: Invalid credentials (49)
additional info: 80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 52e, v1772
This typically occurs even when the credentials are correct.
The password file must follow these exact specifications:
- Contain ONLY the password string
- No trailing newline or whitespace
- File permissions should be 400 (read-only by owner)
Create it properly using:
echo -n "actual_password" > .ldappass
chmod 400 .ldappass
For scripting purposes, consider these alternatives:
1. Using -w option directly
ldapsearch -x -D "cn=admin,dc=example,dc=com" -w "password" -H ldap://server.example.com -b "dc=example,dc=com" "(objectClass=*)"
2. Environment variable approach
export LDAP_PASS="your_password"
ldapsearch -x -D "$LDAP_BIND_DN" -y <(echo -n "$LDAP_PASS") -H "$LDAP_SERVER" -b "$LDAP_BASE" "$LDAP_FILTER"
If authentication still fails:
- Verify the DN is correctly quoted
- Check for special characters in password that might need escaping
- Test with
-W
interactive mode first - Use
strace
to verify file read operations
For production environments:
# Use SASL authentication when possible
ldapsearch -Y EXTERNAL -H ldapi:/// -b "dc=example,dc=com" "(objectClass=*)"
# Or use TLS certificate authentication
ldapsearch -ZZ -D "cn=admin,dc=example,dc=com" -y .ldappass -H ldap://server.example.com -b "dc=example,dc=com"