* * The syntax includes the PHP file per include an puts the result into * the wiki page. * * @license GNU_GPL_v2 * @author Darren Hemphill */ function ldapsearch_search($ldapDetails) { //print_r($ldapDetails); if ( $ldapDetails['attributes'][0] == 'vcard' ) { $ldapDetails['attributes'] = array( 'displayName', 'givenName', 'sn', 'o', 'roomNumber', 'street', 'postalCode', 'l', 'st', 'telephoneNumber', 'facsimileTelephoneNumber', 'mail', 'labeledURI'); } if(!$ldapDetails['port']) { $ldapDetails['port'] = 389; } if($ldap_handle = ldap_connect($ldapDetails['hostname'],$ldapDetails['port'])) { ldap_set_option($ldap_handle, LDAP_OPT_PROTOCOL_VERSION, 3) ; if(ldap_bind($ldap_handle,$ldapDetails['binddn'],$ldapDetails['bindpassword'])) { $value = ""; if($ldapDetails['scope'] == 'sub') { $results = ldap_search($ldap_handle,$ldapDetails['basedn'],$ldapDetails['filter'],$ldapDetails['attributes']); $info = ldap_get_entries($ldap_handle, $results); //$value = $info[0][strtolower($ldapDetails['attributes'][0])][0]; $value = $info[0]; } elseif($ldapDetails['scope'] == 'one') { $results = ldap_list($ldap_handle, $ldapDetails['basedn'], $ldapDetails['filter'],$ldapDetails['attributes']); $info = ldap_get_entries($ldap_handle, $results); //$value = $info[0][strtolower($ldapDetails['attributes'][0])][0]; $value = $info[0]; } elseif($ldapDetails['scope'] == 'base') { $results = ldap_read($ldap_handle, $ldapDetails['basedn'], $ldapDetails['filter'],$ldapDetails['attributes']); $info = ldap_get_entries($ldap_handle, $results); //$value = $info[strtolower($ldapDetails['attributes'][0])][0]; $value = $info; } else { $value = "Unknown scope ".$ldapDetails['scope']."\n"; } ldap_unbind($ldap_handle); return $value; } else { return "Failed to bind to LDAP on ".$ldapDetails['hostname'].":".$ldapDetails['port']."\n"; } } else { return "Failed to connect to LDAP on ".$ldapDetails['hostname'].":".$ldapDetails['port']."\n"; } } function ldapsearch_to_vcard($ldapResults) { $vcard = array( array('n', array($ldapResults['sn'][0],$ldapResults['givenname'][0])), array('org', $ldapResults['o'][0]), array(array('email','internet','work'), $ldapResults['mail'][0]), array(array('tel','work'), $ldapResults['telephonenumber'][0]), array(array('tel','work','fax'), $ldapResults['facsimiletelephonenumber'][0]), array(array('adr','work'), array(null,$ldapResults['roomnumber'][0],$ldapResults['street'][0],$ldapResults['l'][0],$ldapResults['st'][0],$ldapResults['postalcode'][0],$ldapResults['c'][0])), array('url', $ldapResults['labeleduri'][0]) ); return $vcard; } function ldapsearch_output_vcard($vcard) { echo "BEGIN:VCARD\r\n"; echo "VERSION:2.1\r\n"; foreach($vcard as $item) { $key=ldapsearch_format_parts($item[0]); $value=ldapsearch_format_parts($item[1]); if(ldapsearch_extended($value)) $key.=';CHARSET=UTF-8'; echo strtoupper($key).':'.$value."\r\n"; } echo "END:VCARD\r\n"; } function ldapsearch_vcard_escape($string) { return str_replace(';', '\;', $string); } function ldapsearch_extended($string) { return !mb_check_encoding($string,'ASCII'); } function ldapsearch_format_parts($parts) { if(is_array($parts)) return implode(';',array_map('ldapsearch_vcard_escape',$parts)); else return ldapsearch_vcard_escape($parts); } ?>