Is there a way with the PHP LDAP extension to retrieve AD attributes/properties that are not returned by default?
Specifically, I am trying to retrieve the lockedOut
property. This one is not retrieved by default when you use ldap_get_attributes
. In PowerShell, you have to specify the property in order to retrieve it:
Get-AdUser -Identity foo -Properties LockedOut | Select LockedOut
But trying to specify the attribute the same way with PHP LDAP does not seem to work.
$result = ldap_search($conn, $dn, "cn=foo", ["lockedOut"]);
if ($result === false) {
// Handling error...
}
$count = ldap_count_entries($conn, $result);
if ($count !== 1) {
// Handling error...
}
$entry = ldap_first_entry($conn, $result);
// This array does not contain the expected "lockedOut" attribute
$attr = ldap_get_attributes($conn, $entry);
// No array returned but false (error)
$value = ldap_get_values($conn, $entry, "lockedOut")
I feel like those non default properties are not retrievable with PHP LDAP (property != attribute).
2
Answers
There is a default attribute that does the job as a workaround:
lockoutTime
.It seems to work this way:
lockoutTime = <not set>
lockoutTime = 0
lockoutTime = 1+
(= MS file time; amount of 100 nanoseconds since 1601-01-01 UTC)
The workaround code:
A reference about it on a post for the Python LDAP.
I don’t know about the
lockedOut
property but one commenter on PHP manual page managed to fetch a few other non-standard or operational attributes such as create and modify timestamps using the below method. Maybe, you can try addinglockedOut
to that list of attributes and achieve some success with this method too?As another comment on the manual page suggests, you can also try looping through all entries until you find the
lockedOut
, this is another option:Edit
As discussed, also refer to this answer.
If you just want to know if the user is locked out, you can fetch
lockoutTime
instead and check its value. A zero or unset value for this means the user isn’t locked out.