|
ldap_get_values_len
Get all binary values from a result entry
(PHP 4, PHP 5)
Code Examples / Notes » ldap_get_values_lenderek dot ethier
To elaborate on rcrow's post, if you want to convert the objectSID value to a usable string (from Active Directory) the following function will do the trick (this was borrowed from another section of the manual, just thought I'd add it here): // Returns the textual SID function bin_to_str_sid($binsid) { $hex_sid = bin2hex($binsid); $rev = hexdec(substr($hex_sid, 0, 2)); $subcount = hexdec(substr($hex_sid, 2, 2)); $auth = hexdec(substr($hex_sid, 4, 12)); $result = "$rev-$auth"; for ($x=0;$x < $subcount; $x++) { $subauth[$x] = hexdec($this->little_endian(substr($hex_sid, 16 + ($x * 8), 8))); $result .= "-" . $subauth[$x]; } // Cheat by tacking on the S- return 'S-' . $result; } // Converts a little-endian hex-number to one, that 'hexdec' can convert function little_endian($hex) { for ($x = strlen($hex) - 2; $x >= 0; $x = $x - 2) { $result .= substr($hex, $x, 2); } return $result; } This function is not related to the ldap_get_values_len function but is still helpful if you want to convert the objectGUID binary value to a string format (converted from some vbscript provided by Richard Mueller): // This function will convert a binary value guid into a valid string. function bin_to_str_guid($object_guid) { $hex_guid = bin2hex($object_guid); $hex_guid_to_guid_str = ''; for($k = 1; $k <= 4; ++$k) { $hex_guid_to_guid_str .= substr($hex_guid, 8 - 2 * $k, 2); } $hex_guid_to_guid_str .= '-'; for($k = 1; $k <= 2; ++$k) { $hex_guid_to_guid_str .= substr($hex_guid, 12 - 2 * $k, 2); } $hex_guid_to_guid_str .= '-'; for($k = 1; $k <= 2; ++$k) { $hex_guid_to_guid_str .= substr($hex_guid, 16 - 2 * $k, 2); } $hex_guid_to_guid_str .= '-' . substr($hex_guid, 16, 4); $hex_guid_to_guid_str .= '-' . substr($hex_guid, 20); return strtoupper($hex_guid_to_guid_str); } Here's an example on how to use both: $filter="samaccountname=".$username; $fields=array("objectguid","objectsid"); //establish the connection and specify the base_dn first. there are a lot of examples in the manual for this $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields); $entries = ldap_get_entries($this->_conn, $sr); if (in_array("objectguid", $fields)) { $entries[0]["objectguid"][0]= $this->bin_to_str_guid($entries[0]["objectguid"][0]); } if (in_array("objectsid", $fields)) { $entry = ldap_first_entry($this->_conn, $sr); $objectsid_binary = ldap_get_values_len($this->_conn, $entry, "objectsid"); $entries[0]["objectsid"][0] = $this->bin_to_str_sid($objectsid_binary[0]); } Hope this helps someone! etienne
In order to set directory/file permissions with smbcacls, you'll need to get the objectSid and objectGuid, convert them with the functions described in the other post of this manual and concat them like this : $user='S-' . $strObjectSid . '-' . $strObjectGuid rcrow
If you are trying to access BINARY DATA, such as ObjectSID within LDAP, you must first get an individual entry, as stated under ldap_get_values() function -- "This call needs a result_entry_identifier, so needs to be preceded by one of the ldap search calls and one of the calls to get an individual entry." The following code snippet will get the LDAP objectSID for a specific user. <?php /* Get the binary objectsid entry */ /* Be sure that you have included the binary field in your ldap_search. */ $criteria = "samaccountname=$ldapUser"; $justthese = array("memberOf", "objectsid"); $ldapSearchResult = ldap_search($ldapConnectionResult, $ldapBase, $criteria, $justthese); if (ldap_count_entries($ldapConnectionResult, $ldapSearchResult)){ $ldapResults = ldap_get_entries($ldapConnectionResult, $ldapSearchResult); $entry = ldap_first_entry($ldapConnectionResult, $ldapSearchResult); $ldapBinary = ldap_get_values_len ($ldapConnectionResult, $entry, "objectsid"); /* your code here */ } ?> You then can use something like bin2hex to put the data in a more usable form. |
Change Languageldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_sasl_bind ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind |