D7net Mini Sh3LL v1
Current File : /var/www/html/d7net_config/../antarctic-drupal-7.89/../infor/supporto/pages/ldap.php |
<?php
/**
* class.ldap.php4
* Provides an object orientated LDAP wrapper
*
* @author Shannon Wynter {@link http://fremnet.net/contact}
* @version 0.2
* @copyright Copyright © 2006, Shannon Wynter
* @link http://fremnet.net
*
* This is simply an object orientated wrapper for the PHP LDAP functions.
*
* I've thrown in the children function
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* ChangeLog
* -----------
* version 0.2, 2006-11-17, Shannon Wynter {@link http://fremnet.net/contact}
* - Fixed modReplace function, was calling ldap_mod_del
*
* version 0.1, 2006-06-22, Shannon Wynter {@link http://fremnet.net/contact}
* - Initial release
*
* Notes
* -----------
* I've not included the reference related functions as they're not documented.
*/
/**
* Class ldap.
*
* PHP4 class to wrap around the main LDAP functions
*
* Makes use of class ldapresult which in turn makes use of class ldapresultentry
*
*/
class ldap {
/**
* Array of server IP address or hostname (add ports with <space>port)
* EG: array('localhost 10138')
*
* I know it's strange to use <space> as a port separator, but we don't
* want to be splitting up a ldap:// url
*
* @access public
* @var array
*/
var $server;
/**
* The version of LDAP we'll be using
*
* Should be 2 or 3
*
* @access public
* @var integer
*/
var $version;
/**
* The last error code that was returned by the LDAP server
*
* @access public
* @var integer
*/
var $ldapErrno;
/**
* The last error string that was returned by the LDAP server
*
* @access public
* @var integer
*/
var $ldapError;
/**
* The LDAP connection resource
*
* @access private
* @var resource
*/
var $connection;
/**
* Constructor - Creates a new instance of the ldap class
*
* @param mixed $ldapServer A 'server[ port]' or an array('server[ port]');
* @param integer $ldapVersion The version of LDAP we'll be using
* @param string $baseDN The base DN
* @return ldap
*/
function ldap ($ldapServer, $ldapVersion=3) {
if (is_array($ldapServer)) {
$this->server = $ldapServer;
} else {
$this->server = array($ldapServer);
}
$this->version = $ldapVersion;
}
/**
* Creates a connection to the LDAP server which will be used for all future access
*
* Will loop through all the servers in $this->server until it finds one it can connect to
*
* @link http://www.php.net/ldap_connect
* @return boolean Success
*/
function connect() {
foreach ($this->server as $server) {
// list($host,$port) = split(' ',$server);
// if (empty($port)) {
// $port = null;
// }
$host=$this->server[0];
$this->connection =ldap_connect($host);
if ($this->connection) {
$this->setOption(LDAP_OPT_PROTOCOL_VERSION, $this->version);
return true;
}
}
return false;
}
/**
* Starts TLS over our connection if we're using version 3 of the LDAP protocol
*
* Note: TLS and SSL are mutually exclusive
*
* @link http://www.php.net/ldap_start_tls
* @return false
*/
function startTLS() {
if ($this->version != 3) {
$this->ldapError = 'Not using LDAP Protocol version 3, TLS is not supported.';
$this->ldapErrno = -1;
return false;
}
if (@ldap_start_tls($this->connection)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Closes the active connection to the LDAP server
*
* @link http://www.php.net/ldap_close
* @return boolean Success
*/
function close() {
if (@ldap_close($this->connection)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Binds to the LDAP directory with specified RDN and password.
*
* $dn and $password are option, if not specified an anonymous bind is attempted.
*
* Note: I have added a check to make sure the password is passed when dn is.
*
* @link http://www.php.net/ldap_bind
* @param string[optional] $dn The DN to authenticate with
* @param string[optional] $password The password to authenticate with
* @return boolean Success
*/
function bind($dn=null, $password=null) {
if (!is_null($dn) && (is_null($password) || empty($password))) {
$this->ldapErrno=-1;
$this->ldapError="Please specify a password when binding as a user";
return false;
}
if (@ldap_bind($this->connection,$dn,$password)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Sets the value of the specified option to be $value. Returns TRUE on
* success or FALSE on failure
*
* For information about the options and values, please see the link
* @link http://www.php.net/ldap_set_option
* @param integer $option The option you intend to set
* @param mixed $value The value to set
* @return boolean Success
*/
function setOption($option, $value) {
/*
if (@ldap_set_option($this->connection,$option,$value)) {
return true;
}
$this->setErrVars();
return false;*/
if (ldap_set_option($this->connection, LDAP_OPT_PROTOCOL_VERSION, 3))
{
return true;
}
else {
echo "Failed to set protocol version to 3";
return false;
}
}
/**
* Gets the value of the specified option and returns it or FALSE on failure
*
* For information about the options and values, please see the link
* @link http://www.php.net/ldap_get_option
* @param integer $option
* @return boolean Success
*/
function getOption($option) {
$val = null;
if (@ldap_get_option($this->connection,$option,$val)) {
return $val;
}
$this->setErrVars();
return false;
}
/**
* Performs the search for a specified filter on the directory with the
* scope of LDAP_SCOPE_SUBTREE. This is equivalent to searching the entire
* directory. $base_dn specifies the base DN for the directory.
*
* Only $base_dn and $filter are required
*
* @link http://www.php.net/ldap_search
* @param string $base_dn
* @param string $filter
* @param array[optional] $attrs
* @param int[optional] $attrsonly
* @param int[optional] $sizelimit
* @param int[optional] $timelimit
* @param int[optional] $deref
* @return ldapresult
*/
function searchSubtree($base_dn, $filter, $attrs=array(), $attrsonly=null, $sizelimit=null, $timelimit=null, $deref=null) {
//DEBUG echo "function SEARCHSUBTREE \n <br/>";
if ($result = @ldap_search($this->connection,$base_dn,$filter,$attrs,$attrsonly,$sizelimit,$timelimit,$deref)) {
return new ldapresult($this,$result);
}
$this->setErrVars();
return false;
}
/**
* Performs the search for a specified filter on the directory with the
* scope of LDAP_SCOPE_ONELEVEL.
*
* LDAP_SCOPE_ONELEVEL means that the search should only return information that
* is at the level immediately below the $base_dn given in the call.
* (Equivalent to typing "ls" and getting a list of files and folders in the
* current working directory.)
*
* Only $base_dn and $filter are required
*
* @link http://www.php.net/ldap_list
* @param string $base_dn
* @param string $filter
* @param array[optional] $attrs
* @param int[optional] $attrsonly
* @param int[optional] $sizelimit
* @param int[optional] $timelimit
* @param int[optional] $deref
* @return ldapresult
*/
function searchOneLevel($base_dn, $filter, $attrs=null, $attrsonly=null, $sizelimit=null, $timelimit=null, $deref=null) {
if ($result = @ldap_read($this->connection,$base_dn,$filter,$attrs,$attrsonly,$sizelimit,$timelimit,$deref)) {
return new ldapresult($this,$result);
}
$this->setErrVars();
return false;
}
/**
* Performs the search for a specified filter on the directory with the
* scope of LDAP_SCOPE_BASE. So it is equivalent to reading an entry from the directory.
*
* Only $base_dn and $filter are required
*
* @link http://www.php.net/ldap_read
* @param string $base_dn
* @param string $filter
* @param array[optional] $attrs
* @param int[optional] $attrsonly
* @param int[optional] $sizelimit
* @param int[optional] $timelimit
* @param int[optional] $deref
* @return ldapresult
*/
function searchBase($base_dn, $filter, $attrs=null, $attrsonly=null, $sizelimit=null, $timelimit=null, $deref=null) {
if ($result = @ldap_list($this->connection,$base_dn,$filter,$attrs,$attrsonly,$sizelimit,$timelimit,$deref)) {
return new ldapresult($this,$result);
}
$this->setErrVars();
return false;
}
/**
* Add attribute values to current attributes
*
* This function adds attribute(s) to the specified $dn. It performs the modification at
* the attribute level as opposed to the object level.
*
* @link http://www.php.net/ldap_mod_add
* @param string $dn The DN you want to update
* @param array $entry The data you want to add
* @return boolean Success
*/
function modAdd($dn,$entry) {
if (ldap_mod_add($this->connection,$dn,$entry)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Delete attribute values from the current attributes
*
* This function removes attribute(s) from the specified $dn. It performs the modification
* at the attribute level as opposed to the object level.
*
* @link http://www.php.net/ldap_mod_del
* @param string $dn The DN you want to update
* @param array $entry The data you want to delete
* @return boolean Success
*/
function modDel($dn,$entry) {
if (ldap_mod_del($this->connection,$dn,$entry)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Replace attribute values with new ones
*
* This function replaces attribute(s) from the specified $dn. It performs the modification
* at the attribute level as opposed to the object level.
*
* @link http://www.php.net/ldap_mod_replace
* @param string $dn the DN you want to update
* @param array $entry the data you want to replace
* @return boolean Success
*/
function modReplace($dn,$entry) {
if (@ldap_mod_replace($this->connection,$dn,$entry)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Modify an LDAP entry
*
* Used to modify entries in the LDAP directory. The DN of the entry added is specified by $dn.
* Array $entry specifies the information about the entry. The values in the entries are
* indexed by individual attributes. In case of multiple values for an attribute, they are
* indexed using integers starting with 0
*
* @link http://www.php.net/ldap_modify
* @param string $dn The DN we're modifying
* @param array $entry
* @return boolean Success
*/
function modify($dn,$entry) {
//var_dump($dn);
//print_r($entry);
if (ldap_modify($this->connection,$dn,$entry)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Add entries to the LDAP directory
*
* Used to add entries in the LDAP directory. The DN of the entry added is specified by $dn.
* Array $entry specifies the information about the entry. The values in the entries are
* indexed by individual attributes. In case of multiple values for an attribute, they are
* indexed using integers starting with 0
*
* @link http://www.php.net/ldap_add
* @param string $dn The DN we're adding
* @param array $entry
* @return boolean Success
*/
function add($dn,$entry) {
if (@ldap_add($this->connection,$dn,$entry)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Delete an entry from the LDAP directory
*
* @link http://www.php.net/ldap_delete
* @param string $dn The entry we're deleting
* @return boolean Success
*/
function delete($dn) {
if (@ldap_delete($this->connection,$dn)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Modify the name of an entry
*
* The entry specified by $dn is renamed/moved. The new RDN is specified by $newrdn and the
* parent/superior entry is specified by $newparent. If the parameter $deleteoldrdn is TRUE
* the old RDN value(s) is removed, else the old RDN value(s) is retained as non-distinguished
* values of the entry.
*
* @link http://www.php.net/ldap_rename
* @param string $dn The entry to be renamed/moved
* @param string $newrdn The new RDN
* @param string $newparent The DN of the new parent
* @param boolean $deleteoldrdn Do we delete the old RDN?
* @return boolean Success
*/
function rename($dn, $newrdn, $newparent, $deleteoldrdn) {
if ($this->version != 3) {
$this->ldapErrno = -1;
$this->ldapError = "ldap_rename requires version 3 of the LDAP protocol";
return false;
}
if (@ldap_rename($this->connection, $dn, $newrdn, $newparent, $deleteoldrdn)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Compare the value of attribute found in entry specified with $dn
*
* Used to compare the value of attr to the value of same attribute in the LDAP directory
* entry specified with $dn.
*
* Returns TRUE if value matches, otherwise returns FALSE. Returns -1 on error.
*
* @link http://www.php.net/ldap_compare
* @param string $dn The DN which we are comparing
* @param string $attr The attribute to check
* @param string $value The value to check for
* @return mixed
*/
function compare($dn, $attr, $value) {
$result = @ldap_compare($this->connection, $dn, $attr, $value);
if ($result === -1) {
$this->setErrVars();
}
return $result;
}
/**
* Get an array full of immediate children for the node specified by $dn
*
* Returns array if successful, otherwise returns FALSE
*
* @param string $dn The base dn that we want to look for children under
* @return array
*/
function children($dn) {
$returning = false;
if ($result = $this->searchBase($dn,"objectClass=*",array("dn"))) {
if ($entry = $result->firstEntry()) {
$returning = array($entry->getDN());
while ($entry->nextEntry()) {
$returning[] = $entry->getDN();
}
}
}
return $returning;
}
/**
* Helper function: Set the error variables
*
* I'm so slack...
*/
function setErrVars() {
$this->ldapErrno = ldap_errno($this->connection);
$this->ldapError = ldap_error($this->connection);
}
function print_entries($base_dn, $filter, $attrs=array() ) {
// DEBUG echo "FUNCTION print_entries \n <br/>";
// echo $base_dn,$filter; print_r($attrs);
if ($risultati = $this->searchSubtree($base_dn,$filter, $attrs)) {
// DEBUG echo "dentro IF \n <br/>";
// $risultati= new ldapresult($this,$result);
$risultati_Array = $risultati->getEntries();
$this->my_print_get_entries2($risultati_Array);
// DEBUG echo "dopo MY_PRINT \n <br/>";
return true;
}
$this->setErrVars();
return false;
}
function print_grezzo($base_dn, $filter, $attrs=null) {
// DEBUG echo "FUNCTION print_GREZZO \n <br/>";
// DEBUG echo $base_dn,$filter; print_r($attrs);
if ($risultati = $this->searchSubtree($base_dn,$filter, $attrs)) {
// DEBUG echo "dentro IF \n <br/>";
// DEBUG $risultati= new ldapresult($this,$result);
$risultati_Array = $risultati->getEntries();
print_r($risultati_Array);
echo " \n <br/>";
echo " \n <br/>";
return true;
}
$this->setErrVars();
return false;
}
function modify_bulk_data($base_dn, $filter, $modifiche = array()) {
// DEBUG echo "FUNCTION modify_BULK \n <br/>";
/*
$modifiche = array(
'nunzio.napoli@shib.uniparthenope.it' => array('cn' => 'Nunzio Napolit', 'sn' => 'Napolitano'),
);
*/
for ($jj=0; $jj<count($filter); $jj++){
for ($i=0; $i<count($modifiche); $i++){
// foreach($modifiche as $entry_mail => $attributi){
/* STAMPA DI DEBUG
print_r($entry_mail);
echo "\n<br/>";
print_r($attributi);
echo "\n<br/>";
*/
$filtro=$filter[$jj].'='.$modifiche[$i][$filter[$jj]];
if ($ricerca = $this->searchSubtree($base_dn, $filtro)) {
$trovati =$ricerca->countEntries();
if ($trovati>0) {
$entry = $ricerca->firstEntry();
$dn_to_modify = $entry->getDN();
// $dn_to_modify="mail=".$modifiche[$i]['mail'].",ou=people,dc=uniparthenope,dc=it";
//var_dump($modifiche[$i]);
//var_dump($dn_to_modify);
if ($modifica = $this->modify($dn_to_modify,$modifiche[$i])) {
echo "Record ".$dn_to_modify." AGGIORNATO \n <br/>";
} else {
echo "ERRORE NUMERO -> ".$this->ldapErrno."\n <br/>";
echo "ERRORE -> ".$this->ldapError."\n <br/>";
}
} else { echo "Record $filtro non trovato \n <br>";}//if ($trovati>0)
} //$ricerca = $this->searchSubtree($base_dn, $filtro))
} //for ($i=0; $i<count($modifiche); $i++)
} // for ($jj=0; $jj<count($filter); $jj++)
} //modify bulk
function Del_attrs_bulk($modifiche = array()) {
// DEBUG echo "FUNCTION modify_BULK \n <br/>";
$modifiche = array(
'nunzio.napoli@shib.uniparthenope.it' => array('cn' => '', 'sn' => ''),
);
foreach($modifiche as $entry_mail => $attributi){
/*
print_r($entry_mail);
echo "\n<br/>";
print_r($attributi);
echo "\n<br/>";
*/
$dn_to_modify="mail=".$entry_mail.",vd=uniparthenope.it,dc=uniparthenope,dc=it";
$modifica = $this->modDel($dn_to_modify,$attributi);
}
} //modify bulk
function my_print_get_entries($risultato) {
if ($risultato["count"] > 0) {
echo '<br/><table border="0" class="print_attrs">';
echo "<tr>";
echo " <th class=\"print_elem\">Elem</th>";
echo " <th class=\"print_elem\">Attrib</th>";
echo " <th class=\"print_elem\">Val_attr</th>";
echo " <th>Nome attributo</th>";
echo " <th>Valore attributo</th>";
echo "</tr>";
for ($i=0; $i<$risultato["count"]; $i++) {
//echo '<tr class="dn"><td colspan="5"align="left"> DN --> '.$risultato[$i]["dn"].'</td></tr>';
for ($j=0; $j<$risultato[$i]["count"]; $j++) {
$attrib=$risultato[$i][$j];
for ($w=0; $w<$risultato[$i]["$attrib"]["count"]; $w++) {
echo '<tr>';
// echo "<td class=\"print_elem\" align=\"center\">$i</td>";
// echo "<td class=\"print_elem\" align=\"center\">$j</td>";
// echo "<td class=\"print_elem\" align=\"center\">$w</td>";
echo "<td >".$risultato[$i][$j]."</td>";
echo "<td >".$risultato[$i]["$attrib"][$w]."</td>";
echo "</tr>";
}
}
}
echo"</table>";
} else {
echo'<h2> Nessun elemento trovato <h2>';
}
}
function my_print_get_entries2($risultato) {
if ($risultato["count"] > 0) {
echo '<table id="example" class="display" cellspacing="0" width="100%">';
echo'
<thead>
<tr>
<th>Utente</th>
<th>Email</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Utente</th>
<th>Email</th>
</tr>
</tfoot>
<tbody>
';
for ($i=0; $i<$risultato["count"]; $i++) {echo '<tr>';
for ($j=0; $j<$risultato[$i]["count"]; $j++)
{
$attrib=$risultato[$i][$j];
for ($w=0; $w<$risultato[$i]["$attrib"]["count"]; $w++) {
echo '<td>'.$risultato[$i]["$attrib"][$w].'</td>';
}
} echo '</tr>';
}
echo '</tbody>
</table>';
} else {
echo'<h2> Nessun elemento trovato <h2>';
}
}
/**
* Controlla se l'array contiene tutti i dati necessari al corretto funzionamento dell'account.
* L'array di ingresso deve avere le chiavi accordate con la funzione "crea_record_ldap" che a sua volta le ha uguali ai campi LDAP
* Produce un output con il dettaglio degli errori
* Ritorna un array con la lista dei controlli falliti
*
* @param string $tipo_record LA tipologia di account da controllare CSA/GUEST/MAIL
* @param array $campi obbligatori Lista dei capi obbligatori
* @param array associativo $dati_inseriti The attribute to check
* @return array La lista di nomi dei controlli non superati
*/
function chk_dati_mandatory($tipo_record,$campi_obbligatori,$dati_inseriti){
// print_r ($dati_inseriti);
// check sui campi obbligatori
$campo_vuoto=array();
// definisco i campi obbligatori i nomi devono essere allineati con i campi usati nella funzione crea_record_ldap
foreach ($campi_obbligatori as $value) {
if ((empty($dati_inseriti[$value]) && 0 !== $dati_inseriti[$value]) or 'anagrafica NON presente in U-GOV' == $dati_inseriti[$value]) $campo_vuoto[]=$value;
}
if (!empty($campo_vuoto)){
$check_fault[]='campi_vuoti';
}
if ($dati_inseriti['nome'] =='anagrafica NON presente in U-GOV' ){
$check_fault[]='No_dati_ugov';
}
if (!empty($check_fault[0])) {
echo "**** Attenzione controlli falliti **** <br /> \n ";
foreach ($check_fault as $nome_check) {
echo "<br/> \n** ".$nome_check."<br/> \n";
if ($nome_check =='campi_vuoti') {
echo "** MANCANO i seguenti campi obbligatori <br/>\n";
foreach ($campo_vuoto as $value) echo "*** ".$value."<br/> \n";
}
/* esempio di ulteriore controllo
if ($nome_check =='No_dati_ugov') {
echo "** Anagrafica non presente in U-GOV <br/> \n";
}
*/
}
}
// print_r ($check_fault);
return ($check_fault);
} // chk_dati_mandatory
} // Fine classe LDAP
/**
* class ldapresult
*
* PHP4 class to act as an object wrapper around a ldap result resource
*
* Makes use of class ldapresultentry
*
*/
class ldapresult {
/**
* The last error code that was returned by the LDAP server
*
* @access public
* @var integer
*/
var $ldapErrno;
/**
* The last error string that was returned by the LDAP server
*
* @access public
* @var integer
*/
var $ldapError;
/**
* The parent LDAP object
*
* @access private
* @var ldap
*/
var $ldap;
/**
* The LDAP result resource
*
* @access private
* @var resource
*/
var $result;
/**
* Constructor - Creates a new instance of the ldapresult class
*
* @param ldap $ldap The parent ldap object
* @param resource $result An active result resource
* @return ldapresult
*/
function ldapresult($ldap,$result) {
$this->ldap = $ldap;
$this->result = $result;
}
/**
* Returns the ldapresultentry for the first entry on success and FALSE on error.
*
* Entries in the LDAP result are read sequentially using the ldap_first_entry()
* and ldap_next_entry() functions.
*
* $entry = $obj->firstEntry() returns an ldapentry for first entry in the result.
* You then call $entry->nextEntry()
*
* @link http://www.php.net/ldap_first_entry
* @return ldapresultentry
*/
function firstEntry() {
if ($entry = @ldap_first_entry($this->ldap->connection, $this->result)) {
return new ldapresultentry($this->ldap->connection, $entry);
}
$this->setErrVars();
return false;
}
/**
* Returns a complete result information in a multi-dimensional array
* on success and FALSE on error.
*
* @link http://www.php.net/ldap_get_entries
* @return array
*/
function getEntries() {
// DEBUG echo "FUNCTION GET_entries \n <br/>";
if ($array = @ldap_get_entries($this->ldap->connection,$this->result)) {
return $array;
}
$this->setErrVars();
return false;
}
/**
* Returns the number of entries or FALSE on error
*
* @link http://www.php.net/ldap_count_entries
* @return integer
*/
function countEntries() {
if ($count = @ldap_count_entries($this->ldap->connection, $this->result)) {
return $count;
}
$this->setErrVars();
return false;
}
/**
* Sort LDAP results
*
* @link http://www.php.net/ldap_sort
* @param unknown_type $sortFilter
* @return unknown
*/
function sortEntries($sortFilter) {
if (@ldap_sort($this->ldap->connection, $this->result, $sortFilter)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Frees up the memory allocated internally to store the result
*
* @link http://www.php.net/ldap_free_result
* @return boolean success
*/
function free() {
if (@ldap_free_result($this->result)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Helper function: Set the error variables
*
* I'm so slack...
*/
function setErrVars() {
$this->ldapErrno = ldap_errno($this->ldap->connection);
$this->ldapError = ldap_error($this->ldap->connection);
}
}
/**
* Class ldapresultentry
*
* PHP4 wrapper around an ldap entry resource
*
*/
class ldapresultentry {
/**
* The last error code that was returned by the LDAP server
*
* @access public
* @var integer
*/
var $ldapErrno;
/**
* The last error string that was returned by the LDAP server
*
* @access public
* @var integer
*/
var $ldapError;
/**
* The LDAP connection resource
*
* @access private
* @var resource
*/
var $connection;
/**
* The LDAP entry resource
*
* @access private
* @var resource
*/
var $entry;
/**
* The &ber_identifier used in get*Attribute functions
*
* @access private
* @var integer
*/
var $berid;
/**
* Constructor - Creates a new instance of the ldapresult class
*
* @param resource $connection An active connection resource
* @param resource $entry An active entry resource
* @return ldapentry
*/
function ldapresultentry($connection,$entry) {
$this->connection = $connection;
$this->entry = $entry;
}
/**
* Loads the next ldap entry
*
* If there are no more entries (or an error) it returns false.
*
* @link http://www.php.net/ldap_next_entry
* @return boolean Success
*/
function nextEntry() {
if ($this->entry = @ldap_next_entry($this->connection, $this->entry)) {
return true;
}
$this->setErrVars();
return false;
}
/**
* Used to simplify reading the attributes and values from an entry in the search result.
* The return value is a multi-dimensional array of attributes and values
*
* Returns a complete entry information in a multi-dimensional array on success
* and FALSE on error.
*
* @link http://www.php.net/ldap_get_attributes
* @return mixed
*/
function getAttributes() {
if ($attr = @ldap_get_attributes($this->connection,$this->entry)) {
return $attr;
}
$this->setErrVars();
return false;
}
/**
* Used to find out the DN of an entry in the result
*
* Returns the DN of the result or FALSE on error
*
* @link http://www.php.net/ldap_get_dn
* @return string
*/
function getDN() {
if ($dn = @ldap_get_dn($this->connection,$this->entry)) {
return $dn;
}
$this->setErrVars();
return false;
}
/**
* Get all the binary values from the entry
*
* Used to read all the values of the attribute in the entry
*
* I renamed the get_values_len to getValuesBin as it seemed more logical
*
* Returns an array of values for the attribute on success and FALSE on error.
*
* @link http://www.php.net/ldap_get_values_len
* @param string $attr The attribute you want to read
* @return array
*/
function getValuesBin($attr) {
if ($arr = @ldap_get_values_len($this->connection,$this->entry,$attr)) {
return $arr;
}
$this->setErrVars();
return false;
}
/**
* Get all values from the entry
*
* Used to read all the values of the attribute in the entry
*
* Returns an array of values for the attribute on success and FALSE on error.
*
* @link http://www.php.net/ldap_get_values
* @param string $attr The attribute you want to read
* @return array
*/
function getValues($attr) {
if ($arr = @ldap_get_values($this->connection,$this->entry,$attr)) {
return $arr;
}
$this->setErrVars();
return false;
}
/**
* Return the name of the first attribute
*
* Returns the name of the first attribute in the entry on success or failure on error
*
* @link http://www.php.net/ldap_first_attribute
* @return string
*/
function getFirstAttribute() {
unset($this->berid); // Make sure we start over, might not be needed
if ($string = @ldap_first_attribute($this->connection,$this->entry,$this->berid)) {
return $string;
}
$this->setErrVars();
return false;
}
/**
* Return the name of the next attribute
*
* Returns the next attribute in the entry on success or FALSE on error
*
* @link http://www.php.net/ldap_next_attribute
* @return unknown
*/
function getNextAttribute() {
if (!isset($this->berid) || empty($this->berid)) {
$this->ldapErrno = -1;
$this->ldapError = "You must call getFirstAttribute before you can getNextAttribute";
return false;
}
if ($string = @ldap_next_attribute($this->connection,$this->entry,$this->berid)) {
return $string;
}
$this->setErrVars();
return false;
}
/**
* Helper function: Set the error variables
*
* I'm so slack...
*/
function setErrVars() {
$this->ldapErrno = ldap_errno($this->connection);
$this->ldapError = ldap_error($this->connection);
}
}
?>
AnonSec - 2021 | Recode By D7net