Ignore:
Timestamp:
May 2, 2016, 12:09:23 PM (3 years ago)
Author:
jrpelegrina
Message:

Updated to moodle 3.0.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • moodle/trunk/fuentes/lib/adodb/drivers/adodb-ldap.inc.php

    r136 r1331  
    11<?php
    22/*
    3   V5.19  23-Apr-2014  (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
     3  @version   v5.20.1  06-Dec-2015
     4  @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved.
     5  @copyright (c) 2014      Damien Regad, Mark Newnham and the ADOdb community
    46   Released under both BSD license and Lesser GPL library license.
    57  Whenever there is any discrepancy between the two licenses,
     
    1921
    2022if (!defined('LDAP_ASSOC')) {
    21          define('LDAP_ASSOC',ADODB_FETCH_ASSOC);
    22          define('LDAP_NUM',ADODB_FETCH_NUM);
    23          define('LDAP_BOTH',ADODB_FETCH_BOTH);
     23        define('LDAP_ASSOC',ADODB_FETCH_ASSOC);
     24        define('LDAP_NUM',ADODB_FETCH_NUM);
     25        define('LDAP_BOTH',ADODB_FETCH_BOTH);
    2426}
    2527
    2628class ADODB_ldap extends ADOConnection {
    27     var $databaseType = 'ldap';
     29        var $databaseType = 'ldap';
    2830        var $dataProvider = 'ldap';
    2931
    3032        # Connection information
    31     var $username = false;
    32     var $password = false;
    33 
    34     # Used during searches
    35     var $filter;
    36     var $dn;
     33        var $username = false;
     34        var $password = false;
     35
     36        # Used during searches
     37        var $filter;
     38        var $dn;
    3739        var $version;
    3840        var $port = 389;
     
    4446        var $_bind_errmsg = "Binding: %s";
    4547
    46         function ADODB_ldap()
     48        function __construct()
    4749        {
    4850        }
     
    5254        function _connect( $host, $username, $password, $ldapbase)
    5355        {
    54         global $LDAP_CONNECT_OPTIONS;
     56                global $LDAP_CONNECT_OPTIONS;
    5557
    5658                if ( !function_exists( 'ldap_connect' ) ) return null;
     
    6264
    6365                        if ( strstr( $host, ':' ) ) {
    64                             $conn_info = explode( ':', $host );
     66                                $conn_info = explode( ':', $host );
    6567                        }
    6668
     
    7880
    7981                if ($username) {
    80                     $bind = @ldap_bind( $this->_connectionID, $username, $password );
     82                        $bind = @ldap_bind( $this->_connectionID, $username, $password );
    8183                } else {
    8284                        $username = 'anonymous';
    83                     $bind = @ldap_bind( $this->_connectionID );
     85                        $bind = @ldap_bind( $this->_connectionID );
    8486                }
    8587
     
    172174        }
    173175
    174     /* closes the LDAP connection */
     176        /* closes the LDAP connection */
    175177        function _close()
    176178        {
     
    184186        } // SelectDB
    185187
    186     function ServerInfo()
    187     {
    188         if( !empty( $this->version ) ) return $this->version;
    189         $version = array();
    190         /*
    191         Determines how aliases are handled during search.
    192         LDAP_DEREF_NEVER (0x00)
    193         LDAP_DEREF_SEARCHING (0x01)
    194         LDAP_DEREF_FINDING (0x02)
    195         LDAP_DEREF_ALWAYS (0x03)
    196         The LDAP_DEREF_SEARCHING value means aliases are dereferenced during the search but
    197         not when locating the base object of the search. The LDAP_DEREF_FINDING value means
    198         aliases are dereferenced when locating the base object but not during the search.
    199         Default: LDAP_DEREF_NEVER
    200         */
    201         ldap_get_option( $this->_connectionID, LDAP_OPT_DEREF, $version['LDAP_OPT_DEREF'] ) ;
    202         switch ( $version['LDAP_OPT_DEREF'] ) {
    203           case 0:
    204             $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_NEVER';
    205           case 1:
    206             $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_SEARCHING';
    207           case 2:
    208             $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_FINDING';
    209           case 3:
    210             $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_ALWAYS';
    211         }
    212 
    213         /*
    214         A limit on the number of entries to return from a search.
    215         LDAP_NO_LIMIT (0) means no limit.
    216         Default: LDAP_NO_LIMIT
    217         */
    218         ldap_get_option( $this->_connectionID, LDAP_OPT_SIZELIMIT, $version['LDAP_OPT_SIZELIMIT'] );
    219         if ( $version['LDAP_OPT_SIZELIMIT'] == 0 ) {
    220            $version['LDAP_OPT_SIZELIMIT'] = 'LDAP_NO_LIMIT';
    221         }
    222 
    223         /*
    224         A limit on the number of seconds to spend on a search.
    225         LDAP_NO_LIMIT (0) means no limit.
    226         Default: LDAP_NO_LIMIT
    227         */
    228         ldap_get_option( $this->_connectionID, LDAP_OPT_TIMELIMIT, $version['LDAP_OPT_TIMELIMIT'] );
    229         if ( $version['LDAP_OPT_TIMELIMIT'] == 0 ) {
    230            $version['LDAP_OPT_TIMELIMIT'] = 'LDAP_NO_LIMIT';
    231         }
    232 
    233         /*
    234         Determines whether the LDAP library automatically follows referrals returned by LDAP servers or not.
    235         LDAP_OPT_ON
    236         LDAP_OPT_OFF
    237         Default: ON
    238         */
    239         ldap_get_option( $this->_connectionID, LDAP_OPT_REFERRALS, $version['LDAP_OPT_REFERRALS'] );
    240         if ( $version['LDAP_OPT_REFERRALS'] == 0 ) {
    241            $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_OFF';
    242         } else {
    243            $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_ON';
    244 
    245         }
    246         /*
    247         Determines whether LDAP I/O operations are automatically restarted if they abort prematurely.
    248         LDAP_OPT_ON
    249         LDAP_OPT_OFF
    250         Default: OFF
    251         */
    252         ldap_get_option( $this->_connectionID, LDAP_OPT_RESTART, $version['LDAP_OPT_RESTART'] );
    253         if ( $version['LDAP_OPT_RESTART'] == 0 ) {
    254            $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_OFF';
    255         } else {
    256            $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_ON';
    257 
    258         }
    259         /*
    260         This option indicates the version of the LDAP protocol used when communicating with the primary LDAP server.
    261         LDAP_VERSION2 (2)
    262         LDAP_VERSION3 (3)
    263         Default: LDAP_VERSION2 (2)
    264         */
    265         ldap_get_option( $this->_connectionID, LDAP_OPT_PROTOCOL_VERSION, $version['LDAP_OPT_PROTOCOL_VERSION'] );
    266         if ( $version['LDAP_OPT_PROTOCOL_VERSION'] == 2 ) {
    267            $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION2';
    268         } else {
    269            $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION3';
    270 
    271         }
    272         /* The host name (or list of hosts) for the primary LDAP server. */
    273         ldap_get_option( $this->_connectionID, LDAP_OPT_HOST_NAME, $version['LDAP_OPT_HOST_NAME'] );
    274         ldap_get_option( $this->_connectionID, LDAP_OPT_ERROR_NUMBER, $version['LDAP_OPT_ERROR_NUMBER'] );
    275         ldap_get_option( $this->_connectionID, LDAP_OPT_ERROR_STRING, $version['LDAP_OPT_ERROR_STRING'] );
    276         ldap_get_option( $this->_connectionID, LDAP_OPT_MATCHED_DN, $version['LDAP_OPT_MATCHED_DN'] );
    277 
    278         return $this->version = $version;
    279 
    280     }
     188        function ServerInfo()
     189        {
     190                if( !empty( $this->version ) ) {
     191                        return $this->version;
     192                }
     193
     194                $version = array();
     195                /*
     196                Determines how aliases are handled during search.
     197                LDAP_DEREF_NEVER (0x00)
     198                LDAP_DEREF_SEARCHING (0x01)
     199                LDAP_DEREF_FINDING (0x02)
     200                LDAP_DEREF_ALWAYS (0x03)
     201                The LDAP_DEREF_SEARCHING value means aliases are dereferenced during the search but
     202                not when locating the base object of the search. The LDAP_DEREF_FINDING value means
     203                aliases are dereferenced when locating the base object but not during the search.
     204                Default: LDAP_DEREF_NEVER
     205                */
     206                ldap_get_option( $this->_connectionID, LDAP_OPT_DEREF, $version['LDAP_OPT_DEREF'] ) ;
     207                switch ( $version['LDAP_OPT_DEREF'] ) {
     208                        case 0:
     209                                $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_NEVER';
     210                        case 1:
     211                                $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_SEARCHING';
     212                        case 2:
     213                                $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_FINDING';
     214                        case 3:
     215                                $version['LDAP_OPT_DEREF'] = 'LDAP_DEREF_ALWAYS';
     216                }
     217
     218                /*
     219                A limit on the number of entries to return from a search.
     220                LDAP_NO_LIMIT (0) means no limit.
     221                Default: LDAP_NO_LIMIT
     222                */
     223                ldap_get_option( $this->_connectionID, LDAP_OPT_SIZELIMIT, $version['LDAP_OPT_SIZELIMIT'] );
     224                if ( $version['LDAP_OPT_SIZELIMIT'] == 0 ) {
     225                        $version['LDAP_OPT_SIZELIMIT'] = 'LDAP_NO_LIMIT';
     226                }
     227
     228                /*
     229                A limit on the number of seconds to spend on a search.
     230                LDAP_NO_LIMIT (0) means no limit.
     231                Default: LDAP_NO_LIMIT
     232                */
     233                ldap_get_option( $this->_connectionID, LDAP_OPT_TIMELIMIT, $version['LDAP_OPT_TIMELIMIT'] );
     234                if ( $version['LDAP_OPT_TIMELIMIT'] == 0 ) {
     235                        $version['LDAP_OPT_TIMELIMIT'] = 'LDAP_NO_LIMIT';
     236                }
     237
     238                /*
     239                Determines whether the LDAP library automatically follows referrals returned by LDAP servers or not.
     240                LDAP_OPT_ON
     241                LDAP_OPT_OFF
     242                Default: ON
     243                */
     244                ldap_get_option( $this->_connectionID, LDAP_OPT_REFERRALS, $version['LDAP_OPT_REFERRALS'] );
     245                if ( $version['LDAP_OPT_REFERRALS'] == 0 ) {
     246                        $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_OFF';
     247                } else {
     248                        $version['LDAP_OPT_REFERRALS'] = 'LDAP_OPT_ON';
     249                }
     250
     251                /*
     252                Determines whether LDAP I/O operations are automatically restarted if they abort prematurely.
     253                LDAP_OPT_ON
     254                LDAP_OPT_OFF
     255                Default: OFF
     256                */
     257                ldap_get_option( $this->_connectionID, LDAP_OPT_RESTART, $version['LDAP_OPT_RESTART'] );
     258                if ( $version['LDAP_OPT_RESTART'] == 0 ) {
     259                        $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_OFF';
     260                } else {
     261                        $version['LDAP_OPT_RESTART'] = 'LDAP_OPT_ON';
     262                }
     263
     264                /*
     265                This option indicates the version of the LDAP protocol used when communicating with the primary LDAP server.
     266                LDAP_VERSION2 (2)
     267                LDAP_VERSION3 (3)
     268                Default: LDAP_VERSION2 (2)
     269                */
     270                ldap_get_option( $this->_connectionID, LDAP_OPT_PROTOCOL_VERSION, $version['LDAP_OPT_PROTOCOL_VERSION'] );
     271                if ( $version['LDAP_OPT_PROTOCOL_VERSION'] == 2 ) {
     272                        $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION2';
     273                } else {
     274                        $version['LDAP_OPT_PROTOCOL_VERSION'] = 'LDAP_VERSION3';
     275                }
     276
     277                /* The host name (or list of hosts) for the primary LDAP server. */
     278                ldap_get_option( $this->_connectionID, LDAP_OPT_HOST_NAME, $version['LDAP_OPT_HOST_NAME'] );
     279                ldap_get_option( $this->_connectionID, LDAP_OPT_ERROR_NUMBER, $version['LDAP_OPT_ERROR_NUMBER'] );
     280                ldap_get_option( $this->_connectionID, LDAP_OPT_ERROR_STRING, $version['LDAP_OPT_ERROR_STRING'] );
     281                ldap_get_option( $this->_connectionID, LDAP_OPT_MATCHED_DN, $version['LDAP_OPT_MATCHED_DN'] );
     282
     283                return $this->version = $version;
     284        }
    281285}
    282286
    283287/*--------------------------------------------------------------------------------------
    284          Class Name: Recordset
     288        Class Name: Recordset
    285289--------------------------------------------------------------------------------------*/
    286290
     
    291295        var $_entryID; /* keeps track of the entry resource identifier */
    292296
    293         function ADORecordSet_ldap($queryID,$mode=false)
     297        function __construct($queryID,$mode=false)
    294298        {
    295299                if ($mode === false) {
     
    300304                {
    301305                case ADODB_FETCH_NUM:
    302                   $this->fetchMode = LDAP_NUM;
    303                 break;
     306                        $this->fetchMode = LDAP_NUM;
     307                        break;
    304308                case ADODB_FETCH_ASSOC:
    305                   $this->fetchMode = LDAP_ASSOC;
    306                 break;
     309                        $this->fetchMode = LDAP_ASSOC;
     310                        break;
    307311                case ADODB_FETCH_DEFAULT:
    308312                case ADODB_FETCH_BOTH:
    309313                default:
    310                   $this->fetchMode = LDAP_BOTH;
    311                 break;
    312                 }
    313 
    314                 $this->ADORecordSet($queryID);
     314                        $this->fetchMode = LDAP_BOTH;
     315                        break;
     316                }
     317
     318                parent::__construct($queryID);
    315319        }
    316320
    317321        function _initrs()
    318322        {
    319            /*
    320            This could be teaked to respect the $COUNTRECS directive from ADODB
    321            It's currently being used in the _fetch() function and the
    322            GetAssoc() function
    323        */
    324             $this->_numOfRows = ldap_count_entries( $this->connection->_connectionID, $this->_queryID );
    325 
    326         }
    327 
    328     /*
    329     Return whole recordset as a multi-dimensional associative array
     323                /*
     324                This could be teaked to respect the $COUNTRECS directive from ADODB
     325                It's currently being used in the _fetch() function and the
     326                GetAssoc() function
     327                */
     328                $this->_numOfRows = ldap_count_entries( $this->connection->_connectionID, $this->_queryID );
     329        }
     330
     331        /*
     332        Return whole recordset as a multi-dimensional associative array
    330333        */
    331334        function GetAssoc($force_array = false, $first2cols = false)
    332335        {
    333336                $records = $this->_numOfRows;
    334         $results = array();
    335             for ( $i=0; $i < $records; $i++ ) {
    336                 foreach ( $this->fields as $k=>$v ) {
    337                     if ( is_array( $v ) ) {
    338                         if ( $v['count'] == 1 ) {
    339                             $results[$i][$k] = $v[0];
    340                         } else {
    341                             array_shift( $v );
    342                             $results[$i][$k] = $v;
    343                         }
    344                     }
    345                 }
    346             }
     337                $results = array();
     338                for ( $i=0; $i < $records; $i++ ) {
     339                        foreach ( $this->fields as $k=>$v ) {
     340                                if ( is_array( $v ) ) {
     341                                        if ( $v['count'] == 1 ) {
     342                                                $results[$i][$k] = $v[0];
     343                                        } else {
     344                                                array_shift( $v );
     345                                                $results[$i][$k] = $v;
     346                                        }
     347                                }
     348                        }
     349                }
    347350
    348351                return $results;
    349352        }
    350353
    351     function GetRowAssoc()
    352         {
    353         $results = array();
    354         foreach ( $this->fields as $k=>$v ) {
    355             if ( is_array( $v ) ) {
    356                 if ( $v['count'] == 1 ) {
    357                     $results[$k] = $v[0];
    358                 } else {
    359                     array_shift( $v );
    360                     $results[$k] = $v;
    361                 }
    362             }
    363         }
     354        function GetRowAssoc($upper = ADODB_ASSOC_CASE)
     355        {
     356                $results = array();
     357                foreach ( $this->fields as $k=>$v ) {
     358                        if ( is_array( $v ) ) {
     359                                if ( $v['count'] == 1 ) {
     360                                        $results[$k] = $v[0];
     361                                } else {
     362                                        array_shift( $v );
     363                                        $results[$k] = $v;
     364                                }
     365                        }
     366                }
    364367
    365368                return $results;
    366369        }
    367370
    368     function GetRowNums()
    369     {
    370         $results = array();
    371         foreach ( $this->fields as $k=>$v ) {
    372         static $i = 0;
    373             if (is_array( $v )) {
    374                 if ( $v['count'] == 1 ) {
    375                     $results[$i] = $v[0];
    376                 } else {
    377                     array_shift( $v );
    378                     $results[$i] = $v;
    379                 }
    380             $i++;
    381             }
    382         }
    383         return $results;
    384     }
     371        function GetRowNums()
     372        {
     373                $results = array();
     374                foreach ( $this->fields as $k=>$v ) {
     375                        static $i = 0;
     376                        if (is_array( $v )) {
     377                                if ( $v['count'] == 1 ) {
     378                                        $results[$i] = $v[0];
     379                                } else {
     380                                        array_shift( $v );
     381                                        $results[$i] = $v;
     382                                }
     383                                $i++;
     384                        }
     385                }
     386                return $results;
     387        }
    385388
    386389        function _fetch()
    387390        {
    388                 if ( $this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0 )
    389                 return false;
    390 
    391         if ( $this->_currentRow == 0 ) {
    392                   $this->_entryID = ldap_first_entry( $this->connection->_connectionID, $this->_queryID );
    393         } else {
    394           $this->_entryID = ldap_next_entry( $this->connection->_connectionID, $this->_entryID );
    395         }
    396 
    397             $this->fields = ldap_get_attributes( $this->connection->_connectionID, $this->_entryID );
    398             $this->_numOfFields = $this->fields['count'];
    399             switch ( $this->fetchMode ) {
    400 
    401             case LDAP_ASSOC:
    402             $this->fields = $this->GetRowAssoc();
    403             break;
    404 
    405             case LDAP_NUM:
    406                         $this->fields = array_merge($this->GetRowNums(),$this->GetRowAssoc());
    407             break;
    408 
    409             case LDAP_BOTH:
    410             default:
    411                         $this->fields = $this->GetRowNums();
    412             break;
    413         }
    414         return ( is_array( $this->fields ) );
     391                if ( $this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0 ) {
     392                        return false;
     393                }
     394
     395                if ( $this->_currentRow == 0 ) {
     396                        $this->_entryID = ldap_first_entry( $this->connection->_connectionID, $this->_queryID );
     397                } else {
     398                        $this->_entryID = ldap_next_entry( $this->connection->_connectionID, $this->_entryID );
     399                }
     400
     401                $this->fields = ldap_get_attributes( $this->connection->_connectionID, $this->_entryID );
     402                $this->_numOfFields = $this->fields['count'];
     403
     404                switch ( $this->fetchMode ) {
     405
     406                        case LDAP_ASSOC:
     407                                $this->fields = $this->GetRowAssoc();
     408                                break;
     409
     410                        case LDAP_NUM:
     411                                $this->fields = array_merge($this->GetRowNums(),$this->GetRowAssoc());
     412                                break;
     413
     414                        case LDAP_BOTH:
     415                        default:
     416                                $this->fields = $this->GetRowNums();
     417                                break;
     418                }
     419
     420                return is_array( $this->fields );
    415421        }
    416422
Note: See TracChangeset for help on using the changeset viewer.