-
Notifications
You must be signed in to change notification settings - Fork 8k
Closed as not planned
Closed as not planned
Copy link
Labels
Description
Description
I wanted to ask why does following function "ldap_search()" works on the php version 8.1, when the "ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 1);", but when the same property on php 8.3, it does not work.
We had to make a bypass in the a newer version bellow (php 8.3) and we were trying to find why it works on the older and not on the newer one.
The objective of this function is to get the required info from our AD (Active Directory).
// Old version works in php 8.1
private function fetchUserFromLDAP(string $identifier)
{
$ldapServer = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_SERVER'])->getValue();
$ldapUsername = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_BIND_USER_DN'])->getValue();
$ldapPassword = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_BIND_USER_PASSWORD'])->getValue();
$ldapConnection = ldap_connect($ldapServer) or die("Could not connect to LDAP server.");
ldap_set_option($ldapConnection, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS);
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 1);
ldap_bind($ldapConnection, $ldapUsername, $ldapPassword) or die("Could not bind to LDAP server.");
$searchFilter = str_replace(
"@ID",
$identifier,
$this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_SEARCH_FILTER'])->getValue()
);
$searchBaseDN = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_SEARCH_BASE_DN'])->getValue();
$searchResult = ldap_search($ldapConnection, $searchBaseDN, $searchFilter);
ldap_get_option($ldapConnection, LDAP_OPT_REFERRALS, $referrals);
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, $referrals);
$searchEntries = ldap_get_entries($ldapConnection, $searchResult);
ldap_unbind($ldapConnection);
if ($searchEntries['count'] === 1) {
return $searchEntries[0];
}
return null;
}
// Newer version works in php 8.3
private function fetchUserFromLDAP(string $identifier)
{
$ldapServer = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_SERVER'])->getValue();
$ldapUsername = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_BIND_USER_DN'])->getValue();
$ldapPassword = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_BIND_USER_PASSWORD'])->getValue();
$ldapConnection = ldap_connect($ldapServer) or die("Could not connect to LDAP server.");
ldap_set_option($ldapConnection, LDAP_OPT_DEREF, LDAP_DEREF_ALWAYS);
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 0); // When this is set to "0" the ldap_search() works as expected
ldap_bind($ldapConnection, $ldapUsername, $ldapPassword) or die("Could not bind to LDAP server.");
$searchFilter = str_replace(
"@ID",
$identifier,
$this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_SEARCH_FILTER'])->getValue()
);
$searchBaseDN = $this->settingRepository->findOneBy(['name' => 'SYNC_LDAP_SEARCH_BASE_DN'])->getValue();
$searchResult = ldap_search(
$ldapConnection,
$searchBaseDN,
$searchFilter,
);
$entry = ldap_first_entry($ldapConnection, $searchResult);
if (!$entry) {
ldap_unbind($ldapConnection);
return null;
}
$attrs = ldap_get_attributes($ldapConnection, $entry);
ldap_unbind($ldapConnection);
return $attrs;
}
PHP Version
PHP 8.3.12
Operating System
Ubuntu 24.04.1 LTS