attr_org = explode(",", $_SESSION['phpgw_info']['jabberit_messenger']['attributes_org_ldap_jabberit']); // Hosts Jabber $this->hostsJabber = unserialize($_SESSION['phpgw_info']['jabberit_messenger']['map_org_realm_jabberit']); // Result Ldap $this->max_result = 30; } public final function __destruct() { if( $this->ldap ) ldap_close($this->ldap); } private final function ldapConn() { $this->common = new common(); $GLOBALS['phpgw_info']['server']['ldap_version3'] = true; $this->ldap = $this->common->ldapConnect( $this->ldap_host, $this->ldap_user . "," . $this->ldap_context , $this->ldap_pass, false ); } private final function ldapRoot() { $this->ldap_host = (isset($_SESSION['phpgw_info']['jabberit_messenger']['server_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['server_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_host']; $this->ldap_context = (isset($_SESSION['phpgw_info']['jabberit_messenger']['context_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['context_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_context']; $this->ldap_user = (isset($_SESSION['phpgw_info']['jabberit_messenger']['user_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['user_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_root_dn']; $this->ldap_pass = (isset($_SESSION['phpgw_info']['jabberit_messenger']['password_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['password_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_root_pw']; $this->ldapConn(); } private final function ldapCatalog() { $version3 = true; $refer = true; if(!function_exists('ldap_connect')) return false; if(!$conn = ldap_connect($this->ldap_host)) return false; if( $version3 ) if( !ldap_set_option($conn,LDAP_OPT_PROTOCOL_VERSION,3) ) $version3 = false; ldap_set_option($conn, LDAP_OPT_REFERRALS, $refer); // Bind as Admin if($this->ldap_user && $this->ldap_pass && !ldap_bind($conn, $this->ldap_user . "," .$this->ldap_context, $this->ldap_pass)) return false; // Bind as Anonymous if(!$this->ldap_user && !$this->ldap_pass && !@ldap_bind($conn)) return false; return $conn; } public final function getGroupsLdap($pOrg) { $this->ldapRoot(); $result_groups = ""; if( $this->ldap && $pOrg['ou'] != "-1") { $organization = 'ou=' . $pOrg['ou'] .",". $this->ldap_context; $filter = "(&(phpgwAccountType=g)(objectClass=posixGroup))"; $justthese = array("cn","gidNumber"); $search = ldap_list($this->ldap, $organization, $filter, $justthese); $entry = ldap_get_entries( $this->ldap, $search ); if( $entry ) { $result_groups = ""; foreach($entry as $tmp) if( $tmp['gidnumber'][0] != "" ) $result_groups .= "".$tmp['cn'][0]."".$tmp['gidnumber'][0].""; $result_groups .= ""; } return $result_groups; } return $result_groups; } public final function getGroupsMemberUid($pGroup) { $this->ldapRoot(); if( $this->ldap ) { $filter = "(&(objectclass=posixgroup)(|".$pGroup."))"; $justthese = array("dn","memberuid","gidnumber"); $search = ldap_search($this->ldap,$this->ldap_context,$filter, $justthese); $result = ldap_get_entries($this->ldap,$search); if( $result['count'] > 0 ) return $result; } return false; } public final function getOrganizationsLdap() { $this->ldapRoot(); if( $this->ldap ) { $filter="ou=*"; $justthese = array("ou"); $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese); $entry = ldap_get_entries($this->ldap, $search); } foreach($entry as $tmp) if($tmp['ou'][0] != "") $result_org[] = $tmp['ou'][0]; return $result_org; } public final function getUsersLdapCatalog( $search ) { $confHosts = $this->hostsJabber; $result = array(); $return = array(); $conn = ""; for($i = 0; $i < count($confHosts); $i++ ) { $this->ldap_host = $confHosts[$i]['serverLdap']; $this->ldap_context = $confHosts[$i]['contextLdap']; $this->ldap_user = $confHosts[$i]['user']; $this->ldap_org = $confHosts[$i]['org']; $this->ldap_pass = $confHosts[$i]['password']; $conn = $this->ldapCatalog(); if( $conn ) { $filter = "(&(phpgwaccounttype=u)(".$search ."))"; $justthese = array("uid","uidNumber","cn","mail","phpgwAccountVisible","dn","jpegPhoto"); $searchRoot = ( $this->ldap_org != "*" ) ? "ou=".$this->ldap_org.",".$this->ldap_context : $this->ldap_context; $search1 = @ldap_search($conn, $searchRoot, $filter, $justthese, 0, $this->max_result + 1); $entry1 = @ldap_get_entries( $conn, $search1 ); $result = $this->resultArray($entry1, $conn ); if( count($return) > 0 ) $return = array_merge($return, $result); else $return = $result; unset($result); ldap_close($conn); } } return $return; } public final function getUsersLdapRoot( $search, $uidnumber, $ous = false ) { $this->ldapRoot(); $result = array(); if( $this->ldap ) { $searchRoot = ( $ous ) ? $ous.",".$this->ldap_context : $this->ldap_context ; $filter = "(&(phpgwaccounttype=u)(|".$uidnumber.")(".$search ."))"; $justthese = array("uid","uidNumber","cn","mail","phpgwAccountVisible","dn","jpegPhoto"); $search = ldap_search($this->ldap, $searchRoot, $filter, $justthese, 0, $this->max_result + 1); $entry = ldap_get_entries( $this->ldap, $search ); $result = $this->resultArray($entry, $this->ldap ); } return $result; } private final function resultArray($pArray, $pConn) { $entry = $pArray; $result = array(); $j = 0; for($i = 0 ; $i < $entry['count']; $i++) { if ( $entry[$i]['phpgwaccountvisible'][0] != '-1' ) { $result[$j]['uidnumber'] = $entry[$i]['uidnumber'][0]; $result[$j]['mail'] = $entry[$i]['mail'][0]; $result[$j]['uid'] = $entry[$i]['uid'][0]; $result[$j]['jid'] = $entry[$i]['uid'][0]; $ou = explode("dc=", $entry[$i]['dn']); $ou = explode("ou=",$ou[0]); $ou = array_pop($ou); $result[$j]['ou'] = strtoupper(substr($ou,0,strlen($ou)-1)); if( $entry[$i]['jpegphoto'][0] ) { $result[$j]['photo'] = "1"; $filterPhoto = "(objectclass=*)"; $photoLdap = ldap_read($pConn, $entry[$i]['dn'], $filterPhoto, array("jpegPhoto")); $firstEntry = ldap_first_entry($pConn, $photoLdap); $photo = ldap_get_values_len($pConn, $firstEntry, "jpegPhoto"); $_SESSION['phpgw_info']['jabberit_messenger']['photo'][trim($result[$j]['ou'])][trim($result[$j]['uid'])] = $photo[0]; } else $result[$j]['photo'] = "0"; $result[$j++]['cn'] = $entry[$i]['cn'][0]; } $organization = $this->attr_org; if(is_array($organization)) { foreach($organization as $attr) { $tmp = explode(";",$attr); if( strtolower(trim($tmp[0])) == strtolower(trim($result[$i]['dn'])) ) { switch(strtolower(trim($tmp[1]))) { case "mail" : $uid = $result[$i]['mail']; $uid = substr($uid,0,strpos($uid,"@")); $result[$i]['uid'] = $uid; break; case "description" : // SERPRO // parte antes do arroba; $result[$i]['uid'] = $result[$i]['description']; break; } } } } } return $result; } } ?>